[kune-commits] r1078 - in trunk: . src/main/java/org/ourproject/kune/app/public/css src/main/java/org/ourproject/kune/chat/client src/main/java/org/ourproject/kune/platf/client src/main/java/org/ourproject/kune/platf/client/actions src/main/java/org/ourproject/kune/platf/client/actions/toolbar src/main/java/org/ourproject/kune/platf/client/services src/main/java/org/ourproject/kune/platf/client/shortcuts src/main/java/org/ourproject/kune/platf/client/ui src/main/java/org/ourproject/kune/platf/client/ui/dialogs src/main/java/org/ourproject/kune/platf/client/ui/palette src/main/java/org/ourproject/kune/platf/client/ui/rte src/main/java/org/ourproject/kune/platf/client/ui/rte/basic src/main/java/org/ourproject/kune/platf/client/ui/rte/img src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable src/main/java/org/ourproject/kune/platf/client/ui/rte/saving src/main/java/org/ourproject/kune/workspace/client src/main/java/org/ourproject/kune/workspace/client/events src/main/java/org/ourproject/kune/workspace/client/hello src/test/java/org/ourproject/kune/platf/client/actions

vjrj vjrj at ourproject.org
Mon Mar 16 05:13:40 CET 2009


Author: vjrj
Date: 2009-03-16 05:13:36 +0100 (Mon, 16 Mar 2009)
New Revision: 1078

Added:
   trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/
   trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcut.java
   trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcutRegister.java
   trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/GlobalShortcutRegister.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalette.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPaletteView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalette.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePaletteView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/film.png
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractWysiwygClientTest.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialog.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogView.java
Removed:
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java
Modified:
   trunk/TODO
   trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
   trunk/src/main/java/org/ourproject/kune/app/public/css/docs.css
   trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java
   trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineDefault.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
   trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java
   trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalette.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePresenter.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePaletteView.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java
   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/rteimg.css
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfoTest.java
   trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/WorkspaceModule.java
   trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java
   trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java
Log:
Complete - task Insert Table Dialog 

Complete - task Better RTE (Rich Text Editor) support 


Modified: trunk/TODO
===================================================================
--- trunk/TODO	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/TODO	2009-03-16 04:13:36 UTC (rev 1078)
@@ -10,6 +10,45 @@
    Use org-mode in emacs to easy manage this file
 
 * SHORT-TERM (URGENT)
+** vjrj use xwiki maven repo
+   http://maven.xwiki.org/releases/com/xpn/xwiki/platform/xwiki-web-wysiwyg/1.8-rc-2/
+** vjrj <v> better RTE
+*** Pending
+**** W3C Range/Selection support in RTE
+     https://developer.mozilla.org/en/DOM/selection
+     http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
+     As an intro:
+     http://www.quirksmode.org/dom/range_intro.html
+     http://maven.xwiki.org/site/xwiki-web/xwiki-web-wysiwyg/apidocs/com/xpn/xwiki/wysiwyg/client/dom/internal/AbstractRange.html
+     other links:
+     http://groups.google.com/group/rocket-gwt/browse_frm/thread/e56540d4168479c0/d25dca75958ba923?hl=en-GB&lnk=gst&q=Range#d25dca75958ba923
+     http://code.google.com/p/gwt-html-editor/source/browse/branches/gwt1.4/src/com/gc/gwt/wysiwyg/public/fckeditor/editor/_source/classes/fckdomrange_ie.js?r=81
+**** Insert/Edit link
+***** use cases
+     ^<a href="http://example.com">sample</a>^   --- Parse and edit
+     <a href="http://example.com">s^ample</a>    --- Parse and edit
+     <a href="http://example.com">s^amp^le</a>   --- Parse and edit
+     ^some text <a href="http://example.com">samp^le</a>   --- new link with get inner content?
+**** Quite urgent: Shortcuts propagation to browser
+     http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/Event.html#preventDefault
+     http://openkm.cvs.sourceforge.net/viewvc/openkm/openkm/src/es/git/openkm/frontend/client/panel/ExtendedDockPanel.java?revision=1.20&view=markup
+     http://openkm.cvs.sourceforge.net/viewvc/openkm/openkm/src/es/git/openkm/frontend/client/util/Keyboard.java?revision=1.20&view=markup
+     http://whatwouldnickdo.com/wordpress/370/gwt-right-click-context-menu/
+**** with different menus (File/Blog ...)
+**** bidi support
+**** Insert special chars (for table or from unicode).
+**** images (local/remote) with preview
+**** youtube videos/podcasts
+**** Edit HTML
+**** File > Rename (F2)
+**** Insert > Special char
+**** Insert > Page break (for printing)
+**** Shortcut to fonts (Ctrl + numbers)
+*** Links
+   http://www.ongwt.com/post/2009/01/08/XWiki-:-Wysiwyg-editor-based-on-GWT
+   http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/internet/ie55/EditRegions/default.asp
+   http://www.mozilla.org/editor/midas-spec.html
+   http://mozilla.org/editor/midasdemo/
 ** vjrj <v> GWT 1.6
    http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3e7e6cc3b35ad98a
    http://code.google.com/p/google-web-toolkit/wiki/WAR_Design_1_6
@@ -77,43 +116,6 @@
    http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/DevGuideHistory
    http://en.wikipedia.org/wiki/Fragment_identifier
    http://www.w3.org/DesignIssues/Fragment.html
-** vjrj <v> better RTE
-*** Pending
-**** W3C Range/Selection support in RTE
-     https://developer.mozilla.org/en/DOM/selection
-     http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
-     As an intro:
-     http://www.quirksmode.org/dom/range_intro.html
-     http://maven.xwiki.org/site/xwiki-web/xwiki-web-wysiwyg/apidocs/com/xpn/xwiki/wysiwyg/client/dom/internal/AbstractRange.html
-     other links:
-     http://groups.google.com/group/rocket-gwt/browse_frm/thread/e56540d4168479c0/d25dca75958ba923?hl=en-GB&lnk=gst&q=Range#d25dca75958ba923
-     http://code.google.com/p/gwt-html-editor/source/browse/branches/gwt1.4/src/com/gc/gwt/wysiwyg/public/fckeditor/editor/_source/classes/fckdomrange_ie.js?r=81
-**** Insert/Edit link
-***** use cases
-     ^<a href="http://example.com">sample</a>^   --- Parse and edit
-     <a href="http://example.com">s^ample</a>    --- Parse and edit
-     <a href="http://example.com">s^amp^le</a>   --- Parse and edit
-     ^some text <a href="http://example.com">samp^le</a>   --- new link with get inner content?
-**** Quite urgent: Shortcuts propagation to browser
-     http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/Event.html#preventDefault
-     http://openkm.cvs.sourceforge.net/viewvc/openkm/openkm/src/es/git/openkm/frontend/client/panel/ExtendedDockPanel.java?revision=1.20&view=markup
-     http://openkm.cvs.sourceforge.net/viewvc/openkm/openkm/src/es/git/openkm/frontend/client/util/Keyboard.java?revision=1.20&view=markup
-     http://whatwouldnickdo.com/wordpress/370/gwt-right-click-context-menu/
-**** with different menus (File/Blog ...)
-**** bidi support
-**** Insert special chars (for table or from unicode).
-**** images (local/remote) with preview
-**** youtube videos/podcasts
-**** Edit HTML
-**** File > Rename (F2)
-**** Insert > Special char
-**** Insert > Page break (for printing)
-**** Shortcut to fonts (Ctrl + numbers)
-*** Links
-   http://www.ongwt.com/post/2009/01/08/XWiki-:-Wysiwyg-editor-based-on-GWT
-   http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/internet/ie55/EditRegions/default.asp
-   http://www.mozilla.org/editor/midas-spec.html
-   http://mozilla.org/editor/midasdemo/
 ** vjrj <v> rails group-shortname.kune-site-domain/tool-name/folder-id/doc-id routing, maybe use:
    http://agilewebdevelopment.com/plugins/request_routing
    http://wiki.rubyonrails.org/rails/pages/Request+Routing

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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css	2009-03-16 04:13:36 UTC (rev 1078)
@@ -35,7 +35,7 @@
 }
 */.kune-NavigationBar .topBar .gwt-Image{margin:0 2px 0 5px;}.kune-NavigationBar .Items{margin:2px 0;}.kune-NavigationBar .Items .gwt-Image{margin:2px 0;vertical-align:middle;}.kune-NavigationBar .Items .gwt-Hyperlink a{color:green;/* FIXME: other color */}.kune-NavigationBar .topBar .topBar-margin{margin-left:5px;}.kune-NavigationBar .pathMenu{vertical-align:middle;}.kune-NavigationBar .pathMenu .gwt-MenuItem{background:transparent url(img/button-bg-hard.gif) repeat-x 0 0;border-left:1px solid #AAA;border-right:1px solid #AAA;color:#999;cursor:pointer;white-space:nowrap;padding:3px 6px;}.kune-NavigationBar .pathMenu .gwt-MenuItem-selected{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#000;}.kune-NavigationBar .kune-IconHyperlink{vertical-align:middle;margin-left:5px;}.kune-NavigationBar .kune-IconHyperlink a{color:green;text-decoration:none;}.kune-NavigationBar .kune-IconHyperlink .gwt-Image{margin-right:3px;vertical-align:middle;}/* Social Network */.kune-StackedDropDownPanel{}.kune-StackedDropDownPanel .gwt-StackPanelItem{border-top:1px solid #CCC;border-bottom:1px solid #CCC;background-color:#EFA;cursor:pointer;padding:1px 3px 0 6px;overflow:hidden;}.kune-StackedDropDownPanel .gwt-StackPanelItem img{margin:0 0 0 3px;vertical-align:middle;}.kune-StackedDropDownPanel .kune-DropDownInner table{width:100%;}.kune-StackedDropDownPanel .gwt-StackPanelItem-selected{}.kune-StackedDropDownPanelLink{background-color:#E6E6E6;border-top:1px solid #CCC;border-bottom:1px solid #F2F2F2;/*  white-space: nowrap; */cursor:pointer;}.kune-StackedDropDownPanel .kune-DropDownInner{padding:0;}/* StackedDropDownPanel Members */.kune-StackSubItemLabel{overflow:hidden;}.kune-StackSubItemLabel .gwt-MenuItem{white-space:nowrap;cursor:pointer;border-bottom:1px solid #F2F2F2;}.kune-StackSubItemLabel table{width:100%;}.kune-StackSubItemLabel .gwt-MenuItem img{vertical-align:middle;margin-top:1px;margin-bottom:1px;margin-left:5px;margin-right:3px;}.kune-StackSubItemLabel .gwt-MenuItem-selected{background-color:#FFE6D5;}.kune-StackSubItemActions{background-color:#F2F2F2;border:1px solid #999;vertical-align:middle;padding:5px 0;margin-left:-120px;margin-top:-2px;}.kune-StackSubItemActions .gwt-MenuItem{cursor:pointer;padding:1px 10px;white-space:nowrap;}.kune-StackSubItemActions .gwt-MenuItem img{vertical-align:middle;margin-right:3px;}.kune-StackSubItemActions .gwt-MenuItem-selected{background-color:#FFB958;}/* AccessList */.kune-AccessListSubLabel{font-style:italic;}.kune-AccessList{margin:5px;width:100%;}.kune-AccessList .gwt-DisclosurePanel{margin:5px;width:100%;}.kune-AccessList .gwt-DisclosurePanel-open{width:100%;}.kune-AccessList .gwt-DisclosurePanel-closed{width:100%;}.kune-AccessList .header{margin:0 0 3px;text-decoration:none;width:100%;background-color:#8DD35F;}.kune-AccessList .header table{margin:0 5px 0 0;width:100%;color:#FFF;}.kune-AccessList .header img{margin:0 3px 0 0;}.kune-AccessList .content{margin:0 0 0 7px;width:100%;}.kune-AccessList .content table{margin-bottom:5px;width:100%;}/* Rate */.kune-RatePanel-Label{white-space:nowrap;vertical-align:middle;}.kune-RatePanel-Stars{margin-left:5px;vertical-align:middle;}.kune-RatePanel-Stars-RateIt{cursor:pointer;}/* Licenses */.kune-License-CC-Header{color:#15428B;font-weight:700;font-size:85%;margin-top:5px;}.kune-License-CC-Header .gwt-Label{color:#15428B;font-weight:700;font-size:85%;margin-top:5px;}/* Theme */.kune-IconBottomPanel .gwt-MenuItem{cursor:pointer;background-color:#FFF;margin:2px 2px 2px 5px;}.kune-IconBottomPanel .gwt-MenuItem-selected{background-color:#F2F2F2;}.gwt-MenuBar-bottomMenu{margin-left:-60px;margin-top:-120px;}/* i18n */.kune-I18nTranslatorCell{white-space:normal;}.kune-i18nTranslator-recommend{margin:10px;}.kune-i18nTranslator-recommend h1{font-size:131%;font-weight:700;}.kune-i18nTranslator-recommend h2{font-size:116%;font-weight:700;}.kune-i18nTranslator-recommend h3{font-size:108%;font-weight:700;font-style:italic;}.kune-i18nTranslator-recommend em{font-weight:700;}.kune-i18nTranslator-recommend strong{font-weight:700;}/* Admin Context */.kune-AdminContextPanel{margin:6px;width:100%;}.kune-AdminContextPanel .gwt-StackPanelItem{background:transparent url(img/arrow-right-white.gif) no-repeat scroll 3px 2px;cursor:pointer;padding:3px 10px 1px 20px;overflow:hidden;width:100%;}.kune-AdminContextPanel .gwt-StackPanelItem img{margin:0 0 0 3px;vertical-align:middle;}.kune-AdminContextPanel .gwt-StackPanelItem-selected{background:transparent url(img/arrow-down-white.gif) no-repeat scroll 3px 2px;background-color:#DEE3DB;}.kune-AdminContextPanelLink{background-color:#E6E6E6;border-top:1px solid #CCC;border-bottom:1px solid #F2F2F2;/* white-space: nowrap; */cursor:pointer;}.kune-AdminContextPanel-inner{background-color:#FFF;}.kune-AdminContextPanel-inner-wrap{margin:5px;}.kune-EditableLabel{}.kune-EditableLabel .kune-EditableLabel-editable{}.kune-EditableLabel-high{background-color:#FFFBC1;cursor:pointer;}.kune-EditableLabel-high span{background-color:#FFFBC1;}.kune-EditableLabel a{margin-left:5px;}.kune-EditableLabel a:link{color:green;}.kune-EditableLabel a:hover{text-decoration:underline;}.kune-EditableLabel a:visited{color:olive;}.kune-EditableLabel img{margin-right:4px;vertical-align:middle;}.kune-EditableLabel-editable img{margin-right:4px;vertical-align:middle;}.kune-EditableLabel-editable span{margin:3px;}.kune-EditableLabel span{margin:3px;}.kune-BottomIconsTrayPanel{width:165px;height:21px;vertical-align:middle;background-color:#EFEFEF;}.kune-Content-Main{margin:5px;}/* Yahoo ui base.css */.kune-Content-Main h1{font-size:138.5%;}.kune-Content-Main h2{font-size:123.099998%;}.kune-Content-Main h3{font-size:108%;}.kune-Content-Main h1{margin:1em 0;}.kune-Content-Main h2{margin:1em 0;}.kune-Content-Main h3{margin:1em 0;}.kune-Content-Main h1{font-weight:700;}.kune-Content-Main h2{font-weight:700;}.kune-Content-Main h3{font-weight:700;}.kune-Content-Main h4{font-weight:700;}.kune-Content-Main h5{font-weight:700;}.kune-Content-Main h6{font-weight:700;}.kune-Content-Main strong{font-weight:700;}.kune-Content-Main abbr{border-bottom:1px dotted #000;cursor:help;}.kune-Content-Main acronym{border-bottom:1px dotted #000;cursor:help;}.kune-Content-Main em{font-style:italic;}.kune-Content-Main blockquote{margin:1em;}.kune-Content-Main ul{margin:1em;}.kune-Content-Main ol{margin:1em;}.kune-Content-Main dl{margin:1em;}.kune-Content-Main ol{margin-left:2em;}.kune-Content-Main ul{margin-left:2em;}.kune-Content-Main dl{margin-left:2em;}.kune-Content-Main ol{list-style:decimal outside;}.kune-Content-Main li{list-style:decimal outside;}.kune-Content-Main li{list-style:disc outside;}.kune-Content-Main ul{list-style:disc outside;}.kune-Content-Main dl{margin-left:1em;}.kune-Content-Main dd{margin-left:1em;}.kune-Content-Main th{border:1px solid #000;padding:.5em;font-weight:700;text-align:center;}.kune-Content-Main td{border:1px solid #000;padding:.5em;}.kune-Content-Main caption{margin-bottom:.5em;text-align:center;}.kune-Content-Main p{margin-bottom:1em;}.kune-Content-Main fieldset{margin-bottom:1em;}.kune-Content-Main table{margin-bottom:1em;}.kune-Content-Main pre{margin-bottom:1em;}.kune-Content-Main input[type=text]{width:12.25em;width:11.9em;}.kune-Content-Main input[type=password]{width:12.25em;width:11.9em;}.kune-Content-Main textarea{width:12.25em;width:11.9em;}.search-icon{background-image:url(img/search.gif)!important;}.i18n-icon{background-image:url(img/language.gif)!important;}/* RTE Text editor */.kune-TexEditorPanel-TextArea{margin:3px;}.gwt-RichTextArea{/* border: 1px solid #000;
     background-color: #FFF; */border:1px solid #4D4D4D;background-color:#FFF;margin:5px 0 5px 10px;}.gwt-RichTextToolbar{/* background-color: #F2F2F2;
-  padding: 5px; */height:24px;vertical-align:middle;}.gwt-RichTextToolbar table{vertical-align:middle;}.gwt-RichTextToolbar .gwt-ToggleButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-PushButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-PushButton-down{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-PushButton-down-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-ToggleButton-down{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .x-btn{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lSpace{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lrSpace{float:left;}.RichTextToolbar-menu{float:left;margin-top:2px;z-index:4;}.RichTextToolbar-menu table{border-collapse:collapse;border-spacing:0;margin:0;z-index:4;}.RichTextToolbar-menu .gwt-MenuItem{margin-right:2px;border:1px solid #F2F2F2;}.RichTextToolbar-menu .gwt-MenuItem-selected{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.RichTextToolbar-submenu{background-color:#FFFCD5;border:1px solid #D38D5F;cursor:default;z-index:4;}.RichTextToolbar-submenu .gwt-MenuItem{cursor:default;white-space:nowrap;border:1px solid #FFFCD5;padding:0 4px;}.RichTextToolbar-submenu .gwt-MenuItem-selected{background-color:#FFB958;border:1px solid #C83737;}.kune-WebSafePalette{background-color:#FFF;border:1px solid #AAA;margin:1px;}.kune-WebSafePalette-popup{z-index:9999!important;}.kune-WebSafePalette td{width:12px;height:10px;}.k-site-traybar{background:#FFF none repeat scroll 0 50%;}.k-blank-toolbar{background:#FFF none repeat scroll 0 50%;}.k-sitebar .kune-IconHyperlink{white-space:nowrap;}.k-sitebar .kune-IconHyperlink a:link{cursor:pointer;text-decoration:underline;color:#B3B3B3;}.k-sitebar .kune-IconHyperlink a:hover{text-decoration:underline;}.k-sitebar .kune-IconHyperlink a:visited{color:#B3B3B3;}.k-sitebar-labellink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-sitebar{margin-right:10px;height:16px;background:#FFF;}.k-sitebar .gwt-TextBox{border:1px solid #E4A374;margin:0 15px 0 3px;padding-left:1px;color:#B3B3B3;}.k-sitebar .gwt-Hyperlink a{white-space:nowrap;color:#B3B3B3;text-decoration:underline;cursor:pointer;}.k-sitebar .gwt-PushButton{cursor:pointer;}.k-sitebar-LabelLink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-entity-summary{border-left-color:#FFF;border-left-width:5px;border-bottom-color:#FFF;border-bottom-width:5px;}.k-entitytextlogo-border{border:2px solid #F2F2F2;}.k-entitytextlogo-no-border{border:none;}.k-entitytextlogo{height:60px;margin:0 0 4px;overflow:hidden;width:468px;}.k-entitytextlogo table{vertical-align:middle;}.k-elogo-l-l{font-size:272%;}.k-elogo-l-m{font-size:167%;}.k-elogo-l-s{font-size:108%;}.k-entitytextlogo .gwt-Label{font-weight:700;margin:5px;height:27px;}.k-entitytextlogo-default .gwt-Label{color:#69312F;}.k-entitytextlogo-green .gwt-Label{color:#250;}.k-entitytextlogo-blue .gwt-Label{color:navy;}.k-entitytextlogo-grey .gwt-Label{color:#1A1A1A;}.k-entitytextlogo-purple .gwt-Label{color:#405;}.k-entitytextlogo-red .gwt-Label{color:maroon;}.k-elogo-plink{color:#CCC;font-size:85%;margin:5px;text-decoration:underline;white-space:nowrap;background-color:#FFF;}.k-elogop-expand{background-color:transparent;}.k-entity-default .x-layout-split,.k-entity-default .x-layout-collapsed{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-green .x-layout-split,.k-entity-green .x-layout-collapsed{background:#5FD35F none repeat scroll 0 50%;}.k-entity-blue .x-layout-split,.k-entity-blue .x-layout-collapsed{background:#06F none repeat scroll 0 50%;}.k-entity-grey .x-layout-split,.k-entity-grey .x-layout-collapsed{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-purple .x-layout-split,.k-entity-purple .x-layout-collapsed{background:#660080 none repeat scroll 0 50%;}.k-entity-red .x-layout-split,.k-entity-red .x-layout-collapsed{background:#D40000 none repeat scroll 0 50%;}.k-entityworkspace .x-layout-split,.k-entityworkspace .x-layout-collapsed{background:transparent none repeat scroll 0 50%;}.k-entityworkspace-default .x-layout-split,.k-entityworkspace-default .x-layout-collapsed{background:#DEAA87 none repeat scroll 0 50%;}.k-entityworkspace-green .x-layout-split,.k-entityworkspace-green .x-layout-collapsed{background:#DCE8AB none repeat scroll 0 50%;}.k-entityworkspace-blue .x-layout-split,.k-entityworkspace-blue .x-layout-collapsed{background:#D5D5FF none repeat scroll 0 50%;}.k-entityworkspace-grey .x-layout-split,.k-entityworkspace-grey .x-layout-collapsed{background:#999 none repeat scroll 0 50%;}.k-entityworkspace-purple .x-layout-split,.k-entityworkspace-purple .x-layout-collapsed{background:#A793AC none repeat scroll 0 50%;}.k-entityworkspace-red .x-layout-split,.k-entityworkspace-red .x-layout-collapsed{background:#F55 none repeat scroll 0 50%;}.k-entity-title{border-left-style:solid;border-left-width:2px;}.k-entity-title div{line-height:22px;white-space:nowrap;}.k-entity-subtitle{}.k-entity-subtitle div{line-height:22px;white-space:nowrap;}.k-entity-title-rd-default{background:#DD8A3D;}.k-entity-title-rd-green{background:#5FD35F;}.k-entity-title-rd-blue{background:#06F;}.k-entity-title-rd-grey{background:#4D4D4D;}.k-entity-title-rd-purple{background:#660080;}.k-entity-title-rd-red{background:#D40000;}.k-entity-title-default{background:#F1BB59 none repeat scroll 0 50%;border-left-color:#DD8A3D;}.k-entity-title-green{background:#AFA none repeat scroll 0 50%;border-left-color:#5FD35F;}.k-entity-title-blue{background:#AFDDE9 none repeat scroll 0 50%;border-left-color:#06F;}.k-entity-title-grey{background:#CCC none repeat scroll 0 50%;border-left-color:#4D4D4D;}.k-entity-title-purple{background:#DDAFE9 none repeat scroll 0 50%;border-left-color:#660080;}.k-entity-title-red{background:#FF8080 none repeat scroll 0 50%;border-left-color:#D40000;}.k-entity-title-default div{color:#69312F;}.k-entity-title-green div{color:#250;}.k-entity-title-blue div{color:navy;}.k-entity-title-grey div{color:#1A1A1A;}.k-entity-title-purple div{color:#405;}.k-entity-title-red div{color:maroon;}.k-entity-subtitle-default{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-subtitle-green{background:#5FD35F none repeat scroll 0 50%;}.k-entity-subtitle-blue{background:#06F none repeat scroll 0 50%;}.k-entity-subtitle-grey{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-subtitle-purple{background:#660080 none repeat scroll 0 50%;}.k-entity-subtitle-red{background:#D40000 none repeat scroll 0 50%;}.k-entity-subtitle-default div{color:#FFF;}.k-entity-subtitle-green div{color:#FFF;}.k-entity-subtitle-blue div{color:#FFF;}.k-entity-subtitle-grey div{color:#FFF;}.k-entity-subtitle-purple div{color:#FFF;}.k-entity-subtitle-red div{color:#FFF;}.k-entity-bottom-rd-default,.k-entity-bottom-default,.k-toolselectoritem-sel-default{background:#DD8A3D;}.k-entity-bottom-rd-green,.k-entity-bottom-green,.k-toolselectoritem-sel-green{background:#5FD35F;}.k-entity-bottom-rd-blue,.k-entity-bottom-blue,.k-toolselectoritem-sel-blue{background:#06F;}.k-entity-bottom-rd-grey,.k-entity-bottom-grey,.k-toolselectoritem-sel-grey{background:#4D4D4D;}.k-entity-bottom-rd-purple,.k-entity-bottom-purple,.k-toolselectoritem-sel-purple{background:#660080;}.k-entity-bottom-rd-red,.k-entity-bottom-red,.k-toolselectoritem-sel-red{background:#D40000;}.k-entity-context-default div,.k-entity-context-default .x-tree .x-panel-body{background:#FFD09D none repeat scroll 0 50%;}.k-entity-context-green div,.k-entity-context-green .x-tree .x-panel-body{background:#CFA none repeat scroll 0 50%;}.k-entity-context-blue div,.k-entity-context-blue .x-tree .x-panel-body{background:#ACF none repeat scroll 0 50%;}.k-entity-context-grey div,.k-entity-context-grey .x-tree .x-panel-body{background:#B3B3B3 none repeat scroll 0 50%;}.k-entity-context-purple div,.k-entity-context-purple .x-tree .x-panel-body{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-context-red div,.k-entity-context-red .x-tree .x-panel-body{background:#FAA none repeat scroll 0 50%;}.k-entity-context-purple .x-tree .x-panel-body{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-bottom div{/* line-height: 24px; */color:#FFF;}.k-toolbar-top-line{border-top-color:#d0d0d0;border-top-style:solid;border-top-width:1px;}.k-toolbar-bottom-line{border-bottom-color:#d0d0d0;border-bottom-style:solid;border-bottom-width:1px;}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial, sans;line-height:19px;}.k-toolbar-sep{padding-top:4px;padding-left:5px;}/* Custom gwt-ext styles */.ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px;border:0;}.ytb-spacer{width:2px;}.x-grid-group-hd{border-bottom:2px solid grey;cursor:pointer;padding-top:3px;}/* Drop down */.k-dropdownouter{background-color:grey;}.k-dropdownouter-members{}.k-dropdownouter-members-default{background-color:#DF5244;}.k-dropdownouter-members-green{background-color:green;}.k-dropdownouter-members-blue{background-color:#5500D4;}.k-dropdownouter-members-grey{background-color:#4D4D4D;}.k-dropdownouter-members-purple{background-color:#672178;}.k-dropdownouter-members-red{background-color:#A02C2C;}.k-dropdownouter-part{}.k-dropdownouter-part-default{background-color:#CA5842;}.k-dropdownouter-part-green{background-color:#0A0;}.k-dropdownouter-part-blue{background-color:#60F;}.k-dropdownouter-part-grey{background-color:#666;}.k-dropdownouter-part-purple{background-color:#892CA0;}.k-dropdownouter-part-red{background-color:#C83737;}.k-dropdownouter-tags{}.k-dropdownouter-tags-default{background-color:#87501E;}.k-dropdownouter-tags-green{background-color:#00D400;}.k-dropdownouter-tags-blue{background-color:#95F;}.k-dropdownouter-tags-grey{background-color:gray;}.k-dropdownouter-tags-purple{background-color:#AB37C8;}.k-dropdownouter-tags-red{background-color:#D35F5F;}.k-dropdownouter-summary{}.k-dropdownouter-summary-default{background-color:#9F734B;}.k-dropdownouter-summary-green{background-color:#4CE14C;}.k-dropdownouter-summary-blue{background-color:#69A5FF;}.k-dropdownouter-summary-grey{background-color:#A6A6A6;}.k-dropdownouter-summary-purple{background-color:#C473D8;}.k-dropdownouter-summary-red{background-color:#E08F8F;}.k-dropdowninner{margin:0 3px 1px;background:green;background-color:#FFF;/* padding: 3px; */}.k-dropdownlabel{color:#FFF;cursor:pointer;}.k-dropdownlabel .gwt-Label{margin:0 5px 0 0;width:100%;}.k-dropdownlabel img{margin:0 3px 0 1px;}/* WsTheme */.k-wstheme-icon-default{background:#FF8C00;}.k-wstheme-icon-green{background:green;}.k-wstheme-icon-blue{background:blue;}.k-wstheme-icon-grey{background:grey;}.k-wstheme-icon-purple{background:purple;}.k-wstheme-icon-red{background:red;}/* Tool selector items */.k-toolselectoritem{width:auto;margin-bottom:5px;cursor:pointer;}.k-toolselectoritem-sel{}.k-toolselectoritem-notsel-default{background:#FFE9A5;}.k-toolselectoritem-notsel-green{background:#D6F4D6;}.k-toolselectoritem-notsel-blue{background:#D7D7F4;}.k-toolselectoritem-notsel-grey{background:#E6E6E6;}.k-toolselectoritem-notsel-purple{background:#EED7F4;}.k-toolselectoritem-notsel-red{background:#FFD5D5;}.k-toolselectoritem-sel a{color:#FFF;padding:0 9px;text-decoration:none;}.k-toolselectoritem-sel a:hover{text-decoration:none;}.k-toolselectoritem-notsel{}.k-toolselectoritem-notsel a{color:#00F;padding:0 9px;text-decoration:none;}.k-toolselectoritem-notsel a:hover{text-decoration:underline;}/* others *//*
+  padding: 5px; */height:24px;vertical-align:middle;}.gwt-RichTextToolbar table{vertical-align:middle;}.gwt-RichTextToolbar .gwt-ToggleButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-PushButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-PushButton-down{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-PushButton-down-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-ToggleButton-down{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .x-btn{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lSpace{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lrSpace{float:left;}.RichTextToolbar-menu{float:left;margin-top:2px;z-index:4;}.RichTextToolbar-menu table{border-collapse:collapse;border-spacing:0;margin:0;z-index:4;}.RichTextToolbar-menu .gwt-MenuItem{margin-right:2px;border:1px solid #F2F2F2;}.RichTextToolbar-menu .gwt-MenuItem-selected{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.RichTextToolbar-submenu{background-color:#FFFCD5;border:1px solid #D38D5F;cursor:default;z-index:4;}.RichTextToolbar-submenu .gwt-MenuItem{cursor:default;white-space:nowrap;border:1px solid #FFFCD5;padding:0 4px;}.RichTextToolbar-submenu .gwt-MenuItem-selected{background-color:#FFB958;border:1px solid #C83737;}.kune-WebSafePalette{background-color:#FFF;border:1px solid #AAA;margin:1px;}.kune-WebSafePalette-popup{z-index:9999!important;background-color:#FFF;}.kune-WebSafePalette td{width:12px;height:10px;}.k-site-traybar{background:#FFF none repeat scroll 0 50%;}.k-blank-toolbar{background:#FFF none repeat scroll 0 50%;}.k-sitebar .kune-IconHyperlink{white-space:nowrap;}.k-sitebar .kune-IconHyperlink a:link{cursor:pointer;text-decoration:underline;color:#B3B3B3;}.k-sitebar .kune-IconHyperlink a:hover{text-decoration:underline;}.k-sitebar .kune-IconHyperlink a:visited{color:#B3B3B3;}.k-sitebar-labellink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-sitebar{margin-right:10px;height:16px;background:#FFF;}.k-sitebar .gwt-TextBox{border:1px solid #E4A374;margin:0 15px 0 3px;padding-left:1px;color:#B3B3B3;}.k-sitebar .gwt-Hyperlink a{white-space:nowrap;color:#B3B3B3;text-decoration:underline;cursor:pointer;}.k-sitebar .gwt-PushButton{cursor:pointer;}.k-sitebar-LabelLink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-entity-summary{border-left-color:#FFF;border-left-width:5px;border-bottom-color:#FFF;border-bottom-width:5px;}.k-entitytextlogo-border{border:2px solid #F2F2F2;}.k-entitytextlogo-no-border{border:none;}.k-entitytextlogo{height:60px;margin:0 0 4px;overflow:hidden;width:468px;}.k-entitytextlogo table{vertical-align:middle;}.k-elogo-l-l{font-size:272%;}.k-elogo-l-m{font-size:167%;}.k-elogo-l-s{font-size:108%;}.k-entitytextlogo .gwt-Label{font-weight:700;margin:5px;height:27px;}.k-entitytextlogo-default .gwt-Label{color:#69312F;}.k-entitytextlogo-green .gwt-Label{color:#250;}.k-entitytextlogo-blue .gwt-Label{color:navy;}.k-entitytextlogo-grey .gwt-Label{color:#1A1A1A;}.k-entitytextlogo-purple .gwt-Label{color:#405;}.k-entitytextlogo-red .gwt-Label{color:maroon;}.k-elogo-plink{color:#CCC;font-size:85%;margin:5px;text-decoration:underline;white-space:nowrap;background-color:#FFF;}.k-elogop-expand{background-color:transparent;}.k-entity-default .x-layout-split,.k-entity-default .x-layout-collapsed{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-green .x-layout-split,.k-entity-green .x-layout-collapsed{background:#5FD35F none repeat scroll 0 50%;}.k-entity-blue .x-layout-split,.k-entity-blue .x-layout-collapsed{background:#06F none repeat scroll 0 50%;}.k-entity-grey .x-layout-split,.k-entity-grey .x-layout-collapsed{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-purple .x-layout-split,.k-entity-purple .x-layout-collapsed{background:#660080 none repeat scroll 0 50%;}.k-entity-red .x-layout-split,.k-entity-red .x-layout-collapsed{background:#D40000 none repeat scroll 0 50%;}.k-entityworkspace .x-layout-split,.k-entityworkspace .x-layout-collapsed{background:transparent none repeat scroll 0 50%;}.k-entityworkspace-default .x-layout-split,.k-entityworkspace-default .x-layout-collapsed{background:#DEAA87 none repeat scroll 0 50%;}.k-entityworkspace-green .x-layout-split,.k-entityworkspace-green .x-layout-collapsed{background:#DCE8AB none repeat scroll 0 50%;}.k-entityworkspace-blue .x-layout-split,.k-entityworkspace-blue .x-layout-collapsed{background:#D5D5FF none repeat scroll 0 50%;}.k-entityworkspace-grey .x-layout-split,.k-entityworkspace-grey .x-layout-collapsed{background:#999 none repeat scroll 0 50%;}.k-entityworkspace-purple .x-layout-split,.k-entityworkspace-purple .x-layout-collapsed{background:#A793AC none repeat scroll 0 50%;}.k-entityworkspace-red .x-layout-split,.k-entityworkspace-red .x-layout-collapsed{background:#F55 none repeat scroll 0 50%;}.k-entity-title{border-left-style:solid;border-left-width:2px;}.k-entity-title div{line-height:22px;white-space:nowrap;}.k-entity-subtitle{}.k-entity-subtitle div{line-height:22px;white-space:nowrap;}.k-entity-title-rd-default{background:#DD8A3D;}.k-entity-title-rd-green{background:#5FD35F;}.k-entity-title-rd-blue{background:#06F;}.k-entity-title-rd-grey{background:#4D4D4D;}.k-entity-title-rd-purple{background:#660080;}.k-entity-title-rd-red{background:#D40000;}.k-entity-title-default{background:#F1BB59 none repeat scroll 0 50%;border-left-color:#DD8A3D;}.k-entity-title-green{background:#AFA none repeat scroll 0 50%;border-left-color:#5FD35F;}.k-entity-title-blue{background:#AFDDE9 none repeat scroll 0 50%;border-left-color:#06F;}.k-entity-title-grey{background:#CCC none repeat scroll 0 50%;border-left-color:#4D4D4D;}.k-entity-title-purple{background:#DDAFE9 none repeat scroll 0 50%;border-left-color:#660080;}.k-entity-title-red{background:#FF8080 none repeat scroll 0 50%;border-left-color:#D40000;}.k-entity-title-default div{color:#69312F;}.k-entity-title-green div{color:#250;}.k-entity-title-blue div{color:navy;}.k-entity-title-grey div{color:#1A1A1A;}.k-entity-title-purple div{color:#405;}.k-entity-title-red div{color:maroon;}.k-entity-subtitle-default{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-subtitle-green{background:#5FD35F none repeat scroll 0 50%;}.k-entity-subtitle-blue{background:#06F none repeat scroll 0 50%;}.k-entity-subtitle-grey{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-subtitle-purple{background:#660080 none repeat scroll 0 50%;}.k-entity-subtitle-red{background:#D40000 none repeat scroll 0 50%;}.k-entity-subtitle-default div{color:#FFF;}.k-entity-subtitle-green div{color:#FFF;}.k-entity-subtitle-blue div{color:#FFF;}.k-entity-subtitle-grey div{color:#FFF;}.k-entity-subtitle-purple div{color:#FFF;}.k-entity-subtitle-red div{color:#FFF;}.k-entity-bottom-rd-default,.k-entity-bottom-default,.k-toolselectoritem-sel-default{background:#DD8A3D;}.k-entity-bottom-rd-green,.k-entity-bottom-green,.k-toolselectoritem-sel-green{background:#5FD35F;}.k-entity-bottom-rd-blue,.k-entity-bottom-blue,.k-toolselectoritem-sel-blue{background:#06F;}.k-entity-bottom-rd-grey,.k-entity-bottom-grey,.k-toolselectoritem-sel-grey{background:#4D4D4D;}.k-entity-bottom-rd-purple,.k-entity-bottom-purple,.k-toolselectoritem-sel-purple{background:#660080;}.k-entity-bottom-rd-red,.k-entity-bottom-red,.k-toolselectoritem-sel-red{background:#D40000;}.k-entity-context-default div,.k-entity-context-default .x-tree .x-panel-body{background:#FFD09D none repeat scroll 0 50%;}.k-entity-context-green div,.k-entity-context-green .x-tree .x-panel-body{background:#CFA none repeat scroll 0 50%;}.k-entity-context-blue div,.k-entity-context-blue .x-tree .x-panel-body{background:#ACF none repeat scroll 0 50%;}.k-entity-context-grey div,.k-entity-context-grey .x-tree .x-panel-body{background:#B3B3B3 none repeat scroll 0 50%;}.k-entity-context-purple div,.k-entity-context-purple .x-tree .x-panel-body{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-context-red div,.k-entity-context-red .x-tree .x-panel-body{background:#FAA none repeat scroll 0 50%;}.k-entity-context-purple .x-tree .x-panel-body{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-bottom div{/* line-height: 24px; */color:#FFF;}.k-toolbar-top-line{border-top-color:#d0d0d0;border-top-style:solid;border-top-width:1px;}.k-toolbar-bottom-line{border-bottom-color:#d0d0d0;border-bottom-style:solid;border-bottom-width:1px;}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial, sans;line-height:19px;}.k-toolbar-sep{padding-top:4px;padding-left:5px;}/* Custom gwt-ext styles */.ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px;border:0;}.ytb-spacer{width:2px;}.x-grid-group-hd{border-bottom:2px solid grey;cursor:pointer;padding-top:3px;}/* Drop down */.k-dropdownouter{background-color:grey;}.k-dropdownouter-members{}.k-dropdownouter-members-default{background-color:#DF5244;}.k-dropdownouter-members-green{background-color:green;}.k-dropdownouter-members-blue{background-color:#5500D4;}.k-dropdownouter-members-grey{background-color:#4D4D4D;}.k-dropdownouter-members-purple{background-color:#672178;}.k-dropdownouter-members-red{background-color:#A02C2C;}.k-dropdownouter-part{}.k-dropdownouter-part-default{background-color:#CA5842;}.k-dropdownouter-part-green{background-color:#0A0;}.k-dropdownouter-part-blue{background-color:#60F;}.k-dropdownouter-part-grey{background-color:#666;}.k-dropdownouter-part-purple{background-color:#892CA0;}.k-dropdownouter-part-red{background-color:#C83737;}.k-dropdownouter-tags{}.k-dropdownouter-tags-default{background-color:#87501E;}.k-dropdownouter-tags-green{background-color:#00D400;}.k-dropdownouter-tags-blue{background-color:#95F;}.k-dropdownouter-tags-grey{background-color:gray;}.k-dropdownouter-tags-purple{background-color:#AB37C8;}.k-dropdownouter-tags-red{background-color:#D35F5F;}.k-dropdownouter-summary{}.k-dropdownouter-summary-default{background-color:#9F734B;}.k-dropdownouter-summary-green{background-color:#4CE14C;}.k-dropdownouter-summary-blue{background-color:#69A5FF;}.k-dropdownouter-summary-grey{background-color:#A6A6A6;}.k-dropdownouter-summary-purple{background-color:#C473D8;}.k-dropdownouter-summary-red{background-color:#E08F8F;}.k-dropdowninner{margin:0 3px 1px;background:green;background-color:#FFF;/* padding: 3px; */}.k-dropdownlabel{color:#FFF;cursor:pointer;}.k-dropdownlabel .gwt-Label{margin:0 5px 0 0;width:100%;}.k-dropdownlabel img{margin:0 3px 0 1px;}/* WsTheme */.k-wstheme-icon-default{background:#FF8C00;}.k-wstheme-icon-green{background:green;}.k-wstheme-icon-blue{background:blue;}.k-wstheme-icon-grey{background:grey;}.k-wstheme-icon-purple{background:purple;}.k-wstheme-icon-red{background:red;}/* Tool selector items */.k-toolselectoritem{width:auto;margin-bottom:5px;cursor:pointer;}.k-toolselectoritem-sel{}.k-toolselectoritem-notsel-default{background:#FFE9A5;}.k-toolselectoritem-notsel-green{background:#D6F4D6;}.k-toolselectoritem-notsel-blue{background:#D7D7F4;}.k-toolselectoritem-notsel-grey{background:#E6E6E6;}.k-toolselectoritem-notsel-purple{background:#EED7F4;}.k-toolselectoritem-notsel-red{background:#FFD5D5;}.k-toolselectoritem-sel a{color:#FFF;padding:0 9px;text-decoration:none;}.k-toolselectoritem-sel a:hover{text-decoration:none;}.k-toolselectoritem-notsel{}.k-toolselectoritem-notsel a{color:#00F;padding:0 9px;text-decoration:none;}.k-toolselectoritem-notsel a:hover{text-decoration:underline;}/* others *//*
 .x-tree-node a span, .x-dd-drag-ghost a span {
     color:#000000;
     padding: 1px 0px 1px 1px;

Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/docs.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/docs.css	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/docs.css	2009-03-16 04:13:36 UTC (rev 1078)
@@ -142,7 +142,8 @@
 }
 
 .kune-WebSafePalette-popup {
-      z-index: 9999 !important;
+  z-index: 9999 !important;
+  background-color: #FFF;
 }
 
 .kune-WebSafePalette td {

Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -33,6 +33,7 @@
 import org.ourproject.kune.platf.client.i18n.I18nUITranslationService;
 import org.ourproject.kune.platf.client.registry.ContentCapabilitiesRegistry;
 import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
@@ -83,8 +84,10 @@
         register(ToolGroup.class, new Factory<ChatEngine>(ChatEngine.class) {
             @Override
             public ChatEngine create() {
-                return new ChatEngineDefault($(I18nUITranslationService.class), $(WorkspaceSkeleton.class),
-                        $(Application.class), $(Session.class), $$(EmiteUIDialog.class), $$(FileDownloadUtils.class));
+                final ChatEngineDefault chatEngineDefault = new ChatEngineDefault($(I18nUITranslationService.class),
+                        $(WorkspaceSkeleton.class), $(Application.class), $(Session.class), $$(EmiteUIDialog.class),
+                        $$(FileDownloadUtils.class), $(GlobalShortcutRegister.class));
+                return chatEngineDefault;
             }
         });
 

Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineDefault.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineDefault.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -27,6 +27,8 @@
 import org.ourproject.kune.platf.client.dto.StateToken;
 import org.ourproject.kune.platf.client.dto.UserInfoDTO;
 import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.ui.WindowUtils;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
@@ -59,15 +61,24 @@
     private final Provider<FileDownloadUtils> downloadUtils;
     private Collection<RosterItem> roster;
     private final Event0 onRosterChanged;
+    private final ActionShortcut shortcut;
 
     public ChatEngineDefault(final I18nTranslationService i18n, final WorkspaceSkeleton ws, Application application,
             Session session, final Provider<EmiteUIDialog> emiteUIProvider,
-            final Provider<FileDownloadUtils> downloadUtils) {
+            final Provider<FileDownloadUtils> downloadUtils, GlobalShortcutRegister globalShortcutRegister) {
         this.i18n = i18n;
         this.ws = ws;
         this.emiteUIProvider = emiteUIProvider;
         this.downloadUtils = downloadUtils;
         this.onRosterChanged = new Event0("onRosterChanged");
+        shortcut = new ActionShortcut(false, true, false, 'C');
+        globalShortcutRegister.put(shortcut, new Listener0() {
+            public void onEvent() {
+                if (isDialogStarted()) {
+                    toggleShow();
+                }
+            }
+        });
         session.onInitDataReceived(new Listener<InitDataDTO>() {
             public void onEvent(final InitDataDTO initData) {
                 checkChatDomain(initData.getChatDomain());
@@ -132,6 +143,10 @@
         return false;
     }
 
+    public boolean isDialogStarted() {
+        return !emiteUIProvider.get().isDialogNotStarted();
+    }
+
     public boolean isLoggedIn() {
         return emiteUIProvider.get().isLoggedIn();
     }
@@ -177,16 +192,12 @@
         emiteUIProvider.get().show(OwnStatus.online);
         if (traybarButton == null) {
             traybarButton = new ToolbarButton();
-            traybarButton.setTooltip(i18n.t("Show/hide the chat window"));
+            traybarButton.setTooltip(i18n.t("Show/hide the chat window" + shortcut.toString()));
             traybarButton.setIcon("images/e-icon.gif");
             traybarButton.addListener(new ButtonListenerAdapter() {
                 @Override
                 public void onClick(final Button button, final EventObject e) {
-                    if (emiteUIProvider.get().isVisible()) {
-                        emiteUIProvider.get().hide();
-                    } else {
-                        emiteUIProvider.get().show();
-                    }
+                    toggleShow();
                 }
             });
             ws.getSiteTraybar().addButton(traybarButton);
@@ -240,6 +251,14 @@
         }
     }
 
+    public void toggleShow() {
+        if (emiteUIProvider.get().isVisible()) {
+            emiteUIProvider.get().hide();
+        } else {
+            emiteUIProvider.get().show();
+        }
+    }
+
     private XmppURI getLocalUserJid(String shortName) {
         return XmppURI.jid(shortName + "@" + chatOptions.domain);
     }

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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -21,6 +21,7 @@
 
 import org.ourproject.kune.platf.client.dto.AccessRolDTO;
 import org.ourproject.kune.platf.client.services.ImageDescriptor;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
 
 import com.calclab.suco.client.events.Listener;
 import com.calclab.suco.client.events.Listener0;

Deleted: 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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcut.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,125 +0,0 @@
-package org.ourproject.kune.platf.client.actions;
-
-import org.ourproject.kune.platf.client.i18n.Resources;
-
-import com.google.gwt.user.client.ui.KeyboardListener;
-
-public class ActionShortcut {
-
-    private static final String NO_KEYNAME = "nokeyname";
-
-    private static boolean has(int modifiers, int modifier) {
-        return ((modifiers & modifier) == modifier);
-    }
-
-    private final boolean alt;
-    private final boolean ctrl;
-    private final boolean shift;
-    private final char key;
-    private final String keyName;
-
-    public ActionShortcut(boolean ctrl, boolean alt, boolean shift, char key) {
-        this(ctrl, alt, shift, key, NO_KEYNAME);
-    }
-
-    public ActionShortcut(boolean ctrl, boolean alt, boolean shift, char key, String keyName) {
-        this.alt = alt;
-        this.ctrl = ctrl;
-        this.shift = shift;
-        this.key = key;
-        this.keyName = keyName;
-    }
-
-    public ActionShortcut(boolean ctrl, boolean shift, char key) {
-        this(ctrl, false, shift, key, NO_KEYNAME);
-    }
-
-    public ActionShortcut(boolean ctrl, boolean shift, char key, String keyName) {
-        this(ctrl, false, shift, key, keyName);
-    }
-
-    public ActionShortcut(boolean ctrl, char key) {
-        this(ctrl, false, false, key, NO_KEYNAME);
-    }
-
-    public ActionShortcut(boolean ctrl, char key, String keyName) {
-        this(ctrl, false, false, key, keyName);
-    }
-
-    public ActionShortcut(char key, int modifiers) {
-        this(has(modifiers, KeyboardListener.MODIFIER_CTRL), has(modifiers, KeyboardListener.MODIFIER_ALT), has(
-                modifiers, KeyboardListener.MODIFIER_SHIFT), key, NO_KEYNAME);
-    }
-
-    public ActionShortcut(char key, int modifiers, String keyName) {
-        this(has(modifiers, KeyboardListener.MODIFIER_CTRL), has(modifiers, KeyboardListener.MODIFIER_ALT), has(
-                modifiers, KeyboardListener.MODIFIER_SHIFT), key, keyName);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        ActionShortcut other = (ActionShortcut) obj;
-        if (alt != other.alt) {
-            return false;
-        }
-        if (ctrl != other.ctrl) {
-            return false;
-        }
-        if (key != other.key) {
-            return false;
-        }
-        if (shift != other.shift) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + (alt ? 1231 : 1237);
-        result = prime * result + (ctrl ? 1231 : 1237);
-        result = prime * result + key;
-        result = prime * result + (shift ? 1231 : 1237);
-        return result;
-    }
-
-    public boolean is(char keyCode, int modifiers) {
-        return (keyCode == keyCode && same(modifiers, KeyboardListener.MODIFIER_ALT, alt)
-                && same(modifiers, KeyboardListener.MODIFIER_CTRL, ctrl) && same(modifiers,
-                KeyboardListener.MODIFIER_SHIFT, shift));
-    }
-
-    public boolean same(int modifiers, int modifier, boolean keyValue) {
-        return (has(modifiers, modifier) == keyValue);
-    }
-
-    @Override
-    public String toString() {
-        String s = " (";
-        s += sKey(alt, "Alt");
-        s += sKey(ctrl, "Ctrl");
-        s += sKey(shift, "Shift");
-        s += keyName != NO_KEYNAME ? translateKey(keyName) + ")" : String.valueOf(key).toUpperCase() + ")";
-        return s;
-    }
-
-    private String sKey(boolean key, String specialKeyName) {
-        return key ? translateKey(specialKeyName) + "+" : "";
-    }
-
-    private String translateKey(String keyNameToTranslate) {
-        return Resources.i18n.tWithNT(keyNameToTranslate, "The '" + keyNameToTranslate + "' keyboard key");
-    }
-
-}

Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,60 +0,0 @@
-package org.ourproject.kune.platf.client.actions;
-
-import java.util.HashMap;
-
-import org.ourproject.kune.platf.client.dto.AccessRolDTO;
-
-import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.events.Listener0;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.KeyboardListenerCollection;
-
-public class ActionShortcutRegister {
-
-    @SuppressWarnings("unchecked")
-    private final HashMap<ActionShortcut, ActionItem> shortcuts;
-
-    @SuppressWarnings("unchecked")
-    public ActionShortcutRegister() {
-        shortcuts = new HashMap<ActionShortcut, ActionItem>();
-    }
-
-    @SuppressWarnings("unchecked")
-    public ActionItem get(ActionShortcut shortcut) {
-        return shortcuts.get(shortcut);
-    }
-
-    @SuppressWarnings("unchecked")
-    public ActionItem get(Event event) {
-        int modifiers = KeyboardListenerCollection.getKeyboardModifiers(event);
-        if (event.getTypeInt() == Event.ONKEYDOWN && modifiers != 0) {
-            ActionShortcut shortcut = new ActionShortcut((char) event.getKeyCode(), modifiers);
-            Log.debug("Shortcut pressed" + shortcut.toString());
-            return shortcuts.get(shortcut);
-        }
-        // if (modifiers != 0) {
-        // Log.debug("Not action associated with this shortcut");
-        // }
-        return null;
-    }
-
-    @SuppressWarnings("unchecked")
-    public void put(ActionShortcut shortcut, ActionItem actionItem) {
-        if (shortcuts.get(shortcut) != null) {
-            Log.warn("Shortcut" + shortcut + " already registered");
-        }
-        shortcuts.put(shortcut, actionItem);
-    }
-
-    @SuppressWarnings("unchecked")
-    public void put(ActionShortcut shortcut, final Listener0 listener) {
-        ActionDescriptor descriptor = new ActionDescriptor(AccessRolDTO.Viewer, new Listener0() {
-            public void onEvent() {
-                listener.onEvent();
-            }
-        });
-        ActionItem item = new ActionItem(descriptor, null);
-        put(shortcut, item);
-    }
-
-}

Modified: 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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarButton.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,7 +1,7 @@
 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 org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
 
 import com.calclab.suco.client.events.Listener0;
 import com.gwtext.client.core.EventObject;

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/PlatformModule.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -36,6 +36,7 @@
 import org.ourproject.kune.platf.client.rpc.I18nServiceAsync;
 import org.ourproject.kune.platf.client.rpc.UserService;
 import org.ourproject.kune.platf.client.rpc.UserServiceAsync;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
 import org.ourproject.kune.platf.client.state.ContentProvider;
 import org.ourproject.kune.platf.client.state.ContentProviderDefault;
 import org.ourproject.kune.platf.client.state.Session;
@@ -48,6 +49,9 @@
 import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette;
 import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalettePanel;
 import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalettePresenter;
+import org.ourproject.kune.platf.client.ui.palette.SimplePalette;
+import org.ourproject.kune.platf.client.ui.palette.SimplePalettePanel;
+import org.ourproject.kune.platf.client.ui.palette.SimplePalettePresenter;
 import org.ourproject.kune.platf.client.ui.rte.TestRTEDialog;
 import org.ourproject.kune.platf.client.ui.rte.basic.RTEActionSndToolbar;
 import org.ourproject.kune.platf.client.ui.rte.basic.RTEActionTopToolbar;
@@ -55,9 +59,9 @@
 import org.ourproject.kune.platf.client.ui.rte.basic.RTEditorPanel;
 import org.ourproject.kune.platf.client.ui.rte.basic.RTEditorPresenter;
 import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlDialog;
-import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlGroup;
 import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlDialogPanel;
 import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlDialogPresenter;
+import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlGroup;
 import org.ourproject.kune.platf.client.ui.rte.edithtml.editor.EditHtmlEditor;
 import org.ourproject.kune.platf.client.ui.rte.edithtml.editor.EditHtmlEditorPanel;
 import org.ourproject.kune.platf.client.ui.rte.edithtml.editor.EditHtmlEditorPresenter;
@@ -66,16 +70,16 @@
 import org.ourproject.kune.platf.client.ui.rte.edithtml.preview.EditHtmlPreviewPresenter;
 import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources;
 import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageDialog;
-import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageGroup;
 import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageDialogPanel;
 import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageDialogPresenter;
+import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageGroup;
 import org.ourproject.kune.platf.client.ui.rte.insertimg.ext.InsertImageExt;
 import org.ourproject.kune.platf.client.ui.rte.insertimg.ext.InsertImageExtPanel;
 import org.ourproject.kune.platf.client.ui.rte.insertimg.ext.InsertImageExtPresenter;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialog;
-import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkGroup;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialogPanel;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialogPresenter;
+import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkGroup;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.email.InsertLinkEmail;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.email.InsertLinkEmailPanel;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.email.InsertLinkEmailPresenter;
@@ -83,6 +87,9 @@
 import org.ourproject.kune.platf.client.ui.rte.insertlink.ext.InsertLinkExtPanel;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.ext.InsertLinkExtPresenter;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.ext.InsertLinkExtView;
+import org.ourproject.kune.platf.client.ui.rte.inserttable.InsertTableDialog;
+import org.ourproject.kune.platf.client.ui.rte.inserttable.InsertTableDialogPanel;
+import org.ourproject.kune.platf.client.ui.rte.inserttable.InsertTableDialogPresenter;
 import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditor;
 import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditorPanel;
 import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditorPresenter;
@@ -250,6 +257,16 @@
             }
         });
 
+        register(Singleton.class, new Factory<SimplePalette>(SimplePalette.class) {
+            @Override
+            public SimplePalette create() {
+                final SimplePalettePresenter presenter = new SimplePalettePresenter();
+                final SimplePalettePanel panel = new SimplePalettePanel(presenter, i18n);
+                presenter.init(panel);
+                return presenter;
+            }
+        });
+
         register(NoDecoration.class, new Factory<RTEActionTopToolbar>(RTEActionTopToolbar.class) {
             @Override
             public RTEActionTopToolbar create() {
@@ -281,9 +298,9 @@
                 final RTEditorPresenter presenter = new RTEditorPresenter($(I18nTranslationService.class),
                         $(Session.class), topBar, sndBar, $(RTEImgResources.class), $(InsertLinkDialog.class),
                         $(ColorWebSafePalette.class), $$(EditHtmlDialog.class), $$(InsertImageDialog.class),
-                        $(DeferredCommandWrapper.class));
+                        $$(InsertTableDialog.class), $(DeferredCommandWrapper.class));
                 final RTEditorPanel panel = new RTEditorPanel(presenter, $(I18nUITranslationService.class),
-                        $(ActionManager.class));
+                        $(ActionManager.class), $(GlobalShortcutRegister.class));
                 presenter.init(panel);
                 return presenter;
             }
@@ -357,8 +374,8 @@
             @Override
             public InsertImageDialog create() {
                 final InsertImageDialogPresenter presenter = new InsertImageDialogPresenter();
-                final InsertImageDialogPanel panel = new InsertImageDialogPanel(presenter, $(I18nTranslationService.class),
-                        $(Images.class), $(InsertImageGroup.class));
+                final InsertImageDialogPanel panel = new InsertImageDialogPanel(presenter,
+                        $(I18nTranslationService.class), $(Images.class), $(InsertImageGroup.class));
                 presenter.init(panel);
                 return presenter;
             }
@@ -385,32 +402,37 @@
             }
         });
 
-        register(InsertLinkGroup.class,
-                new Factory<InsertLinkExt>(InsertLinkExt.class) {
-                    @Override
-                    public InsertLinkExt create() {
-                        final InsertLinkExtPresenter presenter = new InsertLinkExtPresenter(
-                                $(InsertLinkDialog.class));
-                        final InsertLinkExtView panel = new InsertLinkExtPanel(presenter,
-                                $(I18nTranslationService.class));
-                        presenter.init(panel);
-                        return presenter;
-                    }
-                });
+        register(InsertLinkGroup.class, new Factory<InsertLinkExt>(InsertLinkExt.class) {
+            @Override
+            public InsertLinkExt create() {
+                final InsertLinkExtPresenter presenter = new InsertLinkExtPresenter($(InsertLinkDialog.class));
+                final InsertLinkExtView panel = new InsertLinkExtPanel(presenter, $(I18nTranslationService.class));
+                presenter.init(panel);
+                return presenter;
+            }
+        });
 
-        register(InsertLinkGroup.class, new Factory<InsertLinkEmail>(
-                InsertLinkEmail.class) {
+        register(InsertLinkGroup.class, new Factory<InsertLinkEmail>(InsertLinkEmail.class) {
             @Override
             public InsertLinkEmail create() {
-                final InsertLinkEmailPresenter presenter = new InsertLinkEmailPresenter(
-                        $(InsertLinkDialog.class));
-                final InsertLinkEmailPanel panel = new InsertLinkEmailPanel(presenter,
-                        $(I18nTranslationService.class));
+                final InsertLinkEmailPresenter presenter = new InsertLinkEmailPresenter($(InsertLinkDialog.class));
+                final InsertLinkEmailPanel panel = new InsertLinkEmailPanel(presenter, $(I18nTranslationService.class));
                 presenter.init(panel);
                 return presenter;
             }
         });
 
+        register(Singleton.class, new Factory<InsertTableDialog>(InsertTableDialog.class) {
+            @Override
+            public InsertTableDialog create() {
+                final InsertTableDialogPresenter presenter = new InsertTableDialogPresenter();
+                final InsertTableDialogPanel panel = new InsertTableDialogPanel(presenter, i18n,
+                        $$(SimplePalette.class));
+                presenter.init(panel);
+                return presenter;
+            }
+        });
+
         $(ApplicationComponentGroup.class).createAll();
         $(ToolGroup.class).createAll();
         $(Application.class).start();

Copied: trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcut.java (from rev 1076, 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-15 17:29:41 UTC (rev 1076)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcut.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,125 @@
+package org.ourproject.kune.platf.client.shortcuts;
+
+import org.ourproject.kune.platf.client.i18n.Resources;
+
+import com.google.gwt.user.client.ui.KeyboardListener;
+
+public class ActionShortcut {
+
+    private static final String NO_KEYNAME = "nokeyname";
+
+    private static boolean has(int modifiers, int modifier) {
+        return ((modifiers & modifier) == modifier);
+    }
+
+    private final boolean alt;
+    private final boolean ctrl;
+    private final boolean shift;
+    private final char key;
+    private final String keyName;
+
+    public ActionShortcut(boolean ctrl, boolean alt, boolean shift, char key) {
+        this(ctrl, alt, shift, key, NO_KEYNAME);
+    }
+
+    public ActionShortcut(boolean ctrl, boolean alt, boolean shift, char key, String keyName) {
+        this.alt = alt;
+        this.ctrl = ctrl;
+        this.shift = shift;
+        this.key = key;
+        this.keyName = keyName;
+    }
+
+    public ActionShortcut(boolean ctrl, boolean shift, char key) {
+        this(ctrl, false, shift, key, NO_KEYNAME);
+    }
+
+    public ActionShortcut(boolean ctrl, boolean shift, char key, String keyName) {
+        this(ctrl, false, shift, key, keyName);
+    }
+
+    public ActionShortcut(boolean ctrl, char key) {
+        this(ctrl, false, false, key, NO_KEYNAME);
+    }
+
+    public ActionShortcut(boolean ctrl, char key, String keyName) {
+        this(ctrl, false, false, key, keyName);
+    }
+
+    public ActionShortcut(char key, int modifiers) {
+        this(has(modifiers, KeyboardListener.MODIFIER_CTRL), has(modifiers, KeyboardListener.MODIFIER_ALT), has(
+                modifiers, KeyboardListener.MODIFIER_SHIFT), key, NO_KEYNAME);
+    }
+
+    public ActionShortcut(char key, int modifiers, String keyName) {
+        this(has(modifiers, KeyboardListener.MODIFIER_CTRL), has(modifiers, KeyboardListener.MODIFIER_ALT), has(
+                modifiers, KeyboardListener.MODIFIER_SHIFT), key, keyName);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        ActionShortcut other = (ActionShortcut) obj;
+        if (alt != other.alt) {
+            return false;
+        }
+        if (ctrl != other.ctrl) {
+            return false;
+        }
+        if (key != other.key) {
+            return false;
+        }
+        if (shift != other.shift) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (alt ? 1231 : 1237);
+        result = prime * result + (ctrl ? 1231 : 1237);
+        result = prime * result + key;
+        result = prime * result + (shift ? 1231 : 1237);
+        return result;
+    }
+
+    public boolean is(char keyCode, int modifiers) {
+        return (keyCode == keyCode && same(modifiers, KeyboardListener.MODIFIER_ALT, alt)
+                && same(modifiers, KeyboardListener.MODIFIER_CTRL, ctrl) && same(modifiers,
+                KeyboardListener.MODIFIER_SHIFT, shift));
+    }
+
+    public boolean same(int modifiers, int modifier, boolean keyValue) {
+        return (has(modifiers, modifier) == keyValue);
+    }
+
+    @Override
+    public String toString() {
+        String s = " (";
+        s += sKey(alt, "Alt");
+        s += sKey(ctrl, "Ctrl");
+        s += sKey(shift, "Shift");
+        s += keyName != NO_KEYNAME ? translateKey(keyName) + ")" : String.valueOf(key).toUpperCase() + ")";
+        return s;
+    }
+
+    private String sKey(boolean key, String specialKeyName) {
+        return key ? translateKey(specialKeyName) + "+" : "";
+    }
+
+    private String translateKey(String keyNameToTranslate) {
+        return Resources.i18n.tWithNT(keyNameToTranslate, "The '" + keyNameToTranslate + "' keyboard key");
+    }
+
+}

Copied: trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcutRegister.java (from rev 1076, trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionShortcutRegister.java	2009-03-15 17:29:41 UTC (rev 1076)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/ActionShortcutRegister.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,62 @@
+package org.ourproject.kune.platf.client.shortcuts;
+
+import java.util.HashMap;
+
+import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionItem;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.calclab.suco.client.events.Listener0;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.ui.KeyboardListenerCollection;
+
+public class ActionShortcutRegister {
+
+    @SuppressWarnings("unchecked")
+    private final HashMap<ActionShortcut, ActionItem> shortcuts;
+
+    @SuppressWarnings("unchecked")
+    public ActionShortcutRegister() {
+        shortcuts = new HashMap<ActionShortcut, ActionItem>();
+    }
+
+    @SuppressWarnings("unchecked")
+    public ActionItem get(ActionShortcut shortcut) {
+        return shortcuts.get(shortcut);
+    }
+
+    @SuppressWarnings("unchecked")
+    public ActionItem get(Event event) {
+        int modifiers = KeyboardListenerCollection.getKeyboardModifiers(event);
+        if (event.getTypeInt() == Event.ONKEYDOWN && modifiers != 0) {
+            ActionShortcut shortcut = new ActionShortcut((char) event.getKeyCode(), modifiers);
+            Log.debug("Shortcut pressed" + shortcut.toString());
+            return shortcuts.get(shortcut);
+        }
+        // if (modifiers != 0) {
+        // Log.debug("Not action associated with this shortcut");
+        // }
+        return null;
+    }
+
+    @SuppressWarnings("unchecked")
+    public void put(ActionShortcut shortcut, ActionItem actionItem) {
+        if (shortcuts.get(shortcut) != null) {
+            Log.warn("Shortcut" + shortcut + " already registered");
+        }
+        shortcuts.put(shortcut, actionItem);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void put(ActionShortcut shortcut, final Listener0 listener) {
+        ActionDescriptor descriptor = new ActionDescriptor(AccessRolDTO.Viewer, new Listener0() {
+            public void onEvent() {
+                listener.onEvent();
+            }
+        });
+        ActionItem item = new ActionItem(descriptor, null);
+        put(shortcut, item);
+    }
+
+}

Copied: trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/GlobalShortcutRegister.java (from rev 1076, trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java	2009-03-15 17:29:41 UTC (rev 1076)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/shortcuts/GlobalShortcutRegister.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,37 @@
+package org.ourproject.kune.platf.client.shortcuts;
+
+import org.ourproject.kune.platf.client.actions.ActionItem;
+import org.ourproject.kune.platf.client.actions.ActionManager;
+
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.EventPreview;
+
+public class GlobalShortcutRegister extends ActionShortcutRegister {
+
+    private final EventPreview eventPreview;
+
+    public GlobalShortcutRegister(final ActionManager actionManager) {
+        eventPreview = new EventPreview() {
+            @SuppressWarnings("unchecked")
+            public boolean onEventPreview(Event event) {
+                ActionItem actionItem = get(event);
+                if (actionItem != null) {
+                    // Log.debug("Not propagating event");
+                    DOM.eventPreventDefault(event);
+                    actionManager.doAction(actionItem);
+                    return false;
+                }
+                return true;
+            }
+        };
+    }
+
+    public void disable() {
+        DOM.removeEventPreview(eventPreview);
+    }
+
+    public void enable() {
+        DOM.addEventPreview(eventPreview);
+    }
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/TextUtils.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -34,6 +34,8 @@
 
     public static final String UNIX_NAME = "^[a-z0-9_\\-]+$";
 
+    public static final String NUM_REGEXP = "^[0-9]+$";
+
     /*
      * This method escape only some dangerous html chars
      */

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/DefaultForm.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -29,10 +29,11 @@
 
 public class DefaultForm {
 
-    protected static final int DEF_FIELD_WIDTH = 200;
-    protected static final int DEF_SMALL_FIELD_WIDTH = 100;
-    protected static final int DEF_MEDIUM_FIELD_WIDTH = 150;
-    protected static final int DEF_FIELD_LABEL_WITH = 75;
+    public static final int DEF_FIELD_WIDTH = 200;
+    public static final int DEF_SMALL_FIELD_WIDTH = 100;
+    public static final int DEF_XSMALL_FIELD_WIDTH = 50;
+    public static final int DEF_MEDIUM_FIELD_WIDTH = 150;
+    public static final int DEF_FIELD_LABEL_WITH = 75;
 
     private final FormPanel form;
 

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalette.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalette.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalette.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,11 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import com.calclab.suco.client.events.Listener;
+
+public interface AbstractPalette {
+
+    void hide();
+
+    void show(int left, int top, Listener<String> onColorSelected);
+
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePanel.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePanel.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,32 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+public abstract class AbstractPalettePanel {
+    private PopupPanel popupPalette;
+    Widget widget;
+
+    public void hide() {
+        if (popupPalette != null) {
+            popupPalette.hide();
+        }
+    }
+
+    public void show(final int left, final int top) {
+        if (widget == null) {
+            createPalette();
+        }
+        popupPalette = new PopupPanel(true, true);
+        popupPalette.addStyleName("kune-WebSafePalette-popup");
+        popupPalette.setVisible(false);
+        popupPalette.show();
+        popupPalette.setPopupPosition(left, top);
+        popupPalette.setWidget(widget);
+        popupPalette.setVisible(true);
+    }
+
+    protected void createPalette() {
+    }
+
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePresenter.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPalettePresenter.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,28 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import com.calclab.suco.client.events.Listener;
+
+public abstract class AbstractPalettePresenter {
+
+    protected Listener<String> onColorSelected;
+    private AbstractPaletteView view;
+
+    public void hide() {
+        this.view.hide();
+    }
+
+    public void init(final AbstractPaletteView view) {
+        this.view = view;
+    }
+
+    public void show(final int left, final int top, final Listener<String> onColorSelected) {
+        view.show(left, top);
+        this.onColorSelected = onColorSelected;
+    }
+
+    protected void onColorSelected(final String color) {
+        onColorSelected.onEvent(color);
+        view.hide();
+    }
+
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPaletteView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPaletteView.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/AbstractPaletteView.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,11 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import org.ourproject.kune.platf.client.View;
+
+public interface AbstractPaletteView extends View {
+
+    void hide();
+
+    void show(int left, int top);
+
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalette.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalette.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalette.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -19,12 +19,7 @@
  \*/
 package org.ourproject.kune.platf.client.ui.palette;
 
-import com.calclab.suco.client.events.Listener;
 
-public interface ColorWebSafePalette {
+public interface ColorWebSafePalette extends AbstractPalette {
 
-    void hide();
-
-    void show(int left, int top, Listener<String> onColorSelected);
-
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePanel.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePanel.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -21,7 +21,6 @@
 
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.Grid;
-import com.google.gwt.user.client.ui.PopupPanel;
 import com.google.gwt.user.client.ui.SourcesTableEvents;
 import com.google.gwt.user.client.ui.TableListener;
 
@@ -31,38 +30,18 @@
  * http://en.wikipedia.org/wiki/Web_colors#Web-safe_colors
  * 
  */
-public class ColorWebSafePalettePanel implements ColorWebSafePaletteView {
+public class ColorWebSafePalettePanel extends AbstractPalettePanel implements ColorWebSafePaletteView {
 
-    Grid paletteGrid;
     private final ColorWebSafePalettePresenter presenter;
-    private PopupPanel popupPalette;
 
     public ColorWebSafePalettePanel(final ColorWebSafePalettePresenter initPresenter) {
         this.presenter = initPresenter;
     }
 
-    public void hide() {
-        if (popupPalette != null) {
-            popupPalette.hide();
-        }
-    }
+    @Override
+    protected void createPalette() {
+        Grid paletteGrid = new Grid(ROWS, COLS);
 
-    public void show(final int left, final int top) {
-        if (paletteGrid == null) {
-            createPalette();
-        }
-        popupPalette = new PopupPanel(true, true);
-        popupPalette.addStyleName("kune-WebSafePalette-popup");
-        popupPalette.setVisible(false);
-        popupPalette.show();
-        popupPalette.setPopupPosition(left, top);
-        popupPalette.setWidget(paletteGrid);
-        popupPalette.setVisible(true);
-    }
-
-    private void createPalette() {
-        paletteGrid = new Grid(ROWS, COLS);
-
         paletteGrid.setCellSpacing(1);
         // Put color values in the grid cells
 
@@ -88,5 +67,6 @@
                 presenter.onColorSelected(row, col);
             }
         });
+        widget = paletteGrid;
     }
 }

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePresenter.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePalettePresenter.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -19,32 +19,11 @@
  */
 package org.ourproject.kune.platf.client.ui.palette;
 
-import com.calclab.suco.client.events.Listener;
+public class ColorWebSafePalettePresenter extends AbstractPalettePresenter implements ColorWebSafePalette {
 
-public class ColorWebSafePalettePresenter implements ColorWebSafePalette {
-
-    private Listener<String> onColorSelected;
-    private ColorWebSafePaletteView view;
-
-    public ColorWebSafePalettePresenter() {
-    }
-
-    public void hide() {
-        this.view.hide();
-    }
-
-    public void init(final ColorWebSafePaletteView view) {
-        this.view = view;
-    }
-
-    public void show(final int left, final int top, final Listener<String> onColorSelected) {
-        view.show(left, top);
-        this.onColorSelected = onColorSelected;
-    }
-
     protected void onColorSelected(final int row, final int col) {
         final String color = getColor(row, col);
-        onColorSelected.onEvent(color);
+        onColorSelected(color);
     }
 
     private String getColor(final int row, final int col) {

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePaletteView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePaletteView.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/ColorWebSafePaletteView.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -19,7 +19,7 @@
  */
 package org.ourproject.kune.platf.client.ui.palette;
 
-public interface ColorWebSafePaletteView {
+public interface ColorWebSafePaletteView extends AbstractPaletteView {
 
     int ROWS = 18;
 
@@ -27,8 +27,4 @@
 
     String COLORS[] = { "0", "3", "6", "9", "C", "F" };
 
-    void hide();
-
-    void show(int left, int top);
-
 }

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalette.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalette.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalette.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,4 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+public interface SimplePalette extends AbstractPalette {
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePanel.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePanel.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,30 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+
+import com.gwtext.client.widgets.ColorPalette;
+import com.gwtext.client.widgets.event.ColorPaletteListenerAdapter;
+
+public class SimplePalettePanel extends AbstractPalettePanel implements SimplePaletteView {
+
+    private final SimplePalettePresenter presenter;
+    private final I18nTranslationService i18n;
+
+    public SimplePalettePanel(final SimplePalettePresenter presenter, I18nTranslationService i18n) {
+        this.presenter = presenter;
+        this.i18n = i18n;
+    }
+
+    @Override
+    protected void createPalette() {
+        ColorPalette colorPalette = new ColorPalette();
+        colorPalette.setTitle(i18n.t("Pick a color"));
+        colorPalette.addListener(new ColorPaletteListenerAdapter() {
+            @Override
+            public void onSelect(ColorPalette colorPalette, String color) {
+                presenter.onColorSelected(color);
+            }
+        });
+        widget = colorPalette;
+    }
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePresenter.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePalettePresenter.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,6 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+
+public class SimplePalettePresenter extends AbstractPalettePresenter implements SimplePalette {
+
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePaletteView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePaletteView.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/palette/SimplePaletteView.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,5 @@
+package org.ourproject.kune.platf.client.ui.palette;
+
+
+public interface SimplePaletteView extends AbstractPaletteView {
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RichTextArea.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -18,6 +18,7 @@
 import org.ourproject.kune.platf.client.ui.rte.impl.RichTextAreaImpl;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.IFrameElement;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.FocusWidget;
@@ -25,6 +26,7 @@
 import com.google.gwt.user.client.ui.MouseListener;
 import com.google.gwt.user.client.ui.MouseListenerCollection;
 import com.google.gwt.user.client.ui.SourcesMouseEvents;
+import com.xpn.xwiki.wysiwyg.client.dom.Document;
 
 /**
  * A rich text editor that allows complex styling and formatting.
@@ -391,6 +393,28 @@
     }
 
     /**
+     * NOTE: If the current browser doesn't support rich text editing this
+     * method returns <code>null</code>. You should test the returned value and
+     * fail save to an appropriate behavior!<br/>
+     * The appropriate test would be: <code><pre>
+     * if (rta.isAttached() && rta.getDocument() == null) {
+     *   // The current browser doesn't support rich text editing.
+     * }
+     * </pre></code>
+     * 
+     * @return The DOM document being edited with this rich text area.
+     * 
+     *         copied from xwiki
+     */
+    public Document getDocument() {
+        if (getElement().getTagName().equalsIgnoreCase("iframe")) {
+            return IFrameElement.as(getElement()).getContentDocument().cast();
+        } else {
+            return null;
+        }
+    }
+
+    /**
      * Gets the full rich text formatting interface.
      * 
      * @return <code>null</code> if full formatting is not supported

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -16,18 +16,17 @@
 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.ActionShortcut;
-import org.ourproject.kune.platf.client.actions.ActionShortcutRegister;
 import org.ourproject.kune.platf.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcutRegister;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
 import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
 
 import com.google.gwt.dom.client.Element;
-import com.google.gwt.dom.client.IFrameElement;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.FocusListener;
 import com.google.gwt.user.client.ui.Widget;
-import com.xpn.xwiki.wysiwyg.client.dom.Document;
 import com.xpn.xwiki.wysiwyg.client.dom.DocumentFragment;
 import com.xpn.xwiki.wysiwyg.client.dom.Range;
 import com.xpn.xwiki.wysiwyg.client.dom.Selection;
@@ -49,18 +48,20 @@
     private final RTEditorPresenter presenter;
     private final ActionManager actionManager;
     private final ActionShortcutRegister shortcutRegister;
+    private final GlobalShortcutRegister globalShortcutReg;
 
     public RTEditorPanel(final RTEditorPresenter presenter, I18nUITranslationService i18n,
-            final ActionManager actionManager) {
+            final ActionManager actionManager, GlobalShortcutRegister globalShortcutReg) {
         this.presenter = presenter;
         this.i18n = i18n;
         this.actionManager = actionManager;
+        this.globalShortcutReg = globalShortcutReg;
         basic = getBasicFormatter();
         extended = getExtendedFormatter();
         shortcutRegister = new ActionShortcutRegister();
         EventListener listener = new EventListener();
         addFocusListener(listener);
-        setWidth("97%");
+        setWidth("96%");
         setHeight("100%");
 
     }
@@ -107,28 +108,6 @@
         setFocus(true);
     }
 
-    /**
-     * NOTE: If the current browser doesn't support rich text editing this
-     * method returns <code>null</code>. You should test the returned value and
-     * fail save to an appropriate behavior!<br/>
-     * The appropriate test would be: <code><pre>
-     * if (rta.isAttached() && rta.getDocument() == null) {
-     *   // The current browser doesn't support rich text editing.
-     * }
-     * </pre></code>
-     * 
-     * @return The DOM document being edited with this rich text area.
-     * 
-     *         copied from xwiki
-     */
-    public Document getDocument() {
-        if (getElement().getTagName().equalsIgnoreCase("iframe")) {
-            return IFrameElement.as(getElement()).getContentDocument().cast();
-        } else {
-            return null;
-        }
-    }
-
     public void insertComment(String author) {
         String comment = null;
         createCommentAndSelectIt(author, comment);
@@ -221,7 +200,8 @@
             super.onBrowserEvent(event);
             break;
         case Event.ONKEYDOWN:
-            ActionItem actionItem = shortcutRegister.get(event);
+            ActionItem rtaActionItem = shortcutRegister.get(event);
+            ActionItem actionItem = rtaActionItem != null ? rtaActionItem : globalShortcutReg.get(event);
             if (actionItem != null) {
                 updateStatus();
                 fireEdit();

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -7,7 +7,6 @@
 import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
 import org.ourproject.kune.platf.client.actions.ActionItem;
 import org.ourproject.kune.platf.client.actions.ActionItemCollection;
-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;
@@ -15,7 +14,9 @@
 import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
 import org.ourproject.kune.platf.client.dto.AccessRolDTO;
 import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
 import org.ourproject.kune.platf.client.state.Session;
+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;
 import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
@@ -23,6 +24,7 @@
 import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources;
 import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageDialog;
 import org.ourproject.kune.platf.client.ui.rte.insertlink.InsertLinkDialog;
+import org.ourproject.kune.platf.client.ui.rte.inserttable.InsertTableDialog;
 import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper;
 
 import com.calclab.suco.client.events.Event0;
@@ -66,11 +68,17 @@
     private final ActionAddCondition<Object> canBeExtended;
     private final Provider<EditHtmlDialog> editHtmlDialog;
     private final Provider<InsertImageDialog> insertImageDialog;
+    private final Provider<InsertTableDialog> insertTableDialog;
+    private Listener<String> insertTableListener;
+    private Listener2<String, String> insertLinkListener;
+    private Listener<String> updateHtmlListener;
+    private ActionToolbarButtonDescriptor<Object> insertTableBtn;
 
     public RTEditorPresenter(I18nTranslationService i18n, Session session, RTEActionTopToolbar topBar,
             RTEActionSndToolbar sndBar, RTEImgResources imgResources, InsertLinkDialog textEditorInsertElement,
             ColorWebSafePalette palette, Provider<EditHtmlDialog> editHtmlDialog,
-            Provider<InsertImageDialog> insertImageDialog, DeferredCommandWrapper deferred) {
+            Provider<InsertImageDialog> insertImageDialog, Provider<InsertTableDialog> insertTableDialog,
+            DeferredCommandWrapper deferred) {
         this.i18n = i18n;
         this.session = session;
         this.topBar = topBar;
@@ -79,6 +87,7 @@
         this.palette = palette;
         this.editHtmlDialog = editHtmlDialog;
         this.insertImageDialog = insertImageDialog;
+        this.insertTableDialog = insertTableDialog;
         this.deferred = deferred;
         styleToolbar(sndBar);
         sndBar.attach();
@@ -399,14 +408,18 @@
 
         ActionToolbarMenuDescriptor<Object> editHtml = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar,
                 new Listener0() {
+
                     public void onEvent() {
+                        if (updateHtmlListener == null) {
+                            updateHtmlListener = new Listener<String>() {
+                                public void onEvent(String html) {
+                                    view.setHTML(html);
+                                    fireOnEdit();
+                                }
+                            };
+                        }
                         EditHtmlDialog dialog = editHtmlDialog.get();
-                        dialog.setUpdateListener(new Listener<String>() {
-                            public void onEvent(String html) {
-                                view.setHTML(html);
-                                fireOnEdit();
-                            }
-                        });
+                        dialog.setUpdateListener(updateHtmlListener);
                         dialog.show();
                         dialog.setHtml(view.getHTML());
                     }
@@ -558,12 +571,15 @@
                     public void onEvent() {
                         deferred.addCommand(new Listener0() {
                             public void onEvent() {
-                                insertElement.setOnCreateLink(new Listener2<String, String>() {
-                                    public void onEvent(String name, String url) {
-                                        view.createLink(url);
-                                        fireOnEdit();
-                                    }
-                                });
+                                if (insertLinkListener == null) {
+                                    insertLinkListener = new Listener2<String, String>() {
+                                        public void onEvent(String name, String url) {
+                                            view.createLink(url);
+                                            fireOnEdit();
+                                        }
+                                    };
+                                }
+                                insertElement.setOnCreateLink(insertLinkListener);
                                 insertElement.show();
                             }
                         });
@@ -599,10 +615,21 @@
         removeFormat.setAddCondition(canBeExtended);
         removeFormat.setRightSeparator(ActionToolbarButtonSeparator.separator);
 
+        final ActionToolbarMenuDescriptor<Object> insertMedia = new ActionToolbarMenuDescriptor<Object>(accessRol,
+                topbar, new Listener0() {
+                    public void onEvent() {
+                        NotifyUser.info(TextUtils.IN_DEVELOPMENT);
+                    }
+                });
+        insertMedia.setIconCls(getCssName(imgResources.film()));
+        insertMedia.setTextDescription(i18n.t("Insert Media ..."));
+        insertMedia.setAddCondition(canBeExtended);
+        insertMedia.setParentMenuTitle(i18n.t(INSERT_MENU));
+
         final ActionToolbarMenuDescriptor<Object> insertTable = new ActionToolbarMenuDescriptor<Object>(accessRol,
                 topbar, new Listener0() {
                     public void onEvent() {
-                        insertSimpleTable();
+                        onInsertTablePressed();
                     }
                 });
         insertTable.setIconCls(getCssName(imgResources.inserttable()));
@@ -610,12 +637,11 @@
         insertTable.setAddCondition(canBeExtended);
         insertTable.setParentMenuTitle(i18n.t(INSERT_MENU));
 
-        final ActionToolbarButtonDescriptor<Object> insertTableBtn = new ActionToolbarButtonDescriptor<Object>(
-                accessRol, sndbar, new Listener0() {
-                    public void onEvent() {
-                        insertSimpleTable();
-                    }
-                });
+        insertTableBtn = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, new Listener0() {
+            public void onEvent() {
+                onInsertTablePressed();
+            }
+        });
         insertTableBtn.setIconCls(getCssName(imgResources.inserttable()));
         insertTableBtn.setToolTip(i18n.t("Insert Table"));
         insertTableBtn.setAddCondition(canBeExtended);
@@ -624,7 +650,7 @@
         final ActionToolbarButtonDescriptor<Object> fontColor = new ActionToolbarButtonDescriptor<Object>(accessRol,
                 sndbar, new Listener0() {
                     public void onEvent() {
-                        palette.show(getActionLeftPosition(sndBar, removeFormat), getActionTopPosition(sndBar,
+                        palette.show(getActionLeftPosition(sndBar, insertTableBtn), getActionTopPosition(sndBar,
                                 removeFormat), new Listener<String>() {
                             public void onEvent(String color) {
                                 palette.hide();
@@ -710,6 +736,7 @@
         actions.add(withNoItem(removeLink));
         actions.add(withNoItem(insertTableBtn));
         actions.add(withNoItem(insertTable));
+        actions.add(withNoItem(insertMedia));
         actions.add(withNoItem(comment));
         actions.add(withNoItem(undoBtn));
         actions.add(withNoItem(redoBtn));
@@ -772,14 +799,6 @@
         return RTEImgResources.SUFFIX + imageResource.getName();
     }
 
-    private void insertSimpleTable() {
-        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();
-    }
-
     private boolean isExtended() {
         return extended && view.canBeExtended();
     }
@@ -792,6 +811,23 @@
         };
     }
 
+    private void onInsertTablePressed() {
+        if (insertTableListener == null) {
+            insertTableListener = new Listener<String>() {
+                public void onEvent(String table) {
+                    if (view.isAnythingSelected()) {
+                        // FIXME
+                        // move to end of selection?
+                    }
+                    view.insertHtml(table);
+                    fireOnEdit();
+                }
+            };
+        }
+        insertTableDialog.get().setOnInsertTable(insertTableListener);
+        insertTableDialog.get().show();
+    }
+
     private void styleToolbar(ActionToolbar<Object> bar) {
         bar.setNormalStyle();
     }

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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/RTEImgResources.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -47,6 +47,9 @@
     @Resource("edithtml.png")
     public ImageResource edithtml();
 
+    @Resource("film.png")
+    public ImageResource film();
+
     @Resource("fontcolor.png")
     public ImageResource fontcolor();
 

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/film.png
===================================================================
(Binary files differ)


Property changes on: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/film.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/rteimg.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/rteimg.css	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/img/rteimg.css	2009-03-16 04:13:36 UTC (rev 1078)
@@ -10,6 +10,10 @@
   gwt-image: 'subscript';
 }
 
+ at sprite div .k-rte-film {
+  gwt-image: 'film';
+}
+
 @sprite div .k-rte-strikeout {
   gwt-image: 'strikeout';
 }

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractRichTextAreaTest.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,161 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.ourproject.kune.platf.client.ui.rte.insertlink;
+
+import org.ourproject.kune.platf.client.ui.rte.RichTextArea;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.LoadListener;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.SourcesLoadEvents;
+import com.google.gwt.user.client.ui.Widget;
+import com.xpn.xwiki.wysiwyg.client.dom.Element;
+import com.xpn.xwiki.wysiwyg.client.dom.Range;
+import com.xpn.xwiki.wysiwyg.client.dom.Selection;
+
+/**
+ * Base class for tests running on a rich text area.
+ * 
+ * @version $Id$
+ */
+public class AbstractRichTextAreaTest extends AbstractWysiwygClientTest implements LoadListener {
+    /**
+     * The number of milliseconds we delay the test finish. This delay is needed
+     * because in some browsers the rich text area is initialized after a
+     * timeout.
+     */
+    public static final int FINISH_DELAY = 400;
+
+    /**
+     * The number of milliseconds we delay the test start. This delay is needed
+     * because in some browsers the rich text area is initialized after a
+     * timeout and we want to start the test after the rich text area is fully
+     * initialized.
+     */
+    public static final int START_DELAY = 300;
+
+    /**
+     * The rich text area on which we run the tests.
+     */
+    protected RichTextArea rta;
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see LoadListener#onError(Widget)
+     */
+    public void onError(Widget sender) {
+        // ignore
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see LoadListener#onLoad(Widget)
+     */
+    public void onLoad(Widget sender) {
+        // http://wiki.codetalks.org/wiki/index.php/Docs/Keyboard_navigable_JS_widgets
+        // #Use_setTimeout_with_element.focus.28.29_to_set_focus
+        (new Timer() {
+            @Override
+            public void run() {
+                rta.setFocus(true);
+            }
+        }).schedule(1);
+    }
+
+    /**
+     * Cleans the HTML input. This is needed in order to have uniform tests
+     * between Firefox and Internet Explorer.
+     * 
+     * @param html
+     *            The HTML fragment to be cleaned.
+     * @return The input string in lower case, stripped of new lines.
+     */
+    protected String clean(String html) {
+        return html.replaceAll("\r\n", "").toLowerCase();
+    }
+
+    /**
+     * @return The body element of the DOM document edited with the rich text
+     *         area.
+     */
+    protected Element getBody() {
+        return rta.getDocument().getBody().cast();
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see AbstractWysiwygClientTest#gwtSetUp()
+     */
+    @Override
+    protected void gwtSetUp() throws Exception {
+        super.gwtSetUp();
+
+        if (rta == null) {
+            rta = new RichTextArea();
+            // Workaround till GWT provides a way to detect when the rich text
+            // area has finished loading.
+            if (rta.getBasicFormatter() != null && rta.getBasicFormatter() instanceof SourcesLoadEvents) {
+                ((SourcesLoadEvents) rta.getBasicFormatter()).addLoadListener(this);
+            }
+        }
+        RootPanel.get().add(rta);
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see AbstractWysiwygClientTest#gwtTearDown()
+     */
+    @Override
+    protected void gwtTearDown() throws Exception {
+        super.gwtTearDown();
+
+        RootPanel.get().remove(rta);
+    }
+
+    /**
+     * Removes the non-breaking spaces, {@code &nbsp;}, from the given HTML. The
+     * is method is needed because the Selection implementation for Internet
+     * Explorer adds {@code &nbsp;} when it cannot place the caret at the
+     * specified place.
+     * 
+     * @param html
+     *            the HTML fragment to be cleaned of non-breaking spaces
+     * @return the input HTML fragment without any non-breaking spaces
+     */
+    protected String removeNonBreakingSpaces(String html) {
+        return html.replace("&nbsp;", "");
+    }
+
+    /**
+     * Selects the given range.
+     * 
+     * @param range
+     *            The range to be selected.
+     */
+    protected void select(Range range) {
+        Selection selection = rta.getDocument().getSelection();
+        selection.removeAllRanges();
+        selection.addRange(range);
+    }
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractWysiwygClientTest.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractWysiwygClientTest.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/AbstractWysiwygClientTest.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,55 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.ourproject.kune.platf.client.ui.rte.insertlink;
+
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.junit.client.GWTTestCase;
+
+/**
+ * Base class for all WYSIWYG client tests. It returns the name of the module in {@link #getModuleName()} so you don't
+ * have to do it in each test.
+ * 
+ * @version $Id$
+ */
+public abstract class AbstractWysiwygClientTest extends GWTTestCase
+{
+    /**
+     * {@inheritDoc}
+     * 
+     * @see GWTTestCase#getModuleName()
+     */
+    public String getModuleName()
+    {
+        return "com.xpn.xwiki.wysiwyg.Wysiwyg";
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see GWTTestCase#gwtSetUp()
+     */
+    protected void gwtSetUp() throws Exception
+    {
+        super.gwtSetUp();
+
+        // We have to remove the default body border because it affects the range detection in IE.
+        Document.get().getBody().getStyle().setProperty("borderStyle", "none");
+    }
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfoTest.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfoTest.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertlink/LinkInfoTest.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,14 +1,15 @@
 package org.ourproject.kune.platf.client.ui.rte.insertlink;
 
 import com.allen_sauer.gwt.log.client.Log;
-import com.google.gwt.junit.client.GWTTestCase;
-import com.google.gwt.user.client.ui.Hyperlink;
+import com.xpn.xwiki.wysiwyg.client.dom.Range;
+import com.xpn.xwiki.wysiwyg.client.dom.Selection;
 
-public class LinkInfoTest extends GWTTestCase {
+public class LinkInfoTest extends AbstractRichTextAreaTest {
 
-    private static final String TEXT = "some link";
+    private static final String TEXT = "somelink";
     private static final String HREF = "http://example.com";
     private static final String TITLE = "on over";
+    private static final String _BLANK = "_blank";
 
     @Override
     public String getModuleName() {
@@ -16,13 +17,29 @@
     }
 
     public void testSimpleLink() {
-        Hyperlink link = new Hyperlink(TEXT, HREF);
-        link.setTitle(TITLE);
-        Log.info(link.getHTML());
-        LinkInfo linkParsed = LinkInfo.parse(link.getElement());
-        assertEquals(TEXT, linkParsed.getText());
-        assertEquals(HREF, linkParsed.getUrl());
-        assertEquals(TITLE, linkParsed.getTitle());
-        assertEquals(false, linkParsed.isInNewWindow());
+        // String html = createHtmlLink(HREF, TITLE, _BLANK, TEXT);
+        rta.setHTML(TEXT);
+        Log.debug(rta.getHTML());
+
+        Range range = rta.getDocument().createRange();
+        range.setStart(getBody().getFirstChild(), 1);
+        range.setEnd(getBody().getFirstChild(), 3);
+        String selectedText = "om";
+
+        Selection selection = rta.getDocument().getSelection();
+        selection.removeAllRanges();
+        selection.addRange(range);
+        assertEquals(selectedText, selection.toString());
+        //
+        // LinkInfo linkParsed =
+        // LinkInfo.parse(getBody().getFirstChildElement());
+        // assertEquals(TEXT, linkParsed.getText());
+        // assertEquals(HREF, linkParsed.getUrl());
+        // assertEquals(TITLE, linkParsed.getTitle());
+        // assertEquals(false, linkParsed.isInNewWindow());
     }
+
+    private String createHtmlLink(String href, String title, String target, String text) {
+        return "<a title=\"" + title + "\" href=\"" + href + "\" target=\"" + target + "\">" + text + "</a>";
+    }
 }

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialog.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialog.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,13 @@
+package org.ourproject.kune.platf.client.ui.rte.inserttable;
+
+import com.calclab.suco.client.events.Listener;
+
+public interface InsertTableDialog {
+
+    void hide();
+
+    void setOnInsertTable(Listener<String> listener);
+
+    void show();
+
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPanel.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPanel.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,185 @@
+package org.ourproject.kune.platf.client.ui.rte.inserttable;
+
+import org.ourproject.kune.platf.client.i18n.I18nTranslationService;
+import org.ourproject.kune.platf.client.ui.TextUtils;
+import org.ourproject.kune.platf.client.ui.dialogs.BasicDialog;
+import org.ourproject.kune.platf.client.ui.dialogs.DefaultForm;
+import org.ourproject.kune.platf.client.ui.palette.SimplePalette;
+
+import com.calclab.suco.client.events.Listener;
+import com.calclab.suco.client.ioc.Provider;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.Grid;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.form.Checkbox;
+import com.gwtext.client.widgets.form.Field;
+import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.form.event.FieldListenerAdapter;
+
+public class InsertTableDialogPanel extends BasicDialog implements InsertTableDialogView {
+
+    private static final String INSERT_LINK_ID = "itdp-diag";
+    private static final String R_FIELD = "itdp-wfield";
+    private static final String C_FIELD = "itdp-cfield";
+    private final TextField rowsField;
+    private final TextField colsField;
+    private final Checkbox sameWidth;
+    private final DefaultForm form;
+    private final TextField backColorField;
+    private final TextField borderField;
+    private final I18nTranslationService i18n;
+    private final TextField borderColorField;
+
+    public InsertTableDialogPanel(final InsertTableDialogPresenter presenter, I18nTranslationService i18n,
+            final Provider<SimplePalette> simplePalette) {
+        super(INSERT_LINK_ID, i18n.t("Insert Table"), true, false, 320, 260);
+        this.i18n = i18n;
+        form = new DefaultForm();
+        form.setAutoWidth(true);
+        form.setAutoHeight(true);
+
+        rowsField = new TextField();
+        rowsField.setTabIndex(4);
+        rowsField.setFieldLabel(i18n.t("Rows"));
+        rowsField.setWidth(DefaultForm.DEF_XSMALL_FIELD_WIDTH);
+        rowsField.setName(R_FIELD);
+        rowsField.setRegex(TextUtils.NUM_REGEXP);
+        rowsField.setRegexText(i18n.t("This must be a number"));
+        rowsField.setAllowBlank(false);
+        rowsField.setValidationEvent(false);
+        rowsField.setId(R_FIELD);
+        rowsField.setValue("2");
+
+        colsField = new TextField();
+        colsField.setTabIndex(5);
+        colsField.setFieldLabel(i18n.t("Columns"));
+        colsField.setName(C_FIELD);
+        colsField.setWidth(DefaultForm.DEF_XSMALL_FIELD_WIDTH);
+        colsField.setRegex(TextUtils.NUM_REGEXP);
+        colsField.setRegexText(i18n.t("This must be a number"));
+        colsField.setAllowBlank(false);
+        colsField.setValidationEvent(false);
+        colsField.setId(C_FIELD);
+        colsField.setValue("2");
+
+        borderField = new TextField();
+        borderField.setTabIndex(5);
+        borderField.setFieldLabel(i18n.t("Border Size"));
+        borderField.setWidth(DefaultForm.DEF_XSMALL_FIELD_WIDTH);
+        borderField.setRegex(TextUtils.NUM_REGEXP);
+        borderField.setRegexText(i18n.t("This must be a number"));
+        borderField.setAllowBlank(false);
+        borderField.setValidationEvent(false);
+        borderField.setValue("0");
+
+        sameWidth = new Checkbox(i18n.t("Columns of equal width"));
+        sameWidth.setChecked(true);
+
+        backColorField = createColorField(i18n.t("Background color"));
+        borderColorField = createColorField(i18n.t("Border color"));
+
+        FieldListenerAdapter colorListener = new FieldListenerAdapter() {
+            @Override
+            public void onFocus(final Field field) {
+                super.onFocus(field);
+                simplePalette.get().show(field.getAbsoluteLeft() + 10, field.getAbsoluteTop() + 10,
+                        new Listener<String>() {
+                            public void onEvent(String color) {
+                                setBackgroupFieldColor(field, color);
+                                field.setValue("#" + color);
+                            }
+                        });
+            }
+        };
+        backColorField.addListener(colorListener);
+        borderColorField.addListener(colorListener);
+
+        form.add(rowsField);
+        form.add(colsField);
+        form.add(sameWidth);
+        form.add(backColorField);
+        form.add(borderField);
+        form.add(borderColorField);
+
+        Button insert = new Button(i18n.t("Insert"));
+        insert.addListener(new ButtonListenerAdapter() {
+            @Override
+            public void onClick(Button button, EventObject e) {
+                if (form.getFormPanel().getForm().isValid()) {
+                    presenter.onInsert(rowsField.getValueAsString(), colsField.getValueAsString(),
+                            borderField.getValueAsString());
+                }
+            }
+        });
+        Button cancel = new Button(i18n.t("Cancel"));
+        cancel.addListener(new ButtonListenerAdapter() {
+            @Override
+            public void onClick(Button button, EventObject e) {
+                presenter.onCancel();
+            }
+        });
+
+        super.add(form.getFormPanel());
+        super.addButton(insert);
+        super.addButton(cancel);
+    }
+
+    public String generateTable(int rows, int cols, boolean sameColWidth, String backgroundColor, int border,
+            String borderColor) {
+        Grid table = new Grid(rows, cols);
+        table.setWidth("100%");
+        if (backgroundColor != null) {
+            DOM.setElementAttribute(table.getElement(), "bgcolor", backgroundColor);
+        }
+
+        if (borderColor != null) {
+            DOM.setElementAttribute(table.getElement(), "bordercolor", borderColor);
+        }
+
+        table.setBorderWidth(border);
+        table.setCellPadding(3);
+        table.setCellSpacing(0);
+        if (sameColWidth) {
+            int colWith = 100 / cols;
+            for (int i = 0; i < cols; i++) {
+                table.getColumnFormatter().setWidth(i, colWith + "%");
+            }
+        }
+        return table.getElement().getString();
+    }
+
+    public String getBackgroundColor() {
+        return backColorField.getValueAsString();
+    }
+
+    public String getBorderColor() {
+        return borderColorField.getValueAsString();
+    }
+
+    public boolean getSameColWidth() {
+        return sameWidth.getValue();
+    }
+
+    public void reset() {
+        form.getFormPanel().getForm().reset();
+        rowsField.setValue("2");
+        colsField.setValue("2");
+        borderField.setValue("0");
+        sameWidth.setChecked(true);
+        setBackgroupFieldColor(backColorField, "FFFFFF");
+        setBackgroupFieldColor(borderColorField, "FFFFFF");
+    }
+
+    private TextField createColorField(String text) {
+        TextField field = new TextField(text);
+        field.setWidth(DefaultForm.DEF_XSMALL_FIELD_WIDTH + 15);
+        field.setTitle(i18n.t("Click to change"));
+        return field;
+    }
+
+    private void setBackgroupFieldColor(Field field, String color) {
+        field.setStyle("background-color: #" + color + ";background-image:none;");
+    }
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPresenter.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogPresenter.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,56 @@
+package org.ourproject.kune.platf.client.ui.rte.inserttable;
+
+import com.calclab.suco.client.events.Listener;
+
+public class InsertTableDialogPresenter implements InsertTableDialog {
+
+    private static final int MAX_ROWS = 100;
+    private static final int MAX_COLS = 25;
+    private static final int MAX_BORDER = 50;
+    private InsertTableDialogView view;
+    private Listener<String> onInsertTable;
+
+    public InsertTableDialogPresenter() {
+    }
+
+    public void hide() {
+        view.hide();
+    }
+
+    public void init(InsertTableDialogView view) {
+        this.view = view;
+    }
+
+    public void onCancel() {
+        view.hide();
+        view.reset();
+    }
+
+    public void onInsert(String rowsS, String colsS, String borderS) {
+        if (onInsertTable != null) {
+            Integer rows = new Integer(rowsS);
+            Integer cols = new Integer(colsS);
+            Integer border = new Integer(borderS);
+            boolean validRows = rows < MAX_ROWS && rows > 0;
+            boolean validCols = cols < MAX_COLS && cols > 0;
+            boolean validBorder = border < MAX_BORDER && border > 0;
+            onInsertTable.onEvent(createTable(validRows ? rows : MAX_ROWS, validCols ? cols : MAX_COLS,
+                    validBorder ? border : MAX_BORDER));
+        }
+        view.hide();
+        view.reset();
+    }
+
+    public void setOnInsertTable(Listener<String> listener) {
+        this.onInsertTable = listener;
+    }
+
+    public void show() {
+        view.show();
+    }
+
+    private String createTable(int rows, int cols, int border) {
+        return view.generateTable(rows, cols, view.getSameColWidth(), view.getBackgroundColor(), border,
+                view.getBorderColor());
+    }
+}

Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogView.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/inserttable/InsertTableDialogView.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -0,0 +1,21 @@
+package org.ourproject.kune.platf.client.ui.rte.inserttable;
+
+import org.ourproject.kune.platf.client.View;
+
+public interface InsertTableDialogView extends View {
+
+    String generateTable(int rows, int cols, boolean sameColWidth, String backgroundColor, int border,
+            String borderColor);
+
+    String getBackgroundColor();
+
+    String getBorderColor();
+
+    boolean getSameColWidth();
+
+    void hide();
+
+    void reset();
+
+    void show();
+}

Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,12 +1,12 @@
 package org.ourproject.kune.platf.client.ui.rte.saving;
 
-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.shortcuts.ActionShortcut;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.rte.basic.RTEditor;
 import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources;

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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/AbstractFoldableContentActions.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -468,7 +468,7 @@
                 });
         action.setTextDescription(textDescription);
         action.setParentMenuTitle(PUBLICATION_MENU);
-        // action.setParentSubMenuTitle(i18n.t("Change the status"));
+        action.setParentMenuIconUrl("images/anybody.png");
         contentActionRegistry.addAction(action, contentsModerated);
     }
 

Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/WorkspaceModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/WorkspaceModule.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/WorkspaceModule.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -42,6 +42,7 @@
 import org.ourproject.kune.platf.client.services.ErrorHandler;
 import org.ourproject.kune.platf.client.services.ImageUtils;
 import org.ourproject.kune.platf.client.services.Images;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
 import org.ourproject.kune.platf.client.state.Session;
 import org.ourproject.kune.platf.client.state.StateManager;
 import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils;
@@ -82,7 +83,6 @@
 import org.ourproject.kune.workspace.client.entityheader.maxmin.MaxMinWorkspace;
 import org.ourproject.kune.workspace.client.entityheader.maxmin.MaxMinWorkspacePanel;
 import org.ourproject.kune.workspace.client.entityheader.maxmin.MaxMinWorkspacePresenter;
-import org.ourproject.kune.workspace.client.events.GlobalShortcutRegister;
 import org.ourproject.kune.workspace.client.i18n.I18nTranslator;
 import org.ourproject.kune.workspace.client.i18n.I18nTranslatorPanel;
 import org.ourproject.kune.workspace.client.i18n.I18nTranslatorPresenter;

Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java	2009-03-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/events/GlobalShortcutRegister.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -1,38 +0,0 @@
-package org.ourproject.kune.workspace.client.events;
-
-import org.ourproject.kune.platf.client.actions.ActionItem;
-import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.ActionShortcutRegister;
-
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.EventPreview;
-
-public class GlobalShortcutRegister extends ActionShortcutRegister {
-
-    private final EventPreview eventPreview;
-
-    public GlobalShortcutRegister(final ActionManager actionManager) {
-        eventPreview = new EventPreview() {
-            @SuppressWarnings("unchecked")
-            public boolean onEventPreview(Event event) {
-                ActionItem actionItem = get(event);
-                if (actionItem != null) {
-                    // Log.debug("Not propagating event");
-                    DOM.eventPreventDefault(event);
-                    actionManager.doAction(actionItem);
-                    return false;
-                }
-                return true;
-            }
-        };
-    }
-
-    public void disable() {
-        DOM.removeEventPreview(eventPreview);
-    }
-
-    public void enable() {
-        DOM.addEventPreview(eventPreview);
-    }
-}

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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/hello/HelloWorldModule.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -20,15 +20,15 @@
 package org.ourproject.kune.workspace.client.hello;
 
 import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.actions.ActionShortcut;
 import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor;
 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.shortcuts.ActionShortcut;
+import org.ourproject.kune.platf.client.shortcuts.GlobalShortcutRegister;
 import org.ourproject.kune.platf.client.ui.noti.NotifyUser;
 import org.ourproject.kune.workspace.client.AbstractFoldableContentActions;
-import org.ourproject.kune.workspace.client.events.GlobalShortcutRegister;
 import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
 import org.ourproject.kune.workspace.client.socialnet.UserActionRegistry;
 

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-15 18:00:13 UTC (rev 1077)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionShortcutTest.java	2009-03-16 04:13:36 UTC (rev 1078)
@@ -5,6 +5,7 @@
 
 import org.junit.Before;
 import org.junit.Test;
+import org.ourproject.kune.platf.client.shortcuts.ActionShortcut;
 
 import com.google.gwt.user.client.ui.KeyboardListener;
 




More information about the kune-commits mailing list