r1070 - in trunk/src: main/java/org/ourproject/kune/platf/client/services main/java/org/ourproject/kune/platf/client/ui/rte main/java/org/ourproject/kune/platf/client/ui/rte/basic main/java/org/ourproject/kune/platf/client/ui/rte/insertimg main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext main/java/org/ourproject/kune/platf/client/ui/rte/saving main/java/org/ourproject/kune/workspace/client main/java/org/ourproject/k
Author: vjrj Date: 2009-03-11 14:47:13 +0100 (Wed, 11 Mar 2009) New Revision: 1070 Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionSndToolbar.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionSndToolbarPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionTopToolbar.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionTopToolbarPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEcanBeBasic.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditor.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/basic/RTEditorView.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExt.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPanel.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtView.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditor.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPanel.java 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/RTESavingEditorView.java trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/saving/ trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenterTest.java Removed: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbar.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbarPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbar.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbarPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPanel.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorView.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExt.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPanel.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtView.java trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditor.java trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorImages.java trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPresenter.java trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorView.java trunk/src/main/java/org/ourproject/kune/workspace/client/editor/alignleft.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/alignright.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/backcolor.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/bold.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/centerpara.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/charfontname.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/decrementindent.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/defaultbullet.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/defaultnumbering.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/edithtml.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/fontcolor.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/fontheight.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/hfixedline.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/images.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/incrementindent.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/abstractlink/ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkemail/ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linkext/ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/insert/linklocal/ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/italic.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/link.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/link_break.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/removeFormat.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/strikeout.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/subscript.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/superscript.png trunk/src/main/java/org/ourproject/kune/workspace/client/editor/underline.png trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenterTest.java Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KunePlatformModule.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/TestRTEDialog.java trunk/src/main/java/org/ourproject/kune/workspace/client/KuneWorkspaceModule.java trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java Log: Incomplete - task Better RTE (Rich Text Editor) support Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KunePlatformModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/services/KunePlatformModule.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KunePlatformModule.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -48,17 +48,14 @@ 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.rte.RTEActionSndToolbar; -import org.ourproject.kune.platf.client.ui.rte.RTEActionSndToolbarPresenter; -import org.ourproject.kune.platf.client.ui.rte.RTEActionTopToolbar; -import org.ourproject.kune.platf.client.ui.rte.RTEActionTopToolbarPresenter; -import org.ourproject.kune.platf.client.ui.rte.RTESavingEditor; -import org.ourproject.kune.platf.client.ui.rte.RTESavingEditorPanel; -import org.ourproject.kune.platf.client.ui.rte.RTESavingEditorPresenter; -import org.ourproject.kune.platf.client.ui.rte.RTEditor; -import org.ourproject.kune.platf.client.ui.rte.RTEditorPanel; -import org.ourproject.kune.platf.client.ui.rte.RTEditorPresenter; 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.RTEActionSndToolbarPresenter; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEActionTopToolbar; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEActionTopToolbarPresenter; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEditor; +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.EditHtml; import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlGroup; import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtmlPanel; @@ -74,9 +71,9 @@ import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageGroup; import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImagePanel; import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImagePresenter; -import org.ourproject.kune.platf.client.ui.rte.insertimgext.InsertImageExt; -import org.ourproject.kune.platf.client.ui.rte.insertimgext.InsertImageExtPanel; -import org.ourproject.kune.platf.client.ui.rte.insertimgext.InsertImageExtPresenter; +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.TextEditorInsertElement; import org.ourproject.kune.platf.client.ui.rte.insertlink.TextEditorInsertElementGroup; import org.ourproject.kune.platf.client.ui.rte.insertlink.TextEditorInsertElementPanel; @@ -88,6 +85,9 @@ import org.ourproject.kune.platf.client.ui.rte.insertlink.ext.TextEditorInsertLinkExtPanel; import org.ourproject.kune.platf.client.ui.rte.insertlink.ext.TextEditorInsertLinkExtPresenter; import org.ourproject.kune.platf.client.ui.rte.insertlink.ext.TextEditorInsertLinkExtView; +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; import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; import org.ourproject.kune.platf.client.utils.TimerWrapper; Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbar.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbar.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbar.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,7 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; - -public interface RTEActionSndToolbar extends ActionToolbar<Object> { - -} \ No newline at end of file Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbarPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbarPresenter.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbarPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,12 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter; -import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView; - -public class RTEActionSndToolbarPresenter extends ActionToolbarPresenter<Object> implements RTEActionSndToolbar { - - public RTEActionSndToolbarPresenter(ActionToolbarView<Object> toolbar) { - super(toolbar); - } - -} \ No newline at end of file Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbar.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbar.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbar.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,7 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; - -public interface RTEActionTopToolbar extends ActionToolbar<Object> { - -} \ No newline at end of file Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbarPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbarPresenter.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbarPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,12 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter; -import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView; - -public class RTEActionTopToolbarPresenter extends ActionToolbarPresenter<Object> implements RTEActionTopToolbar { - - public RTEActionTopToolbarPresenter(ActionToolbarView<Object> toolbar) { - super(toolbar); - } - -} \ No newline at end of file Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,26 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.actions.BeforeActionListener; - -import com.calclab.suco.client.events.Listener; -import com.calclab.suco.client.events.Listener0; - -public interface RTESavingEditor { - - void edit(String html, Listener<String> onSave, Listener0 onEditCancelled); - - RTEditor getBasicEditor(); - - /** - * This is use for listen to changes as url changes, window close, and - * save/cancel or stop these actions - * - * @return - */ - BeforeActionListener getBeforeSavingListener(); - - void onSavedSuccessful(); - - void onSaveFailed(); - -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPanel.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPanel.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,14 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.ui.noti.NotifyUser; - -import com.calclab.suco.client.events.Listener0; - -public class RTESavingEditorPanel implements RTESavingEditorView { - - public void askConfirmation(String confirmationTitle, String confirmationText, Listener0 onConfirm, - Listener0 onCancel) { - NotifyUser.askConfirmation(confirmationTitle, confirmationText, onConfirm, onCancel); - } - -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,244 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.actions.ActionShortcut; -import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor; -import org.ourproject.kune.platf.client.actions.ActionToolbarButtonSeparator; -import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor; -import org.ourproject.kune.platf.client.actions.BeforeActionListener; -import org.ourproject.kune.platf.client.dto.AccessRolDTO; -import org.ourproject.kune.platf.client.i18n.I18nTranslationService; -import org.ourproject.kune.platf.client.state.StateManager; -import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources; -import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; -import org.ourproject.kune.platf.client.utils.TimerWrapper; - -import com.calclab.suco.client.events.Listener; -import com.calclab.suco.client.events.Listener0; - -public class RTESavingEditorPresenter implements RTESavingEditor { - - @Deprecated - private static final String FILE_MENU_OPTION = "File"; - public static final int AUTOSAVE_AFTER_FAILS_IN_MILLISECONS = 20000; - public static final int AUTOSAVE_IN_MILLISECONDS = 10000; - - private final RTEditor editor; - private final boolean autoSave; - private boolean savePending; - private boolean saveAndCloseConfirmed; - private Listener<String> onSave; - private Listener0 onEditCancelled; - private final RTEImgResources imgResources; - private final TimerWrapper timer; - private final DeferredCommandWrapper deferredCommandWrapper; - private final I18nTranslationService i18n; - private final StateManager stateManager; - private final BeforeActionListener beforeStateChangeListener; - ActionToolbarButtonDescriptor<Object> saveBtn; - private RTESavingEditorView view; - - public RTESavingEditorPresenter(RTEditor editor, final boolean autoSave, final I18nTranslationService i18n, - StateManager stateManager, DeferredCommandWrapper deferredCommandWrapper, - RTEImgResources imgResources, TimerWrapper timer) { - this.editor = editor; - this.autoSave = autoSave; - this.i18n = i18n; - this.stateManager = stateManager; - this.deferredCommandWrapper = deferredCommandWrapper; - this.imgResources = imgResources; - this.savePending = false; - this.saveAndCloseConfirmed = false; - createActions(); - this.timer = timer; - timer.configure(new Listener0() {; - - public void onEvent() { - onAutoSave(); - } - }); - editor.addOnEditListener(new Listener0() { - public void onEvent() { - onEdit(); - } - }); - beforeStateChangeListener = new BeforeActionListener() { - public boolean beforeAction() { - return beforeTokenChange(); - } - }; - } - - public void edit(String html, Listener<String> onSave, Listener0 onEditCancelled) { - this.onSave = onSave; - this.onEditCancelled = onEditCancelled; - editor.setHtml(html); - editor.attach(); - stateManager.addBeforeStateChangeListener(beforeStateChangeListener); - enableSaveBtn(false); - } - - public RTEditor getBasicEditor() { - return editor; - } - - public BeforeActionListener getBeforeSavingListener() { - return beforeStateChangeListener; - } - - public void init(RTESavingEditorView view) { - this.view = view; - } - - public void onDoSaveAndClose() { - saveAndCloseConfirmed = true; - onDoSave(); - } - - public void onSavedSuccessful() { - if (saveAndCloseConfirmed) { - onCancelConfirmed(); - } else { - reset(); - } - } - - public void onSaveFailed() { - timer.schedule(AUTOSAVE_AFTER_FAILS_IN_MILLISECONS); - if (saveAndCloseConfirmed) { - saveAndCloseConfirmed = false; - } - } - - protected void onAutoSave() { - onDoSave(); - } - - protected void onCancel() { - if (savePending) { - timer.cancel(); - Listener0 onYes = new Listener0() { - public void onEvent() { - onDoSaveAndClose(); - } - }; - Listener0 onCancel = new Listener0() { - public void onEvent() { - onCancelConfirmed(); - } - }; - view.askConfirmation(i18n.t("Save confirmation"), - i18n.t("Do you want to save before closing the editor?"), onYes, onCancel); - } else { - onCancelConfirmed(); - } - } - - protected void onCancelConfirmed() { - stateManager.removeBeforeStateChangeListener(beforeStateChangeListener); - stateManager.resumeTokenChange(); - reset(); - editor.reset(); - onDoEditCancelled(); - } - - protected void onDoSave() { - onSave.onEvent(editor.getHtml()); - } - - boolean beforeTokenChange() { - if (savePending) { - onCancel(); - return false; - } else { - deferredCommandWrapper.addCommand(new Listener0() { - public void onEvent() { - onCancelConfirmed(); - } - }); - return true; - } - } - - void onEdit() { - if (!savePending) { - savePending = true; - if (autoSave) { - timer.schedule(AUTOSAVE_IN_MILLISECONDS); - } - enableSaveBtn(true); - } - } - - private void createActions() { - Listener0 onPerformSaveCall = new Listener0() { - public void onEvent() { - onDoSave(); - } - }; - saveBtn = new ActionToolbarButtonDescriptor<Object>(AccessRolDTO.Editor, RTEditor.sndbar, onPerformSaveCall); - saveBtn.setIconCls(RTEImgResources.SUFFIX + imgResources.save().getName()); - saveBtn.setToolTip(i18n.t("Save")); - saveBtn.setShortcut(new ActionShortcut(true, 'S')); - saveBtn.setPosition(0); - - ActionToolbarMenuDescriptor<Object> save = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor, - RTEditor.topbar, onPerformSaveCall); - save.setIconCls(RTEImgResources.SUFFIX + imgResources.save().getName()); - save.setParentMenuTitle(i18n.t(FILE_MENU_OPTION)); - save.setTextDescription(i18n.t("Save")); - save.setShortcut(new ActionShortcut(true, 'S')); - save.setPosition(0); - - ActionToolbarMenuDescriptor<Object> close = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor, - RTEditor.topbar, new Listener<Object>() { - public void onEvent(Object parameter) { - onCancel(); - } - }); - close.setParentMenuTitle(i18n.t(FILE_MENU_OPTION)); - close.setTextDescription(i18n.t("Close")); - - Listener0 onPerformSaveAndCloseCall = new Listener0() { - public void onEvent() { - if (savePending) { - timer.cancel(); - onDoSaveAndClose(); - } else { - onCancelConfirmed(); - } - } - }; - ActionToolbarMenuDescriptor<Object> saveclose = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor, - RTEditor.topbar, onPerformSaveAndCloseCall); - saveclose.setParentMenuTitle(i18n.t(FILE_MENU_OPTION)); - saveclose.setTextDescription(i18n.t("Save & Close")); - - ActionToolbarButtonDescriptor<Object> saveCloseBtn = new ActionToolbarButtonDescriptor<Object>( - AccessRolDTO.Editor, RTEditor.topbar, onPerformSaveAndCloseCall); - // saveCloseBtn.setIconCls(RTEImgResources.SUFFIX + - // imgResources.save().getName()); - saveCloseBtn.setTextDescription(i18n.t("Save & Close")); - saveCloseBtn.setLeftSeparator(ActionToolbarButtonSeparator.fill); - - editor.addAction(save); - editor.addAction(saveclose); - editor.addAction(close); - editor.addAction(saveBtn); - editor.addAction(saveCloseBtn); - } - - private void enableSaveBtn(boolean enable) { - editor.getSndBar().setButtonEnable(saveBtn, enable); - } - - private void onDoEditCancelled() { - onEditCancelled.onEvent(); - } - - private void reset() { - timer.cancel(); - savePending = false; - saveAndCloseConfirmed = false; - enableSaveBtn(false); - } -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorView.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorView.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorView.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,10 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.View; - -import com.calclab.suco.client.events.Listener0; - -public interface RTESavingEditorView extends View { - - void askConfirmation(String confirmationTitle, String confirmationText, Listener0 onConfirm, Listener0 onCancel); -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,10 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.actions.ActionAddCondition; - -public class RTEcanBeBasic implements ActionAddCondition<Object> { - public boolean mustBeAdded(Object param) { - // TODO Auto-generated method stub - return false; - } -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,46 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.View; -import org.ourproject.kune.platf.client.actions.ActionAddCondition; -import org.ourproject.kune.platf.client.actions.ActionCollection; -import org.ourproject.kune.platf.client.actions.ActionDescriptor; -import org.ourproject.kune.platf.client.actions.ActionToolbarPosition; -import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; - -import com.calclab.suco.client.events.Listener0; - -public interface RTEditor { - - public final ActionToolbarPosition topbar = new ActionToolbarPosition("rte-topbar"); - public final ActionToolbarPosition sndbar = new ActionToolbarPosition("rte-sndbar");; - - void addAction(ActionDescriptor<Object> action); - - void addActions(ActionCollection<Object> actions); - - void addOnEditListener(Listener0 listener); - - void attach(); - - ActionAddCondition<Object> canBeBasic(); - - ActionAddCondition<Object> canBeExtended(); - - View getEditorArea(); - - String getHtml(); - - ActionToolbar<Object> getSndBar(); - - String getText(); - - ActionToolbar<Object> getTopBar(); - - void reset(); - - void setExtended(boolean extended); - - void setHtml(String html); - - void setText(String text); -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,318 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import java.util.Date; -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.actions.ActionItemCollection; -import org.ourproject.kune.platf.client.actions.ActionManager; -import org.ourproject.kune.platf.client.actions.ActionShortcut; -import org.ourproject.kune.platf.client.i18n.I18nUITranslationService; -import org.ourproject.kune.platf.client.ui.rte.RichTextArea.BasicFormatter; -import org.ourproject.kune.platf.client.ui.rte.RichTextArea.ExtendedFormatter; -import org.ourproject.kune.platf.client.ui.rte.RichTextArea.FontSize; -import org.ourproject.kune.platf.client.ui.rte.RichTextArea.Justification; - -import com.allen_sauer.gwt.log.client.Log; -import com.google.gwt.dom.client.Element; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.ChangeListener; -import com.google.gwt.user.client.ui.ClickListener; -import com.google.gwt.user.client.ui.FocusListener; -import com.google.gwt.user.client.ui.KeyboardListener; -import com.google.gwt.user.client.ui.Widget; - -public class RTEditorPanel implements RTEditorView { - - private class EventListener implements ClickListener, ChangeListener, KeyboardListener, FocusListener { - - public void onChange(Widget sender) { - presenter.fireOnEdit(); - } - - public void onClick(Widget sender) { - if (sender == rta) { - // We use the RichTextArea's onKeyUp event to update the - // toolbar status. This will catch any cases where the user - // moves the cursor using the keyboard, or uses one of the - // browser's built-in keyboard shortcuts. - updateStatus(); - } - } - - public void onFocus(Widget sender) { - presenter.onEditorFocus(); - } - - public void onKeyDown(final Widget sender, final char keyCode, final int modifiers) { - } - - public void onKeyPress(final Widget sender, final char keyCode, final int modifiers) { - } - - public void onKeyUp(final Widget sender, final char keyCode, final int modifiers) { - if (sender == rta) { - // We use the RichTextArea's onKeyUp event to update the - // toolbar status. - // This will catch any cases where the user moves the cursor - // using the keyboard, or uses one of the browser's built-in - // keyboard shortcuts. - - updateStatus(); - fireEdit(); - if (modifiers != 0) { - Log.debug("RTE shortcut pressed (" + modifiers + ", " + keyCode + ")"); - ActionItem<Object> actionItem = shortcuts.get(new ActionShortcut(keyCode, modifiers)); - if (actionItem != null) { - actionManager.doAction(actionItem); - updateStatus(); - } else { - Log.debug("...but not mapped to any action"); - } - } - } - } - - public void onLostFocus(Widget sender) { - - } - } - private final I18nUITranslationService i18n; - private final RichTextArea rta; - private final BasicFormatter basic; - private final ExtendedFormatter extended; - private final HashMap<ActionShortcut, ActionItem<Object>> shortcuts; - private final ActionManager actionManager; - private final RTEditorPresenter presenter; - - public RTEditorPanel(final RTEditorPresenter presenter, I18nUITranslationService i18n, ActionManager actionManager) { - this.presenter = presenter; - this.i18n = i18n; - this.actionManager = actionManager; - rta = new RichTextArea(); - basic = rta.getBasicFormatter(); - extended = rta.getExtendedFormatter(); - shortcuts = new HashMap<ActionShortcut, ActionItem<Object>>(); - EventListener listener = new EventListener(); - rta.addClickListener(listener); - rta.addKeyboardListener(listener); - rta.addFocusListener(listener); - rta.setWidth("96%"); - rta.setHeight("100%"); - } - - public void addActions(ActionItemCollection<Object> actionItems) { - for (ActionItem<Object> actionItem : actionItems) { - ActionDescriptor<Object> action = actionItem.getAction(); - if (action.hasShortcut() && action.mustBeAdded(null)) { - ActionShortcut shortcut = action.getShortcut(); - shortcuts.put(shortcut, actionItem); - } - } - } - - public void addComment(String userName) { - String time = i18n.formatDateWithLocale(new Date(), true); - Element span = DOM.createSpan(); - span.setInnerHTML("<em>" + i18n.t("type your comment here") + "</em> -" + userName + " " + time); - DOM.setElementProperty(span.<com.google.gwt.user.client.Element> cast(), "className", "k-rte-comment"); - insertHtml(" " + span.getString() + " "); - } - - public void adjustSize(int height) { - rta.setHeight("" + height); - } - - public boolean canBeBasic() { - return basic != null; - } - - public boolean canBeExtended() { - return extended != null; - } - - public void copy() { - extended.copy(); - } - - public void createLink(String url) { - extended.createLink(url); - } - - public void cut() { - extended.cut(); - } - - public void delete() { - extended.delete(); - } - - public void focus() { - rta.setFocus(true); - } - - public String getHtml() { - return rta.getHTML(); - } - - public Widget getRTE() { - return rta; - } - - public String getText() { - return rta.getText(); - } - - public void insertHorizontalRule() { - extended.insertHorizontalRule(); - } - - public void insertHtml(String html) { - extended.insertHtml(html); - } - - public void insertImage(String url) { - extended.insertImage(url); - } - - public void insertOrderedList() { - extended.insertOrderedList(); - } - - public void insertUnorderedList() { - extended.insertUnorderedList(); - } - - public boolean isAttached() { - return rta.isAttached(); - } - - public boolean isBold() { - return basic.isBold(); - } - - public boolean isItalic() { - return basic.isItalic(); - } - - public boolean isStrikethrough() { - return extended.isStrikethrough(); - } - - public boolean isSubscript() { - return basic.isSubscript(); - } - - public boolean isSuperscript() { - return basic.isSuperscript(); - } - - public boolean isUnderlined() { - return basic.isUnderlined(); - } - - public void justifyCenter() { - basic.setJustification(Justification.CENTER); - } - - public void justifyLeft() { - basic.setJustification(Justification.LEFT); - } - - public void justifyRight() { - basic.setJustification(Justification.RIGHT); - } - - public void leftIndent() { - extended.leftIndent(); - } - - public void paste() { - extended.paste(); - } - - public void redo() { - extended.redo(); - } - - public void removeFormat() { - extended.removeFormat(); - } - - public void rightIndent() { - extended.rightIndent(); - } - - public void selectAll() { - basic.selectAll(); - } - - public void setBackColor(String color) { - basic.setBackColor(color); - } - - public void setFontName(String name) { - basic.setFontName(name); - } - - public void setFontSize(FontSize size) { - basic.setFontSize(size); - } - - public void setForeColor(String color) { - basic.setForeColor(color); - } - - public void setHtml(String html) { - rta.setHTML(html); - } - - public void setText(String text) { - rta.setText(text); - } - - public void toggleBold() { - basic.toggleBold(); - } - - public void toggleItalic() { - basic.toggleItalic(); - } - - public void toggleStrikethrough() { - extended.toggleStrikethrough(); - } - - public void toggleSubscript() { - basic.toggleSubscript(); - } - - public void toggleSuperscript() { - basic.toggleSuperscript(); - } - - public void toggleUnderline() { - basic.toggleUnderline(); - } - - public void undo() { - extended.undo(); - } - - public void unlink() { - extended.removeLink(); - } - - protected void fireEdit() { - presenter.fireOnEdit(); - } - - /** - * Updates the status of all the stateful buttons. - */ - private void updateStatus() { - presenter.updateStatus(); - } - -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,761 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.View; -import org.ourproject.kune.platf.client.actions.ActionAddCondition; -import org.ourproject.kune.platf.client.actions.ActionCollection; -import org.ourproject.kune.platf.client.actions.ActionDescriptor; -import org.ourproject.kune.platf.client.actions.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; -import org.ourproject.kune.platf.client.actions.ActionToolbarPushButtonDescriptor; -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.state.Session; -import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette; -import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtml; -import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources; -import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImage; -import org.ourproject.kune.platf.client.ui.rte.insertlink.TextEditorInsertElement; -import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; - -import com.calclab.suco.client.events.Event0; -import com.calclab.suco.client.events.Listener; -import com.calclab.suco.client.events.Listener0; -import com.calclab.suco.client.events.Listener2; -import com.calclab.suco.client.ioc.Provider; -import com.google.gwt.libideas.resources.client.ImageResource; - -public class RTEditorPresenter implements RTEditor { - - private final String fontNames[] = { "Times New Roman", "Arial", "Courier New", "Georgia", "Trebuchet", "Verdana" }; - private final String fontSizes[] = { "Extra small", "Very small", "Small", "Medium", "Large", "Very large", - "Extra large" }; - private static final RichTextArea.FontSize[] fontSizesConstants = new RichTextArea.FontSize[] { - RichTextArea.FontSize.XX_SMALL, RichTextArea.FontSize.X_SMALL, RichTextArea.FontSize.SMALL, - RichTextArea.FontSize.MEDIUM, RichTextArea.FontSize.LARGE, RichTextArea.FontSize.X_LARGE, - RichTextArea.FontSize.XX_LARGE }; - - private static final String EDIT_MENU = "Edit"; - private static final String INSERT_MENU = "Insert"; - private static final String FORMAT_MENU = "Format"; - private RTEditorView view; - private boolean extended; - private final AccessRolDTO accessRol; - private final I18nTranslationService i18n; - private final Session session; - private final ActionItemCollection<Object> actions; - private final RTEImgResources imgResources; - private final RTEActionTopToolbar topBar; - private final RTEActionSndToolbar sndBar; - private ActionToolbarPushButtonDescriptor<Object> bold; - private ActionToolbarPushButtonDescriptor<Object> italic; - private ActionToolbarPushButtonDescriptor<Object> underline; - private ActionToolbarPushButtonDescriptor<Object> strikethrough; - private final Event0 onEdit; - private final TextEditorInsertElement insertElement; - private final ColorWebSafePalette palette; - private final DeferredCommandWrapper deferred; - private final ActionAddCondition<Object> canBeBasic; - private final ActionAddCondition<Object> canBeExtended; - private final Provider<EditHtml> editHtmlDialog; - private final Provider<InsertImage> insertImageDialog; - - public RTEditorPresenter(I18nTranslationService i18n, Session session, RTEActionTopToolbar topBar, - RTEActionSndToolbar sndBar, RTEImgResources imgResources, TextEditorInsertElement textEditorInsertElement, - ColorWebSafePalette palette, Provider<EditHtml> editHtmlDialog, Provider<InsertImage> insertImageDialog, - DeferredCommandWrapper deferred) { - this.i18n = i18n; - this.session = session; - this.topBar = topBar; - this.sndBar = sndBar; - this.insertElement = textEditorInsertElement; - this.palette = palette; - this.editHtmlDialog = editHtmlDialog; - this.insertImageDialog = insertImageDialog; - this.deferred = deferred; - styleToolbar(sndBar); - sndBar.attach(); - this.imgResources = imgResources; - extended = true; - accessRol = AccessRolDTO.Editor; - actions = new ActionItemCollection<Object>(); - this.onEdit = new Event0("onRTEEdit"); - canBeBasic = new ActionAddCondition<Object>() { - public boolean mustBeAdded(Object param) { - return view.canBeBasic(); - } - }; - canBeExtended = new ActionAddCondition<Object>() { - public boolean mustBeAdded(Object param) { - return isExtended(); - } - }; - } - - public void addAction(ActionDescriptor<Object> action) { - actions.add(withNoItem(action)); - } - - public void addActions(ActionCollection<Object> actioncollection) { - actions.addAll(withNoItem(actioncollection)); - } - - public void addOnEditListener(final Listener0 listener) { - onEdit.add(listener); - } - - public void adjustSize(final int height) { - view.adjustSize(height); - } - - public void attach() { - topBar.clear(); - sndBar.clear(); - topBar.addActions(actions, topbar); - sndBar.addActions(actions, sndbar); - view.addActions(actions); - } - - public ActionAddCondition<Object> canBeBasic() { - return canBeBasic(); - } - - public ActionAddCondition<Object> canBeExtended() { - return canBeExtended(); - } - - public void fireOnEdit() { - onEdit.fire(); - } - - public View getEditorArea() { - return view; - } - - public String getHtml() { - return view.getHtml(); - } - - public ActionToolbar<Object> getSndBar() { - return sndBar; - } - - public String getText() { - return view.getText(); - } - - public ActionToolbar<Object> getTopBar() { - return topBar; - } - - public void init(RTEditorView view) { - this.view = view; - createBasicActions(); - } - - public void onEditorFocus() { - topBar.hideAllMenus(); - sndBar.hideAllMenus(); - palette.hide(); - } - - public void reset() { - topBar.clear(); - sndBar.clear(); - } - - public void setExtended(boolean extended) { - this.extended = extended; - } - - public void setHtml(String html) { - view.setHtml(html); - view.focus(); - } - - public void setText(String text) { - view.setText(text); - view.focus(); - } - - public void updateStatus() { - if (view.canBeBasic()) { - sndBar.setPushButtonPressed(bold, view.isBold()); - sndBar.setPushButtonPressed(italic, view.isItalic()); - sndBar.setPushButtonPressed(underline, view.isUnderlined()); - } - if (isExtended()) { - sndBar.setPushButtonPressed(strikethrough, view.isStrikethrough()); - } - } - - private void createBasicActions() { - ActionToolbarMenuDescriptor<Object> selectAll = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.selectAll(); - } - }); - selectAll.setIconCls(getCssName(imgResources.selectall())); - selectAll.setShortcut(new ActionShortcut(true, 'A')); - selectAll.setTextDescription(i18n.t("Select all")); - selectAll.setParentMenuTitle(i18n.t(EDIT_MENU)); - selectAll.setAddCondition(canBeBasic); - selectAll.setTopSeparator(true); - selectAll.setBottomSeparator(true); - - bold = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() { - public void onEvent() { - view.toggleBold(); - fireOnEdit(); - } - }); - bold.setIconCls(getCssName(imgResources.bold())); - bold.setToolTip(i18n.t("Bold")); - bold.setShortcut(new ActionShortcut(true, 'B')); - bold.setAddCondition(canBeBasic); - - italic = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() { - public void onEvent() { - view.toggleItalic(); - fireOnEdit(); - } - }); - italic.setIconCls(getCssName(imgResources.italic())); - italic.setToolTip(i18n.t("Italic")); - italic.setShortcut(new ActionShortcut(true, 'I')); - italic.setAddCondition(canBeBasic); - italic.setAddCondition(canBeBasic); - - underline = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() { - public void onEvent() { - view.toggleUnderline(); - fireOnEdit(); - } - }); - underline.setIconCls(getCssName(imgResources.underline())); - underline.setToolTip(i18n.t("Underline")); - underline.setShortcut(new ActionShortcut(true, 'U')); - underline.setAddCondition(canBeBasic); - - ActionToolbarMenuDescriptor<Object> subscript = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.toggleSubscript(); - fireOnEdit(); - } - }); - subscript.setParentMenuTitle(i18n.t(FORMAT_MENU)); - subscript.setTextDescription(i18n.t("Subscript")); - subscript.setIconCls(getCssName(imgResources.subscript())); - subscript.setShortcut(new ActionShortcut(true, '0')); - subscript.setAddCondition(canBeBasic); - - ActionToolbarMenuDescriptor<Object> superscript = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.toggleSuperscript(); - fireOnEdit(); - } - }); - superscript.setParentMenuTitle(i18n.t(FORMAT_MENU)); - superscript.setTextDescription(i18n.t("Superscript")); - superscript.setIconCls(getCssName(imgResources.superscript())); - superscript.setShortcut(new ActionShortcut(true, '9')); - superscript.setAddCondition(canBeBasic); - - ActionToolbarButtonDescriptor<Object> justifyLeft = new ActionToolbarButtonDescriptor<Object>(accessRol, - sndbar, new Listener0() { - public void onEvent() { - view.justifyLeft(); - fireOnEdit(); - } - }); - justifyLeft.setIconCls(getCssName(imgResources.alignleft())); - justifyLeft.setToolTip(i18n.t("Left Justify")); - justifyLeft.setShortcut(new ActionShortcut(true, 'L')); - justifyLeft.setAddCondition(canBeBasic); - - ActionToolbarButtonDescriptor<Object> justifyCentre = new ActionToolbarButtonDescriptor<Object>(accessRol, - sndbar, new Listener0() { - public void onEvent() { - view.justifyCenter(); - fireOnEdit(); - } - }); - justifyCentre.setIconCls(getCssName(imgResources.centerpara())); - justifyCentre.setToolTip(i18n.t("Centre Justify")); - justifyCentre.setShortcut(new ActionShortcut(true, 'E')); - justifyCentre.setAddCondition(canBeBasic); - - ActionToolbarButtonDescriptor<Object> justifyRight = new ActionToolbarButtonDescriptor<Object>(accessRol, - sndbar, new Listener0() { - public void onEvent() { - view.justifyRight(); - fireOnEdit(); - } - }); - justifyRight.setIconCls(getCssName(imgResources.alignright())); - justifyRight.setToolTip(i18n.t("Right Justify")); - justifyRight.setShortcut(new ActionShortcut(true, 'R')); - justifyRight.setAddCondition(canBeBasic); - - ActionToolbarMenuDescriptor<Object> undo = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.undo(); - fireOnEdit(); - } - }); - undo.setShortcut(new ActionShortcut(true, 'Z')); - undo.setTextDescription(i18n.t("Undo")); - undo.setParentMenuTitle(i18n.t(EDIT_MENU)); - undo.setAddCondition(canBeExtended); - undo.setIconCls(getCssName(imgResources.undo())); - - ActionToolbarMenuDescriptor<Object> redo = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.redo(); - fireOnEdit(); - } - }); - redo.setShortcut(new ActionShortcut(true, 'Y')); - redo.setTextDescription(i18n.t("Redo")); - redo.setParentMenuTitle(i18n.t(EDIT_MENU)); - redo.setAddCondition(canBeExtended); - redo.setBottomSeparator(true); - redo.setIconCls(getCssName(imgResources.redo())); - - ActionToolbarButtonDescriptor<Object> undoBtn = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - view.undo(); - fireOnEdit(); - } - }); - undoBtn.setToolTip(i18n.t("Undo")); - undoBtn.setAddCondition(canBeExtended); - undoBtn.setIconCls(getCssName(imgResources.undo())); - undoBtn.setPosition(0); - - ActionToolbarButtonDescriptor<Object> redoBtn = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - view.redo(); - fireOnEdit(); - } - }); - redoBtn.setToolTip(i18n.t("Redo")); - redoBtn.setAddCondition(canBeExtended); - redoBtn.setIconCls(getCssName(imgResources.redo())); - redoBtn.setPosition(1); - redoBtn.setRightSeparator(ActionToolbarButtonSeparator.separator); - - ActionToolbarMenuDescriptor<Object> copy = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.copy(); - } - }); - copy.setShortcut(new ActionShortcut(true, 'C')); - copy.setTextDescription(i18n.t("Copy")); - copy.setParentMenuTitle(i18n.t(EDIT_MENU)); - copy.setAddCondition(canBeExtended); - copy.setIconCls(getCssName(imgResources.copy())); - - ActionToolbarMenuDescriptor<Object> cut = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.cut(); - fireOnEdit(); - } - }); - cut.setShortcut(new ActionShortcut(true, 'X')); - cut.setTextDescription(i18n.t("Cut")); - cut.setParentMenuTitle(i18n.t(EDIT_MENU)); - cut.setAddCondition(canBeExtended); - cut.setIconCls(getCssName(imgResources.cut())); - - ActionToolbarMenuDescriptor<Object> paste = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.paste(); - fireOnEdit(); - } - }); - paste.setShortcut(new ActionShortcut(true, 'V')); - paste.setTextDescription(i18n.t("Paste")); - paste.setParentMenuTitle(i18n.t(EDIT_MENU)); - paste.setAddCondition(canBeExtended); - paste.setIconCls(getCssName(imgResources.paste())); - - ActionToolbarMenuDescriptor<Object> editHtml = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - EditHtml dialog = editHtmlDialog.get(); - dialog.setUpdateListener(new Listener<String>() { - public void onEvent(String html) { - view.setHtml(html); - fireOnEdit(); - } - }); - dialog.show(); - dialog.setHtml(view.getHtml()); - } - }); - editHtml.setIconCls(getCssName(imgResources.edithtml())); - editHtml.setTextDescription(i18n.t("Edit HTML")); - editHtml.setParentMenuTitle(i18n.t(EDIT_MENU)); - editHtml.setAddCondition(canBeExtended); - - ActionToolbarMenuDescriptor<Object> comment = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.focus(); - String author = session.isLogged() ? session.getCurrentUser().getShortName() - : i18n.t("anonymous user"); - view.addComment(author); - fireOnEdit(); - } - }); - comment.setEnableCondition(new ActionEnableCondition<Object>() { - public boolean mustBeEnabled(Object param) { - return session.isLogged(); - } - }); - comment.setShortcut(new ActionShortcut(true, 'M')); - comment.setTextDescription(i18n.t("Comment...")); - comment.setParentMenuTitle(i18n.t(INSERT_MENU)); - comment.setEnableCondition(isInsertHtmlSupported()); - comment.setAddCondition(canBeExtended); - - ActionToolbarMenuDescriptor<Object> hr = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, - new Listener0() { - public void onEvent() { - view.focus(); - view.insertHorizontalRule(); - fireOnEdit(); - } - }); - hr.setTextDescription(i18n.t("Horizontal line")); - hr.setShortcut(new ActionShortcut(true, true, ' ', "Space")); - hr.setIconCls(getCssName(imgResources.hfixedline())); - hr.setParentMenuTitle(i18n.t(INSERT_MENU)); - hr.setAddCondition(canBeExtended); - - ActionToolbarButtonDescriptor<Object> hrButton = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - view.focus(); - view.insertHorizontalRule(); - fireOnEdit(); - } - }); - hrButton.setIconCls(getCssName(imgResources.hfixedline())); - hrButton.setToolTip(i18n.t("Horizontal line")); - hrButton.setAddCondition(canBeExtended); - - strikethrough = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() { - public void onEvent() { - view.toggleStrikethrough(); - fireOnEdit(); - } - }); - strikethrough.setIconCls(getCssName(imgResources.strikeout())); - strikethrough.setToolTip(i18n.t("Strikethrough")); - strikethrough.setRightSeparator(ActionToolbarButtonSeparator.separator); - strikethrough.setAddCondition(canBeExtended); - - ActionToolbarButtonDescriptor<Object> decreaseIndent = new ActionToolbarButtonDescriptor<Object>(accessRol, - sndbar, new Listener0() { - public void onEvent() { - view.leftIndent(); - fireOnEdit(); - } - }); - decreaseIndent.setIconCls(getCssName(imgResources.decrementindent())); - decreaseIndent.setToolTip(i18n.t("Decrease Indent")); - decreaseIndent.setAddCondition(canBeExtended); - - ActionToolbarButtonDescriptor<Object> increaseIndent = new ActionToolbarButtonDescriptor<Object>(accessRol, - sndbar, new Listener0() { - public void onEvent() { - view.rightIndent(); - fireOnEdit(); - } - }); - increaseIndent.setIconCls(getCssName(imgResources.incrementindent())); - increaseIndent.setToolTip(i18n.t("Increase Indent")); - increaseIndent.setAddCondition(canBeExtended); - - ActionToolbarButtonDescriptor<Object> ol = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - view.insertOrderedList(); - fireOnEdit(); - } - }); - ol.setIconCls(getCssName(imgResources.defaultnumbering())); - ol.setToolTip(i18n.t("Numbered List")); - ol.setShortcut(new ActionShortcut(true, '7')); - ol.setAddCondition(canBeExtended); - - ActionToolbarButtonDescriptor<Object> ul = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - view.insertUnorderedList(); - fireOnEdit(); - } - }); - ul.setIconCls(getCssName(imgResources.defaultbullet())); - ul.setToolTip(i18n.t("Bullet List")); - ul.setShortcut(new ActionShortcut(true, '8')); - ul.setRightSeparator(ActionToolbarButtonSeparator.separator); - ul.setAddCondition(canBeExtended); - - ActionToolbarButtonDescriptor<Object> img = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - insertImageDialog.get().show(); - } - }); - img.setIconCls(getCssName(imgResources.images())); - img.setToolTip(i18n.t("Insert Image")); - img.setAddCondition(canBeExtended); - - ActionToolbarButtonDescriptor<Object> createLink = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - deferred.addCommand(new Listener0() { - public void onEvent() { - insertElement.show(); - } - }); - } - }); - createLink.setIconCls(getCssName(imgResources.link())); - createLink.setToolTip(i18n.t("Create Link")); - createLink.setShortcut(new ActionShortcut(true, 'K')); - createLink.setAddCondition(canBeExtended); - insertElement.addOnCreateLink(new Listener2<String, String>() { - public void onEvent(String name, String url) { - view.createLink(url); - fireOnEdit(); - } - }); - - ActionToolbarButtonDescriptor<Object> removeLink = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - view.unlink(); - fireOnEdit(); - } - }); - removeLink.setIconCls(getCssName(imgResources.linkbreak())); - removeLink.setToolTip(i18n.t("Remove Link")); - removeLink.setShortcut(new ActionShortcut(true, true, 'K')); - removeLink.setAddCondition(canBeExtended); - - final ActionToolbarButtonDescriptor<Object> removeFormat = new ActionToolbarButtonDescriptor<Object>(accessRol, - sndbar, new Listener0() { - public void onEvent() { - view.removeFormat(); - fireOnEdit(); - } - }); - removeFormat.setIconCls(getCssName(imgResources.removeFormat())); - removeFormat.setToolTip(i18n.t("Clear Formatting")); - removeFormat.setShortcut(new ActionShortcut(true, ' ', "Space")); - removeFormat.setAddCondition(canBeExtended); - removeFormat.setRightSeparator(ActionToolbarButtonSeparator.separator); - - final ActionToolbarMenuDescriptor<Object> insertTable = new ActionToolbarMenuDescriptor<Object>(accessRol, - topbar, new Listener0() { - public void onEvent() { - insertSimpleTable(); - } - }); - insertTable.setIconCls(getCssName(imgResources.inserttable())); - insertTable.setTextDescription(i18n.t("Insert Table ...")); - 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.setIconCls(getCssName(imgResources.inserttable())); - insertTableBtn.setToolTip(i18n.t("Insert Table")); - insertTableBtn.setAddCondition(canBeExtended); - insertTableBtn.setRightSeparator(ActionToolbarButtonSeparator.separator); - - final ActionToolbarButtonDescriptor<Object> fontColor = new ActionToolbarButtonDescriptor<Object>(accessRol, - sndbar, new Listener0() { - public void onEvent() { - palette.show(getActionLeftPosition(sndBar, removeFormat), getActionTopPosition(sndBar, - removeFormat), new Listener<String>() { - public void onEvent(String color) { - palette.hide(); - view.setForeColor(color); - fireOnEdit(); - } - }); - } - }); - fontColor.setIconCls(getCssName(imgResources.fontcolor())); - fontColor.setToolTip(i18n.t("Text Colour")); - fontColor.setAddCondition(canBeBasic); - - ActionToolbarButtonDescriptor<Object> backgroundColor = new ActionToolbarButtonDescriptor<Object>(accessRol, - sndbar, new Listener0() { - public void onEvent() { - palette.show(getActionLeftPosition(sndBar, fontColor), getActionTopPosition(sndBar, fontColor), - new Listener<String>() { - public void onEvent(String color) { - palette.hide(); - view.setBackColor(color); - fireOnEdit(); - } - }); - } - }); - backgroundColor.setIconCls(getCssName(imgResources.backcolor())); - backgroundColor.setToolTip(i18n.t("Text Background Colour")); - backgroundColor.setAddCondition(canBeBasic); - - actions.add(withNoItem(bold)); - actions.add(withNoItem(italic)); - actions.add(withNoItem(underline)); - actions.add(withNoItem(strikethrough)); - - actions.add(withNoItem(justifyLeft)); - actions.add(withNoItem(justifyCentre)); - actions.add(withNoItem(justifyRight)); - - actions.add(withNoItem(undo)); - actions.add(withNoItem(redo)); - actions.add(withNoItem(copy)); - actions.add(withNoItem(cut)); - actions.add(withNoItem(paste)); - actions.add(withNoItem(selectAll)); - actions.add(withNoItem(editHtml)); - actions.add(withNoItem(hr)); - actions.add(withNoItem(subscript)); - actions.add(withNoItem(superscript)); - actions.add(withNoItem(decreaseIndent)); - actions.add(withNoItem(increaseIndent)); - actions.add(withNoItem(ol)); - actions.add(withNoItem(ul)); - actions.add(withNoItem(removeFormat)); - // topActions.add(withNoItem(hrButton)); - actions.add(withNoItem(img)); - actions.add(withNoItem(createLink)); - actions.add(withNoItem(removeLink)); - actions.add(withNoItem(insertTableBtn)); - actions.add(withNoItem(insertTable)); - actions.add(withNoItem(comment)); - actions.add(withNoItem(undoBtn)); - actions.add(withNoItem(redoBtn)); - - for (String fontName : this.fontNames) { - ActionToolbarMenuDescriptor<Object> fontNameAction = createFontNameAction(canBeBasic, fontName); - actions.add(withNoItem(fontNameAction)); - } - for (int fontSize = 0; fontSize < fontSizes.length; fontSize++) { - ActionToolbarMenuDescriptor<Object> fontSizeAction = createFontSizeAction(canBeBasic, fontSize, - fontSizes[fontSize]); - actions.add(withNoItem(fontSizeAction)); - } - actions.add(withNoItem(fontColor)); - actions.add(withNoItem(backgroundColor)); - } - - private ActionToolbarMenuDescriptor<Object> createFontNameAction(ActionAddCondition<Object> canBeBasic, - final String fontName) { - final ActionToolbarMenuDescriptor<Object> font = new ActionToolbarMenuDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - view.setFontName(fontName); - fireOnEdit(); - } - }); - font.setTextDescription("<span style=\"font-family: " + fontName + "\">" + fontName + "</span>"); - font.setParentMenuTooltip(i18n.t("Font")); - font.setParentMenuIconCls(getCssName(imgResources.charfontname())); - font.setAddCondition(canBeBasic); - return font; - } - - private ActionToolbarMenuDescriptor<Object> createFontSizeAction(ActionAddCondition<Object> canBeBasic, - final int fontSize, String fontSizeName) { - final ActionToolbarMenuDescriptor<Object> font = new ActionToolbarMenuDescriptor<Object>(accessRol, sndbar, - new Listener0() { - public void onEvent() { - view.setFontSize(fontSizesConstants[fontSize]); - fireOnEdit(); - } - }); - font.setTextDescription("<font size=\"" + (fontSize + 1) + "\">" + i18n.t(fontSizeName) + "</font>"); - font.setParentMenuTooltip(i18n.t("Font size")); - font.setParentMenuIconCls(getCssName(imgResources.fontheight())); - font.setAddCondition(canBeBasic); - return font; - } - - private int getActionLeftPosition(ActionToolbar<Object> bar, ActionToolbarButtonDescriptor<Object> action) { - return bar.getLeftPosition(action); - } - - private int getActionTopPosition(ActionToolbar<Object> bar, ActionToolbarButtonDescriptor<Object> action) { - return bar.getTopPosition(action); - } - - private String getCssName(ImageResource imageResource) { - 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(); - } - - private ActionEnableCondition<Object> isInsertHtmlSupported() { - return new ActionEnableCondition<Object>() { - public boolean mustBeEnabled(Object param) { - return true; - } - }; - } - - private void styleToolbar(ActionToolbar<Object> bar) { - bar.setNormalStyle(); - } - - private ActionItemCollection<Object> withNoItem(ActionCollection<Object> actions) { - ActionItemCollection<Object> collection = new ActionItemCollection<Object>(); - for (ActionDescriptor<Object> action : actions) { - // this action don't have a associated item - collection.add(withNoItem(action)); - } - return collection; - } - - private ActionItem<Object> withNoItem(ActionDescriptor<Object> action) { - return new ActionItem<Object>(action, null); - } -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,102 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import org.ourproject.kune.platf.client.View; -import org.ourproject.kune.platf.client.actions.ActionItemCollection; -import org.ourproject.kune.platf.client.ui.rte.RichTextArea.FontSize; - -public interface RTEditorView extends View { - - void addActions(ActionItemCollection<Object> actions); - - void addComment(String userName); - - void adjustSize(int height); - - boolean canBeBasic(); - - boolean canBeExtended(); - - void copy(); - - void createLink(String url); - - void cut(); - - void delete(); - - void focus(); - - String getHtml(); - - String getText(); - - void insertHorizontalRule(); - - void insertHtml(String html); - - void insertImage(String url); - - void insertOrderedList(); - - void insertUnorderedList(); - - boolean isAttached(); - - boolean isBold(); - - boolean isItalic(); - - boolean isStrikethrough(); - - boolean isSubscript(); - - boolean isSuperscript(); - - boolean isUnderlined(); - - void justifyCenter(); - - void justifyLeft(); - - void justifyRight(); - - void leftIndent(); - - void paste(); - - void redo(); - - void removeFormat(); - - void rightIndent(); - - void selectAll(); - - void setBackColor(String color); - - void setFontName(String name); - - void setFontSize(FontSize fontSize); - - void setForeColor(String color); - - void setHtml(String html); - - void setText(String text); - - void toggleBold(); - - void toggleItalic(); - - void toggleStrikethrough(); - - void toggleSubscript(); - - void toggleSuperscript(); - - void toggleUnderline(); - - void undo(); - - void unlink(); -} Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/TestRTEDialog.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/TestRTEDialog.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/TestRTEDialog.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -2,6 +2,9 @@ import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel; import org.ourproject.kune.platf.client.ui.dialogs.BasicDialog; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEditor; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEditorPanel; +import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditor; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionSndToolbar.java (from rev 1055, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbar.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbar.java 2009-03-03 01:35:36 UTC (rev 1055) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionSndToolbar.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,7 @@ +package org.ourproject.kune.platf.client.ui.rte.basic; + +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; + +public interface RTEActionSndToolbar extends ActionToolbar<Object> { + +} \ No newline at end of file Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionSndToolbarPresenter.java (from rev 1055, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbarPresenter.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionSndToolbarPresenter.java 2009-03-03 01:35:36 UTC (rev 1055) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionSndToolbarPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,12 @@ +package org.ourproject.kune.platf.client.ui.rte.basic; + +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView; + +public class RTEActionSndToolbarPresenter extends ActionToolbarPresenter<Object> implements RTEActionSndToolbar { + + public RTEActionSndToolbarPresenter(ActionToolbarView<Object> toolbar) { + super(toolbar); + } + +} \ No newline at end of file Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionTopToolbar.java (from rev 1055, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbar.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbar.java 2009-03-03 01:35:36 UTC (rev 1055) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionTopToolbar.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,7 @@ +package org.ourproject.kune.platf.client.ui.rte.basic; + +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; + +public interface RTEActionTopToolbar extends ActionToolbar<Object> { + +} \ No newline at end of file Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionTopToolbarPresenter.java (from rev 1055, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbarPresenter.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEActionTopToolbarPresenter.java 2009-03-03 01:35:36 UTC (rev 1055) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEActionTopToolbarPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,12 @@ +package org.ourproject.kune.platf.client.ui.rte.basic; + +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarView; + +public class RTEActionTopToolbarPresenter extends ActionToolbarPresenter<Object> implements RTEActionTopToolbar { + + public RTEActionTopToolbarPresenter(ActionToolbarView<Object> toolbar) { + super(toolbar); + } + +} \ No newline at end of file Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEcanBeBasic.java (from rev 1064, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEcanBeBasic.java 2009-03-10 00:05:50 UTC (rev 1064) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEcanBeBasic.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,10 @@ +package org.ourproject.kune.platf.client.ui.rte.basic; + +import org.ourproject.kune.platf.client.actions.ActionAddCondition; + +public class RTEcanBeBasic implements ActionAddCondition<Object> { + public boolean mustBeAdded(Object param) { + // TODO Auto-generated method stub + return false; + } +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditor.java (from rev 1064, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditor.java 2009-03-10 00:05:50 UTC (rev 1064) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditor.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,46 @@ +package org.ourproject.kune.platf.client.ui.rte.basic; + +import org.ourproject.kune.platf.client.View; +import org.ourproject.kune.platf.client.actions.ActionAddCondition; +import org.ourproject.kune.platf.client.actions.ActionCollection; +import org.ourproject.kune.platf.client.actions.ActionDescriptor; +import org.ourproject.kune.platf.client.actions.ActionToolbarPosition; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; + +import com.calclab.suco.client.events.Listener0; + +public interface RTEditor { + + public final ActionToolbarPosition topbar = new ActionToolbarPosition("rte-topbar"); + public final ActionToolbarPosition sndbar = new ActionToolbarPosition("rte-sndbar");; + + void addAction(ActionDescriptor<Object> action); + + void addActions(ActionCollection<Object> actions); + + void addOnEditListener(Listener0 listener); + + void attach(); + + ActionAddCondition<Object> canBeBasic(); + + ActionAddCondition<Object> canBeExtended(); + + View getEditorArea(); + + String getHtml(); + + ActionToolbar<Object> getSndBar(); + + String getText(); + + ActionToolbar<Object> getTopBar(); + + void reset(); + + void setExtended(boolean extended); + + void setHtml(String html); + + void setText(String text); +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java (from rev 1066, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPanel.java 2009-03-10 13:43:43 UTC (rev 1066) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPanel.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,319 @@ +package org.ourproject.kune.platf.client.ui.rte.basic; + +import java.util.Date; +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.actions.ActionItemCollection; +import org.ourproject.kune.platf.client.actions.ActionManager; +import org.ourproject.kune.platf.client.actions.ActionShortcut; +import org.ourproject.kune.platf.client.i18n.I18nUITranslationService; +import org.ourproject.kune.platf.client.ui.rte.RichTextArea; +import org.ourproject.kune.platf.client.ui.rte.RichTextArea.BasicFormatter; +import org.ourproject.kune.platf.client.ui.rte.RichTextArea.ExtendedFormatter; +import org.ourproject.kune.platf.client.ui.rte.RichTextArea.FontSize; +import org.ourproject.kune.platf.client.ui.rte.RichTextArea.Justification; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.dom.client.Element; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.ChangeListener; +import com.google.gwt.user.client.ui.ClickListener; +import com.google.gwt.user.client.ui.FocusListener; +import com.google.gwt.user.client.ui.KeyboardListener; +import com.google.gwt.user.client.ui.Widget; + +public class RTEditorPanel implements RTEditorView { + + private class EventListener implements ClickListener, ChangeListener, KeyboardListener, FocusListener { + + public void onChange(Widget sender) { + presenter.fireOnEdit(); + } + + public void onClick(Widget sender) { + if (sender == rta) { + // We use the RichTextArea's onKeyUp event to update the + // toolbar status. This will catch any cases where the user + // moves the cursor using the keyboard, or uses one of the + // browser's built-in keyboard shortcuts. + updateStatus(); + } + } + + public void onFocus(Widget sender) { + presenter.onEditorFocus(); + } + + public void onKeyDown(final Widget sender, final char keyCode, final int modifiers) { + } + + public void onKeyPress(final Widget sender, final char keyCode, final int modifiers) { + } + + public void onKeyUp(final Widget sender, final char keyCode, final int modifiers) { + if (sender == rta) { + // We use the RichTextArea's onKeyUp event to update the + // toolbar status. + // This will catch any cases where the user moves the cursor + // using the keyboard, or uses one of the browser's built-in + // keyboard shortcuts. + + updateStatus(); + fireEdit(); + if (modifiers != 0) { + Log.debug("RTE shortcut pressed (" + modifiers + ", " + keyCode + ")"); + ActionItem<Object> actionItem = shortcuts.get(new ActionShortcut(keyCode, modifiers)); + if (actionItem != null) { + actionManager.doAction(actionItem); + updateStatus(); + } else { + Log.debug("...but not mapped to any action"); + } + } + } + } + + public void onLostFocus(Widget sender) { + + } + } + private final I18nUITranslationService i18n; + private final RichTextArea rta; + private final BasicFormatter basic; + private final ExtendedFormatter extended; + private final HashMap<ActionShortcut, ActionItem<Object>> shortcuts; + private final ActionManager actionManager; + private final RTEditorPresenter presenter; + + public RTEditorPanel(final RTEditorPresenter presenter, I18nUITranslationService i18n, ActionManager actionManager) { + this.presenter = presenter; + this.i18n = i18n; + this.actionManager = actionManager; + rta = new RichTextArea(); + basic = rta.getBasicFormatter(); + extended = rta.getExtendedFormatter(); + shortcuts = new HashMap<ActionShortcut, ActionItem<Object>>(); + EventListener listener = new EventListener(); + rta.addClickListener(listener); + rta.addKeyboardListener(listener); + rta.addFocusListener(listener); + rta.setWidth("96%"); + rta.setHeight("100%"); + } + + public void addActions(ActionItemCollection<Object> actionItems) { + for (ActionItem<Object> actionItem : actionItems) { + ActionDescriptor<Object> action = actionItem.getAction(); + if (action.hasShortcut() && action.mustBeAdded(null)) { + ActionShortcut shortcut = action.getShortcut(); + shortcuts.put(shortcut, actionItem); + } + } + } + + public void addComment(String userName) { + String time = i18n.formatDateWithLocale(new Date(), true); + Element span = DOM.createSpan(); + span.setInnerHTML("<em>" + i18n.t("type your comment here") + "</em> -" + userName + " " + time); + DOM.setElementProperty(span.<com.google.gwt.user.client.Element> cast(), "className", "k-rte-comment"); + insertHtml(" " + span.getString() + " "); + } + + public void adjustSize(int height) { + rta.setHeight("" + height); + } + + public boolean canBeBasic() { + return basic != null; + } + + public boolean canBeExtended() { + return extended != null; + } + + public void copy() { + extended.copy(); + } + + public void createLink(String url) { + extended.createLink(url); + } + + public void cut() { + extended.cut(); + } + + public void delete() { + extended.delete(); + } + + public void focus() { + rta.setFocus(true); + } + + public String getHtml() { + return rta.getHTML(); + } + + public Widget getRTE() { + return rta; + } + + public String getText() { + return rta.getText(); + } + + public void insertHorizontalRule() { + extended.insertHorizontalRule(); + } + + public void insertHtml(String html) { + extended.insertHtml(html); + } + + public void insertImage(String url) { + extended.insertImage(url); + } + + public void insertOrderedList() { + extended.insertOrderedList(); + } + + public void insertUnorderedList() { + extended.insertUnorderedList(); + } + + public boolean isAttached() { + return rta.isAttached(); + } + + public boolean isBold() { + return basic.isBold(); + } + + public boolean isItalic() { + return basic.isItalic(); + } + + public boolean isStrikethrough() { + return extended.isStrikethrough(); + } + + public boolean isSubscript() { + return basic.isSubscript(); + } + + public boolean isSuperscript() { + return basic.isSuperscript(); + } + + public boolean isUnderlined() { + return basic.isUnderlined(); + } + + public void justifyCenter() { + basic.setJustification(Justification.CENTER); + } + + public void justifyLeft() { + basic.setJustification(Justification.LEFT); + } + + public void justifyRight() { + basic.setJustification(Justification.RIGHT); + } + + public void leftIndent() { + extended.leftIndent(); + } + + public void paste() { + extended.paste(); + } + + public void redo() { + extended.redo(); + } + + public void removeFormat() { + extended.removeFormat(); + } + + public void rightIndent() { + extended.rightIndent(); + } + + public void selectAll() { + basic.selectAll(); + } + + public void setBackColor(String color) { + basic.setBackColor(color); + } + + public void setFontName(String name) { + basic.setFontName(name); + } + + public void setFontSize(FontSize size) { + basic.setFontSize(size); + } + + public void setForeColor(String color) { + basic.setForeColor(color); + } + + public void setHtml(String html) { + rta.setHTML(html); + } + + public void setText(String text) { + rta.setText(text); + } + + public void toggleBold() { + basic.toggleBold(); + } + + public void toggleItalic() { + basic.toggleItalic(); + } + + public void toggleStrikethrough() { + extended.toggleStrikethrough(); + } + + public void toggleSubscript() { + basic.toggleSubscript(); + } + + public void toggleSuperscript() { + basic.toggleSuperscript(); + } + + public void toggleUnderline() { + basic.toggleUnderline(); + } + + public void undo() { + extended.undo(); + } + + public void unlink() { + extended.removeLink(); + } + + protected void fireEdit() { + presenter.fireOnEdit(); + } + + /** + * Updates the status of all the stateful buttons. + */ + private void updateStatus() { + presenter.updateStatus(); + } + +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java (from rev 1069, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorPresenter.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,762 @@ +package org.ourproject.kune.platf.client.ui.rte.basic; + +import org.ourproject.kune.platf.client.View; +import org.ourproject.kune.platf.client.actions.ActionAddCondition; +import org.ourproject.kune.platf.client.actions.ActionCollection; +import org.ourproject.kune.platf.client.actions.ActionDescriptor; +import org.ourproject.kune.platf.client.actions.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; +import org.ourproject.kune.platf.client.actions.ActionToolbarPushButtonDescriptor; +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.state.Session; +import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette; +import org.ourproject.kune.platf.client.ui.rte.RichTextArea; +import org.ourproject.kune.platf.client.ui.rte.edithtml.EditHtml; +import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources; +import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImage; +import org.ourproject.kune.platf.client.ui.rte.insertlink.TextEditorInsertElement; +import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; + +import com.calclab.suco.client.events.Event0; +import com.calclab.suco.client.events.Listener; +import com.calclab.suco.client.events.Listener0; +import com.calclab.suco.client.events.Listener2; +import com.calclab.suco.client.ioc.Provider; +import com.google.gwt.libideas.resources.client.ImageResource; + +public class RTEditorPresenter implements RTEditor { + + private final String fontNames[] = { "Times New Roman", "Arial", "Courier New", "Georgia", "Trebuchet", "Verdana" }; + private final String fontSizes[] = { "Extra small", "Very small", "Small", "Medium", "Large", "Very large", + "Extra large" }; + private static final RichTextArea.FontSize[] fontSizesConstants = new RichTextArea.FontSize[] { + RichTextArea.FontSize.XX_SMALL, RichTextArea.FontSize.X_SMALL, RichTextArea.FontSize.SMALL, + RichTextArea.FontSize.MEDIUM, RichTextArea.FontSize.LARGE, RichTextArea.FontSize.X_LARGE, + RichTextArea.FontSize.XX_LARGE }; + + private static final String EDIT_MENU = "Edit"; + private static final String INSERT_MENU = "Insert"; + private static final String FORMAT_MENU = "Format"; + private RTEditorView view; + private boolean extended; + private final AccessRolDTO accessRol; + private final I18nTranslationService i18n; + private final Session session; + private final ActionItemCollection<Object> actions; + private final RTEImgResources imgResources; + private final RTEActionTopToolbar topBar; + private final RTEActionSndToolbar sndBar; + private ActionToolbarPushButtonDescriptor<Object> bold; + private ActionToolbarPushButtonDescriptor<Object> italic; + private ActionToolbarPushButtonDescriptor<Object> underline; + private ActionToolbarPushButtonDescriptor<Object> strikethrough; + private final Event0 onEdit; + private final TextEditorInsertElement insertElement; + private final ColorWebSafePalette palette; + private final DeferredCommandWrapper deferred; + private final ActionAddCondition<Object> canBeBasic; + private final ActionAddCondition<Object> canBeExtended; + private final Provider<EditHtml> editHtmlDialog; + private final Provider<InsertImage> insertImageDialog; + + public RTEditorPresenter(I18nTranslationService i18n, Session session, RTEActionTopToolbar topBar, + RTEActionSndToolbar sndBar, RTEImgResources imgResources, TextEditorInsertElement textEditorInsertElement, + ColorWebSafePalette palette, Provider<EditHtml> editHtmlDialog, Provider<InsertImage> insertImageDialog, + DeferredCommandWrapper deferred) { + this.i18n = i18n; + this.session = session; + this.topBar = topBar; + this.sndBar = sndBar; + this.insertElement = textEditorInsertElement; + this.palette = palette; + this.editHtmlDialog = editHtmlDialog; + this.insertImageDialog = insertImageDialog; + this.deferred = deferred; + styleToolbar(sndBar); + sndBar.attach(); + this.imgResources = imgResources; + extended = true; + accessRol = AccessRolDTO.Editor; + actions = new ActionItemCollection<Object>(); + this.onEdit = new Event0("onRTEEdit"); + canBeBasic = new ActionAddCondition<Object>() { + public boolean mustBeAdded(Object param) { + return view.canBeBasic(); + } + }; + canBeExtended = new ActionAddCondition<Object>() { + public boolean mustBeAdded(Object param) { + return isExtended(); + } + }; + } + + public void addAction(ActionDescriptor<Object> action) { + actions.add(withNoItem(action)); + } + + public void addActions(ActionCollection<Object> actioncollection) { + actions.addAll(withNoItem(actioncollection)); + } + + public void addOnEditListener(final Listener0 listener) { + onEdit.add(listener); + } + + public void adjustSize(final int height) { + view.adjustSize(height); + } + + public void attach() { + topBar.clear(); + sndBar.clear(); + topBar.addActions(actions, topbar); + sndBar.addActions(actions, sndbar); + view.addActions(actions); + } + + public ActionAddCondition<Object> canBeBasic() { + return canBeBasic(); + } + + public ActionAddCondition<Object> canBeExtended() { + return canBeExtended(); + } + + public void fireOnEdit() { + onEdit.fire(); + } + + public View getEditorArea() { + return view; + } + + public String getHtml() { + return view.getHtml(); + } + + public ActionToolbar<Object> getSndBar() { + return sndBar; + } + + public String getText() { + return view.getText(); + } + + public ActionToolbar<Object> getTopBar() { + return topBar; + } + + public void init(RTEditorView view) { + this.view = view; + createBasicActions(); + } + + public void onEditorFocus() { + topBar.hideAllMenus(); + sndBar.hideAllMenus(); + palette.hide(); + } + + public void reset() { + topBar.clear(); + sndBar.clear(); + } + + public void setExtended(boolean extended) { + this.extended = extended; + } + + public void setHtml(String html) { + view.setHtml(html); + view.focus(); + } + + public void setText(String text) { + view.setText(text); + view.focus(); + } + + public void updateStatus() { + if (view.canBeBasic()) { + sndBar.setPushButtonPressed(bold, view.isBold()); + sndBar.setPushButtonPressed(italic, view.isItalic()); + sndBar.setPushButtonPressed(underline, view.isUnderlined()); + } + if (isExtended()) { + sndBar.setPushButtonPressed(strikethrough, view.isStrikethrough()); + } + } + + private void createBasicActions() { + ActionToolbarMenuDescriptor<Object> selectAll = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.selectAll(); + } + }); + selectAll.setIconCls(getCssName(imgResources.selectall())); + selectAll.setShortcut(new ActionShortcut(true, 'A')); + selectAll.setTextDescription(i18n.t("Select all")); + selectAll.setParentMenuTitle(i18n.t(EDIT_MENU)); + selectAll.setAddCondition(canBeBasic); + selectAll.setTopSeparator(true); + selectAll.setBottomSeparator(true); + + bold = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() { + public void onEvent() { + view.toggleBold(); + fireOnEdit(); + } + }); + bold.setIconCls(getCssName(imgResources.bold())); + bold.setToolTip(i18n.t("Bold")); + bold.setShortcut(new ActionShortcut(true, 'B')); + bold.setAddCondition(canBeBasic); + + italic = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() { + public void onEvent() { + view.toggleItalic(); + fireOnEdit(); + } + }); + italic.setIconCls(getCssName(imgResources.italic())); + italic.setToolTip(i18n.t("Italic")); + italic.setShortcut(new ActionShortcut(true, 'I')); + italic.setAddCondition(canBeBasic); + italic.setAddCondition(canBeBasic); + + underline = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() { + public void onEvent() { + view.toggleUnderline(); + fireOnEdit(); + } + }); + underline.setIconCls(getCssName(imgResources.underline())); + underline.setToolTip(i18n.t("Underline")); + underline.setShortcut(new ActionShortcut(true, 'U')); + underline.setAddCondition(canBeBasic); + + ActionToolbarMenuDescriptor<Object> subscript = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.toggleSubscript(); + fireOnEdit(); + } + }); + subscript.setParentMenuTitle(i18n.t(FORMAT_MENU)); + subscript.setTextDescription(i18n.t("Subscript")); + subscript.setIconCls(getCssName(imgResources.subscript())); + subscript.setShortcut(new ActionShortcut(true, '0')); + subscript.setAddCondition(canBeBasic); + + ActionToolbarMenuDescriptor<Object> superscript = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.toggleSuperscript(); + fireOnEdit(); + } + }); + superscript.setParentMenuTitle(i18n.t(FORMAT_MENU)); + superscript.setTextDescription(i18n.t("Superscript")); + superscript.setIconCls(getCssName(imgResources.superscript())); + superscript.setShortcut(new ActionShortcut(true, '9')); + superscript.setAddCondition(canBeBasic); + + ActionToolbarButtonDescriptor<Object> justifyLeft = new ActionToolbarButtonDescriptor<Object>(accessRol, + sndbar, new Listener0() { + public void onEvent() { + view.justifyLeft(); + fireOnEdit(); + } + }); + justifyLeft.setIconCls(getCssName(imgResources.alignleft())); + justifyLeft.setToolTip(i18n.t("Left Justify")); + justifyLeft.setShortcut(new ActionShortcut(true, 'L')); + justifyLeft.setAddCondition(canBeBasic); + + ActionToolbarButtonDescriptor<Object> justifyCentre = new ActionToolbarButtonDescriptor<Object>(accessRol, + sndbar, new Listener0() { + public void onEvent() { + view.justifyCenter(); + fireOnEdit(); + } + }); + justifyCentre.setIconCls(getCssName(imgResources.centerpara())); + justifyCentre.setToolTip(i18n.t("Centre Justify")); + justifyCentre.setShortcut(new ActionShortcut(true, 'E')); + justifyCentre.setAddCondition(canBeBasic); + + ActionToolbarButtonDescriptor<Object> justifyRight = new ActionToolbarButtonDescriptor<Object>(accessRol, + sndbar, new Listener0() { + public void onEvent() { + view.justifyRight(); + fireOnEdit(); + } + }); + justifyRight.setIconCls(getCssName(imgResources.alignright())); + justifyRight.setToolTip(i18n.t("Right Justify")); + justifyRight.setShortcut(new ActionShortcut(true, 'R')); + justifyRight.setAddCondition(canBeBasic); + + ActionToolbarMenuDescriptor<Object> undo = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.undo(); + fireOnEdit(); + } + }); + undo.setShortcut(new ActionShortcut(true, 'Z')); + undo.setTextDescription(i18n.t("Undo")); + undo.setParentMenuTitle(i18n.t(EDIT_MENU)); + undo.setAddCondition(canBeExtended); + undo.setIconCls(getCssName(imgResources.undo())); + + ActionToolbarMenuDescriptor<Object> redo = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.redo(); + fireOnEdit(); + } + }); + redo.setShortcut(new ActionShortcut(true, 'Y')); + redo.setTextDescription(i18n.t("Redo")); + redo.setParentMenuTitle(i18n.t(EDIT_MENU)); + redo.setAddCondition(canBeExtended); + redo.setBottomSeparator(true); + redo.setIconCls(getCssName(imgResources.redo())); + + ActionToolbarButtonDescriptor<Object> undoBtn = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + view.undo(); + fireOnEdit(); + } + }); + undoBtn.setToolTip(i18n.t("Undo")); + undoBtn.setAddCondition(canBeExtended); + undoBtn.setIconCls(getCssName(imgResources.undo())); + undoBtn.setPosition(0); + + ActionToolbarButtonDescriptor<Object> redoBtn = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + view.redo(); + fireOnEdit(); + } + }); + redoBtn.setToolTip(i18n.t("Redo")); + redoBtn.setAddCondition(canBeExtended); + redoBtn.setIconCls(getCssName(imgResources.redo())); + redoBtn.setPosition(1); + redoBtn.setRightSeparator(ActionToolbarButtonSeparator.separator); + + ActionToolbarMenuDescriptor<Object> copy = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.copy(); + } + }); + copy.setShortcut(new ActionShortcut(true, 'C')); + copy.setTextDescription(i18n.t("Copy")); + copy.setParentMenuTitle(i18n.t(EDIT_MENU)); + copy.setAddCondition(canBeExtended); + copy.setIconCls(getCssName(imgResources.copy())); + + ActionToolbarMenuDescriptor<Object> cut = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.cut(); + fireOnEdit(); + } + }); + cut.setShortcut(new ActionShortcut(true, 'X')); + cut.setTextDescription(i18n.t("Cut")); + cut.setParentMenuTitle(i18n.t(EDIT_MENU)); + cut.setAddCondition(canBeExtended); + cut.setIconCls(getCssName(imgResources.cut())); + + ActionToolbarMenuDescriptor<Object> paste = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.paste(); + fireOnEdit(); + } + }); + paste.setShortcut(new ActionShortcut(true, 'V')); + paste.setTextDescription(i18n.t("Paste")); + paste.setParentMenuTitle(i18n.t(EDIT_MENU)); + paste.setAddCondition(canBeExtended); + paste.setIconCls(getCssName(imgResources.paste())); + + ActionToolbarMenuDescriptor<Object> editHtml = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + EditHtml dialog = editHtmlDialog.get(); + dialog.setUpdateListener(new Listener<String>() { + public void onEvent(String html) { + view.setHtml(html); + fireOnEdit(); + } + }); + dialog.show(); + dialog.setHtml(view.getHtml()); + } + }); + editHtml.setIconCls(getCssName(imgResources.edithtml())); + editHtml.setTextDescription(i18n.t("Edit HTML")); + editHtml.setParentMenuTitle(i18n.t(EDIT_MENU)); + editHtml.setAddCondition(canBeExtended); + + ActionToolbarMenuDescriptor<Object> comment = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.focus(); + String author = session.isLogged() ? session.getCurrentUser().getShortName() + : i18n.t("anonymous user"); + view.addComment(author); + fireOnEdit(); + } + }); + comment.setEnableCondition(new ActionEnableCondition<Object>() { + public boolean mustBeEnabled(Object param) { + return session.isLogged(); + } + }); + comment.setShortcut(new ActionShortcut(true, 'M')); + comment.setTextDescription(i18n.t("Comment...")); + comment.setParentMenuTitle(i18n.t(INSERT_MENU)); + comment.setEnableCondition(isInsertHtmlSupported()); + comment.setAddCondition(canBeExtended); + + ActionToolbarMenuDescriptor<Object> hr = new ActionToolbarMenuDescriptor<Object>(accessRol, topbar, + new Listener0() { + public void onEvent() { + view.focus(); + view.insertHorizontalRule(); + fireOnEdit(); + } + }); + hr.setTextDescription(i18n.t("Horizontal line")); + hr.setShortcut(new ActionShortcut(true, true, ' ', "Space")); + hr.setIconCls(getCssName(imgResources.hfixedline())); + hr.setParentMenuTitle(i18n.t(INSERT_MENU)); + hr.setAddCondition(canBeExtended); + + ActionToolbarButtonDescriptor<Object> hrButton = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + view.focus(); + view.insertHorizontalRule(); + fireOnEdit(); + } + }); + hrButton.setIconCls(getCssName(imgResources.hfixedline())); + hrButton.setToolTip(i18n.t("Horizontal line")); + hrButton.setAddCondition(canBeExtended); + + strikethrough = new ActionToolbarPushButtonDescriptor<Object>(accessRol, sndbar, new Listener0() { + public void onEvent() { + view.toggleStrikethrough(); + fireOnEdit(); + } + }); + strikethrough.setIconCls(getCssName(imgResources.strikeout())); + strikethrough.setToolTip(i18n.t("Strikethrough")); + strikethrough.setRightSeparator(ActionToolbarButtonSeparator.separator); + strikethrough.setAddCondition(canBeExtended); + + ActionToolbarButtonDescriptor<Object> decreaseIndent = new ActionToolbarButtonDescriptor<Object>(accessRol, + sndbar, new Listener0() { + public void onEvent() { + view.leftIndent(); + fireOnEdit(); + } + }); + decreaseIndent.setIconCls(getCssName(imgResources.decrementindent())); + decreaseIndent.setToolTip(i18n.t("Decrease Indent")); + decreaseIndent.setAddCondition(canBeExtended); + + ActionToolbarButtonDescriptor<Object> increaseIndent = new ActionToolbarButtonDescriptor<Object>(accessRol, + sndbar, new Listener0() { + public void onEvent() { + view.rightIndent(); + fireOnEdit(); + } + }); + increaseIndent.setIconCls(getCssName(imgResources.incrementindent())); + increaseIndent.setToolTip(i18n.t("Increase Indent")); + increaseIndent.setAddCondition(canBeExtended); + + ActionToolbarButtonDescriptor<Object> ol = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + view.insertOrderedList(); + fireOnEdit(); + } + }); + ol.setIconCls(getCssName(imgResources.defaultnumbering())); + ol.setToolTip(i18n.t("Numbered List")); + ol.setShortcut(new ActionShortcut(true, '7')); + ol.setAddCondition(canBeExtended); + + ActionToolbarButtonDescriptor<Object> ul = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + view.insertUnorderedList(); + fireOnEdit(); + } + }); + ul.setIconCls(getCssName(imgResources.defaultbullet())); + ul.setToolTip(i18n.t("Bullet List")); + ul.setShortcut(new ActionShortcut(true, '8')); + ul.setRightSeparator(ActionToolbarButtonSeparator.separator); + ul.setAddCondition(canBeExtended); + + ActionToolbarButtonDescriptor<Object> img = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + insertImageDialog.get().show(); + } + }); + img.setIconCls(getCssName(imgResources.images())); + img.setToolTip(i18n.t("Insert Image")); + img.setAddCondition(canBeExtended); + + ActionToolbarButtonDescriptor<Object> createLink = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + deferred.addCommand(new Listener0() { + public void onEvent() { + insertElement.show(); + } + }); + } + }); + createLink.setIconCls(getCssName(imgResources.link())); + createLink.setToolTip(i18n.t("Create Link")); + createLink.setShortcut(new ActionShortcut(true, 'K')); + createLink.setAddCondition(canBeExtended); + insertElement.addOnCreateLink(new Listener2<String, String>() { + public void onEvent(String name, String url) { + view.createLink(url); + fireOnEdit(); + } + }); + + ActionToolbarButtonDescriptor<Object> removeLink = new ActionToolbarButtonDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + view.unlink(); + fireOnEdit(); + } + }); + removeLink.setIconCls(getCssName(imgResources.linkbreak())); + removeLink.setToolTip(i18n.t("Remove Link")); + removeLink.setShortcut(new ActionShortcut(true, true, 'K')); + removeLink.setAddCondition(canBeExtended); + + final ActionToolbarButtonDescriptor<Object> removeFormat = new ActionToolbarButtonDescriptor<Object>(accessRol, + sndbar, new Listener0() { + public void onEvent() { + view.removeFormat(); + fireOnEdit(); + } + }); + removeFormat.setIconCls(getCssName(imgResources.removeFormat())); + removeFormat.setToolTip(i18n.t("Clear Formatting")); + removeFormat.setShortcut(new ActionShortcut(true, ' ', "Space")); + removeFormat.setAddCondition(canBeExtended); + removeFormat.setRightSeparator(ActionToolbarButtonSeparator.separator); + + final ActionToolbarMenuDescriptor<Object> insertTable = new ActionToolbarMenuDescriptor<Object>(accessRol, + topbar, new Listener0() { + public void onEvent() { + insertSimpleTable(); + } + }); + insertTable.setIconCls(getCssName(imgResources.inserttable())); + insertTable.setTextDescription(i18n.t("Insert Table ...")); + 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.setIconCls(getCssName(imgResources.inserttable())); + insertTableBtn.setToolTip(i18n.t("Insert Table")); + insertTableBtn.setAddCondition(canBeExtended); + insertTableBtn.setRightSeparator(ActionToolbarButtonSeparator.separator); + + final ActionToolbarButtonDescriptor<Object> fontColor = new ActionToolbarButtonDescriptor<Object>(accessRol, + sndbar, new Listener0() { + public void onEvent() { + palette.show(getActionLeftPosition(sndBar, removeFormat), getActionTopPosition(sndBar, + removeFormat), new Listener<String>() { + public void onEvent(String color) { + palette.hide(); + view.setForeColor(color); + fireOnEdit(); + } + }); + } + }); + fontColor.setIconCls(getCssName(imgResources.fontcolor())); + fontColor.setToolTip(i18n.t("Text Colour")); + fontColor.setAddCondition(canBeBasic); + + ActionToolbarButtonDescriptor<Object> backgroundColor = new ActionToolbarButtonDescriptor<Object>(accessRol, + sndbar, new Listener0() { + public void onEvent() { + palette.show(getActionLeftPosition(sndBar, fontColor), getActionTopPosition(sndBar, fontColor), + new Listener<String>() { + public void onEvent(String color) { + palette.hide(); + view.setBackColor(color); + fireOnEdit(); + } + }); + } + }); + backgroundColor.setIconCls(getCssName(imgResources.backcolor())); + backgroundColor.setToolTip(i18n.t("Text Background Colour")); + backgroundColor.setAddCondition(canBeBasic); + + actions.add(withNoItem(bold)); + actions.add(withNoItem(italic)); + actions.add(withNoItem(underline)); + actions.add(withNoItem(strikethrough)); + + actions.add(withNoItem(justifyLeft)); + actions.add(withNoItem(justifyCentre)); + actions.add(withNoItem(justifyRight)); + + actions.add(withNoItem(undo)); + actions.add(withNoItem(redo)); + actions.add(withNoItem(copy)); + actions.add(withNoItem(cut)); + actions.add(withNoItem(paste)); + actions.add(withNoItem(selectAll)); + actions.add(withNoItem(editHtml)); + actions.add(withNoItem(hr)); + actions.add(withNoItem(subscript)); + actions.add(withNoItem(superscript)); + actions.add(withNoItem(decreaseIndent)); + actions.add(withNoItem(increaseIndent)); + actions.add(withNoItem(ol)); + actions.add(withNoItem(ul)); + actions.add(withNoItem(removeFormat)); + // topActions.add(withNoItem(hrButton)); + actions.add(withNoItem(img)); + actions.add(withNoItem(createLink)); + actions.add(withNoItem(removeLink)); + actions.add(withNoItem(insertTableBtn)); + actions.add(withNoItem(insertTable)); + actions.add(withNoItem(comment)); + actions.add(withNoItem(undoBtn)); + actions.add(withNoItem(redoBtn)); + + for (String fontName : this.fontNames) { + ActionToolbarMenuDescriptor<Object> fontNameAction = createFontNameAction(canBeBasic, fontName); + actions.add(withNoItem(fontNameAction)); + } + for (int fontSize = 0; fontSize < fontSizes.length; fontSize++) { + ActionToolbarMenuDescriptor<Object> fontSizeAction = createFontSizeAction(canBeBasic, fontSize, + fontSizes[fontSize]); + actions.add(withNoItem(fontSizeAction)); + } + actions.add(withNoItem(fontColor)); + actions.add(withNoItem(backgroundColor)); + } + + private ActionToolbarMenuDescriptor<Object> createFontNameAction(ActionAddCondition<Object> canBeBasic, + final String fontName) { + final ActionToolbarMenuDescriptor<Object> font = new ActionToolbarMenuDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + view.setFontName(fontName); + fireOnEdit(); + } + }); + font.setTextDescription("<span style=\"font-family: " + fontName + "\">" + fontName + "</span>"); + font.setParentMenuTooltip(i18n.t("Font")); + font.setParentMenuIconCls(getCssName(imgResources.charfontname())); + font.setAddCondition(canBeBasic); + return font; + } + + private ActionToolbarMenuDescriptor<Object> createFontSizeAction(ActionAddCondition<Object> canBeBasic, + final int fontSize, String fontSizeName) { + final ActionToolbarMenuDescriptor<Object> font = new ActionToolbarMenuDescriptor<Object>(accessRol, sndbar, + new Listener0() { + public void onEvent() { + view.setFontSize(fontSizesConstants[fontSize]); + fireOnEdit(); + } + }); + font.setTextDescription("<font size=\"" + (fontSize + 1) + "\">" + i18n.t(fontSizeName) + "</font>"); + font.setParentMenuTooltip(i18n.t("Font size")); + font.setParentMenuIconCls(getCssName(imgResources.fontheight())); + font.setAddCondition(canBeBasic); + return font; + } + + private int getActionLeftPosition(ActionToolbar<Object> bar, ActionToolbarButtonDescriptor<Object> action) { + return bar.getLeftPosition(action); + } + + private int getActionTopPosition(ActionToolbar<Object> bar, ActionToolbarButtonDescriptor<Object> action) { + return bar.getTopPosition(action); + } + + private String getCssName(ImageResource imageResource) { + 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(); + } + + private ActionEnableCondition<Object> isInsertHtmlSupported() { + return new ActionEnableCondition<Object>() { + public boolean mustBeEnabled(Object param) { + return true; + } + }; + } + + private void styleToolbar(ActionToolbar<Object> bar) { + bar.setNormalStyle(); + } + + private ActionItemCollection<Object> withNoItem(ActionCollection<Object> actions) { + ActionItemCollection<Object> collection = new ActionItemCollection<Object>(); + for (ActionDescriptor<Object> action : actions) { + // this action don't have a associated item + collection.add(withNoItem(action)); + } + return collection; + } + + private ActionItem<Object> withNoItem(ActionDescriptor<Object> action) { + return new ActionItem<Object>(action, null); + } +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorView.java (from rev 1064, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTEditorView.java 2009-03-10 00:05:50 UTC (rev 1064) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/basic/RTEditorView.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,102 @@ +package org.ourproject.kune.platf.client.ui.rte.basic; + +import org.ourproject.kune.platf.client.View; +import org.ourproject.kune.platf.client.actions.ActionItemCollection; +import org.ourproject.kune.platf.client.ui.rte.RichTextArea.FontSize; + +public interface RTEditorView extends View { + + void addActions(ActionItemCollection<Object> actions); + + void addComment(String userName); + + void adjustSize(int height); + + boolean canBeBasic(); + + boolean canBeExtended(); + + void copy(); + + void createLink(String url); + + void cut(); + + void delete(); + + void focus(); + + String getHtml(); + + String getText(); + + void insertHorizontalRule(); + + void insertHtml(String html); + + void insertImage(String url); + + void insertOrderedList(); + + void insertUnorderedList(); + + boolean isAttached(); + + boolean isBold(); + + boolean isItalic(); + + boolean isStrikethrough(); + + boolean isSubscript(); + + boolean isSuperscript(); + + boolean isUnderlined(); + + void justifyCenter(); + + void justifyLeft(); + + void justifyRight(); + + void leftIndent(); + + void paste(); + + void redo(); + + void removeFormat(); + + void rightIndent(); + + void selectAll(); + + void setBackColor(String color); + + void setFontName(String name); + + void setFontSize(FontSize fontSize); + + void setForeColor(String color); + + void setHtml(String html); + + void setText(String text); + + void toggleBold(); + + void toggleItalic(); + + void toggleStrikethrough(); + + void toggleSubscript(); + + void toggleSuperscript(); + + void toggleUnderline(); + + void undo(); + + void unlink(); +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExt.java (from rev 1069, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExt.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExt.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExt.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,5 @@ +package org.ourproject.kune.platf.client.ui.rte.insertimg.ext; + +public interface InsertImageExt { + +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPanel.java (from rev 1069, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPanel.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPanel.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPanel.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,61 @@ +package org.ourproject.kune.platf.client.ui.rte.insertimg.ext; + +import org.ourproject.kune.platf.client.i18n.I18nTranslationService; +import org.ourproject.kune.platf.client.ui.TextUtils; +import org.ourproject.kune.platf.client.ui.dialogs.DefaultForm; +import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageView; + +import com.gwtext.client.core.EventObject; +import com.gwtext.client.widgets.Button; +import com.gwtext.client.widgets.PaddedPanel; +import com.gwtext.client.widgets.Panel; +import com.gwtext.client.widgets.event.ButtonListenerAdapter; +import com.gwtext.client.widgets.form.TextField; +import com.gwtext.client.widgets.layout.FitLayout; + +public class InsertImageExtPanel extends DefaultForm implements InsertImageExtView { + + private static final String LINK_FIELD = "iiep-img-field"; + private final TextField linkField; + private final Panel previewPanel; + + public InsertImageExtPanel(final InsertImageExtPresenter presenter, I18nTranslationService i18n) { + super(i18n.t("External image")); + super.setAutoWidth(true); + super.setHeight(InsertImageView.HEIGHT); + linkField = new TextField(); + linkField.setTabIndex(1); + linkField.setFieldLabel(i18n.t("External image link (URL)")); + linkField.setRegex(TextUtils.URL_REGEXP); + linkField.setRegexText(i18n.t("The link should be a URL in the format 'http://www.domain.com'")); + linkField.setName(LINK_FIELD); + linkField.setWidth(DEF_FIELD_WIDTH); + linkField.setAllowBlank(false); + linkField.setMinLength(3); + linkField.setMaxLength(250); + linkField.setValidationEvent(false); + linkField.setId(LINK_FIELD); + add(linkField); + previewPanel = new Panel(); + previewPanel.setLayout(new FitLayout()); + previewPanel.setHeight(125); + add(new PaddedPanel(previewPanel, 0)); + Button preview = new Button(i18n.t("Preview")); + preview.addListener(new ButtonListenerAdapter() { + @Override + public void onClick(Button button, EventObject e) { + presenter.onPreview(); + } + }); + addButton(preview); + + Button insert = new Button(i18n.t("Insert")); + insert.addListener(new ButtonListenerAdapter() { + @Override + public void onClick(Button button, EventObject e) { + presenter.onInsert(); + } + }); + addButton(insert); + } +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPresenter.java (from rev 1069, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPresenter.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPresenter.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,26 @@ +package org.ourproject.kune.platf.client.ui.rte.insertimg.ext; + +import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImage; + +public class InsertImageExtPresenter implements InsertImageExt { + + private final InsertImage insertImageDialog; + + public InsertImageExtPresenter(InsertImage insertImageDialog) { + this.insertImageDialog = insertImageDialog; + } + + public void init(InsertImageExtView view) { + insertImageDialog.addOptionTab(view); + } + + public void onInsert() { + // TODO Auto-generated method stub + + } + + public void onPreview() { + // TODO Auto-generated method stub + + } +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtView.java (from rev 1069, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtView.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtView.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimg/ext/InsertImageExtView.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,7 @@ +package org.ourproject.kune.platf.client.ui.rte.insertimg.ext; + +import org.ourproject.kune.platf.client.View; + +public interface InsertImageExtView extends View { +} + Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExt.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExt.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExt.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,5 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte.insertimgext; - -public interface InsertImageExt { - -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPanel.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPanel.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,61 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte.insertimgext; - -import org.ourproject.kune.platf.client.i18n.I18nTranslationService; -import org.ourproject.kune.platf.client.ui.TextUtils; -import org.ourproject.kune.platf.client.ui.dialogs.DefaultForm; -import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageView; - -import com.gwtext.client.core.EventObject; -import com.gwtext.client.widgets.Button; -import com.gwtext.client.widgets.PaddedPanel; -import com.gwtext.client.widgets.Panel; -import com.gwtext.client.widgets.event.ButtonListenerAdapter; -import com.gwtext.client.widgets.form.TextField; -import com.gwtext.client.widgets.layout.FitLayout; - -public class InsertImageExtPanel extends DefaultForm implements InsertImageExtView { - - private static final String LINK_FIELD = "iiep-img-field"; - private final TextField linkField; - private final Panel previewPanel; - - public InsertImageExtPanel(final InsertImageExtPresenter presenter, I18nTranslationService i18n) { - super(i18n.t("External image")); - super.setAutoWidth(true); - super.setHeight(InsertImageView.HEIGHT); - linkField = new TextField(); - linkField.setTabIndex(1); - linkField.setFieldLabel(i18n.t("External image link (URL)")); - linkField.setRegex(TextUtils.URL_REGEXP); - linkField.setRegexText(i18n.t("The link should be a URL in the format 'http://www.domain.com'")); - linkField.setName(LINK_FIELD); - linkField.setWidth(DEF_FIELD_WIDTH); - linkField.setAllowBlank(false); - linkField.setMinLength(3); - linkField.setMaxLength(250); - linkField.setValidationEvent(false); - linkField.setId(LINK_FIELD); - add(linkField); - previewPanel = new Panel(); - previewPanel.setLayout(new FitLayout()); - previewPanel.setHeight(125); - add(new PaddedPanel(previewPanel, 0)); - Button preview = new Button(i18n.t("Preview")); - preview.addListener(new ButtonListenerAdapter() { - @Override - public void onClick(Button button, EventObject e) { - presenter.onPreview(); - } - }); - addButton(preview); - - Button insert = new Button(i18n.t("Insert")); - insert.addListener(new ButtonListenerAdapter() { - @Override - public void onClick(Button button, EventObject e) { - presenter.onInsert(); - } - }); - addButton(insert); - } -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPresenter.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,26 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte.insertimgext; - -import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImage; - -public class InsertImageExtPresenter implements InsertImageExt { - - private final InsertImage insertImageDialog; - - public InsertImageExtPresenter(InsertImage insertImageDialog) { - this.insertImageDialog = insertImageDialog; - } - - public void init(InsertImageExtView view) { - insertImageDialog.addOptionTab(view); - } - - public void onInsert() { - // TODO Auto-generated method stub - - } - - public void onPreview() { - // TODO Auto-generated method stub - - } -} Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtView.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtView.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/insertimgext/InsertImageExtView.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,7 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte.insertimgext; - -import org.ourproject.kune.platf.client.View; - -public interface InsertImageExtView extends View { -} - Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditor.java (from rev 1069, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditor.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditor.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,27 @@ +package org.ourproject.kune.platf.client.ui.rte.saving; + +import org.ourproject.kune.platf.client.actions.BeforeActionListener; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEditor; + +import com.calclab.suco.client.events.Listener; +import com.calclab.suco.client.events.Listener0; + +public interface RTESavingEditor { + + void edit(String html, Listener<String> onSave, Listener0 onEditCancelled); + + RTEditor getBasicEditor(); + + /** + * This is use for listen to changes as url changes, window close, and + * save/cancel or stop these actions + * + * @return + */ + BeforeActionListener getBeforeSavingListener(); + + void onSavedSuccessful(); + + void onSaveFailed(); + +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPanel.java (from rev 1066, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPanel.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPanel.java 2009-03-10 13:43:43 UTC (rev 1066) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPanel.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,14 @@ +package org.ourproject.kune.platf.client.ui.rte.saving; + +import org.ourproject.kune.platf.client.ui.noti.NotifyUser; + +import com.calclab.suco.client.events.Listener0; + +public class RTESavingEditorPanel implements RTESavingEditorView { + + public void askConfirmation(String confirmationTitle, String confirmationText, Listener0 onConfirm, + Listener0 onCancel) { + NotifyUser.askConfirmation(confirmationTitle, confirmationText, onConfirm, onCancel); + } + +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java (from rev 1069, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenter.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,245 @@ +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.state.StateManager; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEditor; +import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources; +import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; +import org.ourproject.kune.platf.client.utils.TimerWrapper; + +import com.calclab.suco.client.events.Listener; +import com.calclab.suco.client.events.Listener0; + +public class RTESavingEditorPresenter implements RTESavingEditor { + + @Deprecated + private static final String FILE_MENU_OPTION = "File"; + public static final int AUTOSAVE_AFTER_FAILS_IN_MILLISECONS = 20000; + public static final int AUTOSAVE_IN_MILLISECONDS = 10000; + + private final RTEditor editor; + private final boolean autoSave; + private boolean savePending; + private boolean saveAndCloseConfirmed; + private Listener<String> onSave; + private Listener0 onEditCancelled; + private final RTEImgResources imgResources; + private final TimerWrapper timer; + private final DeferredCommandWrapper deferredCommandWrapper; + private final I18nTranslationService i18n; + private final StateManager stateManager; + private final BeforeActionListener beforeStateChangeListener; + ActionToolbarButtonDescriptor<Object> saveBtn; + private RTESavingEditorView view; + + public RTESavingEditorPresenter(RTEditor editor, final boolean autoSave, final I18nTranslationService i18n, + StateManager stateManager, DeferredCommandWrapper deferredCommandWrapper, + RTEImgResources imgResources, TimerWrapper timer) { + this.editor = editor; + this.autoSave = autoSave; + this.i18n = i18n; + this.stateManager = stateManager; + this.deferredCommandWrapper = deferredCommandWrapper; + this.imgResources = imgResources; + this.savePending = false; + this.saveAndCloseConfirmed = false; + createActions(); + this.timer = timer; + timer.configure(new Listener0() {; + + public void onEvent() { + onAutoSave(); + } + }); + editor.addOnEditListener(new Listener0() { + public void onEvent() { + onEdit(); + } + }); + beforeStateChangeListener = new BeforeActionListener() { + public boolean beforeAction() { + return beforeTokenChange(); + } + }; + } + + public void edit(String html, Listener<String> onSave, Listener0 onEditCancelled) { + this.onSave = onSave; + this.onEditCancelled = onEditCancelled; + editor.setHtml(html); + editor.attach(); + stateManager.addBeforeStateChangeListener(beforeStateChangeListener); + enableSaveBtn(false); + } + + public RTEditor getBasicEditor() { + return editor; + } + + public BeforeActionListener getBeforeSavingListener() { + return beforeStateChangeListener; + } + + public void init(RTESavingEditorView view) { + this.view = view; + } + + public void onDoSaveAndClose() { + saveAndCloseConfirmed = true; + onDoSave(); + } + + public void onSavedSuccessful() { + if (saveAndCloseConfirmed) { + onCancelConfirmed(); + } else { + reset(); + } + } + + public void onSaveFailed() { + timer.schedule(AUTOSAVE_AFTER_FAILS_IN_MILLISECONS); + if (saveAndCloseConfirmed) { + saveAndCloseConfirmed = false; + } + } + + protected void onAutoSave() { + onDoSave(); + } + + protected void onCancel() { + if (savePending) { + timer.cancel(); + Listener0 onYes = new Listener0() { + public void onEvent() { + onDoSaveAndClose(); + } + }; + Listener0 onCancel = new Listener0() { + public void onEvent() { + onCancelConfirmed(); + } + }; + view.askConfirmation(i18n.t("Save confirmation"), + i18n.t("Do you want to save before closing the editor?"), onYes, onCancel); + } else { + onCancelConfirmed(); + } + } + + protected void onCancelConfirmed() { + stateManager.removeBeforeStateChangeListener(beforeStateChangeListener); + stateManager.resumeTokenChange(); + reset(); + editor.reset(); + onDoEditCancelled(); + } + + protected void onDoSave() { + onSave.onEvent(editor.getHtml()); + } + + boolean beforeTokenChange() { + if (savePending) { + onCancel(); + return false; + } else { + deferredCommandWrapper.addCommand(new Listener0() { + public void onEvent() { + onCancelConfirmed(); + } + }); + return true; + } + } + + void onEdit() { + if (!savePending) { + savePending = true; + if (autoSave) { + timer.schedule(AUTOSAVE_IN_MILLISECONDS); + } + enableSaveBtn(true); + } + } + + private void createActions() { + Listener0 onPerformSaveCall = new Listener0() { + public void onEvent() { + onDoSave(); + } + }; + saveBtn = new ActionToolbarButtonDescriptor<Object>(AccessRolDTO.Editor, RTEditor.sndbar, onPerformSaveCall); + saveBtn.setIconCls(RTEImgResources.SUFFIX + imgResources.save().getName()); + saveBtn.setToolTip(i18n.t("Save")); + saveBtn.setShortcut(new ActionShortcut(true, 'S')); + saveBtn.setPosition(0); + + ActionToolbarMenuDescriptor<Object> save = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor, + RTEditor.topbar, onPerformSaveCall); + save.setIconCls(RTEImgResources.SUFFIX + imgResources.save().getName()); + save.setParentMenuTitle(i18n.t(FILE_MENU_OPTION)); + save.setTextDescription(i18n.t("Save")); + save.setShortcut(new ActionShortcut(true, 'S')); + save.setPosition(0); + + ActionToolbarMenuDescriptor<Object> close = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor, + RTEditor.topbar, new Listener<Object>() { + public void onEvent(Object parameter) { + onCancel(); + } + }); + close.setParentMenuTitle(i18n.t(FILE_MENU_OPTION)); + close.setTextDescription(i18n.t("Close")); + + Listener0 onPerformSaveAndCloseCall = new Listener0() { + public void onEvent() { + if (savePending) { + timer.cancel(); + onDoSaveAndClose(); + } else { + onCancelConfirmed(); + } + } + }; + ActionToolbarMenuDescriptor<Object> saveclose = new ActionToolbarMenuDescriptor<Object>(AccessRolDTO.Editor, + RTEditor.topbar, onPerformSaveAndCloseCall); + saveclose.setParentMenuTitle(i18n.t(FILE_MENU_OPTION)); + saveclose.setTextDescription(i18n.t("Save & Close")); + + ActionToolbarButtonDescriptor<Object> saveCloseBtn = new ActionToolbarButtonDescriptor<Object>( + AccessRolDTO.Editor, RTEditor.topbar, onPerformSaveAndCloseCall); + // saveCloseBtn.setIconCls(RTEImgResources.SUFFIX + + // imgResources.save().getName()); + saveCloseBtn.setTextDescription(i18n.t("Save & Close")); + saveCloseBtn.setLeftSeparator(ActionToolbarButtonSeparator.fill); + + editor.addAction(save); + editor.addAction(saveclose); + editor.addAction(close); + editor.addAction(saveBtn); + editor.addAction(saveCloseBtn); + } + + private void enableSaveBtn(boolean enable) { + editor.getSndBar().setButtonEnable(saveBtn, enable); + } + + private void onDoEditCancelled() { + onEditCancelled.onEvent(); + } + + private void reset() { + timer.cancel(); + savePending = false; + saveAndCloseConfirmed = false; + enableSaveBtn(false); + } +} Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorView.java (from rev 1066, trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorView.java) =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorView.java 2009-03-10 13:43:43 UTC (rev 1066) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorView.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,10 @@ +package org.ourproject.kune.platf.client.ui.rte.saving; + +import org.ourproject.kune.platf.client.View; + +import com.calclab.suco.client.events.Listener0; + +public interface RTESavingEditorView extends View { + + void askConfirmation(String confirmationTitle, String confirmationText, Listener0 onConfirm, Listener0 onCancel); +} Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/KuneWorkspaceModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/KuneWorkspaceModule.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/KuneWorkspaceModule.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -46,14 +46,14 @@ import org.ourproject.kune.platf.client.state.StateManager; import org.ourproject.kune.platf.client.ui.download.FileDownloadUtils; import org.ourproject.kune.platf.client.ui.noti.NotifyUser; -import org.ourproject.kune.platf.client.ui.rte.RTESavingEditorPanel; -import org.ourproject.kune.platf.client.ui.rte.RTEditor; import org.ourproject.kune.platf.client.ui.rte.TestRTEDialog; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEditor; import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources; import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImage; import org.ourproject.kune.platf.client.ui.rte.insertimg.InsertImageGroup; import org.ourproject.kune.platf.client.ui.rte.insertlink.TextEditorInsertElement; import org.ourproject.kune.platf.client.ui.rte.insertlink.TextEditorInsertElementGroup; +import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditorPanel; import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; import org.ourproject.kune.platf.client.utils.TimerWrapper; import org.ourproject.kune.workspace.client.cnt.ActionContentToolbar; Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/ContentEditor.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -4,11 +4,11 @@ import org.ourproject.kune.platf.client.i18n.I18nTranslationService; import org.ourproject.kune.platf.client.state.StateManager; import org.ourproject.kune.platf.client.ui.AbstractToolbar; -import org.ourproject.kune.platf.client.ui.rte.RTESavingEditorPresenter; -import org.ourproject.kune.platf.client.ui.rte.RTESavingEditorView; -import org.ourproject.kune.platf.client.ui.rte.RTEditor; -import org.ourproject.kune.platf.client.ui.rte.RTEditorPanel; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEditor; +import org.ourproject.kune.platf.client.ui.rte.basic.RTEditorPanel; import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources; +import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditorPresenter; +import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditorView; import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; import org.ourproject.kune.platf.client.utils.TimerWrapper; import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLink; Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditor.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditor.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditor.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,33 +0,0 @@ -/* - * - * Copyright (C) 2007-2009 The kune development team (see CREDITS for details) - * This file is part of kune. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -package org.ourproject.kune.workspace.client.editor; - -import com.calclab.suco.client.events.Listener; -import com.calclab.suco.client.events.Listener0; - -public interface TextEditor { - - void editContent(String content, Listener<String> onSave, Listener0 onEditCancelled); - - void onSavedSuccessful(); - - void onSaveFailed(); - -} Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorImages.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorImages.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorImages.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,96 +0,0 @@ -/* - * - * Copyright (C) 2007-2009 The kune development team (see CREDITS for details) - * This file is part of kune. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -package org.ourproject.kune.workspace.client.editor; - -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.ImageBundle; - -public interface TextEditorImages extends ImageBundle { - - @Resource("alignleft.png") - AbstractImagePrototype alignleft(); - - @Resource("alignright.png") - AbstractImagePrototype alignright(); - - @Resource("backcolor.png") - AbstractImagePrototype backcolor(); - - @Resource("bold.png") - AbstractImagePrototype bold(); - - @Resource("centerpara.png") - AbstractImagePrototype centerpara(); - - @Resource("charfontname.png") - AbstractImagePrototype charfontname(); - - @Resource("decrementindent.png") - AbstractImagePrototype decrementindent(); - - @Resource("defaultbullet.png") - AbstractImagePrototype defaultbullet(); - - @Resource("defaultnumbering.png") - AbstractImagePrototype defaultnumbering(); - - @Resource("edithtml.png") - AbstractImagePrototype edithtml(); - - @Resource("fontcolor.png") - AbstractImagePrototype fontcolor(); - - @Resource("fontheight.png") - AbstractImagePrototype fontheight(); - - @Resource("hfixedline.png") - AbstractImagePrototype hfixedline(); - - @Resource("images.png") - AbstractImagePrototype images(); - - @Resource("incrementindent.png") - AbstractImagePrototype incrementindent(); - - @Resource("italic.png") - AbstractImagePrototype italic(); - - @Resource("link.png") - AbstractImagePrototype link(); - - @Resource("link_break.png") - AbstractImagePrototype linkBreak(); - - @Resource("removeFormat.png") - AbstractImagePrototype removeFormat(); - - @Resource("strikeout.png") - AbstractImagePrototype strikeout(); - - @Resource("subscript.png") - AbstractImagePrototype subscript(); - - @Resource("superscript.png") - AbstractImagePrototype superscript(); - - @Resource("underline.png") - AbstractImagePrototype underline(); - -} Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPanel.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,155 +0,0 @@ -/* - * - * Copyright (C) 2007-2009 The kune development team (see CREDITS for details) - * This file is part of kune. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -package org.ourproject.kune.workspace.client.editor; - -import org.ourproject.kune.platf.client.i18n.I18nTranslationService; -import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette; -import org.ourproject.kune.platf.client.ui.rte.RichTextArea; -import org.ourproject.kune.platf.client.ui.rte.insertlink.TextEditorInsertElement; -import org.ourproject.kune.workspace.client.skel.Toolbar; -import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton; - -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Timer; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.gwtext.client.widgets.BoxComponent; -import com.gwtext.client.widgets.MessageBox; -import com.gwtext.client.widgets.event.ContainerListenerAdapter; - -public class TextEditorPanel implements TextEditorView { - private static final String BACKCOLOR_ENABLED = "#FFF"; - private static final String BACKCOLOR_DISABLED = "#CCC"; - public static final String TEXT_AREA = "k-tep-ta"; - private final RichTextArea gwtRTarea; - private final TextEditorToolbar textEditorToolbar; - private final TextEditorPresenter presenter; - private final Timer saveTimer; - private final I18nTranslationService i18n; - private final VerticalPanel mainPanel; - private final WorkspaceSkeleton ws; - - public TextEditorPanel(final TextEditorPresenter presenter, final I18nTranslationService i18n, - final WorkspaceSkeleton ws, final ColorWebSafePalette colorPalette, - final TextEditorInsertElement textEditorInsertElement, boolean permitHtmlButton) { - this.presenter = presenter; - this.i18n = i18n; - this.ws = ws; - mainPanel = new VerticalPanel(); - mainPanel.setWidth("100%"); - - gwtRTarea = new RichTextArea(); - gwtRTarea.setWidth("96%"); - gwtRTarea.setHeight("100%"); - gwtRTarea.addStyleName("kune-TexEditorPanel-TextArea"); - gwtRTarea.ensureDebugId(TEXT_AREA); - - final Toolbar editorTopBar = new Toolbar(); - editorTopBar.getPanel().setWidth("auto"); - textEditorToolbar = new TextEditorToolbar(gwtRTarea, presenter, colorPalette, i18n, permitHtmlButton, - textEditorInsertElement); - editorTopBar.add(textEditorToolbar); - editorTopBar.addStyleName("k-toolbar-bottom-line"); - - mainPanel.add(editorTopBar.getPanel()); - mainPanel.add(gwtRTarea); - - adjustSize(ws.getEntityWorkspace().getContentHeight()); - ws.getEntityWorkspace().addContentListener(new ContainerListenerAdapter() { - @Override - public void onResize(final BoxComponent component, final int adjWidth, final int adjHeight, - final int rawWidth, final int rawHeight) { - adjustSize(adjHeight); - } - }); - - saveTimer = new Timer() { - @Override - public void run() { - presenter.onSave(); - } - }; - } - - public void attach() { - ws.getEntityWorkspace().setContent(mainPanel); - } - - public void detach() { - mainPanel.removeFromParent(); - } - - public void editHTML(final boolean edit) { - textEditorToolbar.editHTML(edit); - } - - public String getHTML() { - return gwtRTarea.getHTML(); - } - - public String getText() { - return gwtRTarea.getText(); - } - - public void saveTimerCancel() { - saveTimer.cancel(); - } - - public void scheduleSave(final int delayMillis) { - saveTimer.schedule(delayMillis); - } - - public void setEnabled(final boolean enabled) { - final String bgColor = enabled ? BACKCOLOR_ENABLED : BACKCOLOR_DISABLED; - DOM.setStyleAttribute(gwtRTarea.getElement(), "backgroundColor", bgColor); - gwtRTarea.setEnabled(enabled); - } - - public void setHeight(final String height) { - gwtRTarea.setHeight(height); - } - - public void setHTML(final String html) { - gwtRTarea.setHTML(html); - } - - public void setText(final String text) { - gwtRTarea.setText(text); - } - - public void showSaveBeforeDialog() { - MessageBox.confirm(i18n.t("Save confirmation"), i18n.t("Do you want to save before closing the editor?"), - new MessageBox.ConfirmCallback() { - public void execute(final String btnID) { - if (btnID.equals("yes")) { - presenter.onSaveAndClose(); - } else { - presenter.onCancelConfirmed(); - } - } - }); - - } - - private void adjustSize(final int height) { - int newHeight = height - WorkspaceSkeleton.DEF_TOOLBAR_HEIGHT - 27; - gwtRTarea.setHeight("" + newHeight); - mainPanel.setCellHeight(gwtRTarea, "" + newHeight); - } -} Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPresenter.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorPresenter.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,212 +0,0 @@ -/* - * - * Copyright (C) 2007-2009 The kune development team (see CREDITS for details) - * This file is part of kune. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -package org.ourproject.kune.workspace.client.editor; - -import org.ourproject.kune.platf.client.actions.ActionItem; -import org.ourproject.kune.platf.client.actions.ActionItemCollection; -import org.ourproject.kune.platf.client.actions.ActionToolbarButtonDescriptor; -import org.ourproject.kune.platf.client.actions.ActionToolbarMenuDescriptor; -import org.ourproject.kune.platf.client.actions.BeforeActionListener; -import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; -import org.ourproject.kune.platf.client.dto.AccessRolDTO; -import org.ourproject.kune.platf.client.dto.StateToken; -import org.ourproject.kune.platf.client.i18n.I18nUITranslationService; -import org.ourproject.kune.platf.client.state.StateManager; -import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; -import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLink; - -import com.calclab.suco.client.events.Listener; -import com.calclab.suco.client.events.Listener0; - -public class TextEditorPresenter implements TextEditor { - public static final int AUTOSAVE_AFTER_FAILS_IN_MILLISECONS = 20000; - public static final int AUTOSAVE_IN_MILLISECONDS = 10000; - public static final String CLOSE_ID = "k-teditc-close"; - public static final String SAVE_ID = "k-teditp-save"; - private boolean editingHtml; - private TextEditorView view; - private boolean savePending; - private final boolean autoSave; - private boolean saveAndCloseConfirmed; - private Listener<String> onSave; - private Listener0 onEditCancelled; - private final ActionToolbar<StateToken> topToolbar; - private ActionToolbarMenuDescriptor<StateToken> save; - private ActionToolbarButtonDescriptor<StateToken> close; - private final I18nUITranslationService i18n; - private final BeforeActionListener beforeStateChangeListener; - private final StateManager stateManager; - private final SiteSignOutLink siteSignOutLink; - private final DeferredCommandWrapper deferredCommandWrapper; - - public TextEditorPresenter(final boolean isAutoSave, final ActionToolbar<StateToken> topToolbar, - final I18nUITranslationService i18n, StateManager stateManager, SiteSignOutLink siteSignOutLink, - DeferredCommandWrapper deferredCommandWrapper) { - this.topToolbar = topToolbar; - this.autoSave = isAutoSave; - this.i18n = i18n; - this.stateManager = stateManager; - this.siteSignOutLink = siteSignOutLink; - this.deferredCommandWrapper = deferredCommandWrapper; - this.savePending = false; - this.editingHtml = false; - this.saveAndCloseConfirmed = false; - createActions(); - - beforeStateChangeListener = new BeforeActionListener() { - public boolean beforeAction() { - return beforeTokenChange(); - } - }; - } - - public void editContent(final String content, final Listener<String> onSave, final Listener0 onEditCancelled) { - this.onSave = onSave; - this.onEditCancelled = onEditCancelled; - topToolbar.attach(); - view.attach(); - setContent(content); - stateManager.addBeforeStateChangeListener(beforeStateChangeListener); - siteSignOutLink.addBeforeSignOut(beforeStateChangeListener); - } - - public void init(final TextEditorView view) { - this.view = view; - this.view.setEnabled(true); - } - - public void onEdit() { - if (!savePending) { - savePending = true; - if (autoSave) { - view.scheduleSave(AUTOSAVE_IN_MILLISECONDS); - } - } - } - - public void onSaveAndClose() { - saveAndCloseConfirmed = true; - onSave(); - } - - public void onSavedSuccessful() { - if (saveAndCloseConfirmed) { - onCancelConfirmed(); - } else { - reset(); - } - } - - public void onSaveFailed() { - view.scheduleSave(AUTOSAVE_AFTER_FAILS_IN_MILLISECONS); - if (saveAndCloseConfirmed) { - saveAndCloseConfirmed = false; - } - } - - protected void onCancel() { - if (savePending) { - view.saveTimerCancel(); - view.showSaveBeforeDialog(); - } else { - onCancelConfirmed(); - } - } - - protected void onCancelConfirmed() { - stateManager.removeBeforeStateChangeListener(beforeStateChangeListener); - siteSignOutLink.removeBeforeSignOut(beforeStateChangeListener); - stateManager.resumeTokenChange(); - reset(); - view.detach(); - topToolbar.detach(); - onEditCancelled.onEvent(); - } - - protected void onEditHTML() { - if (editingHtml) { - // normal editor - final String html = view.getText(); - view.setHTML(html); - view.editHTML(false); - editingHtml = false; - } else { - // html editor - final String html = view.getHTML(); - view.setText(html); - view.editHTML(true); - editingHtml = true; - } - } - - protected void onSave() { - onSave.onEvent(view.getHTML()); - } - - boolean beforeTokenChange() { - if (savePending) { - onCancel(); - return false; - } else { - deferredCommandWrapper.addCommand(new Listener0() { - public void onEvent() { - onCancelConfirmed(); - } - }); - return true; - } - } - - private void createActions() { - save = new ActionToolbarMenuDescriptor<StateToken>(AccessRolDTO.Viewer, null, new Listener<StateToken>() { - public void onEvent(final StateToken token) { - onSave(); - } - }); - save.setTextDescription(i18n.tWithNT("Save", "used in button")); - save.setParentMenuTitle(i18n.t("File")); - save.setId(SAVE_ID); - // save.setIconUrl("images/"); - - close = new ActionToolbarButtonDescriptor<StateToken>(AccessRolDTO.Viewer, null, new Listener<StateToken>() { - public void onEvent(final StateToken token) { - onCancel(); - } - }); - close.setTextDescription(i18n.tWithNT("Close", "used in button")); - close.setId(CLOSE_ID); - // close.setIconUrl("images/"); - - final ActionItemCollection<StateToken> collection = new ActionItemCollection<StateToken>(); - collection.add(new ActionItem<StateToken>(save, null)); - collection.add(new ActionItem<StateToken>(close, null)); - topToolbar.addActions(collection, null); - } - - private void reset() { - view.saveTimerCancel(); - savePending = false; - saveAndCloseConfirmed = false; - } - - private void setContent(final String html) { - this.view.setHTML(html); - } -} Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorToolbar.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,403 +0,0 @@ -/* - * - * Copyright (C) 2007-2009 The kune development team (see CREDITS for details) - * This file is part of kune. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -package org.ourproject.kune.workspace.client.editor; - -import org.ourproject.kune.platf.client.i18n.I18nTranslationService; -import org.ourproject.kune.platf.client.ui.KuneUiUtils; -import org.ourproject.kune.platf.client.ui.palette.ColorWebSafePalette; -import org.ourproject.kune.platf.client.ui.rte.RichTextArea; -import org.ourproject.kune.platf.client.ui.rte.insertlink.TextEditorInsertElement; - -import com.calclab.suco.client.events.Listener; -import com.calclab.suco.client.events.Listener2; -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.ChangeListener; -import com.google.gwt.user.client.ui.ClickListener; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.KeyboardListener; -import com.google.gwt.user.client.ui.MenuBar; -import com.google.gwt.user.client.ui.PushButton; -import com.google.gwt.user.client.ui.ToggleButton; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.google.gwt.user.client.ui.Widget; -import com.gwtext.client.widgets.MessageBox; -import com.gwtext.client.widgets.MessageBox.PromptCallback; - -/** - * A sample toolbar for use with {@link RichTextArea}. It provides a simple UI - * for all rich text formatting, dynamically displayed only for the available - * functionality. - */ -public class TextEditorToolbar extends Composite { - - /** - * We use an inner EventListener class to avoid exposing event methods on - * the RichTextToolbar itself. - */ - private class EventListener implements ClickListener, ChangeListener, KeyboardListener { - - public static final String TEXT_EDITOR_TOOLBAR_INS_IMG = "k-textedtol-img"; - private final TextEditorInsertElement insertElement; - - public EventListener(TextEditorInsertElement insertElement) { - this.insertElement = insertElement; - insertElement.addOnCreateLink(new Listener2<String, String>() { - public void onEvent(String name, String url) { - extended.createLink(url); - } - }); - } - - public void onChange(final Widget sender) { - fireEdit(); - } - - public void onClick(final Widget sender) { - if (sender == bold) { - basic.toggleBold(); - } else if (sender == italic) { - basic.toggleItalic(); - } else if (sender == underline) { - basic.toggleUnderline(); - } else if (sender == subscript) { - basic.toggleSubscript(); - } else if (sender == superscript) { - basic.toggleSuperscript(); - } else if (sender == strikethrough) { - extended.toggleStrikethrough(); - } else if (sender == indent) { - extended.rightIndent(); - } else if (sender == outdent) { - extended.leftIndent(); - } else if (sender == justifyLeft) { - basic.setJustification(RichTextArea.Justification.LEFT); - } else if (sender == justifyCenter) { - basic.setJustification(RichTextArea.Justification.CENTER); - } else if (sender == justifyRight) { - basic.setJustification(RichTextArea.Justification.RIGHT); - } else if (sender == insertImage) { - showImagePanel(); - } else if (sender == createLink) { - insertElement.show(); - } else if (sender == backColor) { - colorPalette.show(sender.getAbsoluteLeft(), sender.getAbsoluteTop() + 20, new Listener<String>() { - public void onEvent(final String color) { - basic.setBackColor(color); - colorPalette.hide(); - } - }); - } else if (sender == editHtml) { - presenter.onEditHTML(); - } else if (sender == fontColor) { - colorPalette.show(sender.getAbsoluteLeft(), sender.getAbsoluteTop() + 20, new Listener<String>() { - public void onEvent(final String color) { - basic.setForeColor(color); - colorPalette.hide(); - } - }); - } else if (sender == removeLink) { - extended.removeLink(); - } else if (sender == hr) { - extended.insertHorizontalRule(); - } else if (sender == ol) { - extended.insertOrderedList(); - } else if (sender == ul) { - extended.insertUnorderedList(); - } else if (sender == removeFormat) { - extended.removeFormat(); - } else if (sender == richText) { - // We use the RichTextArea's onKeyUp event to update the - // toolbar status. - // This will catch any cases where the user moves the cursur - // using the - // keyboard, or uses one of the browser's built-in keyboard - // shortcuts. - updateStatus(); - } - if (sender != richText) { - // some button pressed is equiv to edit - fireEdit(); - } - } - - public void onKeyDown(final Widget sender, final char keyCode, final int modifiers) { - if (sender == removeLink && keyCode == KeyboardListener.KEY_ENTER) { - fireEditHTML(); - } - } - - public void onKeyPress(final Widget sender, final char keyCode, final int modifiers) { - } - - public void onKeyUp(final Widget sender, final char keyCode, final int modifiers) { - if (sender == richText) { - // We use the RichTextArea's onKeyUp event to update the - // toolbar status. - // This will catch any cases where the user moves the cursor - // using the keyboard, or uses one of the browser's built-in - // keyboard shortcuts. - updateStatus(); - fireEdit(); - } - } - - private void showImagePanel() { - MessageBox.prompt("Insert image", "Enter an image URL:", new PromptCallback() { - public void execute(final String btnID, final String text) { - if (btnID.equals("ok") && text != null) { - extended.insertImage(text); - } - } - }); - - } - } - - private static final RichTextArea.FontSize[] fontSizesConstants = new RichTextArea.FontSize[] { - RichTextArea.FontSize.XX_SMALL, RichTextArea.FontSize.X_SMALL, RichTextArea.FontSize.SMALL, - RichTextArea.FontSize.MEDIUM, RichTextArea.FontSize.LARGE, RichTextArea.FontSize.X_LARGE, - RichTextArea.FontSize.XX_LARGE }; - - private final TextEditorImages images = (TextEditorImages) GWT.create(TextEditorImages.class); - private final EventListener listener; - private final RichTextArea richText; - private final RichTextArea.BasicFormatter basic; - private final RichTextArea.ExtendedFormatter extended; - private final VerticalPanel outer = new VerticalPanel(); - private final HorizontalPanel topPanel = new HorizontalPanel(); - private ToggleButton bold; - private ToggleButton italic; - private ToggleButton underline; - private ToggleButton subscript; - private ToggleButton superscript; - private ToggleButton strikethrough; - private ToggleButton editHtml; - private PushButton indent; - private PushButton outdent; - private PushButton justifyLeft; - private PushButton justifyCenter; - private PushButton justifyRight; - private PushButton hr; - private PushButton ol; - private PushButton ul; - private PushButton insertImage; - private PushButton createLink; - private PushButton removeLink; - private PushButton removeFormat; - private PushButton backColor; - private PushButton fontColor; - private MenuBar fonts; - private MenuBar fontSizes; - private final ColorWebSafePalette colorPalette; - private final TextEditorPresenter presenter; - private final I18nTranslationService i18n; - - /** - * Creates a new toolbar that drives the given rich text area. - * - * @param richText - * the rich text area to be controlled - */ - public TextEditorToolbar(final RichTextArea richText, final TextEditorPresenter presenter, - final ColorWebSafePalette colorPalette, final I18nTranslationService i18n, boolean permitEditHtml, - TextEditorInsertElement insertElement) { - this.richText = richText; - this.colorPalette = colorPalette; - this.i18n = i18n; - this.basic = richText.getBasicFormatter(); - this.extended = richText.getExtendedFormatter(); - this.presenter = presenter; - listener = new EventListener(insertElement); - - initWidget(outer); - - outer.add(topPanel); - outer.setVerticalAlignment(VerticalPanel.ALIGN_MIDDLE); - setStyleName("gwt-RichTextToolbar"); - - if (basic != null) { - topPanel.add(bold = createToggleButton(images.bold(), i18n.t("Toggle Bold"))); - topPanel.add(italic = createToggleButton(images.italic(), i18n.t("Toggle Italic"))); - topPanel.add(underline = createToggleButton(images.underline(), i18n.t("Toggle Underline"))); - } - - if (extended != null) { - topPanel.add(strikethrough = createToggleButton(images.strikeout(), i18n.t("Toggle Strikethrough"))); - } - - if (basic != null) { - subscript = createToggleButton(images.subscript(), i18n.t("Toggle Subscript")); - superscript = createToggleButton(images.superscript(), i18n.t("Toggle Superscript")); - topPanel.add(subscript); - topPanel.add(superscript); - topPanel.add(justifyLeft = createPushButton(images.alignleft(), i18n.t("Left Justify"))); - topPanel.add(justifyCenter = createPushButton(images.centerpara(), i18n.t("Center"))); - topPanel.add(justifyRight = createPushButton(images.alignright(), i18n.t("Right Justify"))); - } - - if (extended != null) { - topPanel.add(indent = createPushButton(images.incrementindent(), i18n.t("Indent Right"))); - topPanel.add(outdent = createPushButton(images.decrementindent(), i18n.t("Indent Left"))); - hr = createPushButton(images.hfixedline(), i18n.t("Insert Horizontal Rule")); - topPanel.add(hr); - topPanel.add(ol = createPushButton(images.defaultnumbering(), i18n.t("Insert Ordered List"))); - topPanel.add(ul = createPushButton(images.defaultbullet(), i18n.t("Insert Unordered List"))); - topPanel.add(insertImage = createPushButton(images.images(), i18n.t("Insert Image"))); - topPanel.add(createLink = createPushButton(images.link(), i18n.t("Create Link"))); - topPanel.add(removeLink = createPushButton(images.linkBreak(), i18n.t("Remove Link"))); - removeFormat = createPushButton(images.removeFormat(), i18n.t("Remove Formatting")); - topPanel.add(removeFormat); - } - - if (basic != null) { - topPanel.add(backColor = createPushButton(images.backcolor(), i18n.t("Background Color"))); - topPanel.add(fontColor = createPushButton(images.fontcolor(), i18n.t("Font Color"))); - topPanel.add(fonts = createFontsMenu()); - topPanel.add(fontSizes = createFontSizesMenu()); - - // We only use these listeners for updating status, so don't - // hook them up unless at least basic editing is supported. - richText.addKeyboardListener(listener); - richText.addClickListener(listener); - } - - if (basic != null && permitEditHtml) { - topPanel.add(editHtml = createToggleButton(images.edithtml(), i18n.t("Edit HTML"))); - } - - // super.setVisible(false); - } - - public void editHTML(final boolean edit) { - final boolean enable = !edit; - if (basic != null) { - bold.setVisible(enable); - italic.setVisible(enable); - underline.setVisible(enable); - subscript.setVisible(enable); - superscript.setVisible(enable); - justifyLeft.setVisible(enable); - justifyCenter.setVisible(enable); - justifyRight.setVisible(enable); - backColor.setVisible(enable); - fontColor.setVisible(enable); - } - if (extended != null) { - strikethrough.setVisible(enable); - indent.setVisible(enable); - outdent.setVisible(enable); - insertImage.setVisible(enable); - createLink.setVisible(enable); - removeLink.setVisible(enable); - ol.setVisible(enable); - ul.setVisible(enable); - hr.setVisible(enable); - removeFormat.setVisible(enable); - fonts.setVisible(enable); - fontSizes.setVisible(enable); - } - } - - private MenuBar createFontSizesMenu() { - final MenuBar menu = new MenuBar(); - final MenuBar submenu = new MenuBar(true); - final String fontSizes[] = { i18n.t("Extra small"), i18n.t("Very small"), i18n.t("Small"), i18n.t("Medium"), - i18n.t("Large"), i18n.t("Very large"), i18n.t("Extra large") }; - - KuneUiUtils.setQuickTip(menu, i18n.t("Font Size")); - menu.addItem(images.fontheight().getHTML(), true, submenu); - for (int i = 0; i < fontSizes.length; i++) { - final String f = fontSizes[i]; - final int fontSize = i; - submenu.addItem("<font size=\"" + (i + 1) + "\">" + f + "</font>", true, new Command() { - public void execute() { - basic.setFontSize(fontSizesConstants[fontSize]); - fireEdit(); - } - }); - } - menu.setStyleName("RichTextToolbar-menu"); - submenu.setStyleName("RichTextToolbar-submenu"); - return menu; - } - - private MenuBar createFontsMenu() { - final MenuBar menu = new MenuBar(); - final MenuBar submenu = new MenuBar(true); - final String fontName[] = { "Times New Roman", "Arial", "Courier New", "Georgia", "Trebuchet", "Verdana" }; - - KuneUiUtils.setQuickTip(menu, i18n.t("Font Type")); - menu.addItem(images.charfontname().getHTML(), true, submenu); - for (final String f : fontName) { - submenu.addItem("<span style=\"font-family: " + f + "\">" + f + "</span>", true, new Command() { - public void execute() { - basic.setFontName(f); - fireEdit(); - } - }); - } - menu.setStyleName("RichTextToolbar-menu"); - submenu.setStyleName("RichTextToolbar-submenu"); - return menu; - } - - private PushButton createPushButton(final AbstractImagePrototype img, final String tip) { - final PushButton pb = new PushButton(img.createImage()); - pb.addClickListener(listener); - KuneUiUtils.setQuickTip(pb, tip); - return pb; - } - - private ToggleButton createToggleButton(final AbstractImagePrototype img, final String tip) { - final ToggleButton tb = new ToggleButton(img.createImage()); - tb.addClickListener(listener); - KuneUiUtils.setQuickTip(tb, tip); - return tb; - } - - private void fireEdit() { - presenter.onEdit(); - } - - private void fireEditHTML() { - presenter.onEditHTML(); - } - - /** - * Updates the status of all the stateful buttons. - */ - private void updateStatus() { - if (basic != null) { - bold.setDown(basic.isBold()); - italic.setDown(basic.isItalic()); - underline.setDown(basic.isUnderlined()); - subscript.setDown(basic.isSubscript()); - superscript.setDown(basic.isSuperscript()); - } - - if (extended != null) { - strikethrough.setDown(extended.isStrikethrough()); - } - } - -} Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorView.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorView.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/editor/TextEditorView.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,50 +0,0 @@ -/* - * - * Copyright (C) 2007-2009 The kune development team (see CREDITS for details) - * This file is part of kune. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -package org.ourproject.kune.workspace.client.editor; - -import org.ourproject.kune.platf.client.View; - -public interface TextEditorView extends View { - - void attach(); - - void detach(); - - void editHTML(boolean edit); - - String getHTML(); - - String getText(); - - void saveTimerCancel(); - - void scheduleSave(int delayMillis); - - void setEnabled(boolean enabled); - - void setHeight(String height); - - void setHTML(String html); - - void setText(String text); - - void showSaveBeforeDialog(); - -} \ No newline at end of file Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/alignleft.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/alignright.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/backcolor.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/bold.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/centerpara.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/charfontname.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/decrementindent.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/defaultbullet.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/defaultnumbering.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/edithtml.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/fontcolor.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/fontheight.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/hfixedline.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/images.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/incrementindent.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/italic.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/link.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/link_break.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/removeFormat.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/strikeout.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/subscript.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/superscript.png =================================================================== (Binary files differ) Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/editor/underline.png =================================================================== (Binary files differ) Deleted: trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenterTest.java =================================================================== --- trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenterTest.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenterTest.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -1,158 +0,0 @@ -package org.ourproject.kune.platf.client.ui.rte; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; -import org.mockito.internal.verification.api.VerificationMode; -import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; -import org.ourproject.kune.platf.client.i18n.I18nUITranslationService; -import org.ourproject.kune.platf.client.state.StateManager; -import org.ourproject.kune.platf.client.ui.rte.img.RTEImgResources; -import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; -import org.ourproject.kune.platf.client.utils.TimerWrapper; - -import com.calclab.suco.client.events.Listener0; -import com.calclab.suco.testing.events.MockedListener; -import com.calclab.suco.testing.events.MockedListener0; -import com.google.gwt.libideas.resources.client.ImageResource; - -public class RTESavingEditorPresenterTest { - - private RTESavingEditorPresenter presenter; - private MockedListener<String> saveListener; - private MockedListener0 cancelListener; - private StateManager stateManager; - private DeferredCommandWrapper deferredCommandWrapper; - private RTEditor rteEditor; - private TimerWrapper timer; - @SuppressWarnings("unchecked") - private ActionToolbar sndbar; - private RTESavingEditorView view; - - @SuppressWarnings("unchecked") - @Before - public void createObjects() { - I18nUITranslationService i18n = Mockito.mock(I18nUITranslationService.class); - stateManager = Mockito.mock(StateManager.class); - deferredCommandWrapper = Mockito.mock(DeferredCommandWrapper.class); - rteEditor = Mockito.mock(RTEditor.class); - RTEImgResources imgResources = Mockito.mock(RTEImgResources.class); - ImageResource imageResource = Mockito.mock(ImageResource.class); - Mockito.when(imageResource.getName()).thenReturn("save"); - Mockito.when(imgResources.save()).thenReturn(imageResource); - sndbar = Mockito.mock(ActionToolbar.class); - Mockito.when(rteEditor.getSndBar()).thenReturn(sndbar); - timer = Mockito.mock(TimerWrapper.class); - view = Mockito.mock(RTESavingEditorView.class); - presenter = new RTESavingEditorPresenter(rteEditor, true, i18n, stateManager, deferredCommandWrapper, - imgResources, timer); - presenter.init(view); - saveListener = new MockedListener<String>(); - cancelListener = new MockedListener0(); - } - - @Test - public void historyChangeWithoutPendingMustAccept() { - presenter.edit("Text to edit", saveListener, cancelListener); - boolean change = presenter.beforeTokenChange(); - assertTrue(change); - verifyAskConfirmationCalled(Mockito.never()); - Mockito.verify(deferredCommandWrapper, Mockito.times(1)).addCommand((Listener0) Mockito.anyObject()); - } - - @Test - public void historyChangeWithPendingSaveAndCancelMustPosponeIt() { - editAndChangeHistoryToken(); - presenter.onCancelConfirmed(); - assertTrue(saveListener.isNotCalled()); - Mockito.verify(stateManager, Mockito.times(1)).resumeTokenChange(); - } - - @Test - public void historyChangeWithPendingSaveMustPosponeIt() { - editAndChangeHistoryToken(); - presenter.onDoSaveAndClose(); - presenter.onSavedSuccessful(); - assertTrue(saveListener.isCalledOnce()); - Mockito.verify(stateManager, Mockito.times(1)).resumeTokenChange(); - } - - @Test - public void initialEditWithCancel() { - presenter.edit("Text to edit", saveListener, cancelListener); - presenter.onCancel(); - assertTrue(saveListener.isNotCalled()); - assertTrue(cancelListener.isCalledOnce()); - } - - @Test - public void initialEditWithEditionAndSave() { - presenter.edit("Text to edit", saveListener, cancelListener); - String textModified = "Text modified"; - Mockito.when(rteEditor.getHtml()).thenReturn(textModified); - presenter.onEdit(); - presenter.onDoSave(); - checkSaveBtnDisabled(); - assertTrue(saveListener.isCalledWithEquals(textModified)); - assertTrue(cancelListener.isNotCalled()); - } - - @Test - public void initialEditWithSave() { - presenter.edit("Text to edit", saveListener, cancelListener); - presenter.onDoSave(); - checkSaveBtnDisabled(); - assertTrue(saveListener.isCalledOnce()); - assertTrue(cancelListener.isNotCalled()); - } - - @Test - public void testSavePendingAndCancel() { - presenter.edit("Text to edit", saveListener, cancelListener); - String textModified = "Text modified"; - Mockito.when(rteEditor.getHtml()).thenReturn(textModified); - presenter.onEdit(); - presenter.onCancel(); - presenter.onCancelConfirmed(); - assertTrue(saveListener.isNotCalled()); - assertTrue(cancelListener.isCalledOnce()); - } - - @Test - public void testSavePendingAndSaveFails() { - presenter.edit("Text to edit", saveListener, cancelListener); - String textModified = "Text modified"; - Mockito.when(rteEditor.getHtml()).thenReturn(textModified); - presenter.onEdit(); - presenter.onDoSave(); - presenter.onSaveFailed(); - presenter.onDoSave(); - Mockito.verify(timer, Mockito.times(1)).schedule(RTESavingEditorPresenter.AUTOSAVE_IN_MILLISECONDS); - Mockito.verify(timer, Mockito.times(1)).schedule(RTESavingEditorPresenter.AUTOSAVE_AFTER_FAILS_IN_MILLISECONS); - assertTrue(saveListener.isCalled(2)); - } - - @SuppressWarnings("unchecked") - private void checkSaveBtnDisabled() { - Mockito.verify(sndbar, Mockito.times(1)).setButtonEnable(presenter.saveBtn, false); - } - - private String editAndChangeHistoryToken() { - presenter.edit("Text to edit", saveListener, cancelListener); - presenter.onEdit(); - String newToken = "somegroup"; - boolean change = presenter.beforeTokenChange(); - assertFalse(change); - verifyAskConfirmationCalled(Mockito.times(1)); - return newToken; - } - - private void verifyAskConfirmationCalled(VerificationMode mode) { - Mockito.verify(view, mode).askConfirmation(Mockito.anyString(), Mockito.anyString(), - (Listener0) Mockito.anyObject(), (Listener0) Mockito.anyObject()); - } - -} Copied: trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenterTest.java (from rev 1069, trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenterTest.java) =================================================================== --- trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/RTESavingEditorPresenterTest.java 2009-03-11 13:21:45 UTC (rev 1069) +++ trunk/src/test/java/org/ourproject/kune/platf/client/ui/rte/saving/RTESavingEditorPresenterTest.java 2009-03-11 13:47:13 UTC (rev 1070) @@ -0,0 +1,161 @@ +package org.ourproject.kune.platf.client.ui.rte.saving; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.mockito.internal.verification.api.VerificationMode; +import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar; +import org.ourproject.kune.platf.client.i18n.I18nUITranslationService; +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; +import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditorPresenter; +import org.ourproject.kune.platf.client.ui.rte.saving.RTESavingEditorView; +import org.ourproject.kune.platf.client.utils.DeferredCommandWrapper; +import org.ourproject.kune.platf.client.utils.TimerWrapper; + +import com.calclab.suco.client.events.Listener0; +import com.calclab.suco.testing.events.MockedListener; +import com.calclab.suco.testing.events.MockedListener0; +import com.google.gwt.libideas.resources.client.ImageResource; + +public class RTESavingEditorPresenterTest { + + private RTESavingEditorPresenter presenter; + private MockedListener<String> saveListener; + private MockedListener0 cancelListener; + private StateManager stateManager; + private DeferredCommandWrapper deferredCommandWrapper; + private RTEditor rteEditor; + private TimerWrapper timer; + @SuppressWarnings("unchecked") + private ActionToolbar sndbar; + private RTESavingEditorView view; + + @SuppressWarnings("unchecked") + @Before + public void createObjects() { + I18nUITranslationService i18n = Mockito.mock(I18nUITranslationService.class); + stateManager = Mockito.mock(StateManager.class); + deferredCommandWrapper = Mockito.mock(DeferredCommandWrapper.class); + rteEditor = Mockito.mock(RTEditor.class); + RTEImgResources imgResources = Mockito.mock(RTEImgResources.class); + ImageResource imageResource = Mockito.mock(ImageResource.class); + Mockito.when(imageResource.getName()).thenReturn("save"); + Mockito.when(imgResources.save()).thenReturn(imageResource); + sndbar = Mockito.mock(ActionToolbar.class); + Mockito.when(rteEditor.getSndBar()).thenReturn(sndbar); + timer = Mockito.mock(TimerWrapper.class); + view = Mockito.mock(RTESavingEditorView.class); + presenter = new RTESavingEditorPresenter(rteEditor, true, i18n, stateManager, deferredCommandWrapper, + imgResources, timer); + presenter.init(view); + saveListener = new MockedListener<String>(); + cancelListener = new MockedListener0(); + } + + @Test + public void historyChangeWithoutPendingMustAccept() { + presenter.edit("Text to edit", saveListener, cancelListener); + boolean change = presenter.beforeTokenChange(); + assertTrue(change); + verifyAskConfirmationCalled(Mockito.never()); + Mockito.verify(deferredCommandWrapper, Mockito.times(1)).addCommand((Listener0) Mockito.anyObject()); + } + + @Test + public void historyChangeWithPendingSaveAndCancelMustPosponeIt() { + editAndChangeHistoryToken(); + presenter.onCancelConfirmed(); + assertTrue(saveListener.isNotCalled()); + Mockito.verify(stateManager, Mockito.times(1)).resumeTokenChange(); + } + + @Test + public void historyChangeWithPendingSaveMustPosponeIt() { + editAndChangeHistoryToken(); + presenter.onDoSaveAndClose(); + presenter.onSavedSuccessful(); + assertTrue(saveListener.isCalledOnce()); + Mockito.verify(stateManager, Mockito.times(1)).resumeTokenChange(); + } + + @Test + public void initialEditWithCancel() { + presenter.edit("Text to edit", saveListener, cancelListener); + presenter.onCancel(); + assertTrue(saveListener.isNotCalled()); + assertTrue(cancelListener.isCalledOnce()); + } + + @Test + public void initialEditWithEditionAndSave() { + presenter.edit("Text to edit", saveListener, cancelListener); + String textModified = "Text modified"; + Mockito.when(rteEditor.getHtml()).thenReturn(textModified); + presenter.onEdit(); + presenter.onDoSave(); + checkSaveBtnDisabled(); + assertTrue(saveListener.isCalledWithEquals(textModified)); + assertTrue(cancelListener.isNotCalled()); + } + + @Test + public void initialEditWithSave() { + presenter.edit("Text to edit", saveListener, cancelListener); + presenter.onDoSave(); + checkSaveBtnDisabled(); + assertTrue(saveListener.isCalledOnce()); + assertTrue(cancelListener.isNotCalled()); + } + + @Test + public void testSavePendingAndCancel() { + presenter.edit("Text to edit", saveListener, cancelListener); + String textModified = "Text modified"; + Mockito.when(rteEditor.getHtml()).thenReturn(textModified); + presenter.onEdit(); + presenter.onCancel(); + presenter.onCancelConfirmed(); + assertTrue(saveListener.isNotCalled()); + assertTrue(cancelListener.isCalledOnce()); + } + + @Test + public void testSavePendingAndSaveFails() { + presenter.edit("Text to edit", saveListener, cancelListener); + String textModified = "Text modified"; + Mockito.when(rteEditor.getHtml()).thenReturn(textModified); + presenter.onEdit(); + presenter.onDoSave(); + presenter.onSaveFailed(); + presenter.onDoSave(); + Mockito.verify(timer, Mockito.times(1)).schedule(RTESavingEditorPresenter.AUTOSAVE_IN_MILLISECONDS); + Mockito.verify(timer, Mockito.times(1)).schedule(RTESavingEditorPresenter.AUTOSAVE_AFTER_FAILS_IN_MILLISECONS); + assertTrue(saveListener.isCalled(2)); + } + + @SuppressWarnings("unchecked") + private void checkSaveBtnDisabled() { + Mockito.verify(sndbar, Mockito.times(1)).setButtonEnable(presenter.saveBtn, false); + } + + private String editAndChangeHistoryToken() { + presenter.edit("Text to edit", saveListener, cancelListener); + presenter.onEdit(); + String newToken = "somegroup"; + boolean change = presenter.beforeTokenChange(); + assertFalse(change); + verifyAskConfirmationCalled(Mockito.times(1)); + return newToken; + } + + private void verifyAskConfirmationCalled(VerificationMode mode) { + Mockito.verify(view, mode).askConfirmation(Mockito.anyString(), Mockito.anyString(), + (Listener0) Mockito.anyObject(), (Listener0) Mockito.anyObject()); + } + +}
participants (1)
-
vjrj