LCOV - code coverage report
Current view: top level - libreoffice/svx/inc/svx - svdedxv.hxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 7 14.3 %
Date: 2012-12-27 Functions: 1 7 14.3 %
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 _SVDEDXV_HXX
      21             : #define _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             : //************************************************************
      30             : //   Vorausdeklarationen
      31             : //************************************************************
      32             : 
      33             : #include <boost/shared_ptr.hpp>
      34             : 
      35             : class SdrOutliner;
      36             : class OutlinerView;
      37             : class EditStatus;
      38             : class EditFieldInfo;
      39             : class ImpSdrEditPara;
      40             : struct PasteOrDropInfos;
      41             : 
      42             : namespace com { namespace sun { namespace star { namespace uno {
      43             :     class Any;
      44             : } } } }
      45             : 
      46             : namespace sdr {
      47             :     class SelectionController;
      48             : }
      49             : 
      50             : //************************************************************
      51             : //   Defines
      52             : //************************************************************
      53             : 
      54             : enum SdrEndTextEditKind {SDRENDTEXTEDIT_UNCHANGED, // Textobjekt unveraendert
      55             :                          SDRENDTEXTEDIT_CHANGED,   // Textobjekt wurde geaendert
      56             :                          SDRENDTEXTEDIT_DELETED,   // Textobjekt implizit geloescht
      57             :                          SDRENDTEXTEDIT_SHOULDBEDELETED}; // Fuer Writer: Textobjekt sollte geloescht werden
      58             : 
      59             : ////////////////////////////////////////////////////////////////////////////////////////////////////
      60             : ////////////////////////////////////////////////////////////////////////////////////////////////////
      61             : //
      62             : //   @@@@  @@@@@  @@@@@@  @@@@@ @@@@@  @@ @@@@@@  @@ @@ @@ @@@@@ @@   @@
      63             : //  @@  @@ @@  @@     @@  @@    @@  @@ @@   @@    @@ @@ @@ @@    @@   @@
      64             : //  @@  @@ @@  @@     @@  @@    @@  @@ @@   @@    @@ @@ @@ @@    @@ @ @@
      65             : //  @@  @@ @@@@@      @@  @@@@  @@  @@ @@   @@    @@@@@ @@ @@@@  @@@@@@@
      66             : //  @@  @@ @@  @@     @@  @@    @@  @@ @@   @@     @@@  @@ @@    @@@@@@@
      67             : //  @@  @@ @@  @@ @@  @@  @@    @@  @@ @@   @@     @@@  @@ @@    @@@ @@@
      68             : //   @@@@  @@@@@   @@@@   @@@@@ @@@@@  @@   @@      @   @@ @@@@@ @@   @@
      69             : //
      70             : // - Allgemeines Edit fuer objektspeziefische Eigenschaften
      71             : // - Textedit fuer alle vom SdrTextObj abgeleiteten Zeichenobjekte
      72             : // - Macromodus
      73             : //
      74             : ////////////////////////////////////////////////////////////////////////////////////////////////////
      75             : ////////////////////////////////////////////////////////////////////////////////////////////////////
      76             : 
      77             : class SVX_DLLPUBLIC SdrObjEditView: public SdrGlueEditView
      78             : {
      79             :     friend class                SdrPageView;
      80             :     friend class                ImpSdrEditPara;
      81             : 
      82             : protected:
      83             :     // TextEdit
      84             :     SdrObjectWeakRef            mxTextEditObj;          // Aktuell im TextEdit befindliches Obj
      85             :     SdrPageView*                pTextEditPV;
      86             :     SdrOutliner*                pTextEditOutliner;     // Na eben der Outliner fuers TextEdit
      87             :     OutlinerView*               pTextEditOutlinerView; // die aktuelle View des Outliners
      88             :     Window*                     pTextEditWin;          // passendes Win zu pTextEditOutlinerView
      89             :     Cursor*                     pTextEditCursorMerker; // Zum Restaurieren des Cursors am jeweiligen Win
      90             :     ImpSdrEditPara*             pEditPara; // Da hau' ich erstmal alles rein um kompatibel zu bleiben...
      91             :     SdrObject*                  pMacroObj;
      92             :     SdrPageView*                pMacroPV;
      93             :     Window*                     pMacroWin;
      94             : 
      95             :     Rectangle                   aTextEditArea;
      96             :     Rectangle                   aMinTextEditArea;
      97             :     Link                        aOldCalcFieldValueLink; // Zum rufen des alten Handlers
      98             :     Point                       aMacroDownPos;
      99             : 
     100             :     sal_uInt16                      nMacroTol;
     101             : 
     102             :     unsigned                    bTextEditDontDelete : 1;   // Outliner und View bei SdrEndTextEdit nicht deleten (f. Rechtschreibpruefung)
     103             :     unsigned                    bTextEditOnlyOneView : 1;  // Nur eine OutlinerView (f. Rechtschreibpruefung)
     104             :     unsigned                    bTextEditNewObj : 1;       // Aktuell editiertes Objekt wurde gerade neu erzeugt
     105             :     unsigned                    bQuickTextEditMode : 1;    // persistent(->CrtV). Default=TRUE
     106             :     unsigned                    bMacroMode : 1;            // persistent(->CrtV). Default=TRUE
     107             :     unsigned                    bMacroDown : 1;
     108             : 
     109             :     rtl::Reference< sdr::SelectionController > mxSelectionController;
     110             :     rtl::Reference< sdr::SelectionController > mxLastSelectionController;
     111             : 
     112             : private:
     113             :     SVX_DLLPRIVATE void ImpClearVars();
     114             : 
     115             : protected:
     116             :     OutlinerView* ImpFindOutlinerView(Window* pWin) const;
     117             : 
     118             :     // Eine neue OutlinerView auf dem Heap anlegen und alle erforderlichen Parameter setzen.
     119             :     // pTextEditObj, pTextEditPV und pTextEditOutliner muessen initiallisiert sein.
     120             :     OutlinerView* ImpMakeOutlinerView(Window* pWin, sal_Bool bNoPaint, OutlinerView* pGivenView) const;
     121             :     void ImpPaintOutlinerView(OutlinerView& rOutlView, const Rectangle& rRect) const;
     122             :     void ImpInvalidateOutlinerView(OutlinerView& rOutlView) const;
     123             : 
     124             :     // Feststellen, ob der gesamte Text markiert ist. Liefert auch sal_True wenn
     125             :     // kein Text vorhanden ist.
     126             :     sal_Bool ImpIsTextEditAllSelected() const;
     127             :     void ImpMakeTextCursorAreaVisible();
     128             : 
     129             :     // Handler fuer AutoGrowing Text bei aktivem Outliner
     130             :     DECL_LINK(ImpOutlinerStatusEventHdl,EditStatus*);
     131             :     DECL_LINK(ImpOutlinerCalcFieldValueHdl,EditFieldInfo*);
     132             : 
     133             :     void ImpMacroUp(const Point& rUpPos);
     134             :     void ImpMacroDown(const Point& rDownPos);
     135             : 
     136             :        DECL_LINK( BeginPasteOrDropHdl, PasteOrDropInfos* );
     137             :     DECL_LINK( EndPasteOrDropHdl, PasteOrDropInfos* );
     138             : 
     139             : protected:
     140             :     // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
     141             :     SdrObjEditView(SdrModel* pModel1, OutputDevice* pOut = 0L);
     142             :     virtual ~SdrObjEditView();
     143             : 
     144             : public:
     145             :     // Actionhandling fuer Macromodus
     146             :     virtual sal_Bool IsAction() const;
     147             :     virtual void MovAction(const Point& rPnt);
     148             :     virtual void EndAction();
     149             :     virtual void BrkAction();
     150             :     virtual void BckAction();
     151             :     virtual void TakeActionRect(Rectangle& rRect) const;
     152             : 
     153             :     virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint);
     154             :     virtual void ModelHasChanged();
     155             : 
     156             :     //************************************************************************
     157             :     // TextEdit ueber einen Outliner
     158             :     //************************************************************************
     159             :     // QuickTextEditMode bedeutet, dass Objekte mit Text sofort beim Anklicken
     160             :     // editiert werden sollen. Default=TRUE. Persistent.
     161             :     void SetQuickTextEditMode(sal_Bool bOn) { bQuickTextEditMode=bOn; }
     162           0 :     sal_Bool IsQuickTextEditMode() const { return bQuickTextEditMode; }
     163             : 
     164             :     // Starten des TextEditMode. Ist pWin==NULL, wird das erste an der View
     165             :     // angemeldete Win verwendet.
     166             :     // Der Cursor des Fensters an dem Editiert wird wird bei
     167             :     // SdrBeginTextEdit() gemerkt und bei SdrEndTextEdit() wieder restauriert.
     168             :     // Die App muss sicherstellen, das die zum Zeitpunkt des BegEdit am
     169             :     // Windows angemeldete Cursorinstanz beim SdrEndTextEdit noch gueltig ist.
     170             :     // Ueber den Parameter pEditOutliner kann die Applikation einen eigenen
     171             :     // Outliner vorgeben, der zum Editieren verwendet wird. Dieser gehoert
     172             :     // nach Aufruf von SdrBeginTextEdit der SdrObjEditView und wird von dieser
     173             :     // spaeter via delete zerstoert (falls bDontDeleteOutliner=sal_False). Die
     174             :     // SdrObjEditView setzt dann das Modusflag (EditEngine/Outliner) an
     175             :     // dieser Instanz und ausserdem auch den StatusEventHdl.
     176             :     // Ebenso kann eine spezifische OutlinerView vorgegeben werden.
     177             : 
     178             :     virtual sal_Bool SdrBeginTextEdit(SdrObject* pObj, SdrPageView* pPV = 0L, ::Window* pWin = 0L, sal_Bool bIsNewObj = sal_False,
     179             :         SdrOutliner* pGivenOutliner = 0L, OutlinerView* pGivenOutlinerView = 0L,
     180             :         sal_Bool bDontDeleteOutliner = sal_False, sal_Bool bOnlyOneView = sal_False, sal_Bool bGrabFocus = sal_True);
     181             :     // bDontDeleteReally ist ein Spezialparameter fuer den Writer.
     182             :     // Ist dieses Flag gesetzt, dann wird ein evtl. leeres Textobjekt
     183             :     // nicht geloescht. Stattdessen gibt es dann einen Returncode
     184             :     // SDRENDTEXTEDIT_SHOULDBEDELETED (anstelle von SDRENDTEXTEDIT_BEDELETED)
     185             :     // der besagt, dass das Objekt geloescht werden sollte.
     186             :     virtual SdrEndTextEditKind SdrEndTextEdit(sal_Bool bDontDeleteReally = sal_False);
     187             :     virtual bool IsTextEdit() const;
     188             : 
     189             :     // Diese Methode liefert sal_True, wenn der Punkt rHit innerhalb der
     190             :     // des Objektbereichs oder der OutlinerView liegt.
     191             :     sal_Bool IsTextEditHit(const Point& rHit, short nTol) const;
     192             : 
     193             :     // Diese Methode liefert sal_True, wenn der Punkt rHit innerhalb des
     194             :     // Handle-dicken Rahmens liegt, der die OutlinerView bei TextFrames
     195             :     // umschliesst.
     196             :     sal_Bool IsTextEditFrameHit(const Point& rHit) const;
     197             : 
     198             :     // Bei aktiver Selektion, also zwischen MouseButtonDown und
     199             :     // MouseButtonUp liefert diese Methode immer TRUE.
     200             :     sal_Bool IsTextEditInSelectionMode() const;
     201             : 
     202             :     // Wer das z.Zt. im TextEdit befindliche Objekt braucht:
     203         103 :     SdrObject* GetTextEditObject() const { return mxTextEditObj.get(); }
     204             : 
     205             :     // info about TextEditPageView. Default is 0L.
     206             :     virtual SdrPageView* GetTextEditPageView() const;
     207             : 
     208             :     // Das aktuelle Win des Outliners
     209             :     Window* GetTextEditWin() const { return pTextEditWin; }
     210             :     void SetTextEditWin(Window* pWin);
     211             : 
     212             :     // An den hier abgeholten Outliner kann man schliesslich
     213             :     // Events versenden, Attribute setzen, Cut/Copy/Paste rufen,
     214             :     // Undo/Redo rufen, etc.
     215             :     const SdrOutliner* GetTextEditOutliner() const { return pTextEditOutliner; }
     216           0 :     SdrOutliner* GetTextEditOutliner() { return pTextEditOutliner; }
     217             :     const OutlinerView* GetTextEditOutlinerView() const { return pTextEditOutlinerView; }
     218           0 :     OutlinerView* GetTextEditOutlinerView() { return pTextEditOutlinerView; }
     219             : 
     220             :     virtual sal_Bool KeyInput(const KeyEvent& rKEvt, Window* pWin);
     221             :     virtual sal_Bool MouseButtonDown(const MouseEvent& rMEvt, Window* pWin);
     222             :     virtual sal_Bool MouseButtonUp(const MouseEvent& rMEvt, Window* pWin);
     223             :     virtual sal_Bool MouseMove(const MouseEvent& rMEvt, Window* pWin);
     224             :     virtual sal_Bool Command(const CommandEvent& rCEvt, Window* pWin);
     225             : 
     226             :     // #97766# make virtual to change implementation e.g. for SdOutlineView
     227             :     virtual sal_uInt16 GetScriptType() const;
     228             : 
     229             :     /* new interface src537 */
     230             :     sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr=sal_False) const;
     231             : 
     232             :     sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll);
     233             :     SfxStyleSheet* GetStyleSheet() const; // SfxStyleSheet* GetStyleSheet(sal_Bool& rOk) const;
     234             :     sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr);
     235             : 
     236             :     // Intern: Beim Splitteraufziehen neue OutlinerView...
     237             :     virtual void AddWindowToPaintView(OutputDevice* pNewWin);
     238             :     virtual void DeleteWindowFromPaintView(OutputDevice* pOldWin);
     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::GetPreferedPointer() aus. Hat nur Wirkung, wenn das Dokument
     245             :     // Draw-Objekte mit Macrofunktionalitaet hat (SdrObject::HasMacro()==sal_True).
     246             :     void SetMacroMode(sal_Bool bOn) { bMacroMode=bOn; }
     247           0 :     sal_Bool IsMacroMode() const { return bMacroMode; }
     248             :     sal_Bool BegMacroObj(const Point& rPnt, short nTol, SdrObject* pObj, SdrPageView* pPV, Window* pWin);
     249             :     sal_Bool BegMacroObj(const Point& rPnt, SdrObject* pObj, SdrPageView* pPV, Window* pWin) { return BegMacroObj(rPnt,-2,pObj,pPV,pWin); }
     250             :     void MovMacroObj(const Point& rPnt);
     251             :     void BrkMacroObj();
     252             :     sal_Bool EndMacroObj();
     253           0 :     sal_Bool IsMacroObj() const { return pMacroObj!=NULL; }
     254             :     sal_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();
     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 //_SVDEDXV_HXX
     286             : 
     287             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10