| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _SVDVIEW_HXX |
| #define _SVDVIEW_HXX |
| |
| // HACK to avoid too deep includes and to have some |
| // levels free in svdmark itself (MS compiler include depth limit) |
| #include <svx/svdhdl.hxx> |
| #include <tools/weakbase.hxx> |
| #include <svtools/accessibilityoptions.hxx> |
| #include "svx/svxdllapi.h" |
| #include <svx/svdcrtv.hxx> |
| #include <unotools/options.hxx> |
| #include <basegfx/polygon/b2dpolypolygon.hxx> |
| #include <basegfx/polygon/b2dpolygon.hxx> |
| |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // Klassenhierarchie der View: |
| // SfxListener |
| // SdrPaintView PntV Action ModChg Attr Notify |
| // SdrSnapView SnpV Action |
| // |
| // SdrMarkView MrkV Action MrkChg ModChg Notify |
| // |
| // SdrEditView EdtV MrkChg ModChg Attr |
| // SdrPolyEditView PoEV |
| // SdrGlueEditView GlEV |
| // SdrObjEditView EdxV Action ModChg Attr Notify |
| // |
| // SdrExchangeView XcgV |
| // SdrDragView DrgV Action |
| // |
| // SdrCreateView CrtV Action |
| // SdrView View |
| // |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| |
| //************************************************************ |
| // Vorausdeklarationen |
| //************************************************************ |
| |
| class SvxURLField; |
| |
| //************************************************************ |
| // Defines |
| //************************************************************ |
| |
| enum SdrViewContext {SDRCONTEXT_STANDARD, |
| SDRCONTEXT_POINTEDIT, |
| SDRCONTEXT_GLUEPOINTEDIT, |
| SDRCONTEXT_GRAPHIC, |
| SDRCONTEXT_MEDIA, |
| SDRCONTEXT_TABLE}; |
| |
| enum SdrEventKind {SDREVENT_NONE, |
| SDREVENT_TEXTEDIT, |
| SDREVENT_MOVACTION, |
| SDREVENT_ENDACTION, |
| SDREVENT_BCKACTION, |
| SDREVENT_BRKACTION, |
| SDREVENT_ENDCREATE, |
| SDREVENT_ENDDRAG, |
| SDREVENT_MARKOBJ, |
| SDREVENT_MARKPOINT, |
| SDREVENT_MARKGLUEPOINT, |
| SDREVENT_BEGMARK, |
| SDREVENT_BEGINSOBJPOINT, |
| SDREVENT_ENDINSOBJPOINT, |
| SDREVENT_BEGINSGLUEPOINT, |
| SDREVENT_BEGDRAGHELPLINE, |
| SDREVENT_BEGDRAGOBJ, |
| SDREVENT_BEGCREATEOBJ, |
| SDREVENT_BEGMACROOBJ, |
| SDREVENT_BEGTEXTEDIT, |
| SDREVENT_ENDMARK, |
| SDREVENT_BRKMARK, |
| SDREVENT_EXECUTEURL}; |
| |
| #define SDRMOUSEBUTTONDOWN 1 |
| #define SDRMOUSEMOVE 2 |
| #define SDRMOUSEBUTTONUP 3 |
| |
| //************************************************************ |
| // Hilfsklasse SdrViewEvent |
| //************************************************************ |
| |
| struct SVX_DLLPUBLIC SdrViewEvent |
| { |
| SdrHdl* pHdl; |
| SdrObject* pObj; |
| SdrObject* pRootObj; // Dieses Markieren bei SdrBeginTextEdit |
| SdrPageView* pPV; |
| const SvxURLField* pURLField; |
| |
| Point aLogicPos; |
| SdrHitKind eHit; |
| SdrEventKind eEvent; |
| SdrHdlKind eHdlKind; |
| SdrCreateCmd eEndCreateCmd; // auch fuer EndInsPoint |
| |
| sal_uInt16 nMouseClicks; |
| sal_uInt16 nMouseMode; |
| sal_uInt16 nMouseCode; |
| sal_uInt16 nHlplIdx; |
| sal_uInt16 nGlueId; |
| |
| unsigned bMouseDown : 1; |
| unsigned bMouseUp : 1; |
| unsigned bDoubleHdlSize : 1; // Doppelte Handlegroesse wg. TextEdit |
| unsigned bIsAction : 1; // Action ist aktiv |
| unsigned bIsTextEdit : 1; // TextEdit laeuft zur Zeit |
| unsigned bTextEditHit : 1; // offene OutlinerView getroffen |
| unsigned bAddMark : 1; |
| unsigned bUnmark : 1; |
| unsigned bPrevNextMark : 1; |
| unsigned bMarkPrev : 1; |
| unsigned bInsPointNewObj : 1; |
| unsigned bDragWithCopy : 1; |
| unsigned bCaptureMouse : 1; |
| unsigned bReleaseMouse : 1; |
| |
| public: |
| SdrViewEvent(); |
| ~SdrViewEvent(); |
| |
| // nEventKind ist SDRMOUSEBUTTONDOWN, SDRMOUSEMOVE oder SDRMOUSEBUTTONUP |
| void SetMouseEvent(const MouseEvent& rMEvt, sal_uInt16 nEventKind); |
| }; |
| |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| // helper class for all D&D overlays |
| |
| class SVX_DLLPUBLIC SdrDropMarkerOverlay |
| { |
| // The OverlayObjects |
| ::sdr::overlay::OverlayObjectList maObjects; |
| |
| void ImplCreateOverlays( |
| const SdrView& rView, |
| const basegfx::B2DPolyPolygon& rLinePolyPolygon); |
| |
| public: |
| SdrDropMarkerOverlay(const SdrView& rView, const SdrObject& rObject); |
| SdrDropMarkerOverlay(const SdrView& rView, const Rectangle& rRectangle); |
| SdrDropMarkerOverlay(const SdrView& rView, const Point& rStart, const Point& rEnd); |
| ~SdrDropMarkerOverlay(); |
| }; |
| |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // @@ @@ @@ @@@@@ @@ @@ |
| // @@ @@ @@ @@ @@ @@ |
| // @@ @@ @@ @@ @@ @ @@ |
| // @@@@@ @@ @@@@ @@@@@@@ |
| // @@@ @@ @@ @@@@@@@ |
| // @@@ @@ @@ @@@ @@@ |
| // @ @@ @@@@@ @@ @@ |
| // |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| |
| class SVX_DLLPUBLIC SdrView: public SdrCreateView, public tools::WeakBase< SdrView > |
| { |
| friend class SdrPageView; |
| |
| unsigned bNoExtendedMouseDispatcher : 1; |
| unsigned bNoExtendedKeyDispatcher : 1; |
| unsigned bNoExtendedCommandDispatcher : 1; |
| unsigned bTextEditOnObjectsWithoutTextIfTextTool : 1; |
| unsigned mbMasterPagePaintCaching : 1; |
| |
| protected: |
| SvtAccessibilityOptions maAccessibilityOptions; |
| |
| public: |
| TYPEINFO(); |
| SdrView(SdrModel* pModel1, OutputDevice* pOut = 0L); |
| virtual ~SdrView(); |
| |
| // Default sind alle Dispatcher aktiviert. Will die App z.B. fuer |
| // Sonderbehandlungen im MouseDispatcher eingreifen, so muss sie |
| // den erweiterten MouseDispather mit unten stehender Methode deaktivieren |
| // und selbst nachimplementieren. Beispiel fuer MouseButtonDown: |
| // SdrViewEvent aVEvt; |
| // SdrHitKind eHit=pSdrView->PickAnything(rMEvt,SDRMOUSEBUTTONDOWN,aVEvt); |
| // ... hier Applikationsspezifischer Eingriff ... |
| // pSdrView->DoMouseEvent(aVEvt); |
| // SetPointer(GetPreferedPointer(...)) |
| // CaptureMouse(...) |
| void EnableExtendedMouseEventDispatcher(sal_Bool bOn) { bNoExtendedMouseDispatcher = !bOn; } |
| sal_Bool IsExtendedMouseEventDispatcherEnabled() const { return bNoExtendedMouseDispatcher; } |
| |
| void EnableExtendedKeyInputDispatcher(sal_Bool bOn) { bNoExtendedKeyDispatcher=!bOn; } |
| sal_Bool IsExtendedKeyInputDispatcherEnabled() const { return bNoExtendedKeyDispatcher; } |
| |
| void EnableExtendedCommandEventDispatcher(sal_Bool bOn) { bNoExtendedCommandDispatcher=!bOn; } |
| sal_Bool IsExtendedCommandEventDispatcherEnabled() const { return bNoExtendedCommandDispatcher; } |
| |
| void EnableTextEditOnObjectsWithoutTextIfTextTool(sal_Bool bOn) { bTextEditOnObjectsWithoutTextIfTextTool=bOn; } |
| sal_Bool IsEnableTextEditOnObjectsWithoutTextIfTextToolEnabled() const { return bTextEditOnObjectsWithoutTextIfTextTool; } |
| |
| void SetMasterPagePaintCaching(sal_Bool bOn); |
| sal_Bool IsMasterPagePaintCaching() const { return mbMasterPagePaintCaching; } |
| |
| sal_Bool KeyInput(const KeyEvent& rKEvt, Window* pWin); |
| virtual sal_Bool MouseButtonDown(const MouseEvent& rMEvt, Window* pWin); |
| virtual sal_Bool MouseButtonUp(const MouseEvent& rMEvt, Window* pWin); |
| virtual sal_Bool MouseMove(const MouseEvent& rMEvt, Window* pWin); |
| virtual sal_Bool Command(const CommandEvent& rCEvt, Window* pWin); |
| |
| virtual void ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 ); |
| |
| sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll=sal_False) { return SdrCreateView::SetAttributes(rSet,bReplaceAll); } |
| sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr=sal_False) { return SdrCreateView::SetStyleSheet(pStyleSheet,bDontRemoveHardAttr); } |
| |
| /* new interface src537 */ |
| sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr=sal_False) const; |
| |
| SfxStyleSheet* GetStyleSheet() const; |
| |
| // unvollstaendige Implementation: |
| // Das OutputDevice ist notwendig, damit ich die HandleSize ermitteln kann. |
| // Bei NULL wird das 1. angemeldete Win verwendet. |
| Pointer GetPreferedPointer(const Point& rMousePos, const OutputDevice* pOut, sal_uInt16 nModifier=0, sal_Bool bLeftDown=sal_False) const; |
| SdrHitKind PickAnything(const MouseEvent& rMEvt, sal_uInt16 nMouseDownOrMoveOrUp, SdrViewEvent& rVEvt) const; |
| SdrHitKind PickAnything(const Point& rLogicPos, SdrViewEvent& rVEvt) const; |
| sal_Bool DoMouseEvent(const SdrViewEvent& rVEvt); |
| virtual SdrViewContext GetContext() const; |
| |
| // Die Methoden beruecksichtigen den jeweiligen Kontex: |
| // - Einfaches Zeichnen |
| // - Punktbearbeitungs-Mode |
| // - Klebepunkt-Editmode |
| // - TextEdit |
| // - ... to be continued |
| sal_Bool IsMarkPossible() const; |
| void MarkAll(); |
| void UnmarkAll(); |
| sal_Bool IsAllMarked() const; |
| sal_Bool IsAllMarkPrevNextPossible() const; // das geht naemlich nicht bei TextEdit! |
| sal_Bool MarkNext(sal_Bool bPrev=sal_False); |
| sal_Bool MarkNext(const Point& rPnt, sal_Bool bPrev=sal_False); |
| |
| const Rectangle& GetMarkedRect() const; |
| void SetMarkedRect(const Rectangle& rRect); |
| |
| virtual void DeleteMarked(); |
| sal_Bool IsDeleteMarkedPossible() const; |
| sal_Bool IsDeletePossible() const { return IsDeleteMarkedPossible(); } |
| |
| // Markieren von Objekten, Polygonpunkten oder Klebepunkten (je nach View- |
| // Kontext) durch Aufziehen eines Selektionsrahmens. |
| // bAddMark=TRUE: zur bestehenden Selektion hinzumarkieren (->Shift) |
| // bUnmark=TRUE: Bereits selektierte Objekte/Punkte/Klebepunkte die innerhalb |
| // des aufgezogenen Rahmens liegen werden deselektiert. |
| sal_Bool BegMark(const Point& rPnt, sal_Bool bAddMark=sal_False, sal_Bool bUnmark=sal_False); |
| |
| // Folgende Actions sind moeglich: |
| // - ObjectCreating |
| // - ObjectMarking |
| // - Object-specific dragging |
| // - General dragging |
| // und mehr... |
| String GetStatusText(); |
| |
| SvtAccessibilityOptions& getAccessibilityOptions(); |
| |
| virtual void onAccessibilityOptionsChanged(); |
| }; |
| |
| #endif //_SVDVIEW_HXX |
| |
| //////////////////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // Die App macht sich zunaechst ein SdrModel. |
| // Anschliessend oeffnet sie ein Win und erzeugt dann eine SdrView. |
| // An der SdrView meldet sie dann mit der Methode ShowSdrPage() eine Seite an. |
| // Eine SdrView kann in beliebig vielen Fenstern gleichzeitig angezeigt werden. |
| // Intern: |
| // Eine SdrView kann beliebig viele Seiten gleichzeitig anzeigen. Seiten |
| // werden an- und abgemeldet mit ShowSdrPage()/HideSdrPage(). Fuer jede angemeldete |
| // Seite wird eine SdrPageView-Instanz im Container aPages angelegt. Bei |
| // gleichzeitiger Anzeige mehrerer Seiten ist darauf zu achten, dass der Offset- |
| // Parameter von ShowSdrPage() der Seitengroesse angepasst ist, da sich sonst die |
| // Seiten ueberlappen koennten. |
| // |
| // Elementare Methoden: |
| // ~~~~~~~~~~~~~~~~~~~~ |
| // Einfache Events: |
| // ~~~~~~~~~~~~~~~~ |
| // sal_Bool KeyInput(const KeyEvent& rKEvt, Window* pWin); |
| // sal_Bool MouseButtonDown(const MouseEvent& rMEvt, Window* pWin); |
| // sal_Bool MouseButtonUp(const MouseEvent& rMEvt, Window* pWin); |
| // sal_Bool MouseMove(const MouseEvent& rMEvt, Window* pWin); |
| // sal_Bool Command(const CommandEvent& rCEvt, Window* pWin); |
| // |
| // Exchange (Clipboard derzeit noch ohne SdrPrivateData): |
| // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| // sal_Bool Cut(sal_uIntPtr nFormat=SDR_ANYFORMAT); |
| // sal_Bool Yank(sal_uIntPtr nFormat=SDR_ANYFORMAT); |
| // sal_Bool Paste(Window* pWin=NULL, sal_uIntPtr nFormat=SDR_ANYFORMAT); |
| // |
| // SfxItems: |
| // ~~~~~~~~~ |
| // sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr=sal_False) const; |
| // sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll); |
| // SfxStyleSheet* GetStyleSheet() const; |
| // sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr); |
| // |
| // Sonstiges: |
| // ~~~~~~~~~~ |
| // Pointer GetPreferedPointer(const Point& rMousePos, const OutputDevice* pOut, sal_uInt16 nTol=0) const; |
| // String GetStatusText(); |
| // |
| ///////////////////////////////////////////////////////////////////////////////////////////////// */ |
| |