LCOV - code coverage report
Current view: top level - include/svx - svdedxv.hxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 6 10 60.0 %
Date: 2014-11-03 Functions: 6 10 60.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #ifndef INCLUDED_SVX_SVDEDXV_HXX
      21             : #define INCLUDED_SVX_SVDEDXV_HXX
      22             : 
      23             : #include <rtl/ref.hxx>
      24             : #include <svx/svxdllapi.h>
      25             : #include <svx/svdglev.hxx>
      26             : 
      27             : #include <svx/selectioncontroller.hxx>
      28             : 
      29             : #include <boost/shared_ptr.hpp>
      30             : 
      31             : class SdrOutliner;
      32             : class OutlinerView;
      33             : class EditStatus;
      34             : class EditFieldInfo;
      35             : class ImpSdrEditPara;
      36             : struct PasteOrDropInfos;
      37             : class SdrUndoManager;
      38             : 
      39             : namespace com { namespace sun { namespace star { namespace uno {
      40             :     class Any;
      41             : } } } }
      42             : 
      43             : namespace sdr {
      44             :     class SelectionController;
      45             : }
      46             : 
      47             : enum SdrEndTextEditKind {SDRENDTEXTEDIT_UNCHANGED, // Textobjekt unveraendert
      48             :                          SDRENDTEXTEDIT_CHANGED,   // Textobjekt wurde geaendert
      49             :                          SDRENDTEXTEDIT_DELETED,   // Textobjekt implizit geloescht
      50             :                          SDRENDTEXTEDIT_SHOULDBEDELETED}; // Fuer Writer: Textobjekt sollte geloescht werden
      51             : 
      52             : 
      53             : // - Allgemeines Edit fuer objektspeziefische Eigenschaften
      54             : // - Textedit fuer alle vom SdrTextObj abgeleiteten Zeichenobjekte
      55             : // - Macromodus
      56             : 
      57             : 
      58             : class SVX_DLLPUBLIC SdrObjEditView: public SdrGlueEditView
      59             : {
      60             :     friend class                SdrPageView;
      61             :     friend class                ImpSdrEditPara;
      62             : 
      63             : protected:
      64             :     // TextEdit
      65             :     SdrObjectWeakRef            mxTextEditObj;          // Aktuell im TextEdit befindliches Obj
      66             :     SdrPageView*                pTextEditPV;
      67             :     SdrOutliner*                pTextEditOutliner;     // Na eben der Outliner fuers TextEdit
      68             :     OutlinerView*               pTextEditOutlinerView; // die aktuelle View des Outliners
      69             :     vcl::Window*                     pTextEditWin;          // passendes Win zu pTextEditOutlinerView
      70             :     vcl::Cursor*                pTextEditCursorMerker; // Zum Restaurieren des Cursors am jeweiligen Win
      71             :     ImpSdrEditPara*             pEditPara; // Da hau' ich erstmal alles rein um kompatibel zu bleiben...
      72             :     SdrObject*                  pMacroObj;
      73             :     SdrPageView*                pMacroPV;
      74             :     vcl::Window*                     pMacroWin;
      75             : 
      76             :     Rectangle                   aTextEditArea;
      77             :     Rectangle                   aMinTextEditArea;
      78             :     Link                        aOldCalcFieldValueLink; // Zum rufen des alten Handlers
      79             :     Point                       aMacroDownPos;
      80             : 
      81             :     sal_uInt16                  nMacroTol;
      82             : 
      83             :     bool                        bTextEditDontDelete : 1;   // Outliner und View bei SdrEndTextEdit nicht deleten (f. Rechtschreibpruefung)
      84             :     bool                        bTextEditOnlyOneView : 1;  // Nur eine OutlinerView (f. Rechtschreibpruefung)
      85             :     bool                        bTextEditNewObj : 1;       // Aktuell editiertes Objekt wurde gerade neu erzeugt
      86             :     bool                        bQuickTextEditMode : 1;    // persistent(->CrtV). Default=TRUE
      87             :     bool                        bMacroMode : 1;            // persistent(->CrtV). Default=TRUE
      88             :     bool                        bMacroDown : 1;
      89             : 
      90             :     rtl::Reference< sdr::SelectionController > mxSelectionController;
      91             :     rtl::Reference< sdr::SelectionController > mxLastSelectionController;
      92             : 
      93             : private:
      94             :     ::svl::IUndoManager* mpOldTextEditUndoManager;
      95             : 
      96             :     SVX_DLLPRIVATE void ImpClearVars();
      97             : 
      98             : protected:
      99             :     // central method to get an SdrUndoManager for enhanced TextEdit. Default will
     100             :     // try to return a dynamic_casted GetModel()->GetSdrUndoManager(). Applications
     101             :     // which want to use this feature will need to overload this virtual method,
     102             :     // provide their document UndoManager and derive it from SdrUndoManager.
     103             :     virtual SdrUndoManager* getSdrUndoManagerForEnhancedTextEdit() const;
     104             : 
     105             :     OutlinerView* ImpFindOutlinerView(vcl::Window* pWin) const;
     106             : 
     107             :     // Eine neue OutlinerView auf dem Heap anlegen und alle erforderlichen Parameter setzen.
     108             :     // pTextEditObj, pTextEditPV und pTextEditOutliner muessen initiallisiert sein.
     109             :     OutlinerView* ImpMakeOutlinerView(vcl::Window* pWin, bool bNoPaint, OutlinerView* pGivenView) const;
     110             :     void ImpPaintOutlinerView(OutlinerView& rOutlView, const Rectangle& rRect, OutputDevice& rTargetDevice) const;
     111             :     void ImpInvalidateOutlinerView(OutlinerView& rOutlView) const;
     112             : 
     113             :     // Feststellen, ob der gesamte Text markiert ist. Liefert auch sal_True wenn
     114             :     // kein Text vorhanden ist.
     115             :     bool ImpIsTextEditAllSelected() const;
     116             :     void ImpMakeTextCursorAreaVisible();
     117             : 
     118             :     // Handler fuer AutoGrowing Text bei aktivem Outliner
     119             :     DECL_LINK(ImpOutlinerStatusEventHdl,EditStatus*);
     120             :     DECL_LINK(ImpOutlinerCalcFieldValueHdl,EditFieldInfo*);
     121             : 
     122             :     // link for EndTextEditHdl
     123             :     DECL_LINK(EndTextEditHdl, SdrUndoManager*);
     124             : 
     125             :     void ImpMacroUp(const Point& rUpPos);
     126             :     void ImpMacroDown(const Point& rDownPos);
     127             : 
     128             :        DECL_LINK( BeginPasteOrDropHdl, PasteOrDropInfos* );
     129             :     DECL_LINK( EndPasteOrDropHdl, PasteOrDropInfos* );
     130             : 
     131             : protected:
     132             :     // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
     133             :     SdrObjEditView(SdrModel* pModel1, OutputDevice* pOut = 0L);
     134             :     virtual ~SdrObjEditView();
     135             : 
     136             : public:
     137             : 
     138             :     // used to call the old ImpPaintOutlinerView. Will be replaced when the
     139             :     // outliner will be displayed on the overlay in edit mode.
     140             :     void TextEditDrawing(SdrPaintWindow& rPaintWindow) const;
     141             : 
     142             :     // Actionhandling fuer Macromodus
     143             :     virtual bool IsAction() const SAL_OVERRIDE;
     144             :     virtual void MovAction(const Point& rPnt) SAL_OVERRIDE;
     145             :     virtual void EndAction() SAL_OVERRIDE;
     146             :     virtual void BrkAction() SAL_OVERRIDE;
     147             :     virtual void BckAction() SAL_OVERRIDE;
     148             :     virtual void TakeActionRect(Rectangle& rRect) const SAL_OVERRIDE;
     149             : 
     150             :     virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) SAL_OVERRIDE;
     151             :     virtual void ModelHasChanged() SAL_OVERRIDE;
     152             : 
     153             : 
     154             :     // TextEdit ueber einen Outliner
     155             : 
     156             :     // QuickTextEditMode bedeutet, dass Objekte mit Text sofort beim Anklicken
     157             :     // editiert werden sollen. Default=TRUE. Persistent.
     158           0 :     void SetQuickTextEditMode(bool bOn) { bQuickTextEditMode=bOn; }
     159        2105 :     bool IsQuickTextEditMode() const { return bQuickTextEditMode; }
     160             : 
     161             :     // Starten des TextEditMode. Ist pWin==NULL, wird das erste an der View
     162             :     // angemeldete Win verwendet.
     163             :     // Der Cursor des Fensters an dem Editiert wird wird bei
     164             :     // SdrBeginTextEdit() gemerkt und bei SdrEndTextEdit() wieder restauriert.
     165             :     // Die App muss sicherstellen, das die zum Zeitpunkt des BegEdit am
     166             :     // Windows angemeldete Cursorinstanz beim SdrEndTextEdit noch gueltig ist.
     167             :     // Ueber den Parameter pEditOutliner kann die Applikation einen eigenen
     168             :     // Outliner vorgeben, der zum Editieren verwendet wird. Dieser gehoert
     169             :     // nach Aufruf von SdrBeginTextEdit der SdrObjEditView und wird von dieser
     170             :     // spaeter via delete zerstoert (falls bDontDeleteOutliner=sal_False). Die
     171             :     // SdrObjEditView setzt dann das Modusflag (EditEngine/Outliner) an
     172             :     // dieser Instanz und ausserdem auch den StatusEventHdl.
     173             :     // Ebenso kann eine spezifische OutlinerView vorgegeben werden.
     174             : 
     175             :     virtual bool SdrBeginTextEdit(SdrObject* pObj, SdrPageView* pPV = 0L, vcl::Window* pWin = 0L, bool bIsNewObj = false,
     176             :         SdrOutliner* pGivenOutliner = 0L, OutlinerView* pGivenOutlinerView = 0L,
     177             :         bool bDontDeleteOutliner = false, bool bOnlyOneView = false, bool bGrabFocus = true);
     178             :     // bDontDeleteReally ist ein Spezialparameter fuer den Writer.
     179             :     // Ist dieses Flag gesetzt, dann wird ein evtl. leeres Textobjekt
     180             :     // nicht geloescht. Stattdessen gibt es dann einen Returncode
     181             :     // SDRENDTEXTEDIT_SHOULDBEDELETED (anstelle von SDRENDTEXTEDIT_BEDELETED)
     182             :     // der besagt, dass das Objekt geloescht werden sollte.
     183             :     virtual SdrEndTextEditKind SdrEndTextEdit(bool bDontDeleteReally = false);
     184             :     virtual bool IsTextEdit() const SAL_OVERRIDE;
     185             : 
     186             :     // Diese Methode liefert sal_True, wenn der Punkt rHit innerhalb der
     187             :     // des Objektbereichs oder der OutlinerView liegt.
     188             :     bool IsTextEditHit(const Point& rHit, short nTol) const;
     189             : 
     190             :     // Diese Methode liefert sal_True, wenn der Punkt rHit innerhalb des
     191             :     // Handle-dicken Rahmens liegt, der die OutlinerView bei TextFrames
     192             :     // umschliesst.
     193             :     bool IsTextEditFrameHit(const Point& rHit) const;
     194             : 
     195             :     // Bei aktiver Selektion, also zwischen MouseButtonDown und
     196             :     // MouseButtonUp liefert diese Methode immer TRUE.
     197             :     bool IsTextEditInSelectionMode() const;
     198             : 
     199             :     // Wer das z.Zt. im TextEdit befindliche Objekt braucht:
     200        6035 :     SdrObject* GetTextEditObject() const { return mxTextEditObj.get(); }
     201             : 
     202             :     // info about TextEditPageView. Default is 0L.
     203             :     virtual SdrPageView* GetTextEditPageView() const SAL_OVERRIDE;
     204             : 
     205             :     // Das aktuelle Win des Outliners
     206             :     vcl::Window* GetTextEditWin() const { return pTextEditWin; }
     207             :     void SetTextEditWin(vcl::Window* pWin);
     208             : 
     209             :     // An den hier abgeholten Outliner kann man schliesslich
     210             :     // Events versenden, Attribute setzen, Cut/Copy/Paste rufen,
     211             :     // Undo/Redo rufen, etc.
     212           0 :     const SdrOutliner* GetTextEditOutliner() const { return pTextEditOutliner; }
     213        1110 :     SdrOutliner* GetTextEditOutliner() { return pTextEditOutliner; }
     214             :     const OutlinerView* GetTextEditOutlinerView() const { return pTextEditOutlinerView; }
     215        3990 :     OutlinerView* GetTextEditOutlinerView() { return pTextEditOutlinerView; }
     216             : 
     217             :     virtual bool KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) SAL_OVERRIDE;
     218             :     virtual bool MouseButtonDown(const MouseEvent& rMEvt, vcl::Window* pWin) SAL_OVERRIDE;
     219             :     virtual bool MouseButtonUp(const MouseEvent& rMEvt, vcl::Window* pWin) SAL_OVERRIDE;
     220             :     virtual bool MouseMove(const MouseEvent& rMEvt, vcl::Window* pWin) SAL_OVERRIDE;
     221             :     virtual bool Command(const CommandEvent& rCEvt, vcl::Window* pWin) SAL_OVERRIDE;
     222             : 
     223             :     // #97766# make virtual to change implementation e.g. for SdOutlineView
     224             :     virtual sal_uInt16 GetScriptType() const;
     225             : 
     226             :     /* new interface src537 */
     227             :     bool GetAttributes(SfxItemSet& rTargetSet, bool bOnlyHardAttr=false) const;
     228             : 
     229             :     bool SetAttributes(const SfxItemSet& rSet, bool bReplaceAll);
     230             :     SfxStyleSheet* GetStyleSheet() const; // SfxStyleSheet* GetStyleSheet(bool& rOk) const;
     231             :     bool SetStyleSheet(SfxStyleSheet* pStyleSheet, bool bDontRemoveHardAttr);
     232             : 
     233             :     // Intern: Beim Splitteraufziehen neue OutlinerView...
     234             :     virtual void AddWindowToPaintView(OutputDevice* pNewWin) SAL_OVERRIDE;
     235             :     virtual void DeleteWindowFromPaintView(OutputDevice* pOldWin) SAL_OVERRIDE;
     236             : 
     237             :     sal_uInt16 GetSelectionLevel() const;
     238             : 
     239             : 
     240             : 
     241             :     // Object-MacroModus (z.B. Rect als Button oder sowas):
     242             : 
     243             :     // Persistent. Default TRUE. SvDraw wertet das Flag u.a. bei
     244             :     // SdrView::GetPreferredPointer() aus. Hat nur Wirkung, wenn das Dokument
     245             :     // Draw-Objekte mit Macrofunktionalitaet hat (SdrObject::HasMacro()==sal_True).
     246             :     void SetMacroMode(bool bOn) { bMacroMode=bOn; }
     247        1100 :     bool IsMacroMode() const { return bMacroMode; }
     248             :     bool BegMacroObj(const Point& rPnt, short nTol, SdrObject* pObj, SdrPageView* pPV, vcl::Window* pWin);
     249           0 :     bool BegMacroObj(const Point& rPnt, SdrObject* pObj, SdrPageView* pPV, vcl::Window* pWin) { return BegMacroObj(rPnt,-2,pObj,pPV,pWin); }
     250             :     void MovMacroObj(const Point& rPnt);
     251             :     void BrkMacroObj();
     252             :     bool EndMacroObj();
     253        3973 :     bool IsMacroObj() const { return pMacroObj!=NULL; }
     254             :     bool IsMacroObjDown() const { return bMacroDown; }
     255             : 
     256             :     /** fills the given any with a XTextCursor for the current text selection.
     257             :         Leaves the any untouched if there currently is no text selected */
     258             :     void getTextSelection( ::com::sun::star::uno::Any& rSelection );
     259             : 
     260             :     virtual void MarkListHasChanged() SAL_OVERRIDE;
     261             : 
     262           0 :     rtl::Reference< sdr::SelectionController > getSelectionController() const { return mxSelectionController; }
     263             : 
     264             :     /** returns true if the shape identified by its inventor and identifier supports format paint brush operation */
     265             :     virtual bool SupportsFormatPaintbrush( sal_uInt32 nObjectInventor, sal_uInt16 nObjectIdentifier ) const;
     266             : 
     267             :     /** returns a format paint brush set from the current selection */
     268             :     virtual bool TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& rFormatSet  );
     269             : 
     270             :     /** applies a format paint brush set from the current selection.
     271             :         if bNoCharacterFormats is true, no character attributes are changed.
     272             :         if bNoParagraphFormats is true, no paragraph attributes are changed.
     273             :     */
     274             :     virtual void ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats );
     275             : 
     276             :     /** helper function for selections with multiple SdrText for one SdrTextObj (f.e. tables ) */
     277             :     void ApplyFormatPaintBrushToText( SfxItemSet& rFormatSet, SdrTextObj& rTextObj, SdrText* pText, bool bNoCharacterFormats, bool bNoParagraphFormats );
     278             : 
     279             : protected:
     280             :     virtual void OnBeginPasteOrDrop( PasteOrDropInfos* pInfos );
     281             :     virtual void OnEndPasteOrDrop( PasteOrDropInfos* pInfos );
     282             : 
     283             : };
     284             : 
     285             : #endif // INCLUDED_SVX_SVDEDXV_HXX
     286             : 
     287             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10