summaryrefslogtreecommitdiff
path: root/sd/source/ui/notes
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/notes')
-rwxr-xr-xsd/source/ui/notes/EditWindow.cxx883
-rwxr-xr-xsd/source/ui/notes/EditWindow.hxx128
-rwxr-xr-xsd/source/ui/notes/NotesChildWindow.cxx63
-rwxr-xr-xsd/source/ui/notes/NotesChildWindow.src45
-rwxr-xr-xsd/source/ui/notes/NotesDockingWindow.cxx114
-rwxr-xr-xsd/source/ui/notes/NotesDockingWindow.hxx56
-rwxr-xr-xsd/source/ui/notes/TextLogger.cxx129
-rwxr-xr-xsd/source/ui/notes/makefile.mk60
8 files changed, 1478 insertions, 0 deletions
diff --git a/sd/source/ui/notes/EditWindow.cxx b/sd/source/ui/notes/EditWindow.cxx
new file mode 100755
index 000000000000..54e3589bc87e
--- /dev/null
+++ b/sd/source/ui/notes/EditWindow.cxx
@@ -0,0 +1,883 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+
+#include "EditWindow.hxx"
+
+#include "sdmod.hxx"
+#include <i18npool/mslangid.hxx>
+#include <com/sun/star/i18n/ScriptType.hpp>
+#include <editeng/editeng.hxx>
+#include <editeng/editview.hxx>
+#include <vcl/scrbar.hxx>
+#include <editeng/eeitem.hxx>
+#include "sdresid.hxx"
+#include <svl/itempool.hxx>
+#include <editeng/fhgtitem.hxx>
+#include <vos/mutex.hxx>
+#include <vcl/svapp.hxx>
+#include <unotools/linguprops.hxx>
+#include <unotools/lingucfg.hxx>
+#include <editeng/fontitem.hxx>
+#include <editeng/editstat.hxx>
+
+#define SCROLL_LINE 24
+
+using namespace com::sun::star::accessibility;
+using namespace com::sun::star;
+using namespace com::sun::star::uno;
+
+namespace sd { namespace notes {
+
+EditWindow::EditWindow (Window* pParentWindow, SfxItemPool* pItemPool)
+ : Window (pParentWindow, WinBits()),
+ DropTargetHelper(this),
+ mpEditView(NULL),
+ mpEditEngine(NULL),
+ mpHorizontalScrollBar(NULL),
+ mpVerticalScrollBar(NULL),
+ mpScrollBox(NULL)
+{
+ SetMapMode(MAP_PIXEL);
+
+ // compare DataChanged
+ SetBackground (GetSettings().GetStyleSettings().GetWindowColor());
+
+ maModifyTimer.SetTimeout(2000);
+ maModifyTimer.Start();
+
+ maCursorMoveTimer.SetTimeout(500);
+
+ CreateEditView();
+
+ SvxFontHeightItem aItem (GetFont().GetSize().Height(), 100,
+ EE_CHAR_FONTHEIGHT);
+ pItemPool->SetPoolDefaultItem (aItem);
+ aItem.SetWhich(EE_CHAR_FONTHEIGHT_CJK);
+ pItemPool->SetPoolDefaultItem (aItem);
+ aItem.SetWhich(EE_CHAR_FONTHEIGHT_CTL);
+ pItemPool->SetPoolDefaultItem (aItem);
+
+ InsertText (UniString::CreateFromAscii("EditWindow created and ready.\n"));
+}
+
+
+EditWindow::~EditWindow (void)
+{
+ maCursorMoveTimer.Stop();
+ maModifyTimer.Stop();
+
+ if (mpEditView != NULL)
+ {
+ EditEngine *pEditEngine = mpEditView->GetEditEngine();
+ if (pEditEngine)
+ {
+ pEditEngine->SetStatusEventHdl(Link());
+ pEditEngine->RemoveView (mpEditView);
+ }
+ }
+ delete mpEditView;
+ delete mpHorizontalScrollBar;
+ delete mpVerticalScrollBar;
+ delete mpScrollBox;
+
+}
+
+////////////////////////////////////////
+
+
+void SmGetLeftSelectionPart(const ESelection aSel,
+ USHORT &nPara, USHORT &nPos)
+ // returns paragraph number and position of the selections left part
+{
+ // compare start and end of selection and use the one that comes first
+ if (
+ (aSel.nStartPara < aSel.nEndPara) ||
+ (aSel.nStartPara == aSel.nEndPara && aSel.nStartPos < aSel.nEndPos)
+ )
+ { nPara = aSel.nStartPara;
+ nPos = aSel.nStartPos;
+ }
+ else
+ { nPara = aSel.nEndPara;
+ nPos = aSel.nEndPos;
+ }
+}
+
+
+
+
+EditEngine * EditWindow::GetEditEngine (void)
+{
+ if (mpEditEngine == NULL)
+ mpEditEngine = CreateEditEngine ();
+ return mpEditEngine;
+}
+
+
+
+
+EditEngine* EditWindow::CreateEditEngine (void)
+{
+ EditEngine* pEditEngine = mpEditEngine;
+ if (pEditEngine == NULL)
+ {
+ mpEditEngineItemPool = EditEngine::CreatePool();
+
+ //
+ // set fonts to be used
+ //
+ SvtLinguOptions aOpt;
+ SvtLinguConfig().GetOptions( aOpt );
+ //
+ struct FontDta {
+ INT16 nFallbackLang;
+ INT16 nLang;
+ USHORT nFontType;
+ USHORT nFontInfoId;
+ } aTable[3] =
+ {
+ // info to get western font to be used
+ { LANGUAGE_ENGLISH_US, LANGUAGE_NONE,
+ DEFAULTFONT_SERIF, EE_CHAR_FONTINFO },
+ // info to get CJK font to be used
+ { LANGUAGE_JAPANESE, LANGUAGE_NONE,
+ DEFAULTFONT_CJK_TEXT, EE_CHAR_FONTINFO_CJK },
+ // info to get CTL font to be used
+ { LANGUAGE_ARABIC_SAUDI_ARABIA, LANGUAGE_NONE,
+ DEFAULTFONT_CTL_TEXT, EE_CHAR_FONTINFO_CTL }
+ };
+ aTable[0].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN);
+ aTable[1].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN);
+ aTable[2].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
+ //
+ for (int i = 0; i < 3; ++i)
+ {
+ const FontDta &rFntDta = aTable[i];
+ LanguageType nLang = (LANGUAGE_NONE == rFntDta.nLang) ?
+ rFntDta.nFallbackLang : rFntDta.nLang;
+ Font aFont = Application::GetDefaultDevice()->GetDefaultFont(
+ rFntDta.nFontType, nLang, DEFAULTFONT_FLAGS_ONLYONE);
+ mpEditEngineItemPool->SetPoolDefaultItem(
+ SvxFontItem(
+ aFont.GetFamily(),
+ aFont.GetName(),
+ aFont.GetStyleName(),
+ aFont.GetPitch(),
+ aFont.GetCharSet(),
+ rFntDta.nFontInfoId));
+ }
+
+ // set font heights
+ SvxFontHeightItem aFontHeigt(
+ Application::GetDefaultDevice()->LogicToPixel(
+ Size (0, 10), MapMode (MAP_POINT)).Height(), 100,
+ EE_CHAR_FONTHEIGHT );
+ mpEditEngineItemPool->SetPoolDefaultItem( aFontHeigt);
+ aFontHeigt.SetWhich (EE_CHAR_FONTHEIGHT_CJK);
+ mpEditEngineItemPool->SetPoolDefaultItem( aFontHeigt);
+ aFontHeigt.SetWhich (EE_CHAR_FONTHEIGHT_CTL);
+ mpEditEngineItemPool->SetPoolDefaultItem( aFontHeigt);
+
+ pEditEngine = new EditEngine (mpEditEngineItemPool);
+
+ pEditEngine->EnableUndo (TRUE);
+ pEditEngine->SetDefTab (USHORT(
+ Application::GetDefaultDevice()->GetTextWidth(
+ UniString::CreateFromAscii("XXXX"))));
+
+ pEditEngine->SetControlWord(
+ (pEditEngine->GetControlWord()
+ | EE_CNTRL_AUTOINDENTING) &
+ (~EE_CNTRL_UNDOATTRIBS) &
+ (~EE_CNTRL_PASTESPECIAL));
+
+ pEditEngine->SetWordDelimiters (
+ UniString::CreateFromAscii(" .=+-*/(){}[];\""));
+ pEditEngine->SetRefMapMode (MAP_PIXEL);
+ pEditEngine->SetPaperSize (Size(800, 0));
+ pEditEngine->EraseVirtualDevice();
+ pEditEngine->ClearModifyFlag();
+ }
+
+ return pEditEngine;
+}
+
+
+
+
+void EditWindow::DataChanged (const DataChangedEvent&)
+{
+ const StyleSettings aSettings (GetSettings().GetStyleSettings());
+
+ SetBackground( aSettings.GetWindowColor() );
+
+ // edit fields in other Applications use this font instead of
+ // the application font thus we use this one too
+ SetPointFont( aSettings.GetFieldFont() );
+ EditEngine* pEditEngine = GetEditEngine();
+
+ if (pEditEngine!=NULL && mpEditEngineItemPool!=NULL)
+ {
+ //!
+ //! see also SmDocShell::GetEditEngine() !
+ //!
+
+ // pEditEngine->SetDefTab( USHORT( GetTextWidth( C2S("XXXX") ) ) );
+
+ USHORT aFntInfoId[3] = {
+ EE_CHAR_FONTINFO, EE_CHAR_FONTINFO_CJK, EE_CHAR_FONTINFO_CTL };
+ for (int i = 0; i < 3; ++i)
+ {
+ const SfxPoolItem *pItem = mpEditEngineItemPool->GetPoolDefaultItem( aFntInfoId[i] );
+ if( pItem )
+ {
+ const SvxFontItem *pFntItem = ((const SvxFontItem *) pItem);
+ const Font &rFnt = aSettings.GetFieldFont();
+ SvxFontItem aFntItem( rFnt.GetFamily(), rFnt.GetName(),
+ rFnt.GetStyleName(), rFnt.GetPitch(),
+ pFntItem->GetCharSet(),
+ aFntInfoId[i] );
+ mpEditEngineItemPool->SetPoolDefaultItem( aFntItem );
+ }
+ }
+
+ SvxFontHeightItem aItem( GetFont().GetSize().Height(), 100,
+ EE_CHAR_FONTHEIGHT );
+ mpEditEngineItemPool->SetPoolDefaultItem( aItem );
+ aItem.SetWhich( EE_CHAR_FONTHEIGHT_CJK );
+ mpEditEngineItemPool->SetPoolDefaultItem( aItem );
+ aItem.SetWhich( EE_CHAR_FONTHEIGHT_CTL );
+ mpEditEngineItemPool->SetPoolDefaultItem( aItem );
+
+ // forces new settings to be used
+ // unfortunately this resets the whole edit engine
+ // thus we need to save at least the text
+ String aTxt( pEditEngine->GetText( LINEEND_LF ) );
+ pEditEngine->Clear(); //#77957 incorrect font size
+ pEditEngine->SetText( aTxt );
+ }
+
+ String aText (mpEditEngine->GetText (LINEEND_LF));
+ mpEditEngine->Clear();
+ mpEditEngine->SetText (aText);
+
+ AdjustScrollBars();
+ Resize();
+}
+
+
+
+
+void EditWindow::Resize (void)
+{
+ if (!mpEditView)
+ CreateEditView();
+
+ if (mpEditView != NULL)
+ {
+ mpEditView->SetOutputArea(AdjustScrollBars());
+ mpEditView->ShowCursor();
+
+ DBG_ASSERT( mpEditView->GetEditEngine(), "EditEngine missing" );
+ const long nMaxVisAreaStart = mpEditView->GetEditEngine()->GetTextHeight() -
+ mpEditView->GetOutputArea().GetHeight();
+ if (mpEditView->GetVisArea().Top() > nMaxVisAreaStart)
+ {
+ Rectangle aVisArea(mpEditView->GetVisArea() );
+ aVisArea.Top() = (nMaxVisAreaStart > 0 ) ? nMaxVisAreaStart : 0;
+ aVisArea.SetSize(mpEditView->GetOutputArea().GetSize());
+ mpEditView->SetVisArea(aVisArea);
+ mpEditView->ShowCursor();
+ }
+ InitScrollBars();
+ }
+ Invalidate();
+}
+
+
+
+
+void EditWindow::MouseButtonUp(const MouseEvent &rEvt)
+{
+ if (mpEditView != NULL)
+ mpEditView->MouseButtonUp(rEvt);
+ else
+ Window::MouseButtonUp (rEvt);
+
+ // ggf FormulaCursor neu positionieren
+ // CursorMoveTimerHdl(&aCursorMoveTimer);
+}
+
+
+
+
+void EditWindow::MouseButtonDown(const MouseEvent &rEvt)
+{
+ if (mpEditView != NULL)
+ mpEditView->MouseButtonDown(rEvt);
+ else
+ Window::MouseButtonDown (rEvt);
+
+ GrabFocus();
+}
+
+
+
+
+void EditWindow::Command(const CommandEvent& rCEvt)
+{
+ /* if (rCEvt.GetCommand() == COMMAND_CONTEXTMENU)
+ {
+ GetParent()->ToTop();
+
+ Point aPoint = rCEvt.GetMousePosPixel();
+ PopupMenu* pPopupMenu = new PopupMenu(SmResId(RID_COMMANDMENU));
+
+ // added for replaceability of context menus #96085, #93782
+ Menu* pMenu = NULL;
+ ::com::sun::star::ui::ContextMenuExecuteEvent aEvent;
+ aEvent.SourceWindow = VCLUnoHelper::GetInterface( this );
+ aEvent.ExecutePosition.X = aPoint.X();
+ aEvent.ExecutePosition.Y = aPoint.Y();
+ if ( GetView()->TryContextMenuInterception( *pPopupMenu, pMenu, aEvent ) )
+ {
+ if ( pMenu )
+ {
+ delete pPopupMenu;
+ pPopupMenu = (PopupMenu*) pMenu;
+ }
+ }
+
+ pPopupMenu->SetSelectHdl(LINK(this, EditWindow, MenuSelectHdl));
+
+ pPopupMenu->Execute( this, aPoint );
+ delete pPopupMenu;
+ }
+ else*/ if (mpEditView)
+ mpEditView->Command( rCEvt );
+ else
+ Window::Command (rCEvt);
+
+}
+IMPL_LINK_INLINE_START( EditWindow, MenuSelectHdl, Menu *, EMPTYARG )
+{
+ /* SmViewShell *pViewSh = rCmdBox.GetView();
+ if (pViewSh)
+ pViewSh->GetViewFrame()->GetDispatcher()->Execute(
+ SID_INSERTCOMMAND, SFX_CALLMODE_STANDARD,
+ new SfxInt16Item(SID_INSERTCOMMAND, pMenu->GetCurItemId()), 0L);
+*/
+ return 0;
+}
+IMPL_LINK_INLINE_END( EditWindow, MenuSelectHdl, Menu *, EMPTYARG )
+
+void EditWindow::KeyInput(const KeyEvent& )
+{
+ /* if (rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE)
+ {
+ BOOL bCallBase = TRUE;
+ SfxViewShell* pViewShell = SfxViewShell::Current();
+ if ( pViewShell && pViewShell->ISA(SmViewShell) )
+ {
+ SmDocShell* pDocSh = (SmDocShell*) pViewShell->GetViewFrame()->GetObjectShell();
+ if (pDocSh)
+ {
+ // fuert zum (sofortigen) Zerstoeren von this!
+ pDocSh->DoInPlaceActivate( FALSE );
+ bCallBase = FALSE;
+ }
+ }
+ if ( bCallBase )
+ Window::KeyInput( rKEvt );
+ }
+ else
+ {
+ // Timer neu starten, um den Handler (auch bei lngeren Eingaben)
+ // mglichst nur einmal am Ende aufzurufen.
+ aCursorMoveTimer.Start();
+
+ DBG_ASSERT( mpEditView, "EditView missing (NULL pointer)" );
+ if (!mpEditView)
+ CreateEditView();
+ if ( !mpEditView->PostKeyEvent(rKEvt) )
+ {
+ if ( !SfxViewShell::Current()->KeyInput(rKEvt) )
+ {
+ // fuert bei F1 (Hilfe) zum Zerstoeren von this!
+ Flush();
+ if ( aModifyTimer.IsActive() )
+ aModifyTimer.Stop();
+ Window::KeyInput(rKEvt);
+ }
+ else
+ {
+ //SFX hat evtl. Slot an der View gecallt und dabei (wg. Hack
+ //im SFX) den Focus auf die View gesetzt
+ SfxViewShell* pVShell = SfxViewShell::Current();
+ if ( pVShell && pVShell->ISA(SmViewShell) &&
+ ((SmViewShell*)pVShell)->GetGraphicWindow().HasFocus() )
+ {
+ GrabFocus();
+ }
+ }
+ }
+ else
+ {
+ // have doc-shell modified only for formula input/change and not
+ // cursor travelling and such things...
+ SmDocShell *pDocShell = GetDoc();
+ if (pDocShell)
+ pDocShell->SetModified( GetEditEngine()->IsModified() );
+
+ aModifyTimer.Start();
+ }
+ }
+ */
+}
+
+
+
+
+void EditWindow::Paint(const Rectangle& rRect)
+{
+ if (!mpEditView)
+ CreateEditView();
+ mpEditView->Paint(rRect);
+}
+
+
+
+
+void EditWindow::CreateEditView (void)
+{
+ EditEngine* pEditEngine = GetEditEngine();
+
+ //! pEditEngine and mpEditView may be 0.
+ //! For example when the program is used by the document-converter
+ if (mpEditView==NULL && pEditEngine!=NULL)
+ {
+ mpEditView = new EditView (pEditEngine, this);
+ pEditEngine->InsertView (mpEditView);
+
+ if (mpVerticalScrollBar == NULL)
+ mpVerticalScrollBar = new ScrollBar (
+ this, WinBits(WB_VSCROLL | WB_DRAG));
+ if (mpHorizontalScrollBar == NULL)
+ mpHorizontalScrollBar = new ScrollBar (
+ this, WinBits(WB_HSCROLL | WB_DRAG));
+ if (mpScrollBox == NULL)
+ mpScrollBox = new ScrollBarBox (this);
+ mpVerticalScrollBar->SetScrollHdl(LINK(this, EditWindow, ScrollHdl));
+ mpHorizontalScrollBar->SetScrollHdl(LINK(this, EditWindow, ScrollHdl));
+
+ mpEditView->SetOutputArea(AdjustScrollBars());
+
+ ESelection eSelection;
+
+ mpEditView->SetSelection(eSelection);
+ Update();
+ mpEditView->ShowCursor(TRUE, TRUE);
+
+ pEditEngine->SetStatusEventHdl(
+ LINK(this, EditWindow, EditStatusHdl));
+ SetPointer(mpEditView->GetPointer());
+
+ SetScrollBarRanges();
+ }
+}
+
+
+
+
+IMPL_LINK( EditWindow, EditStatusHdl, EditStatus *, EMPTYARG )
+{
+ if (!mpEditView)
+ return 1;
+ else
+ {
+ SetScrollBarRanges();
+ return 0;
+ }
+}
+
+IMPL_LINK_INLINE_START( EditWindow, ScrollHdl, ScrollBar *, EMPTYARG )
+{
+ DBG_ASSERT(mpEditView, "EditView missing");
+ if (mpEditView)
+ {
+ mpEditView->SetVisArea(Rectangle(Point(mpHorizontalScrollBar->GetThumbPos(),
+ mpVerticalScrollBar->GetThumbPos()),
+ mpEditView->GetVisArea().GetSize()));
+ mpEditView->Invalidate();
+ }
+ return 0;
+}
+IMPL_LINK_INLINE_END( EditWindow, ScrollHdl, ScrollBar *, EMPTYARG )
+
+Rectangle EditWindow::AdjustScrollBars()
+{
+ const Size aOut( GetOutputSizePixel() );
+ Point aPoint;
+ Rectangle aRect( aPoint, aOut );
+
+ if (mpVerticalScrollBar && mpHorizontalScrollBar && mpScrollBox)
+ {
+ const long nTmp = GetSettings().GetStyleSettings().GetScrollBarSize();
+ Point aPt( aRect.TopRight() ); aPt.X() -= nTmp -1L;
+ mpVerticalScrollBar->SetPosSizePixel( aPt, Size(nTmp, aOut.Height() - nTmp));
+
+ aPt = aRect.BottomLeft(); aPt.Y() -= nTmp - 1L;
+ mpHorizontalScrollBar->SetPosSizePixel( aPt, Size(aOut.Width() - nTmp, nTmp));
+
+ aPt.X() = mpHorizontalScrollBar->GetSizePixel().Width();
+ aPt.Y() = mpVerticalScrollBar->GetSizePixel().Height();
+ mpScrollBox->SetPosSizePixel(aPt, Size(nTmp, nTmp ));
+
+ aRect.Right() = aPt.X() - 2;
+ aRect.Bottom() = aPt.Y() - 2;
+ }
+ return aRect;
+}
+
+void EditWindow::SetScrollBarRanges()
+{
+ EditEngine* pEditEngine = GetEditEngine();
+ if (mpEditView != NULL && pEditEngine != NULL)
+ {
+ if (mpVerticalScrollBar != NULL)
+ {
+ long nTmp = pEditEngine->GetTextHeight();
+ mpVerticalScrollBar->SetRange(Range(0, nTmp));
+ mpVerticalScrollBar->SetThumbPos(mpEditView->GetVisArea().Top());
+ }
+ if (mpHorizontalScrollBar != NULL)
+ {
+ long nTmp = pEditEngine->GetPaperSize().Width();
+ mpHorizontalScrollBar->SetRange(Range(0,nTmp));
+ mpHorizontalScrollBar->SetThumbPos(mpEditView->GetVisArea().Left());
+ }
+ }
+}
+
+void EditWindow::InitScrollBars()
+{
+ if (mpEditView != NULL)
+ {
+ const Size aOut( mpEditView->GetOutputArea().GetSize() );
+ if (mpVerticalScrollBar != NULL)
+ {
+ mpVerticalScrollBar->SetVisibleSize(aOut.Height());
+ mpVerticalScrollBar->SetPageSize(aOut.Height() * 8 / 10);
+ mpVerticalScrollBar->SetLineSize(aOut.Height() * 2 / 10);
+ }
+
+ if (mpHorizontalScrollBar != NULL)
+ {
+ mpHorizontalScrollBar->SetVisibleSize(aOut.Width());
+ mpHorizontalScrollBar->SetPageSize(aOut.Width() * 8 / 10);
+ mpHorizontalScrollBar->SetLineSize(SCROLL_LINE );
+ }
+
+ SetScrollBarRanges();
+
+ if (mpVerticalScrollBar != NULL)
+ mpVerticalScrollBar->Show();
+ if (mpHorizontalScrollBar != NULL)
+ mpHorizontalScrollBar->Show();
+ if (mpScrollBox != NULL)
+ mpScrollBox->Show();
+ }
+}
+
+
+XubString EditWindow::GetText()
+{
+ String aText;
+ EditEngine *pEditEngine = GetEditEngine();
+ DBG_ASSERT( pEditEngine, "EditEngine missing" );
+ if (pEditEngine)
+ aText = pEditEngine->GetText( LINEEND_LF );
+ return aText;
+}
+
+
+void EditWindow::SetText(const XubString& rText)
+{
+ EditEngine *pEditEngine = GetEditEngine();
+ DBG_ASSERT( pEditEngine, "EditEngine missing" );
+ if (pEditEngine && !pEditEngine->IsModified())
+ {
+ if (!mpEditView)
+ CreateEditView();
+
+ ESelection eSelection = mpEditView->GetSelection();
+
+ pEditEngine->SetText(rText);
+ pEditEngine->ClearModifyFlag();
+
+ //! Hier die Timer neu zu starten verhindert, dass die Handler fr andere
+ //! (im Augenblick nicht mehr aktive) Math Tasks aufgerufen werden.
+ maModifyTimer.Start();
+ maCursorMoveTimer.Start();
+
+ mpEditView->SetSelection(eSelection);
+ }
+}
+
+
+void EditWindow::GetFocus()
+{
+ Window::GetFocus();
+
+ if (!mpEditView)
+ CreateEditView();
+ if (mpEditEngine != NULL)
+ mpEditEngine->SetStatusEventHdl(
+ LINK(this, EditWindow, EditStatusHdl));
+}
+
+
+void EditWindow::LoseFocus()
+{
+ if (mpEditEngine != NULL)
+ mpEditEngine->SetStatusEventHdl (Link());
+
+ Window::LoseFocus();
+}
+
+
+BOOL EditWindow::IsAllSelected() const
+{
+ BOOL bRes = FALSE;
+ EditEngine *pEditEngine = ((EditWindow *) this)->GetEditEngine();
+ DBG_ASSERT( mpEditView, "NULL pointer" );
+ DBG_ASSERT( pEditEngine, "NULL pointer" );
+ if (pEditEngine && mpEditView)
+ {
+ ESelection eSelection( mpEditView->GetSelection() );
+ INT32 nParaCnt = pEditEngine->GetParagraphCount();
+ if (!(nParaCnt - 1))
+ {
+ String Text( pEditEngine->GetText( LINEEND_LF ) );
+ bRes = !eSelection.nStartPos && (eSelection.nEndPos == Text.Len () - 1);
+ }
+ else
+ {
+ bRes = !eSelection.nStartPara && (eSelection.nEndPara == nParaCnt - 1);
+ }
+ }
+ return bRes;
+}
+
+void EditWindow::SelectAll()
+{
+ DBG_ASSERT( mpEditView, "NULL pointer" );
+ if (mpEditView)
+ {
+ // 0xFFFF as last two parameters refers to the end of the text
+ mpEditView->SetSelection( ESelection( 0, 0, 0xFFFF, 0xFFFF ) );
+ }
+}
+
+
+void EditWindow::MarkError(const Point &rPos)
+{
+ DBG_ASSERT( mpEditView, "EditView missing" );
+ if (mpEditView)
+ {
+ const int Col = rPos.X();
+ const int Row = rPos.Y() - 1;
+
+ mpEditView->SetSelection(ESelection ( (USHORT)Row, (USHORT)(Col - 1), (USHORT)Row, (USHORT)Col));
+ GrabFocus();
+ }
+}
+
+void EditWindow::SelNextMark()
+{
+ EditEngine *pEditEngine = GetEditEngine();
+ DBG_ASSERT( mpEditView, "NULL pointer" );
+ DBG_ASSERT( pEditEngine, "NULL pointer" );
+ if (pEditEngine && mpEditView)
+ {
+ ESelection eSelection = mpEditView->GetSelection();
+ USHORT Pos = eSelection.nEndPos;
+ String aMark (UniString::CreateFromAscii("<?>"));
+ String aText;
+ USHORT nCounts = pEditEngine->GetParagraphCount();
+
+ while (eSelection.nEndPara < nCounts)
+ {
+ aText = pEditEngine->GetText( eSelection.nEndPara );
+ Pos = aText.Search(aMark, Pos);
+
+ if (Pos != STRING_NOTFOUND)
+ {
+ mpEditView->SetSelection(ESelection (eSelection.nEndPara, Pos, eSelection.nEndPara, Pos + 3));
+ break;
+ }
+
+ Pos = 0;
+ eSelection.nEndPara++;
+ }
+ }
+}
+
+void EditWindow::SelPrevMark()
+{
+ EditEngine *pEditEngine = GetEditEngine();
+ DBG_ASSERT( pEditEngine, "NULL pointer" );
+ DBG_ASSERT( mpEditView, "NULL pointer" );
+ if (pEditEngine && mpEditView)
+ {
+ ESelection eSelection = mpEditView->GetSelection();
+ USHORT Pos = STRING_NOTFOUND;
+ xub_StrLen Max = eSelection.nStartPos;
+ String Text( pEditEngine->GetText( eSelection.nStartPara ) );
+ String aMark (UniString::CreateFromAscii("<?>"));
+ USHORT nCounts = pEditEngine->GetParagraphCount();
+
+ do
+ {
+ USHORT Fnd = Text.Search(aMark, 0);
+
+ while ((Fnd < Max) && (Fnd != STRING_NOTFOUND))
+ {
+ Pos = Fnd;
+ Fnd = Text.Search(aMark, Fnd + 1);
+ }
+
+ if (Pos == STRING_NOTFOUND)
+ {
+ eSelection.nStartPara--;
+ Text = pEditEngine->GetText( eSelection.nStartPara );
+ Max = Text.Len();
+ }
+ }
+ while ((eSelection.nStartPara < nCounts) &&
+ (Pos == STRING_NOTFOUND));
+
+ if (Pos != STRING_NOTFOUND)
+ {
+ mpEditView->SetSelection(ESelection (eSelection.nStartPara, Pos, eSelection.nStartPara, Pos + 3));
+ }
+ }
+}
+
+BOOL EditWindow::HasMark(const String& rText) const
+ // returns true iff 'rText' contains a mark
+{
+ return rText.SearchAscii("<?>", 0) != STRING_NOTFOUND;
+}
+
+void EditWindow::MouseMove(const MouseEvent &rEvt)
+{
+ if (mpEditView)
+ mpEditView->MouseMove(rEvt);
+}
+
+sal_Int8 EditWindow::AcceptDrop( const AcceptDropEvent& )
+{
+ return mpEditView ? /*mpEditView->QueryDrop( rEvt )*/DND_ACTION_NONE: DND_ACTION_NONE;
+}
+
+sal_Int8 EditWindow::ExecuteDrop( const ExecuteDropEvent& )
+{
+ return mpEditView ? /*mpEditView->Drop( rEvt )*/DND_ACTION_NONE : DND_ACTION_NONE;
+}
+
+ESelection EditWindow::GetSelection() const
+{
+ // pointer may be 0 when reloading a document and the old view
+ // was already destroyed
+ //(DBG_ASSERT( mpEditView, "NULL pointer" );
+ ESelection eSel;
+ if (mpEditView)
+ eSel = mpEditView->GetSelection();
+ return eSel;
+}
+
+void EditWindow::SetSelection(const ESelection &rSel)
+{
+ DBG_ASSERT( mpEditView, "NULL pointer" );
+ if (mpEditView)
+ mpEditView->SetSelection(rSel);
+}
+
+BOOL EditWindow::IsEmpty() const
+{
+ EditEngine *pEditEngine = ((EditWindow *) this)->GetEditEngine();
+ return (pEditEngine && (pEditEngine->GetTextLen() == 0)) ? TRUE : FALSE;
+}
+
+BOOL EditWindow::IsSelected() const
+{
+ return mpEditView ? mpEditView->HasSelection() : FALSE;
+}
+
+void EditWindow::Cut()
+{
+ DBG_ASSERT( mpEditView, "EditView missing" );
+ if (mpEditView)
+ mpEditView->Cut();
+}
+
+void EditWindow::Copy()
+{
+ DBG_ASSERT( mpEditView, "EditView missing" );
+ if (mpEditView)
+ mpEditView->Copy();
+}
+
+void EditWindow::Paste()
+{
+ DBG_ASSERT( mpEditView, "EditView missing" );
+ if (mpEditView)
+ mpEditView->Paste();
+}
+
+void EditWindow::Delete()
+{
+ DBG_ASSERT( mpEditView, "EditView missing" );
+ if (mpEditView)
+ mpEditView->DeleteSelected();
+}
+
+void EditWindow::InsertText(const String& Text)
+{
+ DBG_ASSERT( mpEditView, "EditView missing" );
+ ::vos::OGuard aGuard (::Application::GetSolarMutex());
+ if (mpEditView)
+ mpEditView->InsertText(Text);
+}
+
+
+
+} } // end of namespace ::sd::notes
diff --git a/sd/source/ui/notes/EditWindow.hxx b/sd/source/ui/notes/EditWindow.hxx
new file mode 100755
index 000000000000..010a6bd09697
--- /dev/null
+++ b/sd/source/ui/notes/EditWindow.hxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SD_EDIT_WINDOW_HXX
+#define SD_EDIT_WINDOW_HXX
+
+#include <vcl/window.hxx>
+#include <svtools/transfer.hxx>
+#include <vcl/timer.hxx>
+#include <editeng/editdata.hxx>
+#include <svtools/colorcfg.hxx>
+
+class EditEngine;
+class EditStatus;
+class EditView;
+class Menu;
+class ScrollBar;
+class ScrollBarBox;
+class SfxItemPool;
+class Timer;
+
+
+namespace sd { namespace notes {
+
+class EditWindow
+ : public Window,
+ public DropTargetHelper
+{
+public:
+ EditWindow (Window* pParentWindow, SfxItemPool* pItemPool);
+ ~EditWindow (void);
+
+ void InsertText (const String &rText);
+
+ using Window::GetText;
+private:
+ EditView* mpEditView;
+ EditEngine* mpEditEngine;
+ SfxItemPool* mpEditEngineItemPool;
+ ScrollBar* mpHorizontalScrollBar;
+ ScrollBar* mpVerticalScrollBar;
+ ScrollBarBox* mpScrollBox;
+ Timer maModifyTimer;
+ Timer maCursorMoveTimer;
+ ESelection maOldSelection;
+
+ virtual void KeyInput(const KeyEvent& rKEvt);
+ virtual void Command(const CommandEvent& rCEvt);
+ DECL_LINK(MenuSelectHdl, Menu *);
+
+ virtual void DataChanged( const DataChangedEvent& );
+ virtual void Resize();
+ virtual void MouseMove(const MouseEvent &rEvt);
+ virtual void MouseButtonUp(const MouseEvent &rEvt);
+ virtual void MouseButtonDown(const MouseEvent &rEvt);
+
+ virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
+ virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
+ virtual void Paint(const Rectangle& rRect);
+
+ DECL_LINK(EditStatusHdl ,EditStatus *);
+ DECL_LINK(ScrollHdl, ScrollBar *);
+
+ void CreateEditView();
+
+ Rectangle AdjustScrollBars();
+ void SetScrollBarRanges();
+ void InitScrollBars();
+
+ // SmDocShell * GetDoc();
+ // SmViewShell * GetView();
+ EditView* GetEditView (void);
+ EditEngine* GetEditEngine (void);
+ EditEngine* CreateEditEngine (void);
+
+ // Window
+ virtual void SetText(const XubString &rText);
+ virtual XubString GetText();
+ virtual void GetFocus();
+ virtual void LoseFocus();
+
+ ESelection GetSelection() const;
+ void SetSelection(const ESelection &rSel);
+
+ BOOL IsEmpty() const;
+ BOOL IsSelected() const;
+ BOOL IsAllSelected() const;
+ void Cut();
+ void Copy();
+ void Paste();
+ void Delete();
+ void SelectAll();
+ void MarkError(const Point &rPos);
+ void SelNextMark();
+ void SelPrevMark();
+ BOOL HasMark(const String &rText) const;
+
+ void ApplyColorConfigValues( const svtools::ColorConfig &rColorCfg );
+};
+
+} } // end of namespace ::sd::notes
+
+#endif
+
diff --git a/sd/source/ui/notes/NotesChildWindow.cxx b/sd/source/ui/notes/NotesChildWindow.cxx
new file mode 100755
index 000000000000..d62fc2f25e4b
--- /dev/null
+++ b/sd/source/ui/notes/NotesChildWindow.cxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+
+#include "NotesChildWindow.hxx"
+#include "NotesDockingWindow.hxx"
+
+#include "sdresid.hxx"
+#include "app.hrc"
+#include "sfx2/app.hxx"
+
+namespace sd { namespace notes {
+
+NotesChildWindow::NotesChildWindow (
+ ::Window* _pParent,
+ USHORT nId,
+ SfxBindings* pBindings,
+ SfxChildWinInfo* pInfo)
+ : SfxChildWindow (_pParent, nId)
+{
+ pWindow = new NotesDockingWindow (pBindings, this, _pParent);
+ eChildAlignment = SFX_ALIGN_BOTTOM;
+ static_cast<SfxDockingWindow*>(pWindow)->Initialize(pInfo);
+};
+
+
+
+
+NotesChildWindow::~NotesChildWindow()
+{}
+
+
+SFX_IMPL_DOCKINGWINDOW(NotesChildWindow, SID_NOTES_WINDOW)
+
+
+
+} } // end of namespace ::sd::notes
diff --git a/sd/source/ui/notes/NotesChildWindow.src b/sd/source/ui/notes/NotesChildWindow.src
new file mode 100755
index 000000000000..f01a258bf812
--- /dev/null
+++ b/sd/source/ui/notes/NotesChildWindow.src
@@ -0,0 +1,45 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "app.hrc"
+#include "NotesChildWindow.hrc"
+
+DockingWindow FLT_WIN_NOTES
+{
+ HelpID = SID_NOTES_WINDOW ;
+ Border = TRUE ;
+ Hide = FALSE ;
+ SVLook = TRUE ;
+ Sizeable = TRUE ;
+ Moveable = TRUE ;
+ Closeable = TRUE ;
+ Zoomable = TRUE ;
+ Dockable = TRUE ;
+ EnableResizing = TRUE ;
+ Size = MAP_APPFONT ( 140 , 120 ) ;
+ Text [ en-US ] = "Notes Window" ;
+};
diff --git a/sd/source/ui/notes/NotesDockingWindow.cxx b/sd/source/ui/notes/NotesDockingWindow.cxx
new file mode 100755
index 000000000000..2464696c4eff
--- /dev/null
+++ b/sd/source/ui/notes/NotesDockingWindow.cxx
@@ -0,0 +1,114 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+
+#include "NotesDockingWindow.hxx"
+#include "NotesChildWindow.hrc"
+
+#include "EditWindow.hxx"
+#include "TextLogger.hxx"
+#include <svx/dlgctrl.hxx>
+#include <sfx2/bindings.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/viewfrm.hxx>
+#include "DrawViewShell.hxx"
+#ifndef SD_DRAW_DOC_HXX
+#include "drawdoc.hxx"
+#endif
+#include "sdresid.hxx"
+#include "ViewShellBase.hxx"
+
+namespace sd { namespace notes {
+
+NotesDockingWindow::NotesDockingWindow (
+ SfxBindings *_pBindings,
+ SfxChildWindow *pChildWindow,
+ Window* _pParent)
+ : SfxDockingWindow (_pBindings, pChildWindow, _pParent,
+ SdResId(FLT_WIN_NOTES))
+{
+ ViewShellBase* pBase = ViewShellBase::GetViewShellBase (
+ _pBindings->GetDispatcher()->GetFrame());
+ if (pBase != NULL)
+ {
+ SdDrawDocument* pDocument = pBase->GetDocument();
+ mpEditWindow = new EditWindow (this, &pDocument->GetPool());
+ mpEditWindow->Show();
+ TextLogger::Instance().ConnectToEditWindow (mpEditWindow);
+ }
+}
+
+
+
+
+NotesDockingWindow::~NotesDockingWindow (void)
+{
+ delete mpEditWindow;
+}
+
+
+
+
+void NotesDockingWindow::Paint (const Rectangle& rBoundingBox)
+{
+ SfxDockingWindow::Paint (rBoundingBox);
+
+ Size aWindowSize (GetOutputSizePixel());
+ Rectangle aBBox;
+ Point aPosition(10,aWindowSize.Height()/2);
+ String aString (UniString::CreateFromAscii("Bottom Panel Docking Window"));
+ if (GetTextBoundRect (aBBox, aString))
+ aPosition = Point (
+ (aWindowSize.Width()-aBBox.GetWidth())/2,
+ (aWindowSize.Height()-aBBox.GetHeight())/2);
+
+ DrawText (aPosition, aString);
+}
+
+
+
+
+void NotesDockingWindow::Resize (void)
+{
+ SfxDockingWindow::Resize();
+
+ Size aWinSize (GetOutputSizePixel());
+
+ if (mpEditWindow != NULL)
+ {
+ mpEditWindow->SetPosSizePixel (
+ Point(0,0),
+ aWinSize);
+ }
+}
+
+
+
+} } // end of namespace ::sd::notes
+
diff --git a/sd/source/ui/notes/NotesDockingWindow.hxx b/sd/source/ui/notes/NotesDockingWindow.hxx
new file mode 100755
index 000000000000..b26756c14e30
--- /dev/null
+++ b/sd/source/ui/notes/NotesDockingWindow.hxx
@@ -0,0 +1,56 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SD_TPV_BOTTOM_DOCKING_WINDOW_HXX_
+#define SD_TPV_BOTTOM_DOCKING_WINDOW_HXX_
+
+#include <sfx2/dockwin.hxx>
+
+namespace sd { namespace notes {
+
+class EditWindow;
+
+class NotesDockingWindow
+ : public SfxDockingWindow
+{
+public:
+ NotesDockingWindow (
+ SfxBindings *pBindings,
+ SfxChildWindow *pChildWindow,
+ Window* pParent);
+ virtual ~NotesDockingWindow (void);
+
+ virtual void Paint (const Rectangle& rBoundingBox);
+ virtual void Resize (void);
+
+private:
+ EditWindow* mpEditWindow;
+};
+
+} } // end of namespace ::sd::notes
+
+#endif
diff --git a/sd/source/ui/notes/TextLogger.cxx b/sd/source/ui/notes/TextLogger.cxx
new file mode 100755
index 000000000000..bf73b67aad23
--- /dev/null
+++ b/sd/source/ui/notes/TextLogger.cxx
@@ -0,0 +1,129 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+
+#include "TextLogger.hxx"
+
+#include "EditWindow.hxx"
+#include <vos/mutex.hxx>
+#include <vcl/svapp.hxx>
+
+namespace sd { namespace notes {
+
+TextLogger* TextLogger::spInstance = NULL;
+
+TextLogger& TextLogger::Instance (void)
+{
+ if (spInstance == NULL)
+ {
+ ::vos::OGuard aGuard (::Application::GetSolarMutex());
+ if (spInstance == NULL)
+ spInstance = new TextLogger ();
+ }
+ return *spInstance;
+}
+
+
+
+
+TextLogger::TextLogger (void)
+ : mpEditWindow (NULL)
+{
+}
+
+
+
+
+void TextLogger::AppendText (const char* sText)
+{
+ OSL_TRACE (sText);
+ if (mpEditWindow != NULL)
+ mpEditWindow->InsertText (UniString::CreateFromAscii(sText));
+}
+
+
+
+
+void TextLogger::AppendText (const String& sText)
+{
+ ByteString s(sText, RTL_TEXTENCODING_ISO_8859_1);
+ OSL_TRACE (s.GetBuffer());
+ if (mpEditWindow != NULL)
+ mpEditWindow->InsertText (sText);
+}
+
+
+
+
+void TextLogger::AppendNumber (long int nValue)
+{
+ AppendText (String::CreateFromInt32(nValue));
+}
+
+
+
+
+void TextLogger::ConnectToEditWindow (EditWindow* pEditWindow)
+{
+ if (mpEditWindow != pEditWindow)
+ {
+ if (pEditWindow != NULL)
+ pEditWindow->AddEventListener(
+ LINK(this, TextLogger, WindowEventHandler));
+ else
+ mpEditWindow->RemoveEventListener(
+ LINK(this, TextLogger, WindowEventHandler));
+
+ mpEditWindow = pEditWindow;
+ }
+}
+
+
+
+
+IMPL_LINK(TextLogger, WindowEventHandler, VclWindowEvent*, pEvent)
+{
+ if (pEvent != NULL)
+ {
+ DBG_ASSERT(static_cast<VclWindowEvent*>(pEvent)->GetWindow()
+ == mpEditWindow,
+ "TextLogger: received event from unknown window");
+ switch (pEvent->GetId())
+ {
+ case VCLEVENT_WINDOW_CLOSE:
+ case VCLEVENT_OBJECT_DYING:
+ mpEditWindow = NULL;
+ break;
+ }
+ }
+ return TRUE;
+}
+
+
+} } // end of namespace ::sd::notes
diff --git a/sd/source/ui/notes/makefile.mk b/sd/source/ui/notes/makefile.mk
new file mode 100755
index 000000000000..a4b0e457cdc3
--- /dev/null
+++ b/sd/source/ui/notes/makefile.mk
@@ -0,0 +1,60 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PROJECTPCH=sd
+PROJECTPCHSOURCE=$(PRJ)$/util$/sd
+PRJNAME=sd
+TARGET=notes
+ENABLE_EXCEPTIONS=TRUE
+AUTOSEG=true
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/util$/makefile.pmk
+
+# --- Files --------------------------------------------------------
+
+SLOFILES = \
+ $(SLO)$/EditWindow.obj \
+ $(SLO)$/NotesChildWindow.obj \
+ $(SLO)$/NotesDockingWindow.obj \
+ $(SLO)$/TextLogger.obj
+
+
+
+EXCEPTIONSFILES=
+
+SRS2NAME = notes
+SRC2FILES = NotesChildWindow.src
+
+# --- Tagets -------------------------------------------------------
+
+.INCLUDE : target.mk
+