[kune-commits] r1064 - in trunk/src: main/java/org/ourproject/kune/app/public/css main/java/org/ourproject/kune/blogs/client main/java/org/ourproject/kune/chat/client main/java/org/ourproject/kune/docs/client main/java/org/ourproject/kune/gallery/client main/java/org/ourproject/kune/platf main/java/org/ourproject/kune/platf/client/actions main/java/org/ourproject/kune/platf/client/actions/toolbar main/java/org/ourproject/kune/platf/client/i18n main/java/org/ourproject/kune/platf/client/services main/java/org/ourproject/kune/platf/client/ui main/java/org/ourproject/kune/platf/client/ui/rte main/java/org/ourproject/kune/platf/client/ui/rte/img main/java/org/ourproject/kune/platf/client/utils main/java/org/ourproject/kune/wiki/client main/java/org/ourproject/kune/workspace main/java/org/ourproject/kune/workspace/client main/java/org/ourproject/kune/workspace/client/cnt main/java/org/ourproject/kune/workspace/client/ctxnav main/java/org/ourproject/kune/workspace/client/cxt main/java/org/ourproject/kune/workspace/client/editor main/java/org/ourproject/kune/workspace/client/hello main/java/org/ourproject/kune/workspace/client/skel main/java/org/ourproject/kune/workspace/client/socialnet test/java/org/ourproject/kune/platf/client/actions

vjrj vjrj at ourproject.org
Tue Mar 10 01:05:55 CET 2009


Author: vjrj
Date: 2009-03-10 01:05:50 +0100 (Tue, 10 Mar 2009)
New Revision: 1064

Added:
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java
   trunk/src/main/java/org/ourproject/kune/platf/client/i18n/Resources.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplIE6.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplMozilla.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplOpera.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplSafari.java
   trunk/src/main/java/org/ourproject/kune/platf/client/utils/TimerWrapper.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextBottomToolbar.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextTopToolBar.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java
Removed:
   trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbar.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbarPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java
Modified:
   trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
   trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
   trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java
   trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java
   trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java
   trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
   trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
   trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java
   trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java
   trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItem.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItemCollection.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarDescriptor.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarPosition.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/i18n/I18nTranslationService.java
   trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java
   trunk/src/main/java/org/ourproject/kune/platf/client/services/KunePlatformModule.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/SimpleToolbar.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/TestRTEDialog.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/RTEImgResources.java
   trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
   trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java
   trunk/src/main/java/org/ourproject/kune/workspace/Kune-Workspace.gwt.xml
   trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/KuneWorkspaceModule.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/skel/ActionCntCtxToolbarPanel.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummary.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummaryPanel.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummaryPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPanel.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/ParticipationSummaryPanel.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java
   trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
   trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java
Log:
Incomplete - task Better RTE (Rich Text Editor) support 

Incomplete - task ContextNav refactoring (less bussiness logic in view) and tests 


Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/all.css	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css	2009-03-10 00:05:50 UTC (rev 1064)
@@ -41,4 +41,4 @@
     padding: 1px 0px 1px 1px;
     text-decoration:none;
 }
-*/.x-tree-node .k-ctn-status-normal a span{}.x-tree-node .k-ctn-status-deleted a span{text-decoration:line-through;color:gray;}.x-tree-node .k-ctn-status-rejected a span{text-decoration:line-through;/* color: #FF6633; */color:#F30;}.x-tree-node .k-ctn-status-editing a span{font-style:italic;color:gray;}.x-tree-node .k-ctn-status-submitted a span{color:green;}.k-info-links{text-decoration:underline;color:gray;cursor:pointer;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;overflow:hidden;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-link-icon{background-image:url(img/link.gif)!important;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.k-copyleft-icon{background-image:url(img/copyleft.png)!important;}.k-picture-icon{background-image:url(img/picture.png)!important;}.k-info-icon{background-image:url(img/info.gif)!important;}.k-newgroup-icon{background-image:url(img/kune-icon16.png)!important;}.k-colors-icon{background-image:url(img/colors.gif)!important;}.x-toolbar-body table{/* width: 100%; */}.k-preview-msg{background:#FCA;}.k-preview-msg-lab{background:#FCA;padding:0 5px;}.k-eil-edit{border:thin solid #000;}
\ No newline at end of file
+*/.x-tree-node .k-ctn-status-normal a span{}.x-tree-node .k-ctn-status-deleted a span{text-decoration:line-through;color:gray;}.x-tree-node .k-ctn-status-rejected a span{text-decoration:line-through;/* color: #FF6633; */color:#F30;}.x-tree-node .k-ctn-status-editing a span{font-style:italic;color:gray;}.x-tree-node .k-ctn-status-submitted a span{color:green;}.k-info-links{text-decoration:underline;color:gray;cursor:pointer;}.x-tool-kmenu{background-position:0 -75px;}.x-tool-kmenu-over{background-position:-15px -75px;}.k-border-openbox{border-bottom:1px #D0D0D0 solid;border-right:1px #D0D0D0 solid;border-left:1px #D0D0D0 solid;}/* SiteToastMessages */.k-stm-info-icon{background-image:url(img/info.gif)!important;}.k-stm-imp-icon{background-image:url(img/alert.gif)!important;}.k-stm-verimp-icon{background-image:url(img/important.gif)!important;}.k-stm-error-icon{background-image:url(img/error.gif)!important;}.k-error-tb{background:#FFB380 none repeat scroll 0 50%;color:#250;}.k-infod-head{font-size:108%;margin-bottom:10px;}.gwt-DisclosurePanel{}.gwt-DisclosurePanel-open{}.gwt-DisclosurePanel-closed{}.gwt-DisclosurePanel .header,.gwt-DisclosurePanel .header a,.gwt-DisclosurePanel .header td{text-decoration:none;/* Remove underline from header */color:#000;cursor:pointer;cursor:hand;}.gwt-DisclosurePanel .content{border-left:3px solid #e8eef7;padding:4px 0 4px 8px;margin-left:6px;}.k-basic-thumb{background:#FAFAFA none repeat scroll 0 50%;border:1px solid #EBEBEB;padding:3px;margin:3px;}.k-basic-thumb td{padding:2px 3px;border:none;}.k-text-gray{color:gray;}.k-elp-limg{margin-top:4px;margin-left:5px;cursor:pointer;overflow:hidden;}.k-tsp-tag{float:right;margin-right:5px;cursor:pointer;color:#00F;}.k-tsp-cloud{vertical-align:bottom;}.k-link-icon{background-image:url(img/link.gif)!important;}.k-options-icon{background-image:url(img/emblem-system.gif)!important;}.k-copyleft-icon{background-image:url(img/copyleft.png)!important;}.k-picture-icon{background-image:url(img/picture.png)!important;}.k-info-icon{background-image:url(img/info.gif)!important;}.k-newgroup-icon{background-image:url(img/kune-icon16.png)!important;}.k-colors-icon{background-image:url(img/colors.gif)!important;}.x-toolbar-body table{/* width: 100%; */}.k-preview-msg{background:#FCA;}.k-preview-msg-lab{background:#FCA;padding:0 5px;}.k-eil-edit{border:thin solid #000;}/* duplicated in rte.css */.k-rte-comment{border:1px dashed silver;line-height:1.4;padding:3px;background-color:#D7FFD7;}
\ No newline at end of file

Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css	2009-03-10 00:05:50 UTC (rev 1064)
@@ -872,3 +872,11 @@
 .k-eil-edit {
     border: thin solid black;
 }
+
+/* duplicated in rte.css */
+.k-rte-comment {
+  border:1px dashed #C0C0C0;
+  line-height:1.4;
+  padding:3px;
+  background-color:#D7FFD7;
+}
\ No newline at end of file

Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientActions.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -38,7 +38,7 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
 import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
 import org.ourproject.kune.workspace.client.upload.FileUploader;
@@ -53,7 +53,7 @@
             final Provider<GroupServiceAsync> groupServiceProvider, final Provider<FileUploader> fileUploaderProvider,
             final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry,
             final Provider<FileDownloadUtils> fileDownloadProvider, final EntityHeader entityLogo,
-            final Provider<TextEditor> textEditorProvider, final KuneErrorHandler errorHandler,
+            final Provider<ContentEditor> textEditorProvider, final KuneErrorHandler errorHandler,
             final BlogViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider,
             final SitePublicSpaceLink publicLink) {
         super(session, stateManager, i18n, errorHandler, deferredCommandWrapper, groupServiceProvider,

Modified: trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/blogs/client/BlogClientModule.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -45,7 +45,7 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
 import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
@@ -78,7 +78,7 @@
                         $(Session.class), $(StateManager.class), $(DeferredCommandWrapper.class),
                         $$(ContentServiceAsync.class), $$(GroupServiceAsync.class), $$(FileUploader.class),
                         $(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(FileDownloadUtils.class),
-                        $(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class), $(BlogViewer.class),
+                        $(EntityHeader.class), $$(ContentEditor.class), $(KuneErrorHandler.class), $(BlogViewer.class),
                         $$(ContextPropEditor.class), $(SitePublicSpaceLink.class));
             }
         });

Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientActions.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -26,13 +26,13 @@
 import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
 import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator;
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.dto.AccessRolDTO;
 import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.i18n.I18nUITranslationService;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.wiki.client.WikiClientTool;
+import org.ourproject.kune.workspace.client.AbstractFoldableContentActions;
 import org.ourproject.kune.workspace.client.cnt.ContentActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 
@@ -62,7 +62,7 @@
 
     private void createActions() {
         final ActionToolbarButtonDescriptor<StateToken> chatAbout = new ActionToolbarButtonDescriptor<StateToken>(
-                AccessRolDTO.Viewer, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Viewer, AbstractFoldableContentActions.CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken token) {
                         chatEngineProvider.get().joinRoom(token.toString().replaceAll("\\.", "-"),
                                 session.getCurrentUserInfo().getShortName());
@@ -76,7 +76,7 @@
         chatAbout.setEnableCondition(notDeleted());
 
         ActionToolbarButtonDescriptor<StateToken> joinRoom = new ActionToolbarButtonDescriptor<StateToken>(
-                AccessRolDTO.Viewer, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Viewer, AbstractFoldableContentActions.CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(StateToken token) {
                         ChatEngine chatEngine = chatEngineProvider.get();
                         chatEngine.joinRoom(session.getContainerState().getContainer().getName(),
@@ -89,7 +89,7 @@
         joinRoom.setMustBeAuthenticated(true);
 
         ActionToolbarButtonDescriptor<StateToken> addRoom = new ActionToolbarButtonDescriptor<StateToken>(
-                AccessRolDTO.Administrator, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Administrator, AbstractFoldableContentActions.CONTEXT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(StateToken token) {
                         addRoomProvider.get().show();
                     }

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -38,7 +38,7 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
 import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
 import org.ourproject.kune.workspace.client.upload.FileUploader;
@@ -53,7 +53,7 @@
             final Provider<GroupServiceAsync> groupServiceProvider, final Provider<FileUploader> fileUploaderProvider,
             final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry,
             final Provider<FileDownloadUtils> fileDownloadProvider, final EntityHeader entityLogo,
-            final Provider<TextEditor> textEditorProvider, final KuneErrorHandler errorHandler,
+            final Provider<ContentEditor> textEditorProvider, final KuneErrorHandler errorHandler,
             final DocumentViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider,
             final SitePublicSpaceLink publicLink) {
         super(session, stateManager, i18n, errorHandler, deferredCommandWrapper, groupServiceProvider,

Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -45,7 +45,7 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
 import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
@@ -78,7 +78,7 @@
                         $(Session.class), $(StateManager.class), $(DeferredCommandWrapper.class),
                         $$(ContentServiceAsync.class), $$(GroupServiceAsync.class), $$(FileUploader.class),
                         $(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(FileDownloadUtils.class),
-                        $(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class),
+                        $(EntityHeader.class), $$(ContentEditor.class), $(KuneErrorHandler.class),
                         $(DocumentViewer.class), $$(ContextPropEditor.class), $(SitePublicSpaceLink.class));
             }
         });

Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientActions.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -37,7 +37,7 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
 import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
 import org.ourproject.kune.workspace.client.upload.FileUploader;
@@ -52,7 +52,7 @@
             final Provider<GroupServiceAsync> groupServiceProvider, final Provider<FileUploader> fileUploaderProvider,
             final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry,
             final Provider<FileDownloadUtils> fileDownloadProvider, final EntityHeader entityLogo,
-            final Provider<TextEditor> textEditorProvider, final KuneErrorHandler errorHandler,
+            final Provider<ContentEditor> textEditorProvider, final KuneErrorHandler errorHandler,
             final GalleryViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider,
             final SitePublicSpaceLink publicLink) {
         super(session, stateManager, i18n, errorHandler, deferredCommandWrapper, groupServiceProvider,

Modified: trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/gallery/client/GalleryClientModule.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -45,7 +45,7 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
 import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
@@ -78,8 +78,8 @@
                         $(Session.class), $(StateManager.class), $(DeferredCommandWrapper.class),
                         $$(ContentServiceAsync.class), $$(GroupServiceAsync.class), $$(FileUploader.class),
                         $(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(FileDownloadUtils.class),
-                        $(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class), $(GalleryViewer.class),
-                        $$(ContextPropEditor.class), $(SitePublicSpaceLink.class));
+                        $(EntityHeader.class), $$(ContentEditor.class), $(KuneErrorHandler.class),
+                        $(GalleryViewer.class), $$(ContextPropEditor.class), $(SitePublicSpaceLink.class));
             }
         });
 

Modified: trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/Kune-Platform.gwt.xml	2009-03-10 00:05:50 UTC (rev 1064)
@@ -11,4 +11,48 @@
 
   <public path="public" />
 
+      <inherits name="com.google.gwt.user.UserAgent" />
+    <!-- RTE css inject -->
+    <!-- See gwt-user: com/google/gwt/user/RichText.gwt.xml -->
+
+    <!-- IE-specific implementation -->
+    <replace-with
+        class="org.ourproject.kune.platf.client.ui.rte.WrappedRichTextAreaImplIE6">
+        <when-type-is
+            class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+        <when-property-is name="user.agent" value="ie6" />
+    </replace-with>
+
+    <!-- Mozilla-specific implementation -->
+    <replace-with
+        class="org.ourproject.kune.platf.client.ui.rte.WrappedRichTextAreaImplMozilla">
+        <when-type-is
+            class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+        <any>
+            <when-property-is name="user.agent" value="gecko1_8" />
+            <when-property-is name="user.agent" value="gecko" />
+        </any>
+    </replace-with>
+
+    <!-- Safari-specific implementation -->
+    <replace-with
+        class="org.ourproject.kune.platf.client.ui.rte.WrappedRichTextAreaImplSafari">
+        <when-type-is
+            class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+        <any>
+            <when-property-is name="user.agent" value="safari" />
+        </any>
+    </replace-with>
+
+    <!-- Opera-specific implementation -->
+    <replace-with
+        class="org.ourproject.kune.platf.client.ui.rte.WrappedRichTextAreaImplOpera">
+        <when-type-is
+            class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
+        <any>
+            <when-property-is name="user.agent" value="opera" />
+        </any>
+    </replace-with>
+
+
 </module>

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -20,7 +20,6 @@
 package org.ourproject.kune.platf.client.actions;
 
 import org.ourproject.kune.platf.client.dto.AccessRolDTO;
-import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
 import org.ourproject.kune.platf.client.services.ImageDescriptor;
 
 import com.calclab.suco.client.events.Listener;
@@ -31,6 +30,8 @@
  */
 public abstract class ActionDescriptor<T> {
 
+    public static final int NO_POSITION = -1;
+
     /** The icon url. */
     private String iconUrl;
 
@@ -78,6 +79,8 @@
 
     private ActionShortcut shortcut;
 
+    private int position = NO_POSITION;
+
     public ActionDescriptor(final AccessRolDTO accessRolDTO, final Listener<T> onPerformCall) {
         this.accessRol = accessRolDTO;
         this.onPerformCall = onPerformCall;
@@ -219,12 +222,21 @@
         return id;
     }
 
+    /**
+     * Get the index position where this action will be inserted
+     * 
+     * @param position
+     */
+    public int getPosition() {
+        return position;
+    }
+
     public ActionShortcut getShortcut() {
         return shortcut;
     }
 
-    public String getShortcutToS(I18nTranslationService i18n) {
-        return shortcut == null ? "" : shortcut.toString(i18n);
+    public String getShortcutToS() {
+        return shortcut == null ? "" : shortcut.toString();
     }
 
     /**
@@ -379,6 +391,15 @@
         this.mustBeConfirmed = mustBeConfirmed;
     }
 
+    /**
+     * Index position where this action will be inserted
+     * 
+     * @param position
+     */
+    public void setPosition(int position) {
+        this.position = position;
+    }
+
     public void setShortcut(ActionShortcut shortcut) {
         this.shortcut = shortcut;
     }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItem.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItem.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItem.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -19,6 +19,8 @@
  \*/
 package org.ourproject.kune.platf.client.actions;
 
+import com.allen_sauer.gwt.log.client.Log;
+
 /**
  * And action description and a item (for instance a StateToken, a XmmpURI) over
  * the action takes place
@@ -50,4 +52,14 @@
     public boolean mustBeEnabled() {
         return action.mustBeEnabled(getItem());
     }
+
+    public boolean mustBePressed() {
+        if (!(action instanceof ActionToolbarPushButtonDescriptor)) {
+            Log.error("This action is not a push button");
+            return false;
+        } else {
+            ActionPressedCondition<T> mustInitialyPressed = ((ActionToolbarPushButtonDescriptor<T>) action).getMustInitialyPressed();
+            return mustInitialyPressed != null ? mustInitialyPressed.mustBePressed(getItem()) : false;
+        }
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItemCollection.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItemCollection.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItemCollection.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -20,9 +20,37 @@
 package org.ourproject.kune.platf.client.actions;
 
 import java.util.ArrayList;
+import java.util.Collection;
 
+import com.allen_sauer.gwt.log.client.Log;
+
 public class ActionItemCollection<T> extends ArrayList<ActionItem<T>> {
 
     private static final long serialVersionUID = 1L;
 
+    @Override
+    public boolean add(ActionItem<T> actionItem) {
+        ActionDescriptor<T> action = actionItem.getAction();
+        int position = action.getPosition();
+        if (position == ActionDescriptor.NO_POSITION) {
+            super.add(actionItem);
+        } else {
+            try {
+                super.add(position, actionItem);
+                return true;
+            } catch (IndexOutOfBoundsException e) {
+                Log.error("Trying to add an action in a position out of bounds");
+                super.add(actionItem);
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean addAll(Collection<? extends ActionItem<T>> actionItems) {
+        for (ActionItem<T> actionItem : actionItems) {
+            add(actionItem);
+        }
+        return true;
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,6 +1,6 @@
 package org.ourproject.kune.platf.client.actions;
 
-import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.i18n.Resources;
 
 import com.google.gwt.user.client.ui.KeyboardListener;
 
@@ -98,21 +98,22 @@
         return (has(modifiers, modifier) == keyValue);
     }
 
-    public String toString(I18nTranslationService i18n) {
+    @Override
+    public String toString() {
         String s = " (";
-        s += sKey(alt, "Alt", i18n);
-        s += sKey(ctrl, "Ctrl", i18n);
-        s += sKey(shift, "Shift", i18n);
-        s += keyName != null ? translateKey(keyName, i18n) + ")" : String.valueOf(key).toUpperCase() + ")";
+        s += sKey(alt, "Alt");
+        s += sKey(ctrl, "Ctrl");
+        s += sKey(shift, "Shift");
+        s += keyName != null ? translateKey(keyName) + ")" : String.valueOf(key).toUpperCase() + ")";
         return s;
     }
 
-    private String sKey(boolean key, String specialKeyName, I18nTranslationService i18n) {
-        return key ? translateKey(specialKeyName, i18n) + "+" : "";
+    private String sKey(boolean key, String specialKeyName) {
+        return key ? translateKey(specialKeyName) + "+" : "";
     }
 
-    private String translateKey(String keyNameToTranslate, I18nTranslationService i18n) {
-        return i18n.tWithNT(keyNameToTranslate, "The '" + keyNameToTranslate + "' keyboard key");
+    private String translateKey(String keyNameToTranslate) {
+        return Resources.i18n.tWithNT(keyNameToTranslate, "The '" + keyNameToTranslate + "' keyboard key");
     }
 
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarDescriptor.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarDescriptor.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -26,11 +26,8 @@
 
 public abstract class ActionToolbarDescriptor<T> extends ActionDescriptor<T> {
 
-    public static final int NO_POSITION = -1;
     private ActionToolbarPosition actionToolbarPosition;
 
-    private int position = NO_POSITION;
-
     public ActionToolbarDescriptor(final AccessRolDTO accessRolDTO, final ActionToolbarPosition actionToolbarPosition,
             final Listener<T> onPerformCall) {
         super(accessRolDTO, onPerformCall);
@@ -71,26 +68,8 @@
         return actionToolbarPosition;
     }
 
-    /**
-     * Get the index position where this action will be inserted
-     * 
-     * @param position
-     */
-    public int getPosition() {
-        return position;
-    }
-
     public void setActionPosition(final ActionToolbarPosition actionToolbarPosition) {
         this.actionToolbarPosition = actionToolbarPosition;
     }
 
-    /**
-     * Index position where this action will be inserted
-     * 
-     * @param position
-     */
-    public void setPosition(int position) {
-        this.position = position;
-    }
-
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarPosition.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarPosition.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionToolbarPosition.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,24 +1,41 @@
-/*
- *
- * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- \*/
 package org.ourproject.kune.platf.client.actions;
 
-public enum ActionToolbarPosition {
-    topbar, bottombar
+public class ActionToolbarPosition {
+
+    private final String id;
+
+    public ActionToolbarPosition(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        ActionToolbarPosition other = (ActionToolbarPosition) obj;
+        if (id == null) {
+            if (other.id != null) {
+                return false;
+            }
+        } else if (!id.equals(other.id)) {
+            return false;
+        }
+        return true;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((id == null) ? 0 : id.hashCode());
+        return result;
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -22,11 +22,14 @@
 import org.ourproject.kune.platf.client.actions.ActionDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionItemCollection;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 
 public interface ActionToolbar<T> {
 
-    void addActions(ActionItemCollection<T> actionItemCollection);
+    ActionToolbarPosition IN_ANY = new ActionToolbarPosition("in-all");
 
+    void addActions(ActionItemCollection<T> actionItemCollection, ActionToolbarPosition actionToolbarPosition);
+
     void attach();
 
     void clear();
@@ -45,6 +48,10 @@
 
     void setButtonEnable(ActionDescriptor<T> action, boolean enable);
 
+    void setCleanStyle();
+
+    void setNormalStyle();
+
     void setParentMenuTitle(ActionToolbarMenuDescriptor<T> action, String origTitle, String origTooltip, String newTitle);
 
     void setPushButtonPressed(ActionDescriptor<T> action, boolean pressed);

Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,55 @@
+package org.ourproject.kune.platf.client.actions.toolbar;
+
+import org.ourproject.kune.platf.client.actions.ActionShortcut;
+import org.ourproject.kune.platf.client.actions.ActionToolbarDescriptor;
+
+import com.calclab.suco.client.events.Listener0;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+
+public class ActionToolbarButton<T> extends ToolbarButton {
+
+    public ActionToolbarButton(ActionToolbarDescriptor<T> action, final String id, boolean enabled,
+            boolean isPushButton, boolean pressed, final Listener0 onclick) {
+        final String text = action.getText();
+        final String iconUrl = action.getIconUrl();
+        final String iconCls = action.getIconCls();
+        if (text != null) {
+            super.setText(text);
+        }
+        if (isPushButton) {
+            super.setEnableToggle(true);
+            super.setPressed(pressed);
+        }
+        super.addListener(new ButtonListenerAdapter() {
+            @Override
+            public void onClick(final Button button, final EventObject e) {
+                e.stopEvent();
+                onclick.onEvent();
+            }
+        });
+        if (iconUrl != null) {
+            super.setIcon(iconUrl);
+        }
+        if (iconCls != null) {
+            super.setIconCls(iconCls);
+        }
+        String toolTip = action.getToolTip();
+        ActionShortcut shortcut = action.getShortcut();
+        super.setTooltip((toolTip == null ? "" : toolTip) + (shortcut != null ? shortcut.toString() : ""));
+        setEnableButton(enabled);
+        // Waring: If you put set Id above click listener fires twice
+        super.setId(id);
+    }
+
+    private void setEnableButton(final boolean enabled) {
+        if (enabled) {
+            super.enable();
+        } else {
+            super.disable();
+        }
+    }
+
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -24,27 +24,21 @@
 import org.ourproject.kune.platf.client.actions.ActionDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionItem;
 import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.ActionPressedCondition;
-import org.ourproject.kune.platf.client.actions.ActionShortcut;
 import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator;
-import org.ourproject.kune.platf.client.actions.ActionToolbarDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuCheckItemDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuRadioDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
-import org.ourproject.kune.platf.client.actions.ActionToolbarPushButtonDescriptor;
-import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
 import org.ourproject.kune.platf.client.ui.SimpleToolbar;
 
 import com.allen_sauer.gwt.log.client.Log;
+import com.calclab.suco.client.events.Listener0;
 import com.calclab.suco.client.ioc.Provider;
 import com.google.gwt.user.client.ui.Widget;
 import com.gwtext.client.core.EventObject;
 import com.gwtext.client.core.Ext;
-import com.gwtext.client.widgets.Button;
 import com.gwtext.client.widgets.ToolbarButton;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
 import com.gwtext.client.widgets.menu.BaseItem;
 import com.gwtext.client.widgets.menu.CheckItem;
 import com.gwtext.client.widgets.menu.Item;
@@ -54,76 +48,41 @@
 
 public class ActionToolbarPanel<T> implements ActionToolbarView<T> {
 
-    private final HashMap<String, Menu> toolbarMenus;
-    private final HashMap<String, ToolbarButton> toolbarButtons;
+    private final HashMap<String, Menu> menus;
     private final HashMap<String, Item> menuItems;
+    private final HashMap<String, ToolbarButton> buttons;
     private final Provider<ActionManager> actionManagerProvider;
-    protected final SimpleToolbar topbar;
-    protected final SimpleToolbar bottombar;
-    private final I18nTranslationService i18n;
+    protected final SimpleToolbar toolbar;
 
-    public ActionToolbarPanel(final Provider<ActionManager> actionManagerProvider, I18nTranslationService i18n) {
-        this.i18n = i18n;
-        topbar = new SimpleToolbar();
-        bottombar = new SimpleToolbar();
-        topbar.setWidth("100%");
-        bottombar.setWidth("100%");
+    public ActionToolbarPanel(final Provider<ActionManager> actionManagerProvider) {
+        toolbar = new SimpleToolbar();
+        toolbar.setWidth("100%");
         this.actionManagerProvider = actionManagerProvider;
 
-        toolbarMenus = new HashMap<String, Menu>();
-        toolbarButtons = new HashMap<String, ToolbarButton>();
+        menus = new HashMap<String, Menu>();
         menuItems = new HashMap<String, Item>();
+        buttons = new HashMap<String, ToolbarButton>();
     }
 
-    public void addButtonAction(final ActionItem<T> actionItem, final boolean enable) {
-        final ToolbarButton button = new ToolbarButton();
+    public ActionToolbarButton<T> addButtonAction(final ActionItem<T> actionItem, final boolean enable,
+            final boolean isPushButton, final boolean pressed) {
         final ActionToolbarButtonDescriptor<T> action = (ActionToolbarButtonDescriptor<T>) actionItem.getAction();
-        T item = actionItem.getItem();
-        final ActionToolbarPosition pos = action.getActionPosition();
-        final String text = action.getText();
-        final String iconUrl = action.getIconUrl();
-        final String iconCls = action.getIconCls();
-        if (text != null) {
-            button.setText(text);
-        }
-        String id = generateIdIfEmpty(action);
-        button.setId(id);
-        if (action instanceof ActionToolbarPushButtonDescriptor) {
-            button.setEnableToggle(true);
-            ActionPressedCondition<T> mustInitialyPressed = ((ActionToolbarPushButtonDescriptor<T>) action).getMustInitialyPressed();
-            button.setPressed(mustInitialyPressed != null && mustInitialyPressed.mustBePressed(item));
-        }
-        button.addListener(new ButtonListenerAdapter() {
-            @Override
-            public void onClick(final Button button, final EventObject e) {
-                actionManagerProvider.get().doAction(actionItem);
-            }
-        });
-        if (iconUrl != null) {
-            button.setIcon(iconUrl);
-        }
-        if (iconCls != null) {
-            button.setIconCls(iconCls);
-        }
-        String toolTip = action.getToolTip();
-        ActionShortcut shortcut = action.getShortcut();
-        button.setTooltip((toolTip == null ? "" : toolTip) + (shortcut != null ? shortcut.toString(i18n) : ""));
-
-        setEnableButton(button, enable);
-        final SimpleToolbar toolbar = getToolbar(pos);
+        String id = generateId(action);
+        ActionToolbarButton<T> button = new ActionToolbarButton<T>(action, id, enable, isPushButton, pressed,
+                new Listener0() {
+                    public void onEvent() {
+                        actionManagerProvider.get().doAction(actionItem);
+                    }
+                });
         if (action.hasLeftSeparator()) {
             add(toolbar, action.getLeftSeparator());
         }
-        int position = action.getPosition();
-        if (position != ActionToolbarDescriptor.NO_POSITION) {
-            toolbar.insert(button, position);
-        } else {
-            toolbar.add(button);
-        }
+        toolbar.add(button);
         if (action.hasRightSeparator()) {
             add(toolbar, action.getRightSeparator());
         }
-        toolbarButtons.put(genButtonKey(pos, id), button);
+        buttons.put(genButtonKey(id), button);
+        return button;
     }
 
     public void addMenuAction(final ActionItem<T> actionItem, final boolean enable) {
@@ -135,7 +94,7 @@
         final String itemKey = genMenuKey(pos, menuTitle, action.getParentMenuTooltip(), menuSubTitle, action.getText());
         Item item = menuItems.get(itemKey);
         if (item == null) {
-            item = createToolbarMenu(pos, menuTitle, menuTooltip, menuSubTitle, actionItem, generateIdIfEmpty(action));
+            item = createToolbarMenu(pos, menuTitle, menuTooltip, menuSubTitle, actionItem, generateId(action));
             menuItems.put(itemKey, item);
         }
         setEnableMenuItem(item, enable);
@@ -145,24 +104,15 @@
     }
 
     public void clear() {
-        toolbarMenus.clear();
+        menus.clear();
         menuItems.clear();
-        toolbarButtons.clear();
-        topbar.removeAll();
-        bottombar.removeAll();
-        getToolbar(ActionToolbarPosition.topbar).removeAll();
-        getToolbar(ActionToolbarPosition.bottombar).removeAll();
+        buttons.clear();
+        toolbar.removeAll();
     }
 
     public void detach() {
     }
 
-    public void disableAllMenuItems() {
-        for (final Item item : menuItems.values()) {
-            item.disable();
-        }
-    }
-
     public int getLeftPosition(ActionDescriptor<T> action) {
         final ToolbarButton button = findButton(action);
         if (button != null) {
@@ -171,14 +121,8 @@
         return 0;
     }
 
-    public SimpleToolbar getToolbar(final ActionToolbarPosition pos) {
-        switch (pos) {
-        case bottombar:
-            return bottombar;
-        case topbar:
-        default:
-            return topbar;
-        }
+    public SimpleToolbar getToolbar() {
+        return toolbar;
     }
 
     public int getTopPosition(ActionDescriptor<T> action) {
@@ -190,7 +134,7 @@
     }
 
     public void hideAllMenus() {
-        for (Menu menu : toolbarMenus.values()) {
+        for (Menu menu : menus.values()) {
             menu.hide(true);
         }
     }
@@ -204,10 +148,18 @@
         }
     }
 
+    public void setCleanStyle() {
+        toolbar.setCleanStyle();
+    }
+
+    public void setNormalStyle() {
+        toolbar.setNormalStyle();
+    }
+
     public void setParentMenuTitle(ActionToolbarMenuDescriptor<T> action, String origTitle, String origTooltip,
             String newTitle) {
         final String menuKey = genMenuKey(action.getActionPosition(), origTitle, origTooltip, null, null);
-        Menu menu = toolbarMenus.get(menuKey);
+        Menu menu = menus.get(menuKey);
         if (menu != null) {
             menu.setTitle(newTitle);
         } else {
@@ -217,18 +169,18 @@
 
     public void setPushButtonPressed(final ActionDescriptor<T> action, final boolean pressed) {
         final ToolbarButton button = findButton(action);
-        if (button != null && button.isEnableToggle()) {
-            // Log.debug("Setting button pressed: " + pressed);
-            button.toggle(pressed);
+        if (button != null) {
+            if (button.isEnableToggle()) {
+                // Log.debug("Setting button pressed: " + pressed);
+                button.toggle(pressed);
+            } else {
+                Log.error("Tryng to set pressed a toolbar button not of type push button");
+            }
         } else {
             Log.error("Tryng to set pressed a non existent toolbar push button");
         }
     }
 
-    private void add(final ActionToolbarPosition toolbar, final Widget widget) {
-        getToolbar(toolbar).add(widget);
-    }
-
     private Widget add(final SimpleToolbar toolbar, final ActionToolbarButtonSeparator separator) {
         switch (separator) {
         case fill:
@@ -241,6 +193,10 @@
         }
     }
 
+    private void add(final Widget widget) {
+        toolbar.add(widget);
+    }
+
     private void addSeparator(Menu menu, boolean separator) {
         if (separator) {
             menu.addSeparator();
@@ -291,18 +247,18 @@
 
         final String menuKey = genMenuKey(toolBarPos, menuTitle, menuTooltip, null, null);
         final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuTooltip, menuSubTitle, null);
-        Menu menu = toolbarMenus.get(menuKey);
-        Menu subMenu = toolbarMenus.get(subMenuKey);
+        Menu menu = menus.get(menuKey);
+        Menu subMenu = menus.get(subMenuKey);
         if (menuSubTitle != null) {
             if (subMenu == null) {
                 subMenu = new Menu();
                 final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu);
                 if (menu == null) {
                     menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), action.getParentMenuIconCls(),
-                            menuTitle, menuKey, "");
+                            menuTitle, menuKey, "", action.getPosition());
                 }
                 menu.addItem(subMenuItem);
-                toolbarMenus.put(subMenuKey, subMenu);
+                menus.put(subMenuKey, subMenu);
             }
             addSeparator(subMenu, action.hasTopSeparator());
             subMenu.addItem(item);
@@ -311,7 +267,7 @@
             // Menu action without submenu
             if (menu == null) {
                 menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), action.getParentMenuIconCls(),
-                        menuTitle, menuKey, action.getParentMenuTooltip());
+                        menuTitle, menuKey, action.getParentMenuTooltip(), action.getPosition());
             }
             addSeparator(menu, action.hasTopSeparator());
             menu.addItem(item);
@@ -321,7 +277,7 @@
     }
 
     private Menu createToolbarMenu(final ActionToolbarPosition barPosition, final String iconUrl, final String iconCls,
-            final String menuTitle, final String menuKey, final String menuTooltip) {
+            final String menuTitle, final String menuKey, final String menuTooltip, int position) {
         final Menu menu = new Menu();
         menu.setShadow(true);
         final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle);
@@ -335,28 +291,24 @@
         if (menuTooltip != null) {
             toolbarMenu.setTooltip(menuTooltip);
         }
-        toolbarMenus.put(menuKey, menu);
-        add(barPosition, toolbarMenu);
+        menus.put(menuKey, menu);
+        add(toolbarMenu);
         return menu;
     }
 
     private ToolbarButton findButton(final ActionDescriptor<T> action) {
-        final ActionToolbarPosition pos = ((ActionToolbarDescriptor<T>) action).getActionPosition();
-        final ToolbarButton button = toolbarButtons.get(genButtonKey(pos, action.getId()));
+        final ToolbarButton button = buttons.get(genButtonKey(action.getId()));
         return button;
     }
 
-    private String genButtonKey(final ActionToolbarPosition pos, final String id) {
-        final String basePart = "km-act-btn-" + pos.toString().substring(0, 2) + "-" + id;
+    private String genButtonKey(final String id) {
+        final String basePart = "km-act-btn-" + id;
         return basePart;
     }
 
-    private String generateIdIfEmpty(final ActionDescriptor<T> action) {
-        String id = action.getId();
-        if (id == null) {
-            id = Ext.generateId();
-            action.setId(id);
-        }
+    private String generateId(final ActionDescriptor<T> action) {
+        String id = Ext.generateId();
+        action.setId(id);
         return id;
     }
 
@@ -365,9 +317,9 @@
         // Label title = new Label(action.getText());
         // hp.add(title);
         // hp.setCellWidth(title, "100%");
-        // hp.add(new Label(action.getShortcutToS(i18n)));
+        // hp.add(new Label(action.getShortcutToS(i 18n)));
         // return hp.getElement().getInnerHTML();
-        return action.getText() + action.getShortcutToS(i18n);
+        return action.getText() + action.getShortcutToS();
     }
 
     private String genMenuKey(final ActionToolbarPosition pos, final String menuTitle, final String menuTooltip,

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -24,8 +24,11 @@
 import org.ourproject.kune.platf.client.actions.ActionItemCollection;
 import org.ourproject.kune.platf.client.actions.ActionToolbarButtonAndItemDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionToolbarDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuAndItemDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
+import org.ourproject.kune.platf.client.actions.ActionToolbarPushButtonDescriptor;
 
 import com.allen_sauer.gwt.log.client.Log;
 
@@ -36,15 +39,24 @@
         this.view = toolbar;
     }
 
-    public void addActions(final ActionItemCollection<T> actions) {
+    public void addActions(final ActionItemCollection<T> actions, ActionToolbarPosition position) {
         for (final ActionItem<T> actionItem : actions) {
             final ActionDescriptor<T> action = actionItem.getAction();
             if (actionItem.mustBeAdded()) {
                 if (isToolbarMenu(action)) {
-                    view.addMenuAction(actionItem, actionItem.mustBeEnabled());
+                    if (addInPosition(action, position)) {
+                        view.addMenuAction(actionItem, actionItem.mustBeEnabled());
+                    }
                 } else {
-                    if (isToolbarButton(action)) {
-                        view.addButtonAction(actionItem, actionItem.mustBeEnabled());
+                    if (isToolbarPushButton(action)) {
+                        if (addInPosition(action, position)) {
+                            view.addButtonAction(actionItem, actionItem.mustBeEnabled(), true,
+                                    actionItem.mustBePressed());
+                        }
+                    } else if (isToolbarButton(action)) {
+                        if (addInPosition(action, position)) {
+                            view.addButtonAction(actionItem, actionItem.mustBeEnabled(), false, false);
+                        }
                     } else {
                         Log.error("Code error: Not an ActionMenuDescriptor or ActionButtonDescriptor: "
                                 + action.getText());
@@ -90,6 +102,14 @@
         view.setButtonEnable(action, enable);
     }
 
+    public void setCleanStyle() {
+        view.setCleanStyle();
+    }
+
+    public void setNormalStyle() {
+        view.setNormalStyle();
+    }
+
     public void setParentMenuTitle(ActionToolbarMenuDescriptor<T> action, String origTitle, String origTooltip,
             String newTitle) {
         view.setParentMenuTitle(action, origTitle, origTooltip, newTitle);
@@ -99,6 +119,13 @@
         view.setPushButtonPressed(action, pressed);
     }
 
+    private boolean addInPosition(ActionDescriptor<T> action, ActionToolbarPosition position) {
+        if (position.equals(IN_ANY) || ((ActionToolbarDescriptor<T>) action).getActionPosition().equals(position)) {
+            return true;
+        }
+        return false;
+    }
+
     private boolean isToolbarButton(final ActionDescriptor<T> action) {
         return action instanceof ActionToolbarButtonDescriptor
                 || action instanceof ActionToolbarButtonAndItemDescriptor;
@@ -107,4 +134,8 @@
     private boolean isToolbarMenu(final ActionDescriptor<T> action) {
         return action instanceof ActionToolbarMenuDescriptor || action instanceof ActionToolbarMenuAndItemDescriptor;
     }
+
+    private boolean isToolbarPushButton(ActionDescriptor<T> action) {
+        return action instanceof ActionToolbarPushButtonDescriptor;
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -26,7 +26,8 @@
 
 public interface ActionToolbarView<T> extends View {
 
-    void addButtonAction(ActionItem<T> actionItem, boolean enable);
+    ActionToolbarButton<T> addButtonAction(ActionItem<T> actionItem, boolean enabled, boolean isPushButton,
+            boolean pressed);
 
     void addMenuAction(ActionItem<T> actionItem, boolean enable);
 
@@ -36,8 +37,6 @@
 
     void detach();
 
-    void disableAllMenuItems();
-
     int getLeftPosition(ActionDescriptor<T> action);
 
     int getTopPosition(ActionDescriptor<T> action);
@@ -46,6 +45,10 @@
 
     void setButtonEnable(ActionDescriptor<T> action, boolean enable);
 
+    void setCleanStyle();
+
+    void setNormalStyle();
+
     void setParentMenuTitle(ActionToolbarMenuDescriptor<T> action, String origTitle, String origTooltip, String newTitle);
 
     void setPushButtonPressed(ActionDescriptor<T> action, boolean pressed);

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/i18n/I18nTranslationService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/i18n/I18nTranslationService.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/i18n/I18nTranslationService.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -19,7 +19,6 @@
  */
 package org.ourproject.kune.platf.client.i18n;
 
-import java.util.Date;
 
 public abstract class I18nTranslationService {
     protected static final String TRANSLATION_NOTE_REGEXP = " (\\[)%NT (.*)(\\])$";
@@ -34,31 +33,6 @@
         return text;
     }
 
-    public String formatDate(final String format, final Date date) {
-        // TODO: 18n dates
-        return null;
-        // cc = c.sub(/^%[EO]?(.)$/o, '%\\1')
-        // case cc
-        // when '%A'; o << "#{::Date::DAYNAMES[wday]}
-        // [weekday]".t(::Date::DAYNAMES[wday])
-        // when '%a'; o << "#{::Date::ABBR_DAYNAMES[wday]} [abbreviated
-        // weekday]".t(::Date::ABBR_DAYNAMES[wday])
-        // when '%B'; o << "#{::Date::MONTHNAMES[mon]}
-        // [month]".t(::Date::MONTHNAMES[mon])
-        // when '%b'; o << "#{::Date::ABBR_MONTHNAMES[mon]} [abbreviated
-        // month]".t(::Date::ABBR_MONTHNAMES[mon])
-        // when '%c'; o << ((Locale.active? && !Locale.active.date_format.nil?)
-        // ?
-        // localize(Locale.active.date_format) : strftime('%Y-%m-%d'))
-        // when '%p'; o << if hour < 12 then 'AM [Ante Meridiem]'.t("am") else
-        // 'PM [Post
-        // Meridiem]'.t("am") end
-        // when '%P'; o << if hour < 12 then 'AM [Ante Meridiem]'.t("AM") else
-        // 'PM [Post
-        // Meridiem]'.t("PM") end
-        // else; o << c
-    }
-
     public String removeNT(final String string) {
         return string.replaceAll(TRANSLATION_NOTE_REGEXP, "");
     }

Added: trunk/src/main/java/org/ourproject/kune/platf/client/i18n/Resources.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/i18n/Resources.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/i18n/Resources.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,11 @@
+package org.ourproject.kune.platf.client.i18n;
+
+public class Resources {
+
+    public static I18nTranslationService i18n;
+
+    public Resources(I18nTranslationService i18n) {
+        Resources.i18n = i18n;
+    }
+
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -124,7 +124,7 @@
         if (showException) {
             Log.debug("Exception in KuneErrorHandler", e);
         } else {
-            Log.debug(e.getMessage());
+            Log.debug("Exception in KuneErrorHandler: " + e.getMessage());
         }
     }
 

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KunePlatformModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KunePlatformModule.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KunePlatformModule.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -29,6 +29,7 @@
 import org.ourproject.kune.platf.client.app.ToolGroup;
 import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
 import org.ourproject.kune.platf.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.platf.client.i18n.Resources;
 import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
 import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
 import org.ourproject.kune.platf.client.rpc.I18nService;
@@ -51,6 +52,8 @@
 import org.ourproject.kune.platf.client.ui.rte.RTEActionSndToolbarPresenter;
 import org.ourproject.kune.platf.client.ui.rte.RTEActionTopToolbar;
 import org.ourproject.kune.platf.client.ui.rte.RTEActionTopToolbarPresenter;
+import org.ourproject.kune.platf.client.ui.rte.RTESavingEditor;
+import org.ourproject.kune.platf.client.ui.rte.RTESavingEditorPresenter;
 import org.ourproject.kune.platf.client.ui.rte.RTEditor;
 import org.ourproject.kune.platf.client.ui.rte.RTEditorPanel;
 import org.ourproject.kune.platf.client.ui.rte.RTEditorPresenter;
@@ -58,6 +61,7 @@
 import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources;
 import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper;
 import org.ourproject.kune.workspace.client.editor.insert.TextEditorInsertElement;
+import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLink;
 
 import com.calclab.suco.client.events.Listener0;
 import com.calclab.suco.client.ioc.decorator.NoDecoration;
@@ -155,6 +159,15 @@
             container.removeProvider(I18nTranslationService.class);
         }
 
+        register(Singleton.class, new Factory<Resources>(Resources.class) {
+            @Override
+            public Resources create() {
+                return new Resources(i18n);
+            }
+        });
+
+        $(Resources.class);
+
         register(Singleton.class, new Factory<I18nTranslationService>(I18nTranslationService.class) {
             @Override
             public I18nTranslationService create() {
@@ -214,14 +227,14 @@
         register(NoDecoration.class, new Factory<RTEActionTopToolbar>(RTEActionTopToolbar.class) {
             @Override
             public RTEActionTopToolbar create() {
-                final ActionToolbarPanel<Object> panel = new ActionToolbarPanel<Object>($$(ActionManager.class), i18n);
+                final ActionToolbarPanel<Object> panel = new ActionToolbarPanel<Object>($$(ActionManager.class));
                 final RTEActionTopToolbarPresenter toolbar = new RTEActionTopToolbarPresenter(panel);
                 return toolbar;
             }
         }, new Factory<RTEActionSndToolbar>(RTEActionSndToolbar.class) {
             @Override
             public RTEActionSndToolbar create() {
-                final ActionToolbarPanel<Object> panel = new ActionToolbarPanel<Object>($$(ActionManager.class), i18n);
+                final ActionToolbarPanel<Object> panel = new ActionToolbarPanel<Object>($$(ActionManager.class));
                 final RTEActionSndToolbarPresenter toolbar = new RTEActionSndToolbarPresenter(panel);
                 return toolbar;
             }
@@ -240,11 +253,19 @@
                 presenter.init(panel);
                 return presenter;
             }
+        }, new Factory<RTESavingEditor>(RTESavingEditor.class) {
+            @Override
+            public RTESavingEditor create() {
+                return new RTESavingEditorPresenter($(RTEditor.class), true, $(I18nTranslationService.class),
+                        $(StateManager.class), $(SiteSignOutLink.class), $(DeferredCommandWrapper.class),
+                        $(RTEImgResources.class));
+            }
         });
+
         register(NoDecoration.class, new Factory<TestRTEDialog>(TestRTEDialog.class) {
             @Override
             public TestRTEDialog create() {
-                return new TestRTEDialog($(RTEditor.class));
+                return new TestRTEDialog($(RTESavingEditor.class));
             }
         });
 

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/SimpleToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/SimpleToolbar.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/SimpleToolbar.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -94,8 +94,7 @@
     }
 
     public void setCleanStyle() {
-        setStyleName("x-toolbar");
-        addStyleName("x-panel");
+        setBasicStyle();
         addStyleName("k-blank-toolbar");
     }
 
@@ -104,4 +103,14 @@
         mainPanel.setHeight(height);
         mainPanel.setCellHeight(childPanel, height);
     }
+
+    public void setNormalStyle() {
+        setBasicStyle();
+        addStyleName("k-toolbar-bottom-line");
+    }
+
+    private void setBasicStyle() {
+        setStyleName("x-toolbar");
+        addStyleName("x-panel");
+    }
 }
\ No newline at end of file

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,16 @@
+package org.ourproject.kune.platf.client.ui.rte;
+
+import com.calclab.suco.client.events.Listener;
+import com.calclab.suco.client.events.Listener0;
+
+public interface RTESavingEditor {
+
+    void edit(String html, Listener<String> onSave, Listener0 onEditCancelled);
+
+    RTEditor getBasicEditor();
+
+    void onSavedSuccessful();
+
+    void onSaveFailed();
+
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,234 @@
+package org.ourproject.kune.platf.client.ui.rte;
+
+import org.ourproject.kune.platf.client.actions.ActionShortcut;
+import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator;
+import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.BeforeActionListener;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.platf.client.ui.noti.NotifyUser;
+import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources;
+import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper;
+import org.ourproject.kune.platf.client.utils.TimerWrapper;
+import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLink;
+
+import com.calclab.suco.client.events.Listener;
+import com.calclab.suco.client.events.Listener0;
+
+public class RTESavingEditorPresenter implements RTESavingEditor {
+
+    @Deprecated
+    private static final String FILE_MENU_OPTION = "File";
+    public static final int AUTOSAVE_AFTER_FAILS_IN_MILLISECONS = 20000;
+    public static final int AUTOSAVE_IN_MILLISECONDS = 10000;
+
+    private final RTEditor editor;
+    private final boolean autoSave;
+    private boolean savePending;
+    private boolean saveAndCloseConfirmed;
+    private Listener<String> onSave;
+    private Listener0 onEditCancelled;
+    private final RTEImgResources imgResources;
+    private final TimerWrapper timer;
+    private final DeferredCommandWrapper deferredCommandWrapper;
+    private final I18nTranslationService i18n;
+    private final StateManager stateManager;
+    private final BeforeActionListener beforeStateChangeListener;
+    @Deprecated
+    private final SiteSignOutLink siteSignOutLink;
+    private ActionToolbarButtonDescriptor<Object> saveBtn;
+
+    public RTESavingEditorPresenter(RTEditor editor, final boolean autoSave, final I18nTranslationService i18n,
+            StateManager stateManager, SiteSignOutLink siteSignOutLink, DeferredCommandWrapper deferredCommandWrapper,
+            RTEImgResources imgResources) {
+        this.editor = editor;
+        this.autoSave = autoSave;
+        this.i18n = i18n;
+        this.stateManager = stateManager;
+        this.siteSignOutLink = siteSignOutLink;
+        this.deferredCommandWrapper = deferredCommandWrapper;
+        this.imgResources = imgResources;
+        this.savePending = false;
+        this.saveAndCloseConfirmed = false;
+        createActions();
+        this.timer = new TimerWrapper(new Listener0() {
+            public void onEvent() {
+                onAutoSave();
+            }
+        });
+        editor.addOnEditListener(new Listener0() {
+            public void onEvent() {
+                onEdit();
+            }
+        });
+        beforeStateChangeListener = new BeforeActionListener() {
+            public boolean beforeAction() {
+                return beforeTokenChange();
+            }
+        };
+    }
+
+    public void edit(String html, Listener<String> onSave, Listener0 onEditCancelled) {
+        this.onSave = onSave;
+        this.onEditCancelled = onEditCancelled;
+        editor.setHtml(html);
+        editor.attach();
+        stateManager.addBeforeStateChangeListener(beforeStateChangeListener);
+        siteSignOutLink.addBeforeSignOut(beforeStateChangeListener);
+        enableSaveBtn(false);
+    }
+
+    public RTEditor getBasicEditor() {
+        return editor;
+    }
+
+    public void onDoSaveAndClose() {
+        saveAndCloseConfirmed = true;
+        onDoSave();
+    }
+
+    public void onSavedSuccessful() {
+        if (saveAndCloseConfirmed) {
+            onCancelConfirmed();
+        } else {
+            reset();
+        }
+    }
+
+    public void onSaveFailed() {
+        timer.schedule(AUTOSAVE_AFTER_FAILS_IN_MILLISECONS);
+        if (saveAndCloseConfirmed) {
+            saveAndCloseConfirmed = false;
+        }
+    }
+
+    protected void onAutoSave() {
+        onDoSave();
+    }
+
+    protected void onCancel() {
+        if (savePending) {
+            timer.cancel();
+            Listener0 onYes = new Listener0() {
+                public void onEvent() {
+                    onDoSaveAndClose();
+                }
+            };
+            Listener0 onCancel = new Listener0() {
+                public void onEvent() {
+                    onCancelConfirmed();
+                }
+            };
+            NotifyUser.askConfirmation(i18n.t("Save confirmation"),
+                    i18n.t("Do you want to save before closing the editor?"), onYes, onCancel);
+        } else {
+            onCancelConfirmed();
+        }
+    }
+
+    protected void onCancelConfirmed() {
+        stateManager.removeBeforeStateChangeListener(beforeStateChangeListener);
+        siteSignOutLink.removeBeforeSignOut(beforeStateChangeListener);
+        stateManager.resumeTokenChange();
+        reset();
+        editor.reset();
+        onDoEditCancelled();
+    }
+
+    protected void onDoSave() {
+        onSave.onEvent(editor.getHtml());
+    }
+
+    boolean beforeTokenChange() {
+        if (savePending) {
+            onCancel();
+            return false;
+        } else {
+            deferredCommandWrapper.addCommand(new Listener0() {
+                public void onEvent() {
+                    onCancelConfirmed();
+                }
+            });
+            return true;
+        }
+    }
+
+    private void createActions() {
+        Listener0 onPerformSaveCall = new Listener0() {
+            public void onEvent() {
+                onDoSave();
+            }
+        };
+        saveBtn = new ActionToolbarButtonDescriptor<Object>(AccessRolDTO.Editor, RTEditor.topbar, onPerformSaveCall);
+        saveBtn.setIconCls(RTEImgResources.SUFFIX + imgResources.save().getName());
+        saveBtn.setToolTip(i18n.t("Save"));
+        saveBtn.setShortcut(new ActionShortcut(true, 'S'));
+        saveBtn.setPosition(20);
+
+        ActionToolbarMenuDescriptor<Object> save = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor,
+                RTEditor.topbar, onPerformSaveCall);
+        save.setIconCls(RTEImgResources.SUFFIX + imgResources.save().getName());
+        save.setParentMenuTitle(i18n.t(FILE_MENU_OPTION));
+        save.setTextDescription(i18n.t("Save"));
+        save.setPosition(0);
+
+        ActionToolbarMenuDescriptor<Object> close = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor,
+                RTEditor.topbar, new Listener<Object>() {
+                    public void onEvent(Object parameter) {
+                        onCancel();
+                    }
+                });
+        close.setParentMenuTitle(i18n.t(FILE_MENU_OPTION));
+        close.setTextDescription(i18n.t("Close"));
+
+        Listener0 onPerformSaveAndCloseCall = new Listener0() {
+            public void onEvent() {
+                onDoSaveAndClose();
+            }
+        };
+        ActionToolbarMenuDescriptor<Object> saveclose = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor,
+                RTEditor.topbar, onPerformSaveAndCloseCall);
+        saveclose.setParentMenuTitle(i18n.t(FILE_MENU_OPTION));
+        saveclose.setTextDescription(i18n.t("Save & Close"));
+
+        ActionToolbarButtonDescriptor<Object> saveCloseBtn = new ActionToolbarButtonDescriptor<Object>(
+                AccessRolDTO.Editor, RTEditor.topbar, onPerformSaveAndCloseCall);
+        // saveCloseBtn.setIconCls(RTEImgResources.SUFFIX +
+        // imgResources.save().getName());
+        saveCloseBtn.setTextDescription(i18n.t("Save & Close"));
+        saveCloseBtn.setLeftSeparator(ActionToolbarButtonSeparator.fill);
+
+        editor.addAction(save);
+        editor.addAction(saveclose);
+        editor.addAction(close);
+        editor.addAction(saveBtn);
+        editor.addAction(saveCloseBtn);
+    }
+
+    private void enableSaveBtn(boolean enable) {
+        editor.getTopBar().setButtonEnable(saveBtn, enable);
+    }
+
+    private void onDoEditCancelled() {
+        onEditCancelled.onEvent();
+    }
+
+    private void onEdit() {
+        if (!savePending) {
+            savePending = true;
+            if (autoSave) {
+                timer.schedule(AUTOSAVE_IN_MILLISECONDS);
+            }
+            enableSaveBtn(true);
+        }
+    }
+
+    private void reset() {
+        timer.cancel();
+        savePending = false;
+        saveAndCloseConfirmed = false;
+        enableSaveBtn(false);
+    }
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,10 @@
+package org.ourproject.kune.platf.client.ui.rte;
+
+import org.ourproject.kune.platf.client.actions.ActionAddCondition;
+
+public class RTEcanBeBasic implements ActionAddCondition<Object> {
+    public boolean mustBeAdded(Object param) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,31 +1,46 @@
 package org.ourproject.kune.platf.client.ui.rte;
 
 import org.ourproject.kune.platf.client.View;
+import org.ourproject.kune.platf.client.actions.ActionAddCondition;
 import org.ourproject.kune.platf.client.actions.ActionCollection;
 import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
-import org.ourproject.kune.platf.client.ui.rte.RTEditorPresenter.ActionPosition;
 
 import com.calclab.suco.client.events.Listener0;
 
 public interface RTEditor {
 
-    void addAction(ActionDescriptor<Object> action, ActionPosition position);
+    public final ActionToolbarPosition topbar = new ActionToolbarPosition("rte-topbar");
+    public final ActionToolbarPosition sndbar = new ActionToolbarPosition("rte-sndbar");;
 
-    void addActions(ActionCollection<Object> actions, ActionPosition position);
+    void addAction(ActionDescriptor<Object> action);
 
+    void addActions(ActionCollection<Object> actions);
+
     void addOnEditListener(Listener0 listener);
 
     void attach();
 
-    void editContent(String content);
+    ActionAddCondition<Object> canBeBasic();
 
+    ActionAddCondition<Object> canBeExtended();
+
     View getEditorArea();
 
+    String getHtml();
+
     ActionToolbar<Object> getSndBar();
 
+    String getText();
+
     ActionToolbar<Object> getTopBar();
 
+    void reset();
+
     void setExtended(boolean extended);
 
+    void setHtml(String html);
+
+    void setText(String text);
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -17,6 +17,7 @@
 import com.allen_sauer.gwt.log.client.Log;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.FocusListener;
 import com.google.gwt.user.client.ui.KeyboardListener;
@@ -24,6 +25,59 @@
 
 public class RTEditorPanel implements RTEditorView {
 
+    private class EventListener implements ClickListener, ChangeListener, KeyboardListener, FocusListener {
+
+        public void onChange(Widget sender) {
+            presenter.fireOnEdit();
+        }
+
+        public void onClick(Widget sender) {
+            if (sender == rta) {
+                // We use the RichTextArea's onKeyUp event to update the
+                // toolbar status. This will catch any cases where the user
+                // moves the cursor using the keyboard, or uses one of the
+                // browser's built-in keyboard shortcuts.
+                updateStatus();
+            }
+        }
+
+        public void onFocus(Widget sender) {
+            presenter.onEditorFocus();
+        }
+
+        public void onKeyDown(final Widget sender, final char keyCode, final int modifiers) {
+        }
+
+        public void onKeyPress(final Widget sender, final char keyCode, final int modifiers) {
+        }
+
+        public void onKeyUp(final Widget sender, final char keyCode, final int modifiers) {
+            if (sender == rta) {
+                // We use the RichTextArea's onKeyUp event to update the
+                // toolbar status.
+                // This will catch any cases where the user moves the cursor
+                // using the keyboard, or uses one of the browser's built-in
+                // keyboard shortcuts.
+
+                updateStatus();
+                fireEdit();
+                if (modifiers != 0) {
+                    Log.debug("RTE shortcut pressed (" + modifiers + ", " + keyCode + ")");
+                    ActionItem<Object> actionItem = shortcuts.get(new ActionShortcut(keyCode, modifiers));
+                    if (actionItem != null) {
+                        actionManager.doAction(actionItem);
+                        updateStatus();
+                    } else {
+                        Log.debug("...but not mapped to any action");
+                    }
+                }
+            }
+        }
+
+        public void onLostFocus(Widget sender) {
+
+        }
+    }
     private final I18nUITranslationService i18n;
     private final RichTextArea rta;
     private final BasicFormatter basic;
@@ -40,7 +94,10 @@
         basic = rta.getBasicFormatter();
         extended = rta.getExtendedFormatter();
         shortcuts = new HashMap<ActionShortcut, ActionItem<Object>>();
-        createListeners();
+        EventListener listener = new EventListener();
+        rta.addClickListener(listener);
+        rta.addKeyboardListener(listener);
+        rta.addFocusListener(listener);
         rta.setWidth("96%");
         rta.setHeight("100%");
     }
@@ -58,7 +115,7 @@
     public void addComment(String userName) {
         String time = i18n.formatDateWithLocale(new Date(), true);
         Element span = DOM.createSpan();
-        span.setInnerHTML("<em>" + i18n.t("type here") + "</em> -" + userName + " " + time);
+        span.setInnerHTML("<em>" + i18n.t("type your commment here") + "</em> -" + userName + " " + time);
         DOM.setElementProperty(span.<com.google.gwt.user.client.Element> cast(), "className", "k-rte-comment");
         insertHtml("&nbsp;" + span.getString() + "&nbsp;");
     }
@@ -95,10 +152,18 @@
         rta.setFocus(true);
     }
 
+    public String getHtml() {
+        return rta.getHTML();
+    }
+
     public Widget getRTE() {
         return rta;
     }
 
+    public String getText() {
+        return rta.getText();
+    }
+
     public void insertHorizontalRule() {
         extended.insertHorizontalRule();
     }
@@ -199,6 +264,14 @@
         basic.setForeColor(color);
     }
 
+    public void setHtml(String html) {
+        rta.setHTML(html);
+    }
+
+    public void setText(String text) {
+        rta.setText(text);
+    }
+
     public void toggleBold() {
         basic.toggleBold();
     }
@@ -235,59 +308,6 @@
         presenter.fireOnEdit();
     }
 
-    private void createListeners() {
-        rta.addFocusListener(new FocusListener() {
-            public void onFocus(Widget sender) {
-                presenter.onEditorFocus();
-            }
-
-            public void onLostFocus(Widget sender) {
-            }
-        });
-        rta.addClickListener(new ClickListener() {
-            public void onClick(Widget sender) {
-                if (sender == rta) {
-                    // We use the RichTextArea's onKeyUp event to update the
-                    // toolbar status. This will catch any cases where the user
-                    // moves the cursor using the keyboard, or uses one of the
-                    // browser's built-in keyboard shortcuts.
-                    updateStatus();
-                }
-            }
-        });
-        rta.addKeyboardListener(new KeyboardListener() {
-
-            public void onKeyDown(final Widget sender, final char keyCode, final int modifiers) {
-            }
-
-            public void onKeyPress(final Widget sender, final char keyCode, final int modifiers) {
-            }
-
-            public void onKeyUp(final Widget sender, final char keyCode, final int modifiers) {
-                if (sender == rta) {
-                    // We use the RichTextArea's onKeyUp event to update the
-                    // toolbar status.
-                    // This will catch any cases where the user moves the cursor
-                    // using the keyboard, or uses one of the browser's built-in
-                    // keyboard shortcuts.
-
-                    updateStatus();
-                    fireEdit();
-                    if (modifiers != 0) {
-                        Log.debug("RTE shortcut pressed (" + modifiers + ", " + keyCode + ")");
-                        ActionItem<Object> actionItem = shortcuts.get(new ActionShortcut(keyCode, modifiers));
-                        if (actionItem != null) {
-                            actionManager.doAction(actionItem);
-                            updateStatus();
-                        } else {
-                            Log.debug("...but not mapped to any action");
-                        }
-                    }
-                }
-            }
-        });
-    }
-
     /**
      * Updates the status of all the stateful buttons.
      */

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -11,14 +11,11 @@
 import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.ActionToolbarPushButtonDescriptor;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
-import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
 import org.ourproject.kune.platf.client.dto.AccessRolDTO;
 import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
 import org.ourproject.kune.platf.client.state.Session;
-import org.ourproject.kune.platf.client.ui.SimpleToolbar;
 import org.ourproject.kune.platf.client.ui.TextUtils;
 import org.ourproject.kune.platf.client.ui.noti.NotifyUser;
 import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette;
@@ -34,10 +31,6 @@
 
 public class RTEditorPresenter implements RTEditor {
 
-    public enum ActionPosition {
-        top, snd
-    };
-
     private final String fontNames[] = { "Times New Roman", "Arial", "Courier New", "Georgia", "Trebuchet", "Verdana" };
     private final String fontSizes[] = { "Extra small", "Very small", "Small", "Medium", "Large", "Very large",
             "Extra large" };
@@ -54,8 +47,7 @@
     private final AccessRolDTO accessRol;
     private final I18nTranslationService i18n;
     private final Session session;
-    private final ActionItemCollection<Object> topActions;
-    private final ActionItemCollection<Object> sndActions;
+    private final ActionItemCollection<Object> actions;
     private final RTEImgResources imgResources;
     private final RTEActionTopToolbar topBar;
     private final RTEActionSndToolbar sndBar;
@@ -67,6 +59,8 @@
     private final TextEditorInsertElement insertElement;
     private final ColorWebSafePalette palette;
     private final DeferredCommandWrapper deferred;
+    private final ActionAddCondition<Object> canBeBasic;
+    private final ActionAddCondition<Object> canBeExtended;
 
     public RTEditorPresenter(I18nTranslationService i18n, Session session, RTEActionTopToolbar topBar,
             RTEActionSndToolbar sndBar, RTEImgResources imgResources, TextEditorInsertElement textEditorInsertElement,
@@ -78,37 +72,31 @@
         this.insertElement = textEditorInsertElement;
         this.palette = palette;
         this.deferred = deferred;
-        styleToolbar(topBar);
         styleToolbar(sndBar);
         sndBar.attach();
         this.imgResources = imgResources;
         extended = true;
         accessRol = AccessRolDTO.Editor;
-        topActions = new ActionItemCollection<Object>();
-        sndActions = new ActionItemCollection<Object>();
+        actions = new ActionItemCollection<Object>();
         this.onEdit = new Event0("onRTEEdit");
+        canBeBasic = new ActionAddCondition<Object>() {
+            public boolean mustBeAdded(Object param) {
+                return view.canBeBasic();
+            }
+        };
+        canBeExtended = new ActionAddCondition<Object>() {
+            public boolean mustBeAdded(Object param) {
+                return isExtended();
+            }
+        };
     }
 
-    public void addAction(ActionDescriptor<Object> action, ActionPosition position) {
-        switch (position) {
-        case top:
-            topActions.add(withNoItem(action));
-            break;
-        case snd:
-            sndActions.add(withNoItem(action));
-            break;
-        }
+    public void addAction(ActionDescriptor<Object> action) {
+        actions.add(withNoItem(action));
     }
 
-    public void addActions(ActionCollection<Object> actions, ActionPosition position) {
-        switch (position) {
-        case top:
-            topActions.addAll(withNoItem(actions));
-            break;
-        case snd:
-            sndActions.addAll(withNoItem(actions));
-            break;
-        }
+    public void addActions(ActionCollection<Object> actioncollection) {
+        actions.addAll(withNoItem(actioncollection));
     }
 
     public void addOnEditListener(final Listener0 listener) {
@@ -122,15 +110,19 @@
     public void attach() {
         topBar.clear();
         sndBar.clear();
-        view.addActions(topActions);
-        view.addActions(sndActions);
-        topBar.addActions(topActions);
-        sndBar.addActions(sndActions);
+        topBar.addActions(actions, topbar);
+        sndBar.addActions(actions, sndbar);
+        view.addActions(actions);
     }
 
-    public void editContent(String content) {
+    public ActionAddCondition<Object> canBeBasic() {
+        return canBeBasic();
     }
 
+    public ActionAddCondition<Object> canBeExtended() {
+        return canBeExtended();
+    }
+
     public void fireOnEdit() {
         onEdit.fire();
     }
@@ -139,10 +131,18 @@
         return view;
     }
 
+    public String getHtml() {
+        return view.getHtml();
+    }
+
     public ActionToolbar<Object> getSndBar() {
         return sndBar;
     }
 
+    public String getText() {
+        return view.getText();
+    }
+
     public ActionToolbar<Object> getTopBar() {
         return topBar;
     }
@@ -158,10 +158,25 @@
         palette.hide();
     }
 
+    public void reset() {
+        topBar.clear();
+        sndBar.clear();
+    }
+
     public void setExtended(boolean extended) {
         this.extended = extended;
     }
 
+    public void setHtml(String html) {
+        view.setHtml(html);
+        view.focus();
+    }
+
+    public void setText(String text) {
+        view.setText(text);
+        view.focus();
+    }
+
     public void updateStatus() {
         if (view.canBeBasic()) {
             sndBar.setPushButtonPressed(bold, view.isBold());
@@ -174,19 +189,8 @@
     }
 
     private void createBasicActions() {
-        ActionAddCondition<Object> canBeBasic = new ActionAddCondition<Object>() {
-            public boolean mustBeAdded(Object param) {
-                return view.canBeBasic();
-            }
-        };
-        ActionAddCondition<Object> canBeExtended = new ActionAddCondition<Object>() {
-            public boolean mustBeAdded(Object param) {
-                return isExtended();
-            }
-        };
-
-        ActionToolbarMenuDescriptor<Object> selectAll = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> selectAll = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.selectAll();
                     }
@@ -199,9 +203,10 @@
         selectAll.setTopSeparator(true);
         selectAll.setBottomSeparator(true);
 
-        bold = new ActionToolbarPushButtonDescriptor<Object>(accessRol, ActionToolbarPosition.topbar, new Listener0() {
+        bold = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() {
             public void onEvent() {
                 view.toggleBold();
+                fireOnEdit();
             }
         });
         bold.setIconCls(getCssName(imgResources.bold()));
@@ -209,33 +214,34 @@
         bold.setShortcut(new ActionShortcut(true, 'B'));
         bold.setAddCondition(canBeBasic);
 
-        italic = new ActionToolbarPushButtonDescriptor<Object>(accessRol, ActionToolbarPosition.topbar,
-                new Listener0() {
-                    public void onEvent() {
-                        view.toggleItalic();
-                    }
-                });
+        italic = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() {
+            public void onEvent() {
+                view.toggleItalic();
+                fireOnEdit();
+            }
+        });
         italic.setIconCls(getCssName(imgResources.italic()));
         italic.setToolTip(i18n.t("Italic"));
         italic.setShortcut(new ActionShortcut(true, 'I'));
         italic.setAddCondition(canBeBasic);
         italic.setAddCondition(canBeBasic);
 
-        underline = new ActionToolbarPushButtonDescriptor<Object>(accessRol, ActionToolbarPosition.topbar,
-                new Listener0() {
-                    public void onEvent() {
-                        view.toggleUnderline();
-                    }
-                });
+        underline = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() {
+            public void onEvent() {
+                view.toggleUnderline();
+                fireOnEdit();
+            }
+        });
         underline.setIconCls(getCssName(imgResources.underline()));
         underline.setToolTip(i18n.t("Underline"));
         underline.setShortcut(new ActionShortcut(true, 'U'));
         underline.setAddCondition(canBeBasic);
 
-        ActionToolbarMenuDescriptor<Object> subscript = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> subscript = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.toggleSubscript();
+                        fireOnEdit();
                     }
                 });
         subscript.setParentMenuTitle(i18n.t(FORMAT_MENU));
@@ -244,10 +250,11 @@
         subscript.setShortcut(new ActionShortcut(true, '0'));
         subscript.setAddCondition(canBeBasic);
 
-        ActionToolbarMenuDescriptor<Object> superscript = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> superscript = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.toggleSuperscript();
+                        fireOnEdit();
                     }
                 });
         superscript.setParentMenuTitle(i18n.t(FORMAT_MENU));
@@ -257,9 +264,10 @@
         superscript.setAddCondition(canBeBasic);
 
         ActionToolbarButtonDescriptor<Object> justifyLeft = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+                sndbar, new Listener0() {
                     public void onEvent() {
                         view.justifyLeft();
+                        fireOnEdit();
                     }
                 });
         justifyLeft.setIconCls(getCssName(imgResources.alignleft()));
@@ -268,9 +276,10 @@
         justifyLeft.setAddCondition(canBeBasic);
 
         ActionToolbarButtonDescriptor<Object> justifyCentre = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+                sndbar, new Listener0() {
                     public void onEvent() {
                         view.justifyCenter();
+                        fireOnEdit();
                     }
                 });
         justifyCentre.setIconCls(getCssName(imgResources.centerpara()));
@@ -279,21 +288,23 @@
         justifyCentre.setAddCondition(canBeBasic);
 
         ActionToolbarButtonDescriptor<Object> justifyRight = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+                sndbar, new Listener0() {
                     public void onEvent() {
                         view.justifyRight();
+                        fireOnEdit();
                     }
                 });
         justifyRight.setIconCls(getCssName(imgResources.alignright()));
         justifyRight.setToolTip(i18n.t("Right Justify"));
         justifyRight.setShortcut(new ActionShortcut(true, 'R'));
-        justifyRight.setRightSeparator(ActionToolbarButtonSeparator.spacer);
+        // justifyRight.setRightSeparator(ActionToolbarButtonSeparator.spacer);
         justifyRight.setAddCondition(canBeBasic);
 
-        ActionToolbarMenuDescriptor<Object> undo = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> undo = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.undo();
+                        fireOnEdit();
                     }
                 });
         undo.setShortcut(new ActionShortcut(true, 'Z'));
@@ -302,10 +313,11 @@
         undo.setAddCondition(canBeExtended);
         undo.setIconCls(getCssName(imgResources.undo()));
 
-        ActionToolbarMenuDescriptor<Object> redo = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> redo = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.redo();
+                        fireOnEdit();
                     }
                 });
         redo.setShortcut(new ActionShortcut(true, 'Y'));
@@ -315,20 +327,22 @@
         redo.setBottomSeparator(true);
         redo.setIconCls(getCssName(imgResources.redo()));
 
-        ActionToolbarButtonDescriptor<Object> undoBtn = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarButtonDescriptor<Object> undoBtn = new ActionToolbarButtonDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.undo();
+                        fireOnEdit();
                     }
                 });
         undoBtn.setToolTip(i18n.t("Undo"));
         undoBtn.setAddCondition(canBeExtended);
         undoBtn.setIconCls(getCssName(imgResources.undo()));
 
-        ActionToolbarButtonDescriptor<Object> redoBtn = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarButtonDescriptor<Object> redoBtn = new ActionToolbarButtonDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.redo();
+                        fireOnEdit();
                     }
                 });
         redoBtn.setToolTip(i18n.t("Redo"));
@@ -336,8 +350,8 @@
         redoBtn.setIconCls(getCssName(imgResources.redo()));
         redoBtn.setRightSeparator(ActionToolbarButtonSeparator.separator);
 
-        ActionToolbarMenuDescriptor<Object> copy = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> copy = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.copy();
                     }
@@ -348,10 +362,11 @@
         copy.setAddCondition(canBeExtended);
         copy.setIconCls(getCssName(imgResources.copy()));
 
-        ActionToolbarMenuDescriptor<Object> cut = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> cut = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.cut();
+                        fireOnEdit();
                     }
                 });
         cut.setShortcut(new ActionShortcut(true, 'X'));
@@ -360,10 +375,11 @@
         cut.setAddCondition(canBeExtended);
         cut.setIconCls(getCssName(imgResources.cut()));
 
-        ActionToolbarMenuDescriptor<Object> paste = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> paste = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.paste();
+                        fireOnEdit();
                     }
                 });
         paste.setShortcut(new ActionShortcut(true, 'V'));
@@ -372,8 +388,8 @@
         paste.setAddCondition(canBeExtended);
         paste.setIconCls(getCssName(imgResources.paste()));
 
-        ActionToolbarMenuDescriptor<Object> editHtml = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> editHtml = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         NotifyUser.info("In dev");
                     }
@@ -383,11 +399,14 @@
         editHtml.setParentMenuTitle(i18n.t(EDIT_MENU));
         editHtml.setAddCondition(canBeExtended);
 
-        ActionToolbarMenuDescriptor<Object> comment = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> comment = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.focus();
-                        view.addComment(session.getCurrentUser().getShortName());
+                        String author = session.isLogged() ? session.getCurrentUser().getShortName()
+                                : i18n.t("anonymous user");
+                        view.addComment(author);
+                        fireOnEdit();
                     }
                 });
         comment.setEnableCondition(new ActionEnableCondition<Object>() {
@@ -401,45 +420,48 @@
         comment.setEnableCondition(isInsertHtmlSupported());
         comment.setAddCondition(canBeExtended);
 
-        ActionToolbarMenuDescriptor<Object> hr = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarMenuDescriptor<Object> hr = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
+                new Listener0() {
                     public void onEvent() {
                         view.focus();
                         view.insertHorizontalRule();
+                        fireOnEdit();
                     }
                 });
         hr.setTextDescription(i18n.t("Horizontal line"));
+        hr.setShortcut(new ActionShortcut(true, true, ' ', "Space"));
         hr.setIconCls(getCssName(imgResources.hfixedline()));
         hr.setParentMenuTitle(i18n.t(INSERT_MENU));
         hr.setAddCondition(canBeExtended);
 
-        ActionToolbarButtonDescriptor<Object> hrButton = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarButtonDescriptor<Object> hrButton = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar,
+                new Listener0() {
                     public void onEvent() {
                         view.focus();
                         view.insertHorizontalRule();
+                        fireOnEdit();
                     }
                 });
         hrButton.setIconCls(getCssName(imgResources.hfixedline()));
         hrButton.setToolTip(i18n.t("Horizontal line"));
-        hrButton.setShortcut(new ActionShortcut(true, true, ' ', "Space"));
         hrButton.setAddCondition(canBeExtended);
 
-        strikethrough = new ActionToolbarPushButtonDescriptor<Object>(accessRol, ActionToolbarPosition.topbar,
-                new Listener0() {
-                    public void onEvent() {
-                        view.toggleStrikethrough();
-                    }
-                });
+        strikethrough = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() {
+            public void onEvent() {
+                view.toggleStrikethrough();
+                fireOnEdit();
+            }
+        });
         strikethrough.setIconCls(getCssName(imgResources.strikeout()));
         strikethrough.setToolTip(i18n.t("Strikethrough"));
-        strikethrough.setRightSeparator(ActionToolbarButtonSeparator.separator);
+        // strikethrough.setRightSeparator(ActionToolbarButtonSeparator.separator);
         strikethrough.setAddCondition(canBeExtended);
 
         ActionToolbarButtonDescriptor<Object> decreaseIndent = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+                sndbar, new Listener0() {
                     public void onEvent() {
                         view.leftIndent();
+                        fireOnEdit();
                     }
                 });
         decreaseIndent.setIconCls(getCssName(imgResources.decrementindent()));
@@ -447,20 +469,22 @@
         decreaseIndent.setAddCondition(canBeExtended);
 
         ActionToolbarButtonDescriptor<Object> increaseIndent = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+                sndbar, new Listener0() {
                     public void onEvent() {
                         view.rightIndent();
+                        fireOnEdit();
                     }
                 });
         increaseIndent.setIconCls(getCssName(imgResources.incrementindent()));
         increaseIndent.setToolTip(i18n.t("Increase Indent"));
-        increaseIndent.setRightSeparator(ActionToolbarButtonSeparator.spacer);
+        // increaseIndent.setRightSeparator(ActionToolbarButtonSeparator.spacer);
         increaseIndent.setAddCondition(canBeExtended);
 
-        ActionToolbarButtonDescriptor<Object> ol = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarButtonDescriptor<Object> ol = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar,
+                new Listener0() {
                     public void onEvent() {
                         view.insertOrderedList();
+                        fireOnEdit();
                     }
                 });
         ol.setIconCls(getCssName(imgResources.defaultnumbering()));
@@ -468,20 +492,21 @@
         ol.setShortcut(new ActionShortcut(true, '7'));
         ol.setAddCondition(canBeExtended);
 
-        ActionToolbarButtonDescriptor<Object> ul = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarButtonDescriptor<Object> ul = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar,
+                new Listener0() {
                     public void onEvent() {
                         view.insertUnorderedList();
+                        fireOnEdit();
                     }
                 });
         ul.setIconCls(getCssName(imgResources.defaultbullet()));
         ul.setToolTip(i18n.t("Bullet List"));
         ul.setShortcut(new ActionShortcut(true, '8'));
-        ul.setRightSeparator(ActionToolbarButtonSeparator.separator);
+        // ul.setRightSeparator(ActionToolbarButtonSeparator.separator);
         ul.setAddCondition(canBeExtended);
 
-        ActionToolbarButtonDescriptor<Object> img = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarButtonDescriptor<Object> img = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar,
+                new Listener0() {
                     public void onEvent() {
                         NotifyUser.info(TextUtils.IN_DEVELOPMENT);
                     }
@@ -490,8 +515,8 @@
         img.setToolTip(i18n.t("Insert Image"));
         img.setAddCondition(canBeExtended);
 
-        ActionToolbarButtonDescriptor<Object> createLink = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarButtonDescriptor<Object> createLink = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar,
+                new Listener0() {
                     public void onEvent() {
                         deferred.addCommand(new Listener0() {
                             public void onEvent() {
@@ -507,13 +532,15 @@
         insertElement.addOnCreateLink(new Listener2<String, String>() {
             public void onEvent(String name, String url) {
                 view.createLink(url);
+                fireOnEdit();
             }
         });
 
-        ActionToolbarButtonDescriptor<Object> removeLink = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        ActionToolbarButtonDescriptor<Object> removeLink = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar,
+                new Listener0() {
                     public void onEvent() {
                         view.unlink();
+                        fireOnEdit();
                     }
                 });
         removeLink.setIconCls(getCssName(imgResources.linkbreak()));
@@ -521,41 +548,44 @@
         removeLink.setShortcut(new ActionShortcut(true, true, 'K'));
         removeLink.setAddCondition(canBeExtended);
 
-        ActionToolbarButtonDescriptor<Object> removeFormat = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        final ActionToolbarButtonDescriptor<Object> removeFormat = new ActionToolbarButtonDescriptor<Object>(accessRol,
+                sndbar, new Listener0() {
                     public void onEvent() {
                         view.removeFormat();
+                        fireOnEdit();
                     }
                 });
         removeFormat.setIconCls(getCssName(imgResources.removeFormat()));
         removeFormat.setToolTip(i18n.t("Clear Formatting"));
         removeFormat.setShortcut(new ActionShortcut(true, ' ', "Space"));
         removeFormat.setAddCondition(canBeExtended);
-        removeFormat.setRightSeparator(ActionToolbarButtonSeparator.separator);
+        // removeFormat.setRightSeparator(ActionToolbarButtonSeparator.separator);
 
-        final ActionToolbarButtonDescriptor<Object> insertTable = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        final ActionToolbarMenuDescriptor<Object> insertTable = new ActionToolbarMenuDescriptor<Object>(accessRol,
+                topbar, new Listener0() {
                     public void onEvent() {
                         view.insertHtml("<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" width=\"100%\">\n"
                                 + "<tbody>\n" + "<tr>\n" + "<td width=\"50%\"><br>\n" + "</td>\n"
                                 + "<td width=\"50%\"><br>\n" + "</td>\n" + "</tr>\n" + "<tr>\n"
                                 + "<td width=\"50%\"><br>\n" + "</td>\n" + "<td width=\"50%\"><br>\n" + "</td>\n"
                                 + "</tr>\n</tbody>\n</table>");
+                        fireOnEdit();
                     }
                 });
         insertTable.setIconCls(getCssName(imgResources.inserttable()));
-        insertTable.setToolTip(i18n.t("Insert Table ..."));
+        insertTable.setTextDescription(i18n.t("Insert Table ..."));
         insertTable.setAddCondition(canBeExtended);
-        insertTable.setRightSeparator(ActionToolbarButtonSeparator.separator);
+        insertTable.setParentMenuTitle(i18n.t(INSERT_MENU));
 
         final ActionToolbarButtonDescriptor<Object> fontColor = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+                sndbar, new Listener0() {
                     public void onEvent() {
-                        palette.show(getActionLeftPosition(sndBar, insertTable), getActionTopPosition(sndBar,
-                                insertTable), new Listener<String>() {
+                        palette.show(getActionLeftPosition(sndBar, removeFormat), getActionTopPosition(sndBar,
+                                removeFormat), new Listener<String>() {
                             public void onEvent(String color) {
                                 palette.hide();
                                 view.setForeColor(color);
+                                fireOnEdit();
                             }
                         });
                     }
@@ -565,13 +595,14 @@
         fontColor.setAddCondition(canBeBasic);
 
         ActionToolbarButtonDescriptor<Object> backgroundColor = new ActionToolbarButtonDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+                sndbar, new Listener0() {
                     public void onEvent() {
                         palette.show(getActionLeftPosition(sndBar, fontColor), getActionTopPosition(sndBar, fontColor),
                                 new Listener<String>() {
                                     public void onEvent(String color) {
                                         palette.hide();
                                         view.setBackColor(color);
+                                        fireOnEdit();
                                     }
                                 });
                     }
@@ -580,56 +611,56 @@
         backgroundColor.setToolTip(i18n.t("Text Background Colour"));
         backgroundColor.setAddCondition(canBeBasic);
 
-        sndActions.add(withNoItem(undoBtn));
-        sndActions.add(withNoItem(redoBtn));
-        sndActions.add(withNoItem(bold));
-        sndActions.add(withNoItem(italic));
-        sndActions.add(withNoItem(underline));
-        sndActions.add(withNoItem(strikethrough));
+        actions.add(withNoItem(bold));
+        actions.add(withNoItem(italic));
+        actions.add(withNoItem(underline));
+        actions.add(withNoItem(strikethrough));
 
-        sndActions.add(withNoItem(justifyLeft));
-        sndActions.add(withNoItem(justifyCentre));
-        sndActions.add(withNoItem(justifyRight));
+        actions.add(withNoItem(justifyLeft));
+        actions.add(withNoItem(justifyCentre));
+        actions.add(withNoItem(justifyRight));
 
-        topActions.add(withNoItem(undo));
-        topActions.add(withNoItem(redo));
-        topActions.add(withNoItem(copy));
-        topActions.add(withNoItem(cut));
-        topActions.add(withNoItem(paste));
-        topActions.add(withNoItem(selectAll));
-        topActions.add(withNoItem(editHtml));
-        topActions.add(withNoItem(hr));
-        topActions.add(withNoItem(subscript));
-        topActions.add(withNoItem(superscript));
-        sndActions.add(withNoItem(decreaseIndent));
-        sndActions.add(withNoItem(increaseIndent));
-        sndActions.add(withNoItem(ol));
-        sndActions.add(withNoItem(ul));
-        sndActions.add(withNoItem(removeFormat));
-        sndActions.add(withNoItem(hrButton));
-        sndActions.add(withNoItem(img));
-        sndActions.add(withNoItem(createLink));
-        sndActions.add(withNoItem(removeLink));
-        sndActions.add(withNoItem(insertTable));
-        topActions.add(withNoItem(comment));
+        actions.add(withNoItem(undo));
+        actions.add(withNoItem(redo));
+        actions.add(withNoItem(copy));
+        actions.add(withNoItem(cut));
+        actions.add(withNoItem(paste));
+        actions.add(withNoItem(selectAll));
+        actions.add(withNoItem(editHtml));
+        actions.add(withNoItem(hr));
+        actions.add(withNoItem(subscript));
+        actions.add(withNoItem(superscript));
+        actions.add(withNoItem(decreaseIndent));
+        actions.add(withNoItem(increaseIndent));
+        actions.add(withNoItem(ol));
+        actions.add(withNoItem(ul));
+        actions.add(withNoItem(removeFormat));
+        // topActions.add(withNoItem(hrButton));
+        actions.add(withNoItem(img));
+        actions.add(withNoItem(createLink));
+        actions.add(withNoItem(removeLink));
+        actions.add(withNoItem(insertTable));
+        actions.add(withNoItem(comment));
+        actions.add(withNoItem(undoBtn));
+        actions.add(withNoItem(redoBtn));
 
         for (String fontName : this.fontNames) {
             ActionToolbarMenuDescriptor<Object> fontNameAction = createFontNameAction(canBeBasic, fontName);
-            sndActions.add(withNoItem(fontNameAction));
+            actions.add(withNoItem(fontNameAction));
         }
         for (int fontSize = 0; fontSize < fontSizes.length; fontSize++) {
             ActionToolbarMenuDescriptor<Object> fontSizeAction = createFontSizeAction(canBeBasic, fontSize,
                     fontSizes[fontSize]);
-            sndActions.add(withNoItem(fontSizeAction));
+            actions.add(withNoItem(fontSizeAction));
         }
-        sndActions.add(withNoItem(fontColor));
-        sndActions.add(withNoItem(backgroundColor));
+        actions.add(withNoItem(fontColor));
+        actions.add(withNoItem(backgroundColor));
     }
 
     private ActionToolbarMenuDescriptor<Object> createFontNameAction(ActionAddCondition<Object> canBeBasic,
             final String fontName) {
-        final ActionToolbarMenuDescriptor<Object> font = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        final ActionToolbarMenuDescriptor<Object> font = new ActionToolbarMenuDescriptor<Object>(accessRol, sndbar,
+                new Listener0() {
                     public void onEvent() {
                         view.setFontName(fontName);
                         fireOnEdit();
@@ -644,8 +675,8 @@
 
     private ActionToolbarMenuDescriptor<Object> createFontSizeAction(ActionAddCondition<Object> canBeBasic,
             final int fontSize, String fontSizeName) {
-        final ActionToolbarMenuDescriptor<Object> font = new ActionToolbarMenuDescriptor<Object>(accessRol,
-                ActionToolbarPosition.topbar, new Listener0() {
+        final ActionToolbarMenuDescriptor<Object> font = new ActionToolbarMenuDescriptor<Object>(accessRol, sndbar,
+                new Listener0() {
                     public void onEvent() {
                         view.setFontSize(fontSizesConstants[fontSize]);
                         fireOnEdit();
@@ -667,7 +698,7 @@
     }
 
     private String getCssName(ImageResource imageResource) {
-        return "k-rte-" + imageResource.getName();
+        return RTEImgResources.SUFFIX + imageResource.getName();
     }
 
     private boolean isExtended() {
@@ -682,11 +713,8 @@
         };
     }
 
-    private void styleToolbar(ActionToolbar<Object> topBar) {
-        SimpleToolbar toolbar = ((ActionToolbarPanel<Object>) topBar.getView()).getToolbar(ActionToolbarPosition.topbar);
-        toolbar.setStyleName("x-toolbar");
-        toolbar.addStyleName("x-panel");
-        toolbar.addStyleName("k-toolbar-bottom-line");
+    private void styleToolbar(ActionToolbar<Object> bar) {
+        bar.setNormalStyle();
     }
 
     private ActionItemCollection<Object> withNoItem(ActionCollection<Object> actions) {

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -6,7 +6,7 @@
 
 public interface RTEditorView extends View {
 
-    void addActions(ActionItemCollection<Object> extendedTopActions);
+    void addActions(ActionItemCollection<Object> actions);
 
     void addComment(String userName);
 
@@ -26,6 +26,10 @@
 
     void focus();
 
+    String getHtml();
+
+    String getText();
+
     void insertHorizontalRule();
 
     void insertHtml(String html);
@@ -76,6 +80,10 @@
 
     void setForeColor(String color);
 
+    void setHtml(String html);
+
+    void setText(String text);
+
     void toggleBold();
 
     void toggleItalic();

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/TestRTEDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/TestRTEDialog.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/TestRTEDialog.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,6 +1,5 @@
 package org.ourproject.kune.platf.client.ui.rte;
 
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
 import org.ourproject.kune.platf.client.ui.dialogs.BasicDialog;
 
@@ -10,19 +9,20 @@
 
 public class TestRTEDialog {
 
-    private final RTEditor editor;
+    private final RTESavingEditor editor;
     private final BasicDialog dialog;
 
-    public TestRTEDialog(RTEditor editor) {
+    public TestRTEDialog(RTESavingEditor editor) {
         this.editor = editor;
         dialog = new BasicDialog("Testing RTE", false, false, 650, 200);
         final VerticalPanel vp = new VerticalPanel();
 
-        vp.add(((ActionToolbarPanel<Object>) editor.getTopBar().getView()).getToolbar(ActionToolbarPosition.topbar));
-        vp.add(((ActionToolbarPanel<Object>) editor.getSndBar().getView()).getToolbar(ActionToolbarPosition.topbar));
-        final RTEditorPanel editorPanel = (RTEditorPanel) editor.getEditorArea();
+        RTEditor basicEditor = editor.getBasicEditor();
+        vp.add(((ActionToolbarPanel<Object>) basicEditor.getTopBar().getView()).getToolbar());
+        vp.add(((ActionToolbarPanel<Object>) basicEditor.getSndBar().getView()).getToolbar());
+        final RTEditorPanel editorPanel = (RTEditorPanel) basicEditor.getEditorArea();
         vp.add(editorPanel.getRTE());
-        editor.setExtended(true);
+        basicEditor.setExtended(true);
         vp.setWidth("100%");
         dialog.add(vp);
         dialog.addListener(new WindowListenerAdapter() {
@@ -36,11 +36,11 @@
     }
 
     public void setExtended(boolean extended) {
-        editor.setExtended(extended);
+        editor.getBasicEditor().setExtended(extended);
     }
 
     public void show() {
-        editor.attach();
+        editor.getBasicEditor().attach();
         dialog.show();
     }
 }

Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplIE6.java (from rev 1054, trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java	2009-03-02 19:32:02 UTC (rev 1054)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplIE6.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package org.ourproject.kune.platf.client.ui.rte;
+
+import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplIE6;
+
+/**
+ * A wrapper used to inject css into RTA. As published in:
+ * 
+ * http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/
+ * f64c0024d8676a66
+ * /d5f26a54145fc5d4?lnk=st&q=richtextarea+style#d5f26a54145fc5d4
+ * 
+ * FIXME: Only for IE and Mozilla
+ * 
+ */
+public class WrappedRichTextAreaImplIE6 extends RichTextAreaImplIE6 {
+
+    @Override
+    public native void initElement() /*-{
+       var _this = this;
+       _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
+
+       setTimeout(function() {
+         if (_this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing == false) {
+           return;
+         }
+
+         // Attempt to set the iframe document's body to 'contentEditable' mode.
+         // There's no way to know when the body will actually be available, so
+         // keep trying every so often until it is.
+         // Note: The body seems to be missing only rarely, so please don't remove
+         // this retry loop just because it's hard to reproduce.
+         var elem = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+         var doc = elem.contentWindow.document;
+         if (!doc.body) {
+             // Retry in 50 ms. Faster would run the risk of pegging the CPU. Slower
+             // would increase the probability of a user-visible delay.
+           setTimeout(arguments.callee, 50);
+           return;
+         }
+         var ct = "<html><head><style>@import url('" + $wnd.location.protocol + $wnd.location.host + $wnd.location.pathname + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
+         doc.write( ct );
+         doc.body.contentEditable = true;
+
+         // Send notification that the iframe has reached design mode.
+         _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+       }, 1);
+     }-*/;
+}

Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplMozilla.java (from rev 1060, trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java	2009-03-06 01:07:03 UTC (rev 1060)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplMozilla.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,76 @@
+/*
+ *
+ * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package org.ourproject.kune.platf.client.ui.rte;
+
+import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplMozilla;
+
+/**
+ * A wrapper used to inject css into RTA. As published in:
+ * 
+ * http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/
+ * f64c0024d8676a66
+ * /d5f26a54145fc5d4?lnk=st&q=richtextarea+style#d5f26a54145fc5d4
+ * 
+ * FIXME: Only for IE and Mozilla
+ * 
+ */
+public class WrappedRichTextAreaImplMozilla extends RichTextAreaImplMozilla {
+
+    @Override
+    public native void initElement() /*-{
+           // Mozilla doesn't allow designMode to be set reliably until the iframe is
+           // fully loaded.
+           var _this = this;
+           var iframe = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+           _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
+
+           iframe.onload = function() {
+             // Some Mozillae have the nasty habit of calling onload again when you set
+             // designMode, so let's avoid doing it more than once.
+             iframe.onload = null;
+
+             // patch ccs inject:
+
+             var doc = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document;
+             head=doc.getElementsByTagName('head')[0];
+             link=document.createElement('link');
+             link.setAttribute('rel',"stylesheet");
+             link.setAttribute('type',"text/css");
+             link.setAttribute('href',$wnd.location.protocol + $wnd.location.host + $wnd.location.pathname + "css/richtext.css" );
+             head.appendChild(link);
+
+              // -- patch
+
+              // Send notification that the iframe has finished loading.
+              _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+
+              // Don't set designMode until the RTA actually gets focused. This is
+              // necessary because editing won't work on Mozilla if the iframe is
+              // *hidden, but attached*. Waiting for focus gets around this issue.
+              //
+              // Note: This onfocus will not conflict with the addEventListener('focus',
+              // ...) // in RichTextAreaImplStandard.
+              iframe.contentWindow.onfocus = function() {
+                iframe.contentWindow.onfocus = null;
+                iframe.contentWindow.document.designMode = 'On';
+              };
+            };
+           }-*/;
+}

Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplOpera.java (from rev 1060, trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java	2009-03-06 01:07:03 UTC (rev 1060)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplOpera.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,48 @@
+/*
+ *
+ * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ \*/
+package org.ourproject.kune.platf.client.ui.rte;
+
+import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplOpera;
+
+public class WrappedRichTextAreaImplOpera extends RichTextAreaImplOpera {
+
+    @Override
+    public native void initElement() /*-{
+         // Most browsers don't like setting designMode until slightly _after_
+         // the iframe becomes attached to the DOM. Any non-zero timeout will do
+         // just fine.
+         var _this = this;
+         _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
+         setTimeout(function() {
+           // Turn on design mode.
+           _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.designMode = 'On';
+                // patch css inject:
+                var elem = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+                var doc = elem.contentWindow.document;
+                var ct = "<html><head><style>@import url('" +$wnd.location.protocol + $wnd.location.host + $wnd.location.pathname + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
+                doc.write( ct );
+                // -- patch
+
+           // Send notification that the iframe has reached design mode.
+           _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+         }, 1);
+       }-*/;
+
+}

Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplSafari.java (from rev 1060, trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java	2009-03-06 01:07:03 UTC (rev 1060)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/WrappedRichTextAreaImplSafari.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,49 @@
+/*
+ *
+ * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ \*/
+package org.ourproject.kune.platf.client.ui.rte;
+
+import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplSafari;
+
+public class WrappedRichTextAreaImplSafari extends RichTextAreaImplSafari {
+
+    @Override
+    public native void initElement() /*-{
+               // Most browsers don't like setting designMode until slightly _after_
+               // the iframe becomes attached to the DOM. Any non-zero timeout will do
+               // just fine.
+               var _this = this;
+               _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
+               setTimeout(function() {
+                 // Turn on design mode.
+                 _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.designMode = 'On';
+
+                // patch css inject:
+                var elem = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
+                var doc = elem.contentWindow.document;
+                var ct = "<html><head><style>@import url('" +$wnd.location.protocol + $wnd.location.host + $wnd.location.pathname + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
+                doc.write( ct );
+                // -- patch
+
+                 // Send notification that the iframe has reached design mode.
+                 _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
+               }, 1);
+             }-*/;
+
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/RTEImgResources.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/RTEImgResources.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/RTEImgResources.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -6,6 +6,8 @@
 
 public interface RTEImgResources extends ImmutableResourceBundle {
 
+    String SUFFIX = "k-rte-";
+
     @Resource("alignleft.png")
     public ImageResource alignleft();
 

Added: trunk/src/main/java/org/ourproject/kune/platf/client/utils/TimerWrapper.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/utils/TimerWrapper.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/utils/TimerWrapper.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,33 @@
+package org.ourproject.kune.platf.client.utils;
+
+import com.calclab.suco.client.events.Listener0;
+import com.google.gwt.user.client.Timer;
+
+public class TimerWrapper {
+    private final Timer timer;
+
+    public TimerWrapper(final Listener0 onTime) {
+        timer = new Timer() {
+            @Override
+            public void run() {
+                onTime.onEvent();
+            }
+        };
+    }
+
+    public void cancel() {
+        timer.cancel();
+    }
+
+    public void run() {
+        timer.run();
+    }
+
+    public void schedule(final int delayMillis) {
+        timer.schedule(delayMillis);
+    }
+
+    public void scheduleRepeating(final int delayMillis) {
+        timer.scheduleRepeating(delayMillis);
+    }
+}

Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientActions.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -38,7 +38,7 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
 import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
 import org.ourproject.kune.workspace.client.upload.FileUploader;
@@ -53,7 +53,7 @@
             final Provider<GroupServiceAsync> groupServiceProvider, final Provider<FileUploader> fileUploaderProvider,
             final ContentActionRegistry contentActionRegistry, final ContextActionRegistry contextActionRegistry,
             final Provider<FileDownloadUtils> fileDownloadProvider, final EntityHeader entityLogo,
-            final Provider<TextEditor> textEditorProvider, final KuneErrorHandler errorHandler,
+            final Provider<ContentEditor> textEditorProvider, final KuneErrorHandler errorHandler,
             final WikiViewer documentViewer, final Provider<ContextPropEditor> contextProvEditorProvider,
             final SitePublicSpaceLink publicLink) {
         super(session, stateManager, i18n, errorHandler, deferredCommandWrapper, groupServiceProvider,

Modified: trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/wiki/client/WikiClientModule.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -45,7 +45,7 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
 import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
@@ -78,7 +78,7 @@
                         $(Session.class), $(StateManager.class), $(DeferredCommandWrapper.class),
                         $$(ContentServiceAsync.class), $$(GroupServiceAsync.class), $$(FileUploader.class),
                         $(ContentActionRegistry.class), $(ContextActionRegistry.class), $$(FileDownloadUtils.class),
-                        $(EntityHeader.class), $$(TextEditor.class), $(KuneErrorHandler.class), $(WikiViewer.class),
+                        $(EntityHeader.class), $$(ContentEditor.class), $(KuneErrorHandler.class), $(WikiViewer.class),
                         $$(ContextPropEditor.class), $(SitePublicSpaceLink.class));
             }
         });

Modified: trunk/src/main/java/org/ourproject/kune/workspace/Kune-Workspace.gwt.xml
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/Kune-Workspace.gwt.xml	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/Kune-Workspace.gwt.xml	2009-03-10 00:05:50 UTC (rev 1064)
@@ -2,47 +2,5 @@
 <module>
     <inherits name='org.ourproject.kune.platf.Kune-Platform' />
     <inherits name="com.google.gwt.core.Core" />
-    <inherits name="com.google.gwt.user.UserAgent" />
-    <!-- RTE css inject -->
-    <!-- See gwt-user: com/google/gwt/user/RichText.gwt.xml -->
 
-    <!-- IE-specific implementation -->
-    <replace-with
-        class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplIE6">
-        <when-type-is
-            class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
-        <when-property-is name="user.agent" value="ie6" />
-    </replace-with>
-
-    <!-- Mozilla-specific implementation -->
-    <replace-with
-        class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplMozilla">
-        <when-type-is
-            class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
-        <any>
-            <when-property-is name="user.agent" value="gecko1_8" />
-            <when-property-is name="user.agent" value="gecko" />
-        </any>
-    </replace-with>
-
-    <!-- Safari-specific implementation -->
-    <replace-with
-        class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplSafari">
-        <when-type-is
-            class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
-        <any>
-            <when-property-is name="user.agent" value="safari" />
-        </any>
-    </replace-with>
-
-    <!-- Opera-specific implementation -->
-    <replace-with
-        class="org.ourproject.kune.workspace.client.editor.WrappedRichTextAreaImplOpera">
-        <when-type-is
-            class="org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl" />
-        <any>
-            <when-property-is name="user.agent" value="opera" />
-        </any>
-    </replace-with>
-
 </module>

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -57,7 +57,7 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.entityheader.EntityHeader;
 import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
 import org.ourproject.kune.workspace.client.upload.FileUploader;
@@ -75,6 +75,11 @@
 
     private static final String PUBLICATION_MENU = "Publication";
 
+    public static final ActionToolbarPosition CONTENT_TOPBAR = new ActionToolbarPosition("afca-ctn-top");
+    public static final ActionToolbarPosition CONTENT_BOTTOMBAR = new ActionToolbarPosition("afca-ctn-bottom");
+    public static final ActionToolbarPosition CONTEXT_TOPBAR = new ActionToolbarPosition("afca-ctx-top");
+    public static final ActionToolbarPosition CONTEXT_BOTTOMBAR = new ActionToolbarPosition("afca-ctx-bottom");
+
     protected final Session session;
     protected final StateManager stateManager;
     protected final I18nUITranslationService i18n;
@@ -86,7 +91,7 @@
     protected final ContentActionRegistry contentActionRegistry;
     protected final ContextActionRegistry contextActionRegistry;
     protected final Provider<FileDownloadUtils> fileDownloadProvider;
-    protected final Provider<TextEditor> textEditorProvider;
+    protected final Provider<ContentEditor> textEditorProvider;
     protected final Provider<ContextPropEditor> contextPropEditorProvider;
     protected final FoldableContent foldableContent;
     protected final DeferredCommandWrapper deferredCommandWrapper;
@@ -98,7 +103,7 @@
             Provider<GroupServiceAsync> groupServiceProvider, Provider<ContentServiceAsync> contentServiceProvider,
             Provider<FileUploader> fileUploaderProvider, ContextNavigator contextNavigator,
             ContentActionRegistry contentActionRegistry, ContextActionRegistry contextActionRegistry,
-            Provider<FileDownloadUtils> fileDownloadProvider, Provider<TextEditor> textEditorProvider,
+            Provider<FileDownloadUtils> fileDownloadProvider, Provider<ContentEditor> textEditorProvider,
             Provider<ContextPropEditor> contextPropEditorProvider, FoldableContent foldableContent,
             EntityHeader entityLogo, SitePublicSpaceLink publicLink) {
         this.session = session;
@@ -144,7 +149,7 @@
 
     protected void createContentRenameAction(String parentMenuTitle, String textDescription, String... registerInTypes) {
         final ActionToolbarMenuAndItemDescriptor<StateToken> renameCtn = new ActionToolbarMenuAndItemDescriptor<StateToken>(
-                AccessRolDTO.Editor, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Editor, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken stateToken) {
                         contextNavigator.editItem(stateToken);
                     }
@@ -157,7 +162,7 @@
 
     protected void createDelContainerAction(String text, String parentMenuTitle, String... registerInTypes) {
         final ActionToolbarMenuAndItemDescriptor<StateToken> delContainer = new ActionToolbarMenuAndItemDescriptor<StateToken>(
-                AccessRolDTO.Administrator, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Administrator, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken token) {
                         NotifyUser.info("Sorry, in development");
                     }
@@ -172,7 +177,7 @@
 
     protected void createDelContentAction(String parentMenuTitle, String textDescription, String... registerInTypes) {
         final ActionToolbarMenuAndItemDescriptor<StateToken> delContent = new ActionToolbarMenuAndItemDescriptor<StateToken>(
-                AccessRolDTO.Administrator, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Administrator, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken token) {
                         contentServiceProvider.get().delContent(session.getUserHash(), token,
                                 new AsyncCallbackSimple<StateContentDTO>() {
@@ -197,7 +202,7 @@
 
     protected void createDownloadActions(String typeUploadedfile) {
         ActionToolbarButtonDescriptor<StateToken> download = new ActionToolbarButtonDescriptor<StateToken>(
-                AccessRolDTO.Viewer, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Viewer, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken token) {
                         downloadContent(token);
                     }
@@ -223,15 +228,16 @@
 
     protected ActionToolbarButtonDescriptor<StateToken> createEditAction(String... registerInTypes) {
         ActionToolbarButtonDescriptor<StateToken> editContent = new ActionToolbarButtonDescriptor<StateToken>(
-                AccessRolDTO.Editor, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Editor, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken stateToken) {
+                        NotifyUser.showProgressProcessing();
                         session.check(new AsyncCallbackSimple<Object>() {
                             public void onSuccess(final Object result) {
-                                final TextEditor editor = textEditorProvider.get();
+                                final ContentEditor editor = textEditorProvider.get();
                                 foldableContent.detach();
                                 contextNavigator.detach();
                                 contextPropEditorProvider.get().attach();
-                                editor.editContent(session.getContentState().getContent(), new Listener<String>() {
+                                editor.edit(session.getContentState().getContent(), new Listener<String>() {
                                     public void onEvent(final String html) {
                                         NotifyUser.showProgressSaving();
                                         contentServiceProvider.get().save(session.getUserHash(), stateToken, html,
@@ -272,6 +278,7 @@
                                         });
                                     }
                                 });
+                                NotifyUser.hideProgress();
                             }
                         });
                     }
@@ -300,7 +307,7 @@
 
     protected ActionToolbarButtonDescriptor<StateToken> createGoHomeAction(String... registerInTypes) {
         ActionToolbarButtonDescriptor<StateToken> goGroupHome = new ActionToolbarButtonDescriptor<StateToken>(
-                AccessRolDTO.Viewer, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Viewer, CONTEXT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken token) {
                         stateManager.gotoToken(token.getGroup());
                     }
@@ -322,8 +329,8 @@
             final String textDescription, final String parentMenuTitle, final String parentMenuSubtitle,
             final String defaultName, Position position, String... registerInTypes) {
         final ActionToolbarMenuAndItemDescriptor<StateToken> addFolder;
-        addFolder = new ActionToolbarMenuAndItemDescriptor<StateToken>(AccessRolDTO.Editor,
-                ActionToolbarPosition.topbar, new Listener<StateToken>() {
+        addFolder = new ActionToolbarMenuAndItemDescriptor<StateToken>(AccessRolDTO.Editor, CONTENT_TOPBAR,
+                new Listener<StateToken>() {
                     public void onEvent(final StateToken stateToken) {
                         NotifyUser.showProgressProcessing();
                         contentServiceProvider.get().addFolder(session.getUserHash(), stateToken, defaultName,
@@ -346,7 +353,7 @@
             String iconUrl, final String description, final String parentMenuTitle, Position position,
             String... registerInTypes) {
         final ActionToolbarMenuAndItemDescriptor<StateToken> addContent = new ActionToolbarMenuAndItemDescriptor<StateToken>(
-                AccessRolDTO.Editor, ActionToolbarPosition.topbar, new Listener0() {
+                AccessRolDTO.Editor, CONTEXT_TOPBAR, new Listener0() {
                     public void onEvent() {
                         NotifyUser.showProgressProcessing();
                         contentServiceProvider.get().addContent(session.getUserHash(),
@@ -373,7 +380,7 @@
     protected ActionToolbarMenuDescriptor<StateToken> createRefreshCntAction(String parentMenuTitle,
             String... registerInTypes) {
         final ActionToolbarMenuDescriptor<StateToken> refreshCnt = new ActionToolbarMenuDescriptor<StateToken>(
-                AccessRolDTO.Viewer, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Viewer, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken stateToken) {
                         stateManager.reload();
                         contextNavigator.selectItem(stateToken);
@@ -390,7 +397,7 @@
     protected ActionToolbarMenuDescriptor<StateToken> createRefreshCxtAction(String parentMenuTitleCtx,
             String... registerInTypes) {
         final ActionToolbarMenuDescriptor<StateToken> refreshCtx = new ActionToolbarMenuDescriptor<StateToken>(
-                AccessRolDTO.Viewer, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Viewer, CONTEXT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken stateToken) {
                         stateManager.reload();
                         contextNavigator.selectItem(stateToken);
@@ -407,7 +414,7 @@
     protected ActionToolbarMenuAndItemDescriptor<StateToken> createRenameContentInCtxAction(String parentMenuTitleCtx,
             String textDescription, String... registerInTypes) {
         final ActionToolbarMenuAndItemDescriptor<StateToken> renameCtx = new ActionToolbarMenuAndItemDescriptor<StateToken>(
-                AccessRolDTO.Editor, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Editor, CONTEXT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken stateToken) {
                         contextNavigator.editItem(stateToken);
                     }
@@ -421,8 +428,8 @@
     protected ActionToolbarMenuDescriptor<StateToken> createSetAsDefContent(String parentMenuTitle,
             String... registerInTypes) {
         final ActionToolbarMenuDescriptor<StateToken> setAsDefGroupContent;
-        setAsDefGroupContent = new ActionToolbarMenuDescriptor<StateToken>(AccessRolDTO.Administrator,
-                ActionToolbarPosition.topbar, new Listener<StateToken>() {
+        setAsDefGroupContent = new ActionToolbarMenuDescriptor<StateToken>(AccessRolDTO.Administrator, CONTENT_TOPBAR,
+                new Listener<StateToken>() {
                     public void onEvent(final StateToken token) {
                         NotifyUser.showProgressProcessing();
                         contentServiceProvider.get().setAsDefaultContent(session.getUserHash(), token,
@@ -446,7 +453,7 @@
     protected void createSetStatusAction(final AccessRolDTO rol, final String textDescription,
             final ContentStatusDTO status, String[] contentsModerated) {
         final ActionToolbarMenuRadioDescriptor<StateToken> action = new ActionToolbarMenuRadioDescriptor<StateToken>(
-                rol, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                rol, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken stateToken) {
                         setContentStatus(status, stateToken);
                     }
@@ -467,7 +474,7 @@
 
     protected void createShowDeletedItems(String parentMenuTitle, String... registerInTypes) {
         ActionToolbarMenuCheckItemDescriptor<StateToken> showDeletedItems = new ActionToolbarMenuCheckItemDescriptor<StateToken>(
-                AccessRolDTO.Editor, ActionToolbarPosition.topbar, new Listener0() {
+                AccessRolDTO.Editor, CONTEXT_TOPBAR, new Listener0() {
                     public void onEvent() {
                         boolean mustShow = !session.getCurrentUserInfo().getShowDeletedContent();
                         session.getCurrentUserInfo().setShowDeletedContent(mustShow);
@@ -491,7 +498,7 @@
 
     protected ActionToolbarButtonDescriptor<StateToken> createTranslateAction(String... registerInTypes) {
         ActionToolbarButtonDescriptor<StateToken> translateContent = new ActionToolbarButtonDescriptor<StateToken>(
-                AccessRolDTO.Editor, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Editor, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken stateToken) {
                         NotifyUser.important(i18n.t("Sorry, this functionality is currently in development"));
                     }
@@ -508,8 +515,8 @@
     protected ActionToolbarButtonAndItemDescriptor<StateToken> createUploadAction(final String textDescription,
             final String iconUrl, final String toolTip, final String permitedExtensions, String... registerInTypes) {
         final ActionToolbarButtonAndItemDescriptor<StateToken> uploadFile;
-        uploadFile = new ActionToolbarButtonAndItemDescriptor<StateToken>(AccessRolDTO.Editor,
-                ActionToolbarPosition.bottombar, new Listener0() {
+        uploadFile = new ActionToolbarButtonAndItemDescriptor<StateToken>(AccessRolDTO.Editor, CONTEXT_BOTTOMBAR,
+                new Listener0() {
                     public void onEvent() {
                         if (permitedExtensions != null) {
                             // FIXME: can't be reset ...
@@ -547,7 +554,7 @@
     @SuppressWarnings("unused")
     private ActionToolbarMenuAndItemDescriptor<StateToken> createSetGroupLogoAction(String parentMenuTitle) {
         final ActionToolbarMenuAndItemDescriptor<StateToken> setGroupLogo = new ActionToolbarMenuAndItemDescriptor<StateToken>(
-                AccessRolDTO.Administrator, ActionToolbarPosition.topbar, new Listener<StateToken>() {
+                AccessRolDTO.Administrator, CONTENT_TOPBAR, new Listener<StateToken>() {
                     public void onEvent(final StateToken token) {
                         groupServiceProvider.get().setGroupFullLogo(session.getUserHash(), token,
                                 new AsyncCallbackSimple<GroupDTO>() {

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/KuneWorkspaceModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/KuneWorkspaceModule.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/KuneWorkspaceModule.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -21,9 +21,7 @@
 
 import org.ourproject.kune.chat.client.ChatEngine;
 import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
-import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter;
 import org.ourproject.kune.platf.client.app.ApplicationComponentGroup;
 import org.ourproject.kune.platf.client.app.EntityOptionsGroup;
 import org.ourproject.kune.platf.client.dto.StateToken;
@@ -48,8 +46,9 @@
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.platf.client.ui.noti.NotifyUser;
-import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette;
+import org.ourproject.kune.platf.client.ui.rte.RTEditor;
 import org.ourproject.kune.platf.client.ui.rte.TestRTEDialog;
+import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources;
 import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper;
 import org.ourproject.kune.workspace.client.cnt.ActionContentToolbar;
 import org.ourproject.kune.workspace.client.cnt.ActionContentToolbarPresenter;
@@ -57,16 +56,14 @@
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPanel;
 import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPresenter;
-import org.ourproject.kune.workspace.client.cxt.ActionContextToolbar;
-import org.ourproject.kune.workspace.client.cxt.ActionContextToolbarPresenter;
+import org.ourproject.kune.workspace.client.cxt.ActionContextBottomToolbar;
+import org.ourproject.kune.workspace.client.cxt.ActionContextTopToolBar;
 import org.ourproject.kune.workspace.client.cxt.ContextActionRegistry;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditor;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditorPanel;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditorPresenter;
 import org.ourproject.kune.workspace.client.cxt.ContextPropEditorView;
-import org.ourproject.kune.workspace.client.editor.TextEditor;
-import org.ourproject.kune.workspace.client.editor.TextEditorPanel;
-import org.ourproject.kune.workspace.client.editor.TextEditorPresenter;
+import org.ourproject.kune.workspace.client.editor.ContentEditor;
 import org.ourproject.kune.workspace.client.editor.insert.TextEditorInsertElement;
 import org.ourproject.kune.workspace.client.editor.insert.TextEditorInsertElementGroup;
 import org.ourproject.kune.workspace.client.editor.insert.TextEditorInsertElementPanel;
@@ -481,16 +478,14 @@
         register(Singleton.class, new Factory<ActionGroupSummaryToolbar>(ActionGroupSummaryToolbar.class) {
             @Override
             public ActionGroupSummaryToolbar create() {
-                final ActionToolbarPanel<StateToken> panel = new ActionToolbarPanel<StateToken>(
-                        $$(ActionManager.class), $(I18nTranslationService.class));
+                final ActionToolbarPanel<StateToken> panel = new ActionToolbarPanel<StateToken>($$(ActionManager.class));
                 final ActionGroupSummaryToolbarPresenter toolbar = new ActionGroupSummaryToolbarPresenter(panel);
                 return toolbar;
             }
         }, new Factory<ActionParticipationToolbar>(ActionParticipationToolbar.class) {
             @Override
             public ActionParticipationToolbar create() {
-                final ActionToolbarPanel<StateToken> panel = new ActionToolbarPanel<StateToken>(
-                        $$(ActionManager.class), $(I18nTranslationService.class));
+                final ActionToolbarPanel<StateToken> panel = new ActionToolbarPanel<StateToken>($$(ActionManager.class));
                 final ActionParticipationSummaryToolbarPresenter toolbar = new ActionParticipationSummaryToolbarPresenter(
                         panel);
                 return toolbar;
@@ -499,7 +494,7 @@
             @Override
             public ActionBuddiesSummaryToolbar create() {
                 final ActionToolbarPanel<UserSimpleDTO> panel = new ActionToolbarPanel<UserSimpleDTO>(
-                        $$(ActionManager.class), $(I18nTranslationService.class));
+                        $$(ActionManager.class));
                 final ActionBuddiesSummaryToolbarPresenter toolbar = new ActionBuddiesSummaryToolbarPresenter(panel);
                 return toolbar;
             }
@@ -866,26 +861,6 @@
             }
         });
 
-        register(Singleton.class, new Factory<TextEditor>(TextEditor.class) {
-            @Override
-            public TextEditor create() {
-                final ActionCntCtxToolbarPanel<StateToken> contentNavigatorToolbar = new ActionCntCtxToolbarPanel<StateToken>(
-                        ActionCntCtxToolbarPanel.Position.content, $$(ActionManager.class), $(WorkspaceSkeleton.class),
-                        $(I18nTranslationService.class));
-                final ActionToolbar<StateToken> toolbar = new ActionToolbarPresenter<StateToken>(
-                        contentNavigatorToolbar);
-
-                final TextEditorPresenter presenter = new TextEditorPresenter(true, toolbar,
-                        $(I18nUITranslationService.class), $(StateManager.class), $(SiteSignOutLink.class),
-                        $(DeferredCommandWrapper.class));
-                final TextEditorPanel panel = new TextEditorPanel(presenter, $(I18nTranslationService.class),
-                        $(WorkspaceSkeleton.class), $(ColorWebSafePalette.class), $(TextEditorInsertElement.class),
-                        false);
-                presenter.init(panel);
-                return presenter;
-            }
-        });
-
         register(Singleton.class, new Factory<LanguageSelector>(LanguageSelector.class) {
             @Override
             public LanguageSelector create() {
@@ -924,32 +899,52 @@
         register(NoDecoration.class, new Factory<ActionContentToolbar>(ActionContentToolbar.class) {
             @Override
             public ActionContentToolbar create() {
-                final ActionCntCtxToolbarPanel<StateToken> contentNavigatorToolbar = new ActionCntCtxToolbarPanel<StateToken>(
-                        ActionCntCtxToolbarPanel.Position.content, $$(ActionManager.class), $(WorkspaceSkeleton.class),
-                        $(I18nTranslationService.class));
-                final ActionContentToolbar toolbar = new ActionContentToolbarPresenter(contentNavigatorToolbar);
+                final ActionCntCtxToolbarPanel<StateToken> tbar = new ActionCntCtxToolbarPanel<StateToken>(
+                        AbstractFoldableContentActions.CONTENT_TOPBAR, $$(ActionManager.class),
+                        $(WorkspaceSkeleton.class));
+                final ActionContentToolbar toolbar = new ActionContentToolbarPresenter(tbar);
                 return toolbar;
             }
         });
 
-        register(NoDecoration.class, new Factory<ActionContextToolbar>(ActionContextToolbar.class) {
+        register(Singleton.class, new Factory<ContentEditor>(ContentEditor.class) {
             @Override
-            public ActionContextToolbar create() {
-                final ActionCntCtxToolbarPanel<StateToken> contentNavigatorToolbar = new ActionCntCtxToolbarPanel<StateToken>(
-                        ActionCntCtxToolbarPanel.Position.context, $$(ActionManager.class), $(WorkspaceSkeleton.class),
-                        $(I18nTranslationService.class));
-                final ActionContextToolbar toolbar = new ActionContextToolbarPresenter(contentNavigatorToolbar);
+            public ContentEditor create() {
+                return new ContentEditor($(RTEditor.class), true, $(I18nTranslationService.class),
+                        $(StateManager.class), $(SiteSignOutLink.class), $(DeferredCommandWrapper.class),
+                        $(RTEImgResources.class), $(WorkspaceSkeleton.class));
+            }
+        });
+        register(NoDecoration.class, new Factory<ActionContextTopToolBar>(ActionContextTopToolBar.class) {
+            @Override
+            public ActionContextTopToolBar create() {
+                final ActionCntCtxToolbarPanel<StateToken> panel = new ActionCntCtxToolbarPanel<StateToken>(
+                        AbstractFoldableContentActions.CONTEXT_TOPBAR, $$(ActionManager.class),
+                        $(WorkspaceSkeleton.class));
+                final ActionContextTopToolBar toolbar = new ActionContextTopToolBar(panel);
                 return toolbar;
             }
         });
 
+        register(NoDecoration.class, new Factory<ActionContextBottomToolbar>(ActionContextBottomToolbar.class) {
+            @Override
+            public ActionContextBottomToolbar create() {
+                final ActionCntCtxToolbarPanel<StateToken> panel = new ActionCntCtxToolbarPanel<StateToken>(
+                        AbstractFoldableContentActions.CONTEXT_BOTTOMBAR, $$(ActionManager.class),
+                        $(WorkspaceSkeleton.class));
+                final ActionContextBottomToolbar toolbar = new ActionContextBottomToolbar(panel);
+                return toolbar;
+            }
+        });
+
         register(Singleton.class, new Factory<ContextNavigator>(ContextNavigator.class) {
             @Override
             public ContextNavigator create() {
                 final ContextNavigatorPresenter presenter = new ContextNavigatorPresenter($(StateManager.class),
                         $(Session.class), $(I18nTranslationService.class), $(ContentIconsRegistry.class),
-                        $(ContentCapabilitiesRegistry.class), $(ActionContextToolbar.class),
-                        $(ContextActionRegistry.class), $$(FileDownloadUtils.class), true, $(RenameAction.class));
+                        $(ContentCapabilitiesRegistry.class), $(ActionContextTopToolBar.class),
+                        $(ActionContextBottomToolbar.class), $(ContextActionRegistry.class),
+                        $$(FileDownloadUtils.class), true, $(RenameAction.class));
                 final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter,
                         $(I18nTranslationService.class), $(WorkspaceSkeleton.class), $(ActionManager.class));
                 presenter.init(panel);

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/cnt/FoldableContentPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -32,6 +32,7 @@
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.platf.client.ui.download.ImageSize;
+import org.ourproject.kune.workspace.client.AbstractFoldableContentActions;
 
 import com.calclab.suco.client.events.Listener;
 import com.calclab.suco.client.ioc.Provider;
@@ -138,7 +139,8 @@
 
     private void setToolbar(ActionItemCollection<StateToken> collection) {
         toolbar.disableMenusAndClearButtons();
-        toolbar.addActions(collection);
+        toolbar.addActions(collection, AbstractFoldableContentActions.CONTENT_TOPBAR);
+        ;
         toolbar.attach();
     }
 

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -44,7 +44,9 @@
 import org.ourproject.kune.platf.client.ui.KuneUiUtils;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
 import org.ourproject.kune.platf.client.ui.download.ImageSize;
+import org.ourproject.kune.workspace.client.AbstractFoldableContentActions;
 import org.ourproject.kune.workspace.client.cnt.ContentIconsRegistry;
+import org.ourproject.kune.workspace.client.cxt.ActionContextBottomToolbar;
 import org.ourproject.kune.workspace.client.title.RenameAction;
 import org.ourproject.kune.workspace.client.upload.FileUploader;
 
@@ -63,24 +65,26 @@
     private boolean editOnNextStateChange;
     private final ContentIconsRegistry contentIconsRegistry;
     private final ActionRegistry<StateToken> actionRegistry;
-    private final ActionToolbar<StateToken> toolbar;
+    private final ActionToolbar<StateToken> topToolbar;
     private final Provider<FileDownloadUtils> downloadUtilsProvider;
     private final boolean useGenericImageIcon;
     private final ContentCapabilitiesRegistry capabilitiesRegistry;
     private final RenameAction renameAction;
+    private final ActionContextBottomToolbar bottomToolbar;
 
     public ContextNavigatorPresenter(final StateManager stateManager, final Session session,
             final I18nTranslationService i18n, final ContentIconsRegistry contentIconsRegistry,
             ContentCapabilitiesRegistry capabilitiesRegistry, final ActionToolbar<StateToken> toolbar,
-            final ActionRegistry<StateToken> actionRegistry, Provider<FileDownloadUtils> downloadUtilsProvider,
-            boolean useGenericImageIcon, RenameAction renameAction) {
+            ActionContextBottomToolbar bottomToolbar, final ActionRegistry<StateToken> actionRegistry,
+            Provider<FileDownloadUtils> downloadUtilsProvider, boolean useGenericImageIcon, RenameAction renameAction) {
         this.stateManager = stateManager;
         this.session = session;
         this.i18n = i18n;
         this.contentIconsRegistry = contentIconsRegistry;
         this.capabilitiesRegistry = capabilitiesRegistry;
+        this.topToolbar = toolbar;
+        this.bottomToolbar = bottomToolbar;
         this.actionRegistry = actionRegistry;
-        this.toolbar = toolbar;
         this.downloadUtilsProvider = downloadUtilsProvider;
         this.useGenericImageIcon = useGenericImageIcon;
         this.renameAction = renameAction;
@@ -103,18 +107,21 @@
         // FIXME At the moment detach (removeFromParent) destroy the gwt-ext
         // TreePanel and the widget must be recreated (cannot be attached again
         // like in gwt)
-        toolbar.attach();
+        topToolbar.attach();
+        bottomToolbar.attach();
     }
 
     public void clear() {
-        toolbar.clear();
+        topToolbar.clear();
+        bottomToolbar.clear();
         view.clear();
         actionsByItem.clear();
     }
 
     public void detach() {
         view.detach();
-        toolbar.detach();
+        topToolbar.detach();
+        bottomToolbar.detach();
     }
 
     public void editItem(final StateToken stateToken) {
@@ -139,8 +146,11 @@
 
     public void selectItem(final StateToken stateToken) {
         view.selectItem(genId(stateToken));
-        toolbar.disableMenusAndClearButtons();
-        toolbar.addActions(actionsByItem.get(stateToken));
+        topToolbar.disableMenusAndClearButtons();
+        bottomToolbar.disableMenusAndClearButtons();
+        ActionItemCollection<StateToken> itemCollection = actionsByItem.get(stateToken);
+        topToolbar.addActions(itemCollection, AbstractFoldableContentActions.CONTEXT_TOPBAR);
+        bottomToolbar.addActions(itemCollection, AbstractFoldableContentActions.CONTEXT_BOTTOMBAR);
     }
 
     public void setEditOnNextStateChange(final boolean edit) {
@@ -324,7 +334,8 @@
 
         selectOrEditNode(select, stateToken);
 
-        toolbar.attach();
+        topToolbar.attach();
+        bottomToolbar.attach();
     }
 
     private void showRootFolder(final StateContainerDTO state, final AccessRightsDTO containerRights) {

Added: trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextBottomToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextBottomToolbar.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextBottomToolbar.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package org.ourproject.kune.workspace.client.cxt;
+
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView;
+import org.ourproject.kune.platf.client.dto.StateToken;
+
+public class ActionContextBottomToolbar extends ActionToolbarPresenter<StateToken> implements ActionToolbar<StateToken> {
+
+    public ActionContextBottomToolbar(ActionToolbarView<StateToken> toolbar) {
+        super(toolbar);
+    }
+}
\ No newline at end of file

Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbar.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbar.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,27 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-package org.ourproject.kune.workspace.client.cxt;
-
-import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
-import org.ourproject.kune.platf.client.dto.StateToken;
-
-public interface ActionContextToolbar extends ActionToolbar<StateToken> {
-
-}

Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbarPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbarPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbarPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,32 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-package org.ourproject.kune.workspace.client.cxt;
-
-import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter;
-import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView;
-import org.ourproject.kune.platf.client.dto.StateToken;
-
-public class ActionContextToolbarPresenter extends ActionToolbarPresenter<StateToken> implements ActionContextToolbar {
-
-    public ActionContextToolbarPresenter(ActionToolbarView<StateToken> toolbar) {
-        super(toolbar);
-    }
-
-}

Copied: trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextTopToolBar.java (from rev 1055, trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbarPresenter.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextToolbarPresenter.java	2009-03-03 01:35:36 UTC (rev 1055)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/cxt/ActionContextTopToolBar.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package org.ourproject.kune.workspace.client.cxt;
+
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView;
+import org.ourproject.kune.platf.client.dto.StateToken;
+
+public class ActionContextTopToolBar extends ActionToolbarPresenter<StateToken> implements ActionToolbar<StateToken> {
+
+    public ActionContextTopToolBar(ActionToolbarView<StateToken> toolbar) {
+        super(toolbar);
+    }
+
+}

Added: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -0,0 +1,74 @@
+package org.ourproject.kune.workspace.client.editor;
+
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
+import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.platf.client.ui.SimpleToolbar;
+import org.ourproject.kune.platf.client.ui.rte.RTESavingEditorPresenter;
+import org.ourproject.kune.platf.client.ui.rte.RTEditor;
+import org.ourproject.kune.platf.client.ui.rte.RTEditorPanel;
+import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources;
+import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper;
+import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLink;
+import org.ourproject.kune.workspace.client.skel.Toolbar;
+import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+
+import com.calclab.suco.client.events.Listener;
+import com.calclab.suco.client.events.Listener0;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.gwtext.client.widgets.BoxComponent;
+import com.gwtext.client.widgets.event.ContainerListenerAdapter;
+
+public class ContentEditor extends RTESavingEditorPresenter {
+
+    private final WorkspaceSkeleton ws;
+    private final VerticalPanel vp;
+    private final RTEditor basicEditor;
+    private final RTEditorPanel editorPanel;
+    private final SimpleToolbar topbar;
+
+    public ContentEditor(RTEditor editor, boolean autoSave, I18nTranslationService i18n, StateManager stateManager,
+            SiteSignOutLink siteSignOutLink, DeferredCommandWrapper deferredCommandWrapper,
+            RTEImgResources imgResources, WorkspaceSkeleton ws) {
+        super(editor, autoSave, i18n, stateManager, siteSignOutLink, deferredCommandWrapper, imgResources);
+        this.ws = ws;
+
+        vp = new VerticalPanel();
+        basicEditor = super.getBasicEditor();
+        vp.add(((ActionToolbarPanel<Object>) basicEditor.getSndBar().getView()).getToolbar());
+        editorPanel = (RTEditorPanel) basicEditor.getEditorArea();
+        vp.add(editorPanel.getRTE());
+        basicEditor.setExtended(true);
+        vp.setWidth("100%");
+        adjHeight(ws.getEntityWorkspace().getContentHeight());
+        ws.getEntityWorkspace().addContentListener(new ContainerListenerAdapter() {
+            @Override
+            public void onResize(final BoxComponent component, final int adjWidth, final int adjHeight,
+                    final int rawWidth, final int rawHeight) {
+                adjHeight(adjHeight);
+            }
+        });
+        topbar = ((ActionToolbarPanel<Object>) basicEditor.getTopBar().getView()).getToolbar();
+    }
+
+    @Override
+    public void edit(String html, Listener<String> onSave, Listener0 onEditCancelled) {
+        Toolbar contentTopBar = ws.getEntityWorkspace().getContentTopBar();
+        contentTopBar.removeAll();
+        contentTopBar.add(topbar);
+        ws.getEntityWorkspace().setContent(vp);
+        super.edit(html, onSave, onEditCancelled);
+    }
+
+    @Override
+    protected void onCancelConfirmed() {
+        ws.getEntityWorkspace().clearContent();
+        super.onCancelConfirmed();
+    }
+
+    private void adjHeight(final int height) {
+        int newHeight = height - WorkspaceSkeleton.DEF_TOOLBAR_HEIGHT - 27;
+        editorPanel.adjustSize(newHeight);
+        vp.setCellHeight(editorPanel.getRTE(), "" + newHeight);
+    }
+}

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -23,7 +23,6 @@
 import org.ourproject.kune.platf.client.actions.ActionItemCollection;
 import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.BeforeActionListener;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
 import org.ourproject.kune.platf.client.dto.AccessRolDTO;
@@ -48,7 +47,7 @@
     private boolean saveAndCloseConfirmed;
     private Listener<String> onSave;
     private Listener0 onEditCancelled;
-    private final ActionToolbar<StateToken> toolbar;
+    private final ActionToolbar<StateToken> topToolbar;
     private ActionToolbarMenuDescriptor<StateToken> save;
     private ActionToolbarButtonDescriptor<StateToken> close;
     private final I18nUITranslationService i18n;
@@ -57,10 +56,10 @@
     private final SiteSignOutLink siteSignOutLink;
     private final DeferredCommandWrapper deferredCommandWrapper;
 
-    public TextEditorPresenter(final boolean isAutoSave, final ActionToolbar<StateToken> toolbar,
+    public TextEditorPresenter(final boolean isAutoSave, final ActionToolbar<StateToken> topToolbar,
             final I18nUITranslationService i18n, StateManager stateManager, SiteSignOutLink siteSignOutLink,
             DeferredCommandWrapper deferredCommandWrapper) {
-        this.toolbar = toolbar;
+        this.topToolbar = topToolbar;
         this.autoSave = isAutoSave;
         this.i18n = i18n;
         this.stateManager = stateManager;
@@ -81,7 +80,7 @@
     public void editContent(final String content, final Listener<String> onSave, final Listener0 onEditCancelled) {
         this.onSave = onSave;
         this.onEditCancelled = onEditCancelled;
-        toolbar.attach();
+        topToolbar.attach();
         view.attach();
         setContent(content);
         stateManager.addBeforeStateChangeListener(beforeStateChangeListener);
@@ -137,7 +136,7 @@
         stateManager.resumeTokenChange();
         reset();
         view.detach();
-        toolbar.detach();
+        topToolbar.detach();
         onEditCancelled.onEvent();
     }
 
@@ -176,23 +175,21 @@
     }
 
     private void createActions() {
-        save = new ActionToolbarMenuDescriptor<StateToken>(AccessRolDTO.Viewer, ActionToolbarPosition.topbar,
-                new Listener<StateToken>() {
-                    public void onEvent(final StateToken token) {
-                        onSave();
-                    }
-                });
+        save = new ActionToolbarMenuDescriptor<StateToken>(AccessRolDTO.Viewer, null, new Listener<StateToken>() {
+            public void onEvent(final StateToken token) {
+                onSave();
+            }
+        });
         save.setTextDescription(i18n.tWithNT("Save", "used in button"));
         save.setParentMenuTitle(i18n.t("File"));
         save.setId(SAVE_ID);
         // save.setIconUrl("images/");
 
-        close = new ActionToolbarButtonDescriptor<StateToken>(AccessRolDTO.Viewer, ActionToolbarPosition.topbar,
-                new Listener<StateToken>() {
-                    public void onEvent(final StateToken token) {
-                        onCancel();
-                    }
-                });
+        close = new ActionToolbarButtonDescriptor<StateToken>(AccessRolDTO.Viewer, null, new Listener<StateToken>() {
+            public void onEvent(final StateToken token) {
+                onCancel();
+            }
+        });
         close.setTextDescription(i18n.tWithNT("Close", "used in button"));
         close.setId(CLOSE_ID);
         // close.setIconUrl("images/");
@@ -200,7 +197,7 @@
         final ActionItemCollection<StateToken> collection = new ActionItemCollection<StateToken>();
         collection.add(new ActionItem<StateToken>(save, null));
         collection.add(new ActionItem<StateToken>(close, null));
-        toolbar.addActions(collection);
+        topToolbar.addActions(collection, null);
     }
 
     private void reset() {

Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplIE6.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,67 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-package org.ourproject.kune.workspace.client.editor;
-
-import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplIE6;
-
-/**
- * A wrapper used to inject css into RTA. As published in:
- * 
- * http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/
- * f64c0024d8676a66
- * /d5f26a54145fc5d4?lnk=st&q=richtextarea+style#d5f26a54145fc5d4
- * 
- * FIXME: Only for IE and Mozilla
- * 
- */
-public class WrappedRichTextAreaImplIE6 extends RichTextAreaImplIE6 {
-
-    @Override
-    public native void initElement() /*-{
-                         var _this = this;
-                         _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
-
-                         setTimeout(function() {
-                           if (_this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing == false) {
-                             return;
-                           }
-
-                           // Attempt to set the iframe document's body to 'contentEditable' mode.
-                           // There's no way to know when the body will actually be available, so
-                           // keep trying every so often until it is.
-                           // Note: The body seems to be missing only rarely, so please don't remove
-                           // this retry loop just because it's hard to reproduce.
-                           var elem = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
-                           var doc = elem.contentWindow.document;
-                           if (!doc.body) {
-                               // Retry in 50 ms. Faster would run the risk of pegging the CPU. Slower
-                               // would increase the probability of a user-visible delay.
-                             setTimeout(arguments.callee, 50);
-                             return;
-                           }
-                           var ct = "<html><head><style>@import url('" + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
-                           doc.write( ct );
-                           doc.body.contentEditable = true;
-
-                           // Send notification that the iframe has reached design mode.
-                           _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
-                         }, 1);
-                       }-*/;
-}

Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplMozilla.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,76 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-package org.ourproject.kune.workspace.client.editor;
-
-import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplMozilla;
-
-/**
- * A wrapper used to inject css into RTA. As published in:
- * 
- * http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/
- * f64c0024d8676a66
- * /d5f26a54145fc5d4?lnk=st&q=richtextarea+style#d5f26a54145fc5d4
- * 
- * FIXME: Only for IE and Mozilla
- * 
- */
-public class WrappedRichTextAreaImplMozilla extends RichTextAreaImplMozilla {
-
-    @Override
-    public native void initElement() /*-{
-           // Mozilla doesn't allow designMode to be set reliably until the iframe is
-           // fully loaded.
-           var _this = this;
-           var iframe = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
-           _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
-
-           iframe.onload = function() {
-             // Some Mozillae have the nasty habit of calling onload again when you set
-             // designMode, so let's avoid doing it more than once.
-             iframe.onload = null;
-
-             // patch ccs inject:
-
-             var doc = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document;
-             head=doc.getElementsByTagName('head')[0];
-             link=document.createElement('link');
-             link.setAttribute('rel',"stylesheet");
-             link.setAttribute('type',"text/css");
-             link.setAttribute('href',$wnd.location.protocol + $wnd.location.host + $wnd.location.pathname + "css/richtext.css" );
-             head.appendChild(link);
-
-              // -- patch
-
-              // Send notification that the iframe has finished loading.
-              _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
-
-              // Don't set designMode until the RTA actually gets focused. This is
-              // necessary because editing won't work on Mozilla if the iframe is
-              // *hidden, but attached*. Waiting for focus gets around this issue.
-              //
-              // Note: This onfocus will not conflict with the addEventListener('focus',
-              // ...) // in RichTextAreaImplStandard.
-              iframe.contentWindow.onfocus = function() {
-                iframe.contentWindow.onfocus = null;
-                iframe.contentWindow.document.designMode = 'On';
-              };
-            };
-           }-*/;
-}

Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplOpera.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,48 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- \*/
-package org.ourproject.kune.workspace.client.editor;
-
-import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplOpera;
-
-public class WrappedRichTextAreaImplOpera extends RichTextAreaImplOpera {
-
-    @Override
-    public native void initElement() /*-{
-         // Most browsers don't like setting designMode until slightly _after_
-         // the iframe becomes attached to the DOM. Any non-zero timeout will do
-         // just fine.
-         var _this = this;
-         _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
-         setTimeout(function() {
-           // Turn on design mode.
-           _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.designMode = 'On';
-                // patch css inject:
-                var elem = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
-                var doc = elem.contentWindow.document;
-                var ct = "<html><head><style>@import url('" +$wnd.location.protocol + $wnd.location.host + $wnd.location.pathname + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
-                doc.write( ct );
-                // -- patch
-
-           // Send notification that the iframe has reached design mode.
-           _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
-         }, 1);
-       }-*/;
-
-}

Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/WrappedRichTextAreaImplSafari.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -1,49 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- \*/
-package org.ourproject.kune.workspace.client.editor;
-
-import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplSafari;
-
-public class WrappedRichTextAreaImplSafari extends RichTextAreaImplSafari {
-
-    @Override
-    public native void initElement() /*-{
-               // Most browsers don't like setting designMode until slightly _after_
-               // the iframe becomes attached to the DOM. Any non-zero timeout will do
-               // just fine.
-               var _this = this;
-               _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::initializing = true;
-               setTimeout(function() {
-                 // Turn on design mode.
-                 _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem.contentWindow.document.designMode = 'On';
-
-                // patch css inject:
-                var elem = _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl::elem;
-                var doc = elem.contentWindow.document;
-                var ct = "<html><head><style>@import url('" +$wnd.location.protocol + $wnd.location.host + $wnd.location.pathname + "css/richtext.css" + "');</style></head><body CONTENTEDITABLE='true'></body></html>" ;
-                doc.write( ct );
-                // -- patch
-
-                 // Send notification that the iframe has reached design mode.
-                 _this. at org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImplStandard::onElementInitialized()();
-               }, 1);
-             }-*/;
-
-}

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -21,12 +21,12 @@
 
 import org.ourproject.kune.platf.client.View;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.dto.AccessRolDTO;
 import org.ourproject.kune.platf.client.dto.UserSimpleDTO;
 import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
 import org.ourproject.kune.platf.client.i18n.I18nTranslationServiceMocked;
 import org.ourproject.kune.platf.client.ui.noti.NotifyUser;
+import org.ourproject.kune.workspace.client.AbstractFoldableContentActions;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
 import org.ourproject.kune.workspace.client.socialnet.UserActionRegistry;
 
@@ -108,7 +108,7 @@
          **/
         private void createActions() {
             ActionToolbarMenuDescriptor<UserSimpleDTO> helloWorldBuddiesAction = new ActionToolbarMenuDescriptor<UserSimpleDTO>(
-                    AccessRolDTO.Viewer, ActionToolbarPosition.bottombar, new Listener<UserSimpleDTO>() {
+                    AccessRolDTO.Viewer, AbstractFoldableContentActions.CONTENT_TOPBAR, new Listener<UserSimpleDTO>() {
                         public void onEvent(UserSimpleDTO parameter) {
                             // We clicked:
                             view.showMessage();

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/skel/ActionCntCtxToolbarPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/skel/ActionCntCtxToolbarPanel.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/skel/ActionCntCtxToolbarPanel.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -20,58 +20,44 @@
 package org.ourproject.kune.workspace.client.skel;
 
 import org.ourproject.kune.platf.client.actions.ActionManager;
+import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
-import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.workspace.client.AbstractFoldableContentActions;
 
 import com.calclab.suco.client.ioc.Provider;
 
 public class ActionCntCtxToolbarPanel<T> extends ActionToolbarPanel<T> {
 
-    public enum Position {
-        content, context
-    }
+    Toolbar wsToolbar;
 
-    private final Position position;
-    private final WorkspaceSkeleton ws;
+    public ActionCntCtxToolbarPanel(ActionToolbarPosition position,
+            final Provider<ActionManager> actionManagerProvider, final WorkspaceSkeleton ws) {
+        super(actionManagerProvider);
+        EntityWorkspace entityWorkspace = ws.getEntityWorkspace();
+        if (position.equals(AbstractFoldableContentActions.CONTENT_TOPBAR)) {
+            wsToolbar = entityWorkspace.getContentTopBar();
+        } else if (position.equals(AbstractFoldableContentActions.CONTENT_BOTTOMBAR)) {
+            wsToolbar = entityWorkspace.getContentBottomBar();
+        } else if (position.equals(AbstractFoldableContentActions.CONTEXT_TOPBAR)) {
+            wsToolbar = entityWorkspace.getContextTopBar();
+        } else if (position.equals(AbstractFoldableContentActions.CONTEXT_BOTTOMBAR)) {
+            wsToolbar = entityWorkspace.getContextBottomBar();
+        }
 
-    public ActionCntCtxToolbarPanel(final Position position, final Provider<ActionManager> actionManagerProvider,
-            final WorkspaceSkeleton ws, I18nTranslationService i18n) {
-        super(actionManagerProvider, i18n);
-        this.position = position;
-        this.ws = ws;
     }
 
     @Override
     public void attach() {
-        if (!topbar.isAttached()) {
-            switch (position) {
-            case content:
-                ws.getEntityWorkspace().getContentTopBar().removeAll();
-                ws.getEntityWorkspace().getContentTopBar().add(topbar);
-                ws.getEntityWorkspace().getContentBottomBar().add(bottombar);
-                break;
-            case context:
-            default:
-                ws.getEntityWorkspace().getContextTopBar().removeAll();
-                ws.getEntityWorkspace().getContextTopBar().add(topbar);
-                ws.getEntityWorkspace().getContextBottomBar().add(bottombar);
-            }
+        if (!toolbar.isAttached()) {
+            wsToolbar.removeAll();
+            wsToolbar.add(toolbar);
         }
     }
 
     @Override
     public void detach() {
-        if (topbar.isAttached()) {
-            switch (position) {
-            case content:
-                ws.getEntityWorkspace().getContentTopBar().remove(topbar);
-                ws.getEntityWorkspace().getContentBottomBar().remove(bottombar);
-                break;
-            case context:
-            default:
-                ws.getEntityWorkspace().getContextTopBar().remove(topbar);
-                ws.getEntityWorkspace().getContextBottomBar().remove(bottombar);
-            }
+        if (toolbar.isAttached()) {
+            wsToolbar.remove(toolbar);
         }
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -157,6 +157,14 @@
         cntCtxBorderLayout.addListener(containerListenerAdapter);
     }
 
+    public void clearContent() {
+        content.clear();
+    }
+
+    public void clearContext() {
+        content.clear();
+    }
+
     public SimpleToolbar getBottomTitle() {
         return bottom;
     }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummary.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummary.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummary.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -19,6 +19,6 @@
  \*/
 package org.ourproject.kune.workspace.client.socialnet;
 
+
 public interface BuddiesSummary {
-
 }

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummaryPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummaryPanel.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummaryPanel.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -23,7 +23,6 @@
 import org.ourproject.kune.platf.client.actions.ActionItem;
 import org.ourproject.kune.platf.client.actions.ActionItemCollection;
 import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.MenuItemsContainer;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView;
@@ -64,7 +63,7 @@
         otherBuddiesLabel.addStyleName("kune-Margin-Small-trbl");
         vp.add(flowPanel);
         vp.add(otherBuddiesLabel);
-        toolbar = ((ActionToolbarPanel<UserSimpleDTO>) actionToolbarView).getToolbar(ActionToolbarPosition.bottombar);
+        toolbar = ((ActionToolbarPanel<UserSimpleDTO>) actionToolbarView).getToolbar();
         toolbar.setCleanStyle();
         vp.add(toolbar);
         super.add(vp);

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummaryPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummaryPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/BuddiesSummaryPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -27,8 +27,8 @@
 import org.ourproject.kune.platf.client.actions.ActionMenuItemDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuRadioDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.RadioMustBeChecked;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
 import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
 import org.ourproject.kune.platf.client.dto.AccessRolDTO;
 import org.ourproject.kune.platf.client.dto.SocialNetworkDataDTO;
@@ -134,7 +134,7 @@
                 }
                 toolbar.disableMenusAndClearButtons();
                 toolbar.addActions(actionRegistry.getCurrentActions(session.getCurrentUser(), session.isLogged(),
-                        state.getGroupRights(), true));
+                        state.getGroupRights(), true), ActionToolbar.IN_ANY);
                 toolbar.attach();
                 view.show();
             } else {
@@ -148,7 +148,7 @@
 
     private void createAddNewBuddiesAction() {
         ActionToolbarMenuDescriptor<UserSimpleDTO> addNewBuddiesAction = new ActionToolbarMenuDescriptor<UserSimpleDTO>(
-                AccessRolDTO.Administrator, ActionToolbarPosition.bottombar, new Listener<UserSimpleDTO>() {
+                AccessRolDTO.Administrator, buddiesBottom, new Listener<UserSimpleDTO>() {
                     public void onEvent(UserSimpleDTO parameter) {
                         NotifyUser.info("In development");
                     }
@@ -161,7 +161,7 @@
 
     private void createSetBuddiesVisibilityAction(String textDescription, final UserBuddiesVisibilityDTO visibility) {
         ActionToolbarMenuRadioDescriptor<UserSimpleDTO> buddiesVisibilityAction = new ActionToolbarMenuRadioDescriptor<UserSimpleDTO>(
-                AccessRolDTO.Administrator, ActionToolbarPosition.bottombar, new Listener<UserSimpleDTO>() {
+                AccessRolDTO.Administrator, buddiesBottom, new Listener<UserSimpleDTO>() {
                     public void onEvent(UserSimpleDTO parameter) {
                         userServiceAsync.get().setBuddiesVisibility(session.getUserHash(),
                                 session.getCurrentState().getGroup().getStateToken(), visibility,

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPanel.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPanel.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -20,7 +20,6 @@
 package org.ourproject.kune.workspace.client.socialnet;
 
 import org.ourproject.kune.platf.client.PlatfMessages;
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView;
 import org.ourproject.kune.platf.client.dto.GroupDTO;
@@ -78,7 +77,7 @@
         noMembersPublic.setVisible(false);
         super.add(noMembersPublic);
 
-        toolbar = ((ActionToolbarPanel<StateToken>) actionToolbarView).getToolbar(ActionToolbarPosition.bottombar);
+        toolbar = ((ActionToolbarPanel<StateToken>) actionToolbarView).getToolbar();
         toolbar.setCleanStyle();
         super.add(toolbar);
         super.addInSummary();

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -24,8 +24,8 @@
 import org.ourproject.kune.chat.client.ChatEngine;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuRadioDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.RadioMustBeChecked;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
 import org.ourproject.kune.platf.client.dto.AccessListsDTO;
 import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
 import org.ourproject.kune.platf.client.dto.AccessRolDTO;
@@ -97,7 +97,7 @@
                 setState(state);
                 toolbar.disableMenusAndClearButtons();
                 toolbar.addActions(groupActionRegistry.getCurrentActions(state.getGroup().getStateToken(),
-                        session.isLogged(), state.getGroupRights(), true));
+                        session.isLogged(), state.getGroupRights(), true), ActionToolbar.IN_ANY);
                 toolbar.attach();
             }
         };
@@ -157,7 +157,7 @@
 
     private void createActions() {
         ActionToolbarMenuDescriptor<StateToken> addMember = new ActionToolbarMenuDescriptor<StateToken>(
-                AccessRolDTO.Administrator, ActionToolbarPosition.bottombar, new Listener<StateToken>() {
+                AccessRolDTO.Administrator, membersBottom, new Listener<StateToken>() {
                     public void onEvent(StateToken parameter) {
                         liveSearcherProvider.get().onSelection(new Listener<LinkDTO>() {
                             public void onEvent(final LinkDTO link) {
@@ -185,7 +185,7 @@
 
     private void createNewMembersPolicyAction(String textDescription, final AdmissionTypeDTO admissionPolicy) {
         ActionToolbarMenuRadioDescriptor<StateToken> newMembersPolicy = new ActionToolbarMenuRadioDescriptor<StateToken>(
-                AccessRolDTO.Administrator, ActionToolbarPosition.bottombar, new Listener<StateToken>() {
+                AccessRolDTO.Administrator, membersBottom, new Listener<StateToken>() {
                     public void onEvent(StateToken parameter) {
                         groupServiceProvider.get().setGroupNewMembersJoiningPolicy(session.getUserHash(),
                                 session.getCurrentState().getGroup().getStateToken(), admissionPolicy,
@@ -209,7 +209,7 @@
 
     private void createSetMembersVisibilityAction(String textDescription, final SocialNetworkVisibilityDTO visibility) {
         ActionToolbarMenuRadioDescriptor<StateToken> showMembers = new ActionToolbarMenuRadioDescriptor<StateToken>(
-                AccessRolDTO.Administrator, ActionToolbarPosition.bottombar, new Listener<StateToken>() {
+                AccessRolDTO.Administrator, membersBottom, new Listener<StateToken>() {
                     public void onEvent(StateToken parameter) {
                         groupServiceProvider.get().setSocialNetworkVisibility(session.getUserHash(),
                                 session.getCurrentState().getGroup().getStateToken(), visibility,

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/ParticipationSummaryPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/ParticipationSummaryPanel.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/ParticipationSummaryPanel.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -19,7 +19,6 @@
  */
 package org.ourproject.kune.workspace.client.socialnet;
 
-import org.ourproject.kune.platf.client.actions.ActionToolbarPosition;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView;
 import org.ourproject.kune.platf.client.dto.GroupDTO;
@@ -54,7 +53,7 @@
         // gridMenuPanel.onClick(go);
         gridMenuPanel.onDoubleClick(go);
         super.add(gridMenuPanel);
-        toolbar = ((ActionToolbarPanel<StateToken>) actionToolbarView).getToolbar(ActionToolbarPosition.bottombar);
+        toolbar = ((ActionToolbarPanel<StateToken>) actionToolbarView).getToolbar();
         toolbar.setCleanStyle();
         super.add(toolbar);
         addInSummary();

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -48,6 +48,9 @@
 
 public class SocialNetworkPresenter {
 
+    protected final ActionToolbarPosition membersBottom = new ActionToolbarPosition("sn-bottomtoolbar");
+    protected final ActionToolbarPosition buddiesBottom = new ActionToolbarPosition("sn-bottomtoolbar");
+
     protected MenuItem<GroupDTO> changeToCollabMenuItem;
     protected MenuItem<GroupDTO> removeMemberMenuItem;
     protected MenuItem<GroupDTO> changeToAdminMenuItem;
@@ -139,8 +142,8 @@
     }
 
     private void createButtons() {
-        participate = new ActionToolbarButtonDescriptor<StateToken>(AccessRolDTO.Viewer,
-                ActionToolbarPosition.bottombar, new Listener<StateToken>() {
+        participate = new ActionToolbarButtonDescriptor<StateToken>(AccessRolDTO.Viewer, membersBottom,
+                new Listener<StateToken>() {
                     public void onEvent(StateToken parameter) {
                         NotifyUser.showProgressProcessing();
                         snServiceProvider.get().requestJoinGroup(session.getUserHash(),
@@ -174,7 +177,7 @@
             }
         });
 
-        unJoin = new ActionToolbarMenuDescriptor<StateToken>(AccessRolDTO.Editor, ActionToolbarPosition.bottombar,
+        unJoin = new ActionToolbarMenuDescriptor<StateToken>(AccessRolDTO.Editor, membersBottom,
                 new Listener<StateToken>() {
                     public void onEvent(StateToken parameter) {
                         removeMemberAction();

Modified: trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -15,6 +15,7 @@
 public class ActionRegistryTest {
 
     private static final String DEF_CONTENT_TYPE_ID = "test";
+    private static final ActionToolbarPosition SOME_ID = new ActionToolbarPosition("some-id");
     private ActionRegistry<StateToken> registry;
     private ActionToolbarMenuAndItemDescriptor<StateToken> adminAction;
     private ActionToolbarMenuAndItemDescriptor<StateToken> editorAction;
@@ -36,13 +37,13 @@
     public void before() {
         session = Mockito.mock(Session.class);
         registry = new ActionRegistry<StateToken>();
-        adminAction = new ActionToolbarMenuAndItemDescriptor<StateToken>(AccessRolDTO.Administrator,
-                ActionToolbarPosition.topbar, new Listener<StateToken>() {
+        adminAction = new ActionToolbarMenuAndItemDescriptor<StateToken>(AccessRolDTO.Administrator, SOME_ID,
+                new Listener<StateToken>() {
                     public void onEvent(final StateToken parameter) {
                     }
                 });
-        editorAction = new ActionToolbarMenuAndItemDescriptor<StateToken>(AccessRolDTO.Editor,
-                ActionToolbarPosition.topbar, new Listener<StateToken>() {
+        editorAction = new ActionToolbarMenuAndItemDescriptor<StateToken>(AccessRolDTO.Editor, SOME_ID,
+                new Listener<StateToken>() {
                     public void onEvent(final StateToken parameter) {
                     }
                 });

Modified: trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java	2009-03-09 23:32:38 UTC (rev 1063)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java	2009-03-10 00:05:50 UTC (rev 1064)
@@ -5,18 +5,15 @@
 
 import org.junit.Before;
 import org.junit.Test;
-import org.ourproject.kune.platf.client.i18n.I18nTranslationServiceMocked;
 
 import com.google.gwt.user.client.ui.KeyboardListener;
 
 public class ActionShortcutTest {
 
-    private I18nTranslationServiceMocked i18n;
-
     @Test
     public void altS() {
         ActionShortcut shortcut = new ActionShortcut(true, false, false, 'S', null);
-        assertEquals(" (Alt+S)", shortcut.toString(i18n));
+        assertEquals(" (Alt+S)", shortcut.toString());
         assertTrue(shortcut.is('S', KeyboardListener.MODIFIER_ALT));
         assertTrue(!shortcut.is('S', KeyboardListener.MODIFIER_CTRL));
         assertTrue(!shortcut.is('S', KeyboardListener.MODIFIER_SHIFT));
@@ -24,13 +21,12 @@
 
     @Before
     public void before() {
-        i18n = new I18nTranslationServiceMocked();
     }
 
     @Test
     public void ctrl_coma() {
         ActionShortcut shortcut = new ActionShortcut(true, ',');
-        assertEquals(" (Ctrl+,)", shortcut.toString(i18n));
+        assertEquals(" (Ctrl+,)", shortcut.toString());
         assertTrue(shortcut.is(',', KeyboardListener.MODIFIER_CTRL));
         assertTrue(!shortcut.is(',', KeyboardListener.MODIFIER_ALT));
         assertTrue(!shortcut.is(',', KeyboardListener.MODIFIER_SHIFT));
@@ -39,7 +35,7 @@
     @Test
     public void ctrl_s() {
         ActionShortcut shortcut = new ActionShortcut(true, 's');
-        assertEquals(" (Ctrl+S)", shortcut.toString(i18n));
+        assertEquals(" (Ctrl+S)", shortcut.toString());
         assertTrue(shortcut.is('s', KeyboardListener.MODIFIER_CTRL));
         assertTrue(!shortcut.is('s', KeyboardListener.MODIFIER_ALT));
         assertTrue(!shortcut.is('s', KeyboardListener.MODIFIER_SHIFT));
@@ -48,7 +44,7 @@
     @Test
     public void ctrlS() {
         ActionShortcut shortcut = new ActionShortcut(true, 'S');
-        assertEquals(" (Ctrl+S)", shortcut.toString(i18n));
+        assertEquals(" (Ctrl+S)", shortcut.toString());
         assertTrue(shortcut.is('S', KeyboardListener.MODIFIER_CTRL));
         assertTrue(!shortcut.is('S', KeyboardListener.MODIFIER_ALT));
         assertTrue(!shortcut.is('S', KeyboardListener.MODIFIER_SHIFT));
@@ -57,7 +53,7 @@
     @Test
     public void ctrlShiftS() {
         ActionShortcut shortcut = new ActionShortcut(false, true, true, 'S', null);
-        assertEquals(" (Ctrl+Shift+S)", shortcut.toString(i18n));
+        assertEquals(" (Ctrl+Shift+S)", shortcut.toString());
         assertTrue(!shortcut.is('S', KeyboardListener.MODIFIER_ALT));
         assertTrue(shortcut.is('S', KeyboardListener.MODIFIER_SHIFT | KeyboardListener.MODIFIER_CTRL));
     }




More information about the kune-commits mailing list