15b190011SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
35b190011SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
45b190011SAndrew Rist * or more contributor license agreements. See the NOTICE file
55b190011SAndrew Rist * distributed with this work for additional information
65b190011SAndrew Rist * regarding copyright ownership. The ASF licenses this file
75b190011SAndrew Rist * to you under the Apache License, Version 2.0 (the
85b190011SAndrew Rist * "License"); you may not use this file except in compliance
95b190011SAndrew Rist * with the License. You may obtain a copy of the License at
105b190011SAndrew Rist *
115b190011SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
125b190011SAndrew Rist *
135b190011SAndrew Rist * Unless required by applicable law or agreed to in writing,
145b190011SAndrew Rist * software distributed under the License is distributed on an
155b190011SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
165b190011SAndrew Rist * KIND, either express or implied. See the License for the
175b190011SAndrew Rist * specific language governing permissions and limitations
185b190011SAndrew Rist * under the License.
195b190011SAndrew Rist *
205b190011SAndrew Rist *************************************************************/
215b190011SAndrew Rist
225b190011SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include "precompiled_sd.hxx"
25cdf0e10cSrcweir
26cdf0e10cSrcweir #include <editeng/fontitem.hxx>
27cdf0e10cSrcweir #include <editeng/eeitem.hxx>
28cdf0e10cSrcweir #include <editeng/fhgtitem.hxx>
29cdf0e10cSrcweir #include <editeng/bulitem.hxx>
30cdf0e10cSrcweir #include <editeng/udlnitem.hxx>
31cdf0e10cSrcweir #include <editeng/shdditem.hxx>
32cdf0e10cSrcweir #include <editeng/flditem.hxx>
33cdf0e10cSrcweir #include <editeng/frmdir.hxx>
34cdf0e10cSrcweir #include <editeng/frmdiritem.hxx>
35cdf0e10cSrcweir #include <editeng/langitem.hxx>
36cdf0e10cSrcweir #include <editeng/adjitem.hxx>
37cdf0e10cSrcweir #include <editeng/editview.hxx>
38cdf0e10cSrcweir #include <svx/svdview.hxx>
39cdf0e10cSrcweir #include <svx/sdrpaintwindow.hxx>
40cdf0e10cSrcweir #include <svx/sdr/overlay/overlaymanager.hxx>
41cdf0e10cSrcweir #include <editeng/editstat.hxx> //EditEngine flags
42cdf0e10cSrcweir #include <editeng/outliner.hxx>
43cdf0e10cSrcweir #include <editeng/editeng.hxx>
44cdf0e10cSrcweir #include <editeng/editobj.hxx>
45cdf0e10cSrcweir #include <editeng/unolingu.hxx>
46cdf0e10cSrcweir #include <editeng/outlobj.hxx>
47cdf0e10cSrcweir #include <editeng/postitem.hxx>
48cdf0e10cSrcweir #include <editeng/wghtitem.hxx>
49cdf0e10cSrcweir #include <editeng/udlnitem.hxx>
50cdf0e10cSrcweir #include <editeng/crsditem.hxx>
51cdf0e10cSrcweir #include <svx/svxids.hrc>
52cdf0e10cSrcweir #include <svtools/langtab.hxx>
53cdf0e10cSrcweir #include <svl/slstitm.hxx>
54cdf0e10cSrcweir #include <unotools/securityoptions.hxx>
55cdf0e10cSrcweir #include <unotools/useroptions.hxx>
56cdf0e10cSrcweir #include <svl/languageoptions.hxx>
57cdf0e10cSrcweir #include <svl/zforlist.hxx>
58cdf0e10cSrcweir #include <svtools/svmedit.hxx>
59cdf0e10cSrcweir
60cdf0e10cSrcweir #include <linguistic/lngprops.hxx>
61cdf0e10cSrcweir
62cdf0e10cSrcweir #include <sfx2/request.hxx>
63cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
64cdf0e10cSrcweir #include <sfx2/bindings.hxx>
65cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
66cdf0e10cSrcweir #include <sfx2/mnumgr.hxx>
67cdf0e10cSrcweir
68cdf0e10cSrcweir #include <vcl/vclenum.hxx>
69cdf0e10cSrcweir #include <vcl/edit.hxx>
70cdf0e10cSrcweir #include <vcl/help.hxx>
71cdf0e10cSrcweir #include <vcl/scrbar.hxx>
72cdf0e10cSrcweir #include <vcl/button.hxx>
73cdf0e10cSrcweir #include <vcl/svapp.hxx>
74cdf0e10cSrcweir #include <vcl/gradient.hxx>
75cdf0e10cSrcweir #include <vcl/salbtype.hxx> // FRound
76cdf0e10cSrcweir #include <vcl/cursor.hxx>
77cdf0e10cSrcweir
78cdf0e10cSrcweir #include <basegfx/matrix/b2dhommatrix.hxx>
79cdf0e10cSrcweir #include <basegfx/tuple/b2dtuple.hxx>
80cdf0e10cSrcweir #include <basegfx/polygon/b2dpolygontools.hxx>
81cdf0e10cSrcweir
82cdf0e10cSrcweir #include "annotations.hrc"
83cdf0e10cSrcweir #include "annotationwindow.hxx"
84cdf0e10cSrcweir #include "annotationmanagerimpl.hxx"
85cdf0e10cSrcweir
86cdf0e10cSrcweir #include "DrawDocShell.hxx"
87cdf0e10cSrcweir #include "ViewShell.hxx"
88cdf0e10cSrcweir #include "drawdoc.hxx"
89cdf0e10cSrcweir #include "View.hxx"
90cdf0e10cSrcweir #include "textapi.hxx"
91cdf0e10cSrcweir #include "sdresid.hxx"
92cdf0e10cSrcweir
93cdf0e10cSrcweir using rtl::OUString;
94cdf0e10cSrcweir using namespace ::sd;
95cdf0e10cSrcweir using namespace ::com::sun::star;
96cdf0e10cSrcweir using namespace ::com::sun::star::uno;
97cdf0e10cSrcweir using namespace ::com::sun::star::office;
98cdf0e10cSrcweir using namespace ::com::sun::star::text;
99cdf0e10cSrcweir
100cdf0e10cSrcweir #define METABUTTON_WIDTH 16
101cdf0e10cSrcweir #define METABUTTON_HEIGHT 18
102cdf0e10cSrcweir #define METABUTTON_AREA_WIDTH 30
103cdf0e10cSrcweir #define POSTIT_META_HEIGHT (sal_Int32) 30
104cdf0e10cSrcweir
105cdf0e10cSrcweir #define EMPTYSTRING rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(""))
106cdf0e10cSrcweir
107cdf0e10cSrcweir namespace sd {
108cdf0e10cSrcweir
109cdf0e10cSrcweir extern OUString getAnnotationDateTimeString( const Reference< XAnnotation >& xAnnotation );
110cdf0e10cSrcweir extern SfxItemPool* GetAnnotationPool();
111cdf0e10cSrcweir extern com::sun::star::util::DateTime getCurrentDateTime();
112cdf0e10cSrcweir
ColorFromAlphaColor(sal_uInt8 aTransparency,Color & aFront,Color & aBack)113cdf0e10cSrcweir Color ColorFromAlphaColor(sal_uInt8 aTransparency, Color &aFront, Color &aBack )
114cdf0e10cSrcweir {
115cdf0e10cSrcweir return Color((sal_uInt8)(aFront.GetRed() * aTransparency/(double)255 + aBack.GetRed() * (1-aTransparency/(double)255)),
116cdf0e10cSrcweir (sal_uInt8)(aFront.GetGreen() * aTransparency/(double)255 + aBack.GetGreen() * (1-aTransparency/(double)255)),
117cdf0e10cSrcweir (sal_uInt8)(aFront.GetBlue() * aTransparency/(double)255 + aBack.GetBlue() * (1-aTransparency/(double)255)));
118cdf0e10cSrcweir }
119cdf0e10cSrcweir
120cdf0e10cSrcweir /************ AnnotationTextWindow **********************************/
121cdf0e10cSrcweir
AnnotationTextWindow(AnnotationWindow * pParent,WinBits nBits)122cdf0e10cSrcweir AnnotationTextWindow::AnnotationTextWindow( AnnotationWindow* pParent, WinBits nBits )
123cdf0e10cSrcweir : Control(pParent, nBits)
124cdf0e10cSrcweir , mpOutlinerView(0)
125cdf0e10cSrcweir , mpAnnotationWindow( pParent )
126cdf0e10cSrcweir {
127cdf0e10cSrcweir }
128cdf0e10cSrcweir
~AnnotationTextWindow()129cdf0e10cSrcweir AnnotationTextWindow::~AnnotationTextWindow()
130cdf0e10cSrcweir {
131cdf0e10cSrcweir }
132cdf0e10cSrcweir
Paint(const Rectangle & rRect)133cdf0e10cSrcweir void AnnotationTextWindow::Paint( const Rectangle& rRect)
134cdf0e10cSrcweir {
135cdf0e10cSrcweir const bool bHighContrast = Application::GetSettings().GetStyleSettings().GetHighContrastMode();
136cdf0e10cSrcweir if ( !bHighContrast )
137cdf0e10cSrcweir {
138cdf0e10cSrcweir DrawGradient(Rectangle(Point(0,0),PixelToLogic(GetSizePixel())),
139cdf0e10cSrcweir Gradient(GRADIENT_LINEAR,mpAnnotationWindow->maColorLight,mpAnnotationWindow->maColor));
140cdf0e10cSrcweir }
141cdf0e10cSrcweir
142cdf0e10cSrcweir if( mpOutlinerView )
143cdf0e10cSrcweir {
144cdf0e10cSrcweir Color aBackgroundColor( mpAnnotationWindow->maColor );
145cdf0e10cSrcweir if( bHighContrast )
146cdf0e10cSrcweir {
147cdf0e10cSrcweir aBackgroundColor = GetSettings().GetStyleSettings().GetWindowColor();
148cdf0e10cSrcweir }
149cdf0e10cSrcweir
150cdf0e10cSrcweir mpOutlinerView->SetBackgroundColor( aBackgroundColor );
151cdf0e10cSrcweir
152cdf0e10cSrcweir mpOutlinerView->Paint( rRect );
153cdf0e10cSrcweir }
154cdf0e10cSrcweir }
155cdf0e10cSrcweir
KeyInput(const KeyEvent & rKeyEvt)156cdf0e10cSrcweir void AnnotationTextWindow::KeyInput( const KeyEvent& rKeyEvt )
157cdf0e10cSrcweir {
158cdf0e10cSrcweir const KeyCode& rKeyCode = rKeyEvt.GetKeyCode();
159cdf0e10cSrcweir sal_uInt16 nKey = rKeyCode.GetCode();
160cdf0e10cSrcweir
161cdf0e10cSrcweir if ((rKeyCode.IsMod1() && rKeyCode.IsMod2()) && ((nKey == KEY_PAGEUP) || (nKey == KEY_PAGEDOWN)))
162cdf0e10cSrcweir {
163cdf0e10cSrcweir SfxDispatcher* pDispatcher = mpAnnotationWindow->DocShell()->GetViewShell()->GetViewFrame()->GetDispatcher();
164cdf0e10cSrcweir if( pDispatcher )
165cdf0e10cSrcweir pDispatcher->Execute( nKey == KEY_PAGEDOWN ? SID_NEXT_POSTIT : SID_PREVIOUS_POSTIT );
166cdf0e10cSrcweir }
167cdf0e10cSrcweir else if (nKey == KEY_INSERT)
168cdf0e10cSrcweir {
169cdf0e10cSrcweir if (!rKeyCode.IsMod1() && !rKeyCode.IsMod2())
170cdf0e10cSrcweir mpAnnotationWindow->ToggleInsMode();
171cdf0e10cSrcweir }
172cdf0e10cSrcweir else
173cdf0e10cSrcweir {
174cdf0e10cSrcweir long aOldHeight = mpAnnotationWindow->GetPostItTextHeight();
175cdf0e10cSrcweir bool bDone = false;
176cdf0e10cSrcweir
177cdf0e10cSrcweir /// HACK: need to switch off processing of Undo/Redo in Outliner
178cdf0e10cSrcweir if ( !( (nKey == KEY_Z || nKey == KEY_Y) && rKeyCode.IsMod1()) )
179cdf0e10cSrcweir {
180cdf0e10cSrcweir bool bIsProtected = mpAnnotationWindow->IsProtected();
181cdf0e10cSrcweir if (!bIsProtected || (bIsProtected && !mpAnnotationWindow->Engine()->GetEditEngine().DoesKeyChangeText(rKeyEvt)) )
182cdf0e10cSrcweir
183cdf0e10cSrcweir bDone = mpOutlinerView->PostKeyEvent( rKeyEvt );
184cdf0e10cSrcweir }
185cdf0e10cSrcweir if (bDone)
186cdf0e10cSrcweir {
187cdf0e10cSrcweir mpAnnotationWindow->ResizeIfNeccessary(aOldHeight,mpAnnotationWindow->GetPostItTextHeight());
188cdf0e10cSrcweir }
189cdf0e10cSrcweir else
190cdf0e10cSrcweir {
191cdf0e10cSrcweir Control::KeyInput(rKeyEvt);
192cdf0e10cSrcweir }
193cdf0e10cSrcweir }
194cdf0e10cSrcweir }
195cdf0e10cSrcweir
MouseMove(const MouseEvent & rMEvt)196cdf0e10cSrcweir void AnnotationTextWindow::MouseMove( const MouseEvent& rMEvt )
197cdf0e10cSrcweir {
198cdf0e10cSrcweir if ( mpOutlinerView )
199cdf0e10cSrcweir {
200cdf0e10cSrcweir mpOutlinerView->MouseMove( rMEvt );
201cdf0e10cSrcweir SetPointer( mpOutlinerView->GetPointer( rMEvt.GetPosPixel() ) );
202cdf0e10cSrcweir }
203cdf0e10cSrcweir }
204cdf0e10cSrcweir
MouseButtonDown(const MouseEvent & rMEvt)205cdf0e10cSrcweir void AnnotationTextWindow::MouseButtonDown( const MouseEvent& rMEvt )
206cdf0e10cSrcweir {
207cdf0e10cSrcweir GrabFocus();
208cdf0e10cSrcweir if ( mpOutlinerView )
209cdf0e10cSrcweir mpOutlinerView->MouseButtonDown( rMEvt );
210cdf0e10cSrcweir // todo mpOutlinerView->DocView()->GetViewFrame()->GetBindings().InvalidateAll(sal_False);
211cdf0e10cSrcweir }
212cdf0e10cSrcweir
MouseButtonUp(const MouseEvent & rMEvt)213cdf0e10cSrcweir void AnnotationTextWindow::MouseButtonUp( const MouseEvent& rMEvt )
214cdf0e10cSrcweir {
215cdf0e10cSrcweir if ( mpOutlinerView )
216cdf0e10cSrcweir mpOutlinerView->MouseButtonUp( rMEvt );
217cdf0e10cSrcweir }
218cdf0e10cSrcweir
Command(const CommandEvent & rCEvt)219cdf0e10cSrcweir void AnnotationTextWindow::Command( const CommandEvent& rCEvt )
220cdf0e10cSrcweir {
221cdf0e10cSrcweir if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
222cdf0e10cSrcweir {
223cdf0e10cSrcweir mpAnnotationWindow->Command(rCEvt);
224cdf0e10cSrcweir }
225cdf0e10cSrcweir else
226cdf0e10cSrcweir {
227cdf0e10cSrcweir if ( mpOutlinerView )
228cdf0e10cSrcweir mpOutlinerView->Command( rCEvt );
229cdf0e10cSrcweir else
230cdf0e10cSrcweir Window::Command(rCEvt);
231cdf0e10cSrcweir }
232cdf0e10cSrcweir }
233cdf0e10cSrcweir
GetFocus()234cdf0e10cSrcweir void AnnotationTextWindow::GetFocus()
235cdf0e10cSrcweir {
236cdf0e10cSrcweir Window::GetFocus();
237cdf0e10cSrcweir }
238cdf0e10cSrcweir
LoseFocus()239cdf0e10cSrcweir void AnnotationTextWindow::LoseFocus()
240cdf0e10cSrcweir {
241cdf0e10cSrcweir // if ( mpAnnotationWindow )
242cdf0e10cSrcweir // mpAnnotationWindow->UpdateAnnotation();
243cdf0e10cSrcweir
244cdf0e10cSrcweir Window::LoseFocus();
245cdf0e10cSrcweir }
246cdf0e10cSrcweir
GetSurroundingText() const247cdf0e10cSrcweir XubString AnnotationTextWindow::GetSurroundingText() const
248cdf0e10cSrcweir {
249cdf0e10cSrcweir if( mpOutlinerView )
250cdf0e10cSrcweir {
251cdf0e10cSrcweir EditEngine *aEditEngine = mpOutlinerView->GetEditView().GetEditEngine();
252cdf0e10cSrcweir if( mpOutlinerView->HasSelection() )
253cdf0e10cSrcweir return mpOutlinerView->GetSelected();
254cdf0e10cSrcweir else
255cdf0e10cSrcweir {
256cdf0e10cSrcweir ESelection aSelection = mpOutlinerView->GetEditView().GetSelection();
257cdf0e10cSrcweir XubString aStr = aEditEngine->GetText(aSelection.nStartPara);
258cdf0e10cSrcweir return aStr;
259cdf0e10cSrcweir }
260cdf0e10cSrcweir }
261cdf0e10cSrcweir else
262cdf0e10cSrcweir return XubString::EmptyString();
263cdf0e10cSrcweir }
264cdf0e10cSrcweir
GetSurroundingTextSelection() const265cdf0e10cSrcweir Selection AnnotationTextWindow::GetSurroundingTextSelection() const
266cdf0e10cSrcweir {
267cdf0e10cSrcweir if( mpOutlinerView )
268cdf0e10cSrcweir {
269cdf0e10cSrcweir if( mpOutlinerView->HasSelection() )
270cdf0e10cSrcweir return Selection( 0, mpOutlinerView->GetSelected().Len() );
271cdf0e10cSrcweir else
272cdf0e10cSrcweir {
273cdf0e10cSrcweir ESelection aSelection = mpOutlinerView->GetEditView().GetSelection();
274cdf0e10cSrcweir return Selection( aSelection.nStartPos, aSelection.nEndPos );
275cdf0e10cSrcweir }
276cdf0e10cSrcweir }
277cdf0e10cSrcweir else
278cdf0e10cSrcweir return Selection( 0, 0 );
279cdf0e10cSrcweir }
280cdf0e10cSrcweir
281cdf0e10cSrcweir /************** AnnotationWindow***********************************++*/
282cdf0e10cSrcweir
AnnotationWindow(AnnotationManagerImpl & rManager,DrawDocShell * pDocShell,Window * pParent)283cdf0e10cSrcweir AnnotationWindow::AnnotationWindow( AnnotationManagerImpl& rManager, DrawDocShell* pDocShell, Window* pParent )
284cdf0e10cSrcweir : FloatingWindow(pParent, WB_SYSTEMWINDOW|WB_BORDER|WB_NEEDSFOCUS)
285cdf0e10cSrcweir , mrManager( rManager )
286cdf0e10cSrcweir , mpDocShell( pDocShell )
287cdf0e10cSrcweir , mpView( pDocShell->GetViewShell()->GetView() )
288cdf0e10cSrcweir , mpDoc( pDocShell->GetDoc() )
289cdf0e10cSrcweir , mpOutlinerView(0)
290cdf0e10cSrcweir , mpOutliner(0)
291cdf0e10cSrcweir , mpVScrollbar(0)
292cdf0e10cSrcweir , mbReadonly(pDocShell->IsReadOnly())
293cdf0e10cSrcweir , mbProtected(false)
294cdf0e10cSrcweir , mbMouseOverButton(false)
295cdf0e10cSrcweir , mpTextWindow(0)
296cdf0e10cSrcweir , mpMeta(0)
297cdf0e10cSrcweir {
298cdf0e10cSrcweir }
299cdf0e10cSrcweir
~AnnotationWindow()300cdf0e10cSrcweir AnnotationWindow::~AnnotationWindow()
301cdf0e10cSrcweir {
302cdf0e10cSrcweir delete mpMeta;
303cdf0e10cSrcweir delete mpOutlinerView;
304cdf0e10cSrcweir delete mpOutliner;
305cdf0e10cSrcweir delete mpVScrollbar;
306cdf0e10cSrcweir delete mpTextWindow;
307cdf0e10cSrcweir }
308cdf0e10cSrcweir
InitControls()309cdf0e10cSrcweir void AnnotationWindow::InitControls()
310cdf0e10cSrcweir {
311cdf0e10cSrcweir // actual window which holds the user text
312cdf0e10cSrcweir mpTextWindow = new AnnotationTextWindow(this, WB_NODIALOGCONTROL);
313cdf0e10cSrcweir mpTextWindow->SetPointer(Pointer(POINTER_TEXT));
314cdf0e10cSrcweir
315cdf0e10cSrcweir // window control for author and date
316cdf0e10cSrcweir mpMeta = new MultiLineEdit(this,0);
317cdf0e10cSrcweir mpMeta->SetReadOnly();
318cdf0e10cSrcweir mpMeta->SetRightToLeft(Application::GetSettings().GetLayoutRTL());
319cdf0e10cSrcweir mpMeta->AlwaysDisableInput(true);
320cdf0e10cSrcweir mpMeta->SetCallHandlersOnInputDisabled(true);
321cdf0e10cSrcweir
322cdf0e10cSrcweir // mpMeta->AddEventListener( LINK( mpPostItTxt, PostItTxt, WindowEventListener ) );
323cdf0e10cSrcweir // AddEventListener( LINK( mpTextWindow, PostItTxt, WindowEventListener ) );
324cdf0e10cSrcweir
325cdf0e10cSrcweir // we should leave this setting alone, but for this we need a better layout algo
326cdf0e10cSrcweir // with variable meta size height
327cdf0e10cSrcweir AllSettings aSettings = mpMeta->GetSettings();
328cdf0e10cSrcweir StyleSettings aStyleSettings = aSettings.GetStyleSettings();
329cdf0e10cSrcweir Font aFont = aStyleSettings.GetFieldFont();
330cdf0e10cSrcweir aFont.SetHeight(8);
331cdf0e10cSrcweir aStyleSettings.SetFieldFont(aFont);
332cdf0e10cSrcweir aSettings.SetStyleSettings(aStyleSettings);
333cdf0e10cSrcweir mpMeta->SetSettings(aSettings);
334cdf0e10cSrcweir
335cdf0e10cSrcweir mpOutliner = new ::Outliner(GetAnnotationPool(),OUTLINERMODE_TEXTOBJECT);
336cdf0e10cSrcweir Doc()->SetCalcFieldValueHdl( mpOutliner );
337cdf0e10cSrcweir mpOutliner->SetUpdateMode( sal_True );
338cdf0e10cSrcweir Rescale();
339cdf0e10cSrcweir
340cdf0e10cSrcweir OutputDevice* pDev = Doc()->GetRefDevice();
341cdf0e10cSrcweir if( pDev )
342cdf0e10cSrcweir {
343cdf0e10cSrcweir mpOutliner->SetRefDevice( pDev );
344cdf0e10cSrcweir }
345cdf0e10cSrcweir
346cdf0e10cSrcweir mpOutlinerView = new OutlinerView ( mpOutliner, mpTextWindow );
347cdf0e10cSrcweir mpOutliner->InsertView(mpOutlinerView );
348cdf0e10cSrcweir mpTextWindow->SetOutlinerView(mpOutlinerView);
349cdf0e10cSrcweir mpOutlinerView->SetOutputArea( PixelToLogic( Rectangle(0,0,1,1) ) );
350cdf0e10cSrcweir
351cdf0e10cSrcweir // SfxItemSet item(DocShell()->GetPool());
352cdf0e10cSrcweir // item.Put(SvxFontHeightItem(352,100,EE_CHAR_FONTHEIGHT));
353cdf0e10cSrcweir // mpOutlinerView->SetAttribs(item);
354cdf0e10cSrcweir
355cdf0e10cSrcweir // TODO: ??
356cdf0e10cSrcweir EEHorizontalTextDirection aDefHoriTextDir = Application::GetSettings().GetLayoutRTL() ? EE_HTEXTDIR_R2L : EE_HTEXTDIR_L2R;
357cdf0e10cSrcweir mpOutliner->SetDefaultHorizontalTextDirection( aDefHoriTextDir );
358cdf0e10cSrcweir
359cdf0e10cSrcweir //create Scrollbars
360cdf0e10cSrcweir mpVScrollbar = new ScrollBar(this, WB_3DLOOK |WB_VSCROLL|WB_DRAG);
361cdf0e10cSrcweir mpVScrollbar->EnableNativeWidget(false);
362cdf0e10cSrcweir mpVScrollbar->EnableRTL( false );
363cdf0e10cSrcweir mpVScrollbar->SetScrollHdl(LINK(this, AnnotationWindow, ScrollHdl));
364cdf0e10cSrcweir mpVScrollbar->EnableDrag();
365cdf0e10cSrcweir // mpVScrollbar->AddEventListener( LINK( this, AnnotationWindow, WindowEventListener ) );
366cdf0e10cSrcweir
367cdf0e10cSrcweir sal_uLong nCntrl = mpOutliner->GetControlWord();
368cdf0e10cSrcweir nCntrl |= EE_CNTRL_PASTESPECIAL | EE_CNTRL_AUTOCORRECT | EV_CNTRL_AUTOSCROLL | EE_CNTRL_NOCOLORS;
369cdf0e10cSrcweir /*
370cdf0e10cSrcweir if (pVOpt->IsFieldShadings())
371cdf0e10cSrcweir nCntrl |= EE_CNTRL_MARKFIELDS;
372cdf0e10cSrcweir else
373cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_MARKFIELDS;
374cdf0e10cSrcweir if (pVOpt->IsOnlineSpell())
375cdf0e10cSrcweir nCntrl |= EE_CNTRL_ONLINESPELLING;
376cdf0e10cSrcweir else
377cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_ONLINESPELLING;
378cdf0e10cSrcweir */
379cdf0e10cSrcweir mpOutliner->SetControlWord(nCntrl);
380cdf0e10cSrcweir // mpOutliner->SetFlatMode( sal_True );
381cdf0e10cSrcweir
382cdf0e10cSrcweir Engine()->SetModifyHdl( Link() );
383cdf0e10cSrcweir Engine()->EnableUndo( sal_False );
384cdf0e10cSrcweir
385cdf0e10cSrcweir Engine()->ClearModifyFlag();
386cdf0e10cSrcweir Engine()->GetUndoManager().Clear();
387cdf0e10cSrcweir Engine()->EnableUndo( sal_True );
388cdf0e10cSrcweir Engine()->SetModifyHdl( LINK( this, AnnotationWindow, ModifyHdl ) );
389cdf0e10cSrcweir
390cdf0e10cSrcweir Invalidate();
391cdf0e10cSrcweir
392cdf0e10cSrcweir SetLanguage(GetLanguage());
393cdf0e10cSrcweir
394cdf0e10cSrcweir mpMeta->Show();
395cdf0e10cSrcweir mpVScrollbar->Show();
396cdf0e10cSrcweir mpTextWindow->Show();
397cdf0e10cSrcweir }
398cdf0e10cSrcweir
StartEdit()399cdf0e10cSrcweir void AnnotationWindow::StartEdit()
400cdf0e10cSrcweir {
401*7a980842SDamjanJovanovic getView()->SetSelection(ESelection(EE_PARA_MAX, EE_INDEX_MAX));
402cdf0e10cSrcweir getView()->ShowCursor();
403cdf0e10cSrcweir }
404cdf0e10cSrcweir
Rescale()405cdf0e10cSrcweir void AnnotationWindow::Rescale()
406cdf0e10cSrcweir {
407cdf0e10cSrcweir MapMode aMode(MAP_100TH_MM);
408cdf0e10cSrcweir aMode.SetOrigin( Point() );
409cdf0e10cSrcweir //aMode.SetScaleX( aMode.GetScaleX() * Fraction( 8, 10 ) );
410cdf0e10cSrcweir //aMode.SetScaleY( aMode.GetScaleY() * Fraction( 8, 10 ) );
411cdf0e10cSrcweir mpOutliner->SetRefMapMode( aMode );
412cdf0e10cSrcweir SetMapMode( aMode );
413cdf0e10cSrcweir mpTextWindow->SetMapMode( aMode );
414cdf0e10cSrcweir if ( mpMeta )
415cdf0e10cSrcweir {
416cdf0e10cSrcweir Font aFont( mpMeta->GetSettings().GetStyleSettings().GetFieldFont() );
417cdf0e10cSrcweir sal_Int32 nHeight = aFont.GetHeight();
418cdf0e10cSrcweir nHeight = nHeight * aMode.GetScaleY().GetNumerator() / aMode.GetScaleY().GetDenominator();
419cdf0e10cSrcweir aFont.SetHeight( nHeight );
420cdf0e10cSrcweir mpMeta->SetControlFont( aFont );
421cdf0e10cSrcweir }
422cdf0e10cSrcweir }
423cdf0e10cSrcweir
DoResize()424cdf0e10cSrcweir void AnnotationWindow::DoResize()
425cdf0e10cSrcweir {
426cdf0e10cSrcweir unsigned long aWidth = GetSizePixel().Width();
427cdf0e10cSrcweir long aHeight = GetSizePixel().Height() - POSTIT_META_HEIGHT;
428cdf0e10cSrcweir
429cdf0e10cSrcweir mpOutliner->SetPaperSize( PixelToLogic( Size(aWidth,aHeight) ) ) ;
430cdf0e10cSrcweir long aTextHeight = LogicToPixel( mpOutliner->CalcTextSize()).Height();
431cdf0e10cSrcweir
432cdf0e10cSrcweir if( aTextHeight > aHeight )
433cdf0e10cSrcweir { // we need vertical scrollbars and have to reduce the width
434cdf0e10cSrcweir aWidth -= GetScrollbarWidth();
435cdf0e10cSrcweir mpVScrollbar->Show();
436cdf0e10cSrcweir }
437cdf0e10cSrcweir else
438cdf0e10cSrcweir {
439cdf0e10cSrcweir mpVScrollbar->Hide();
440cdf0e10cSrcweir }
441cdf0e10cSrcweir
442cdf0e10cSrcweir mpTextWindow->SetPosSizePixel(0,0,aWidth, aHeight);
443cdf0e10cSrcweir
444cdf0e10cSrcweir if( mbReadonly )
445cdf0e10cSrcweir mpMeta->SetPosSizePixel(0,aHeight,GetSizePixel().Width(),POSTIT_META_HEIGHT);
446cdf0e10cSrcweir else
447cdf0e10cSrcweir mpMeta->SetPosSizePixel(0,aHeight,GetSizePixel().Width()-METABUTTON_AREA_WIDTH,POSTIT_META_HEIGHT);
448cdf0e10cSrcweir
449cdf0e10cSrcweir mpOutliner->SetPaperSize( PixelToLogic( Size(aWidth,aHeight) ) ) ;
450cdf0e10cSrcweir mpOutlinerView->SetOutputArea( PixelToLogic( Rectangle(0,0,aWidth,aHeight) ) );
451cdf0e10cSrcweir if (!mpVScrollbar->IsVisible())
452cdf0e10cSrcweir { // if we do not have a scrollbar anymore, we want to see the complete text
453cdf0e10cSrcweir mpOutlinerView->SetVisArea( PixelToLogic( Rectangle(0,0,aWidth,aHeight) ) );
454cdf0e10cSrcweir }
455cdf0e10cSrcweir mpVScrollbar->SetPosSizePixel( 0 + aWidth, 0, GetScrollbarWidth(), aHeight );
456cdf0e10cSrcweir mpVScrollbar->SetVisibleSize( PixelToLogic(Size(0,aHeight)).Height() );
457cdf0e10cSrcweir mpVScrollbar->SetPageSize( PixelToLogic(Size(0,aHeight)).Height() * 8 / 10 );
458cdf0e10cSrcweir mpVScrollbar->SetLineSize( mpOutliner->GetTextHeight() / 10 );
459cdf0e10cSrcweir SetScrollbar();
460cdf0e10cSrcweir mpVScrollbar->SetRange( Range(0, mpOutliner->GetTextHeight()));
461cdf0e10cSrcweir
462cdf0e10cSrcweir Point aPos( mpMeta->GetPosPixel());
463cdf0e10cSrcweir Point aBase( aPos.X() + aPos.X() + GetSizePixel().Width(), aPos.Y() );
464cdf0e10cSrcweir Point aLeft = PixelToLogic( Point( aBase.X() - (METABUTTON_WIDTH+5), aBase.Y()+17 ) );
465cdf0e10cSrcweir Point aRight = PixelToLogic( Point( aBase.X() - (METABUTTON_WIDTH-1), aBase.Y()+17 ) );
466cdf0e10cSrcweir Point aBottom = PixelToLogic( Point( aBase.X() - (METABUTTON_WIDTH+2), aBase.Y()+20 ) );
467cdf0e10cSrcweir
468cdf0e10cSrcweir maPopupTriangle.clear();
469cdf0e10cSrcweir maPopupTriangle.append(basegfx::B2DPoint(aLeft.X(),aLeft.Y()));
470cdf0e10cSrcweir maPopupTriangle.append(basegfx::B2DPoint(aRight.X(),aRight.Y()));
471cdf0e10cSrcweir maPopupTriangle.append(basegfx::B2DPoint(aBottom.X(),aBottom.Y()));
472cdf0e10cSrcweir maPopupTriangle.setClosed(true);
473cdf0e10cSrcweir maRectMetaButton = PixelToLogic( Rectangle( Point(
474cdf0e10cSrcweir aPos.X()+GetSizePixel().Width()-(METABUTTON_WIDTH+10),
475cdf0e10cSrcweir aPos.Y()+5 ),
476cdf0e10cSrcweir Size( METABUTTON_WIDTH, METABUTTON_HEIGHT ) ) );
477cdf0e10cSrcweir
478cdf0e10cSrcweir }
479cdf0e10cSrcweir
SetSizePixel(const Size & rNewSize)480cdf0e10cSrcweir void AnnotationWindow::SetSizePixel( const Size& rNewSize )
481cdf0e10cSrcweir {
482cdf0e10cSrcweir Window::SetSizePixel(rNewSize);
483cdf0e10cSrcweir }
484cdf0e10cSrcweir
SetScrollbar()485cdf0e10cSrcweir void AnnotationWindow::SetScrollbar()
486cdf0e10cSrcweir {
487cdf0e10cSrcweir mpVScrollbar->SetThumbPos( mpOutlinerView->GetVisArea().Top()+ mpOutlinerView->GetEditView().GetCursor()->GetOffsetY());
488cdf0e10cSrcweir }
489cdf0e10cSrcweir
ResizeIfNeccessary(long aOldHeight,long aNewHeight)490cdf0e10cSrcweir void AnnotationWindow::ResizeIfNeccessary(long aOldHeight, long aNewHeight)
491cdf0e10cSrcweir {
492cdf0e10cSrcweir if (aOldHeight != aNewHeight)
493cdf0e10cSrcweir {
494cdf0e10cSrcweir DoResize();
495cdf0e10cSrcweir Invalidate();
496cdf0e10cSrcweir }
497cdf0e10cSrcweir else
498cdf0e10cSrcweir {
499cdf0e10cSrcweir SetScrollbar();
500cdf0e10cSrcweir }
501cdf0e10cSrcweir }
502cdf0e10cSrcweir
SetLanguage(const SvxLanguageItem aNewItem)503cdf0e10cSrcweir void AnnotationWindow::SetLanguage(const SvxLanguageItem aNewItem)
504cdf0e10cSrcweir {
505cdf0e10cSrcweir Engine()->SetModifyHdl( Link() );
506cdf0e10cSrcweir ESelection aOld = getView()->GetSelection();
507cdf0e10cSrcweir
508*7a980842SDamjanJovanovic ESelection aNewSelection( 0, 0, Engine()->GetParagraphCount()-1, USHRT_MAX );
509cdf0e10cSrcweir getView()->SetSelection( aNewSelection );
510cdf0e10cSrcweir SfxItemSet aEditAttr(getView()->GetAttribs());
511cdf0e10cSrcweir aEditAttr.Put(aNewItem);
512cdf0e10cSrcweir getView()->SetAttribs( aEditAttr );
513cdf0e10cSrcweir
514cdf0e10cSrcweir getView()->SetSelection(aOld);
515cdf0e10cSrcweir Engine()->SetModifyHdl( LINK( this, AnnotationWindow, ModifyHdl ) );
516cdf0e10cSrcweir
517cdf0e10cSrcweir Invalidate();
518cdf0e10cSrcweir }
519cdf0e10cSrcweir
ToggleInsMode()520cdf0e10cSrcweir void AnnotationWindow::ToggleInsMode()
521cdf0e10cSrcweir {
522cdf0e10cSrcweir if( mpOutlinerView )
523cdf0e10cSrcweir {
524cdf0e10cSrcweir SfxBindings &rBnd = mpDocShell->GetViewShell()->GetViewFrame()->GetBindings();
525cdf0e10cSrcweir rBnd.Invalidate(SID_ATTR_INSERT);
526cdf0e10cSrcweir rBnd.Update(SID_ATTR_INSERT);
527cdf0e10cSrcweir }
528cdf0e10cSrcweir }
529cdf0e10cSrcweir
GetPostItTextHeight()530cdf0e10cSrcweir long AnnotationWindow::GetPostItTextHeight()
531cdf0e10cSrcweir {
532cdf0e10cSrcweir return mpOutliner ? LogicToPixel(mpOutliner->CalcTextSize()).Height() : 0;
533cdf0e10cSrcweir }
534cdf0e10cSrcweir
IMPL_LINK(AnnotationWindow,ScrollHdl,ScrollBar *,pScroll)535cdf0e10cSrcweir IMPL_LINK(AnnotationWindow, ScrollHdl, ScrollBar*, pScroll)
536cdf0e10cSrcweir {
537cdf0e10cSrcweir long nDiff = getView()->GetEditView().GetVisArea().Top() - pScroll->GetThumbPos();
538cdf0e10cSrcweir getView()->Scroll( 0, nDiff );
539cdf0e10cSrcweir return 0;
540cdf0e10cSrcweir }
541cdf0e10cSrcweir
IMPL_LINK(AnnotationWindow,ModifyHdl,void *,EMPTYARG)542cdf0e10cSrcweir IMPL_LINK(AnnotationWindow, ModifyHdl, void*, EMPTYARG)
543cdf0e10cSrcweir {
544cdf0e10cSrcweir return 0;
545cdf0e10cSrcweir }
546cdf0e10cSrcweir
GetScrollbarWidth()547cdf0e10cSrcweir sal_Int32 AnnotationWindow::GetScrollbarWidth()
548cdf0e10cSrcweir {
549cdf0e10cSrcweir return 16;
550cdf0e10cSrcweir // return mpView->GetWrtShell().GetViewOptions()->GetZoom() / 10;
551cdf0e10cSrcweir }
552cdf0e10cSrcweir
GetLanguage(void)553cdf0e10cSrcweir SvxLanguageItem AnnotationWindow::GetLanguage(void)
554cdf0e10cSrcweir {
555cdf0e10cSrcweir return SvxLanguageItem( Doc()->GetLanguage( EE_CHAR_LANGUAGE ), SID_ATTR_LANGUAGE );
556cdf0e10cSrcweir }
557cdf0e10cSrcweir
558cdf0e10cSrcweir // --------------------------------------------------------------------
559cdf0e10cSrcweir
getTextApiObject(const Reference<XAnnotation> & xAnnotation)560cdf0e10cSrcweir TextApiObject* getTextApiObject( const Reference< XAnnotation >& xAnnotation )
561cdf0e10cSrcweir {
562cdf0e10cSrcweir if( xAnnotation.is() )
563cdf0e10cSrcweir {
564cdf0e10cSrcweir Reference< XText > xText( xAnnotation->getTextRange() );
565cdf0e10cSrcweir return TextApiObject::getImplementation( xText );
566cdf0e10cSrcweir }
567cdf0e10cSrcweir return 0;
568cdf0e10cSrcweir }
569cdf0e10cSrcweir
570cdf0e10cSrcweir // --------------------------------------------------------------------
571cdf0e10cSrcweir
setAnnotation(const Reference<XAnnotation> & xAnnotation,bool bGrabFocus)572cdf0e10cSrcweir void AnnotationWindow::setAnnotation( const Reference< XAnnotation >& xAnnotation, bool bGrabFocus )
573cdf0e10cSrcweir {
574cdf0e10cSrcweir if( (xAnnotation != mxAnnotation) && xAnnotation.is() )
575cdf0e10cSrcweir {
576cdf0e10cSrcweir mxAnnotation = xAnnotation;
577cdf0e10cSrcweir
578cdf0e10cSrcweir SetColor();
579cdf0e10cSrcweir
580cdf0e10cSrcweir SvtUserOptions aUserOptions;
581cdf0e10cSrcweir mbProtected = aUserOptions.GetFullName() != xAnnotation->getAuthor();
582cdf0e10cSrcweir
583cdf0e10cSrcweir Engine()->Clear();
584cdf0e10cSrcweir TextApiObject* pTextApi = getTextApiObject( mxAnnotation );
585cdf0e10cSrcweir
586cdf0e10cSrcweir if( pTextApi )
587cdf0e10cSrcweir {
588cdf0e10cSrcweir std::auto_ptr< OutlinerParaObject > pOPO( pTextApi->CreateText() );
589cdf0e10cSrcweir Engine()->SetText( *pOPO.get() );
590cdf0e10cSrcweir }
591cdf0e10cSrcweir
592cdf0e10cSrcweir Engine()->SetModifyHdl( LINK( this, AnnotationWindow, ModifyHdl ) );
593cdf0e10cSrcweir Engine()->ClearModifyFlag();
594cdf0e10cSrcweir Engine()->GetUndoManager().Clear();
595cdf0e10cSrcweir
596cdf0e10cSrcweir Invalidate();
597cdf0e10cSrcweir
598cdf0e10cSrcweir OUString sMeta( xAnnotation->getAuthor() );
599cdf0e10cSrcweir OUString sDateTime( getAnnotationDateTimeString(xAnnotation) );
600cdf0e10cSrcweir
601cdf0e10cSrcweir if( sDateTime.getLength() != 0 )
602cdf0e10cSrcweir {
603cdf0e10cSrcweir if( sMeta.getLength() != 0 )
604cdf0e10cSrcweir sMeta += OUString( RTL_CONSTASCII_USTRINGPARAM( "\n" ) );
605cdf0e10cSrcweir
606cdf0e10cSrcweir sMeta += sDateTime;
607cdf0e10cSrcweir }
608cdf0e10cSrcweir mpMeta->SetText(sMeta);
609cdf0e10cSrcweir
610cdf0e10cSrcweir if( bGrabFocus )
611cdf0e10cSrcweir GrabFocus();
612cdf0e10cSrcweir }
613cdf0e10cSrcweir }
614cdf0e10cSrcweir
SetColor()615cdf0e10cSrcweir void AnnotationWindow::SetColor()
616cdf0e10cSrcweir {
617cdf0e10cSrcweir sal_uInt16 nAuthorIdx = mpDoc->GetAnnotationAuthorIndex( mxAnnotation->getAuthor() );
618cdf0e10cSrcweir
619cdf0e10cSrcweir const bool bHighContrast = Application::GetSettings().GetStyleSettings().GetHighContrastMode();
620cdf0e10cSrcweir if( bHighContrast )
621cdf0e10cSrcweir {
622cdf0e10cSrcweir StyleSettings aStyleSettings = GetSettings().GetStyleSettings();
623cdf0e10cSrcweir
624cdf0e10cSrcweir maColor = aStyleSettings.GetWindowColor();
625cdf0e10cSrcweir maColorDark = maColor;
626cdf0e10cSrcweir maColorLight = aStyleSettings.GetWindowTextColor();
627cdf0e10cSrcweir }
628cdf0e10cSrcweir else
629cdf0e10cSrcweir {
630cdf0e10cSrcweir maColor = mrManager.GetColor( nAuthorIdx );
631cdf0e10cSrcweir maColorDark = mrManager.GetColorDark( nAuthorIdx );
632cdf0e10cSrcweir maColorLight = mrManager.GetColorLight( nAuthorIdx );
633cdf0e10cSrcweir }
634cdf0e10cSrcweir
635cdf0e10cSrcweir mpOutlinerView->SetBackgroundColor(maColor);
636cdf0e10cSrcweir Engine()->SetBackgroundColor(maColor);
637cdf0e10cSrcweir
638cdf0e10cSrcweir {
639cdf0e10cSrcweir SvtAccessibilityOptions aOptions;
640cdf0e10cSrcweir Engine()->ForceAutoColor( bHighContrast || aOptions.GetIsAutomaticFontColor() );
641cdf0e10cSrcweir }
642cdf0e10cSrcweir
643cdf0e10cSrcweir mpMeta->SetControlBackground(maColor);
644cdf0e10cSrcweir AllSettings aSettings = mpMeta->GetSettings();
645cdf0e10cSrcweir StyleSettings aStyleSettings = aSettings.GetStyleSettings();
646cdf0e10cSrcweir aStyleSettings.SetFieldTextColor( bHighContrast ? maColorLight : maColorDark);
647cdf0e10cSrcweir aSettings.SetStyleSettings(aStyleSettings);
648cdf0e10cSrcweir mpMeta->SetSettings(aSettings);
649cdf0e10cSrcweir
650cdf0e10cSrcweir AllSettings aSettings2 = mpVScrollbar->GetSettings();
651cdf0e10cSrcweir StyleSettings aStyleSettings2 = aSettings2.GetStyleSettings();
652cdf0e10cSrcweir aStyleSettings2.SetButtonTextColor(Color(0,0,0));
653cdf0e10cSrcweir aStyleSettings2.SetCheckedColor(maColorLight); //hintergund
654cdf0e10cSrcweir aStyleSettings2.SetShadowColor(maColorDark);
655cdf0e10cSrcweir aStyleSettings2.SetFaceColor(maColor);
656cdf0e10cSrcweir aSettings2.SetStyleSettings(aStyleSettings2);
657cdf0e10cSrcweir mpVScrollbar->SetSettings(aSettings2);
658cdf0e10cSrcweir }
659cdf0e10cSrcweir
Deactivate()660cdf0e10cSrcweir void AnnotationWindow::Deactivate()
661cdf0e10cSrcweir {
662cdf0e10cSrcweir Reference< XAnnotation > xAnnotation( mxAnnotation );
663cdf0e10cSrcweir
664cdf0e10cSrcweir // write changed text back to annotation
665cdf0e10cSrcweir if ( Engine()->IsModified() )
666cdf0e10cSrcweir {
667cdf0e10cSrcweir TextApiObject* pTextApi = getTextApiObject( xAnnotation );
668cdf0e10cSrcweir
669cdf0e10cSrcweir if( pTextApi )
670cdf0e10cSrcweir {
671cdf0e10cSrcweir OutlinerParaObject* pOPO = Engine()->CreateParaObject();
672cdf0e10cSrcweir if( pOPO )
673cdf0e10cSrcweir {
674cdf0e10cSrcweir if( mpDoc->IsUndoEnabled() )
675cdf0e10cSrcweir mpDoc->BegUndo( String( SdResId( STR_ANNOTATION_UNDO_EDIT ) ) );
676cdf0e10cSrcweir
677cdf0e10cSrcweir pTextApi->SetText( *pOPO );
678cdf0e10cSrcweir delete pOPO;
679cdf0e10cSrcweir
680cdf0e10cSrcweir // set current time to changed annotation
681cdf0e10cSrcweir xAnnotation->setDateTime( getCurrentDateTime() );
682cdf0e10cSrcweir
683cdf0e10cSrcweir if( mpDoc->IsUndoEnabled() )
684cdf0e10cSrcweir mpDoc->EndUndo();
685cdf0e10cSrcweir
686cdf0e10cSrcweir DocView()->GetDocSh()->SetModified(sal_True);
687cdf0e10cSrcweir }
688cdf0e10cSrcweir
689cdf0e10cSrcweir }
690cdf0e10cSrcweir }
691cdf0e10cSrcweir Engine()->ClearModifyFlag();
692cdf0e10cSrcweir
693cdf0e10cSrcweir Engine()->GetUndoManager().Clear();
694cdf0e10cSrcweir }
695cdf0e10cSrcweir
Paint(const Rectangle & rRect)696cdf0e10cSrcweir void AnnotationWindow::Paint( const Rectangle& rRect)
697cdf0e10cSrcweir {
698cdf0e10cSrcweir FloatingWindow::Paint( rRect );
699cdf0e10cSrcweir
700cdf0e10cSrcweir if(mpMeta->IsVisible() && !mbReadonly)
701cdf0e10cSrcweir {
702cdf0e10cSrcweir const bool bHighContrast = Application::GetSettings().GetStyleSettings().GetHighContrastMode();
703cdf0e10cSrcweir //draw left over space
704cdf0e10cSrcweir if ( bHighContrast )
705cdf0e10cSrcweir SetFillColor(COL_BLACK);
706cdf0e10cSrcweir else
707cdf0e10cSrcweir SetFillColor(maColor);
708cdf0e10cSrcweir SetLineColor();
709cdf0e10cSrcweir DrawRect(PixelToLogic(Rectangle(Point(mpMeta->GetPosPixel().X()+mpMeta->GetSizePixel().Width(),mpMeta->GetPosPixel().Y()),Size(METABUTTON_AREA_WIDTH,mpMeta->GetSizePixel().Height()))));
710cdf0e10cSrcweir
711cdf0e10cSrcweir if ( bHighContrast )
712cdf0e10cSrcweir {
713cdf0e10cSrcweir //draw rect around button
714cdf0e10cSrcweir SetFillColor(COL_BLACK);
715cdf0e10cSrcweir SetLineColor(COL_WHITE);
716cdf0e10cSrcweir }
717cdf0e10cSrcweir else
718cdf0e10cSrcweir {
719cdf0e10cSrcweir //draw button
720cdf0e10cSrcweir Gradient aGradient;
721cdf0e10cSrcweir if (mbMouseOverButton)
722cdf0e10cSrcweir aGradient = Gradient(GRADIENT_LINEAR,ColorFromAlphaColor(80,maColorDark,maColor),ColorFromAlphaColor(15,maColorDark,maColor));
723cdf0e10cSrcweir else
724cdf0e10cSrcweir aGradient = Gradient(GRADIENT_LINEAR,ColorFromAlphaColor(15,maColorDark,maColor),ColorFromAlphaColor(80,maColorDark,maColor));
725cdf0e10cSrcweir DrawGradient(maRectMetaButton,aGradient);
726cdf0e10cSrcweir //draw rect around button
727cdf0e10cSrcweir SetFillColor();
728cdf0e10cSrcweir SetLineColor(ColorFromAlphaColor(90,maColorDark,maColor));
729cdf0e10cSrcweir }
730cdf0e10cSrcweir DrawRect(maRectMetaButton);
731cdf0e10cSrcweir
732cdf0e10cSrcweir //draw arrow
733cdf0e10cSrcweir if( bHighContrast )
734cdf0e10cSrcweir SetFillColor(COL_WHITE);
735cdf0e10cSrcweir else
736cdf0e10cSrcweir SetFillColor(COL_BLACK);
737cdf0e10cSrcweir SetLineColor();
738cdf0e10cSrcweir DrawPolygon(Polygon(maPopupTriangle));
739cdf0e10cSrcweir }
740cdf0e10cSrcweir }
741cdf0e10cSrcweir
MouseMove(const MouseEvent & rMEvt)742cdf0e10cSrcweir void AnnotationWindow::MouseMove( const MouseEvent& rMEvt )
743cdf0e10cSrcweir {
744cdf0e10cSrcweir if( !mbReadonly )
745cdf0e10cSrcweir {
746cdf0e10cSrcweir if (maRectMetaButton.IsInside(PixelToLogic(rMEvt.GetPosPixel())))
747cdf0e10cSrcweir {
748cdf0e10cSrcweir if (!mbMouseOverButton)
749cdf0e10cSrcweir {
750cdf0e10cSrcweir Invalidate(maRectMetaButton);
751cdf0e10cSrcweir mbMouseOverButton = true;
752cdf0e10cSrcweir }
753cdf0e10cSrcweir }
754cdf0e10cSrcweir else
755cdf0e10cSrcweir {
756cdf0e10cSrcweir if (mbMouseOverButton)
757cdf0e10cSrcweir {
758cdf0e10cSrcweir Invalidate(maRectMetaButton);
759cdf0e10cSrcweir mbMouseOverButton = false;
760cdf0e10cSrcweir }
761cdf0e10cSrcweir }
762cdf0e10cSrcweir }
763cdf0e10cSrcweir }
764cdf0e10cSrcweir
MouseButtonDown(const MouseEvent & rMEvt)765cdf0e10cSrcweir void AnnotationWindow::MouseButtonDown( const MouseEvent& rMEvt )
766cdf0e10cSrcweir {
767cdf0e10cSrcweir if (!mbReadonly && maRectMetaButton.IsInside(PixelToLogic(rMEvt.GetPosPixel())) && rMEvt.IsLeft())
768cdf0e10cSrcweir {
769cdf0e10cSrcweir // context menu
770cdf0e10cSrcweir Rectangle aRect(LogicToPixel(maRectMetaButton.BottomLeft()),LogicToPixel(maRectMetaButton.BottomLeft()));
771cdf0e10cSrcweir mrManager.ExecuteAnnotationContextMenu( mxAnnotation, (::Window*)this, aRect, true );
772cdf0e10cSrcweir }
773cdf0e10cSrcweir }
774cdf0e10cSrcweir
Command(const CommandEvent & rCEvt)775cdf0e10cSrcweir void AnnotationWindow::Command( const CommandEvent& rCEvt )
776cdf0e10cSrcweir {
777cdf0e10cSrcweir if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
778cdf0e10cSrcweir {
779cdf0e10cSrcweir if( mpMeta->IsVisible() &&(mpMeta->GetPosPixel().Y() < rCEvt.GetMousePosPixel().Y()) )
780cdf0e10cSrcweir return;
781cdf0e10cSrcweir mrManager.ExecuteAnnotationContextMenu( mxAnnotation, this, Rectangle(rCEvt.GetMousePosPixel(),Size(1,1)) );
782cdf0e10cSrcweir }
783cdf0e10cSrcweir else
784cdf0e10cSrcweir {
785cdf0e10cSrcweir FloatingWindow::Command(rCEvt);
786cdf0e10cSrcweir }
787cdf0e10cSrcweir }
788cdf0e10cSrcweir
GetFocus()789cdf0e10cSrcweir void AnnotationWindow::GetFocus()
790cdf0e10cSrcweir {
791cdf0e10cSrcweir if( mpTextWindow )
792cdf0e10cSrcweir mpTextWindow->GrabFocus();
793cdf0e10cSrcweir else
794cdf0e10cSrcweir FloatingWindow::GetFocus();
795cdf0e10cSrcweir }
796cdf0e10cSrcweir
ExecuteSlot(sal_uInt16 nSID)797cdf0e10cSrcweir void AnnotationWindow::ExecuteSlot( sal_uInt16 nSID )
798cdf0e10cSrcweir {
799cdf0e10cSrcweir if( nSID == SID_COPY )
800cdf0e10cSrcweir {
801cdf0e10cSrcweir getView()->Copy();
802cdf0e10cSrcweir }
803cdf0e10cSrcweir else if( nSID == SID_PASTE )
804cdf0e10cSrcweir {
805cdf0e10cSrcweir getView()->PasteSpecial();
806cdf0e10cSrcweir DoResize();
807cdf0e10cSrcweir }
808cdf0e10cSrcweir else
809cdf0e10cSrcweir {
810cdf0e10cSrcweir SfxItemSet aEditAttr(getView()->GetAttribs());
811cdf0e10cSrcweir SfxItemSet aNewAttr(mpOutliner->GetEmptyItemSet());
812cdf0e10cSrcweir
813cdf0e10cSrcweir switch( nSID )
814cdf0e10cSrcweir {
815cdf0e10cSrcweir case SID_ATTR_CHAR_WEIGHT:
816cdf0e10cSrcweir {
817cdf0e10cSrcweir FontWeight eFW = ( (const SvxWeightItem&) aEditAttr.Get( EE_CHAR_WEIGHT ) ).GetWeight();
818cdf0e10cSrcweir aNewAttr.Put( SvxWeightItem( eFW == WEIGHT_NORMAL ? WEIGHT_BOLD : WEIGHT_NORMAL, EE_CHAR_WEIGHT ) );
819cdf0e10cSrcweir }
820cdf0e10cSrcweir break;
821cdf0e10cSrcweir case SID_ATTR_CHAR_POSTURE:
822cdf0e10cSrcweir {
823cdf0e10cSrcweir FontItalic eFI = ( (const SvxPostureItem&) aEditAttr.Get( EE_CHAR_ITALIC ) ).GetPosture();
824cdf0e10cSrcweir aNewAttr.Put( SvxPostureItem( eFI == ITALIC_NORMAL ? ITALIC_NONE : ITALIC_NORMAL, EE_CHAR_ITALIC ) );
825cdf0e10cSrcweir }
826cdf0e10cSrcweir break;
827cdf0e10cSrcweir case SID_ATTR_CHAR_UNDERLINE:
828cdf0e10cSrcweir {
829cdf0e10cSrcweir FontUnderline eFU = ( (const SvxUnderlineItem&) aEditAttr. Get( EE_CHAR_UNDERLINE ) ).GetLineStyle();
830cdf0e10cSrcweir aNewAttr.Put( SvxUnderlineItem( eFU == UNDERLINE_SINGLE ? UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_UNDERLINE ) );
831cdf0e10cSrcweir }
832cdf0e10cSrcweir break;
833cdf0e10cSrcweir case SID_ATTR_CHAR_STRIKEOUT:
834cdf0e10cSrcweir {
835cdf0e10cSrcweir FontStrikeout eFSO = ( ( (const SvxCrossedOutItem&) aEditAttr.Get( EE_CHAR_STRIKEOUT ) ).GetStrikeout() );
836cdf0e10cSrcweir aNewAttr.Put( SvxCrossedOutItem( eFSO == STRIKEOUT_SINGLE ? STRIKEOUT_NONE : STRIKEOUT_SINGLE, EE_CHAR_STRIKEOUT ) );
837cdf0e10cSrcweir }
838cdf0e10cSrcweir break;
839cdf0e10cSrcweir }
840cdf0e10cSrcweir getView()->SetAttribs( aNewAttr );
841cdf0e10cSrcweir }
842cdf0e10cSrcweir }
843cdf0e10cSrcweir
844cdf0e10cSrcweir }
845