office-gobmx/svx/inc/svx/svdmark.hxx
Michael Meeks 0a063f3a36 re-base on ALv2 code. Includes:
Patch contributed by Christian Lippka
    impress212: #i113063# patch: dubios self assign in svx/source/dialog/framelink.cxx
    http://svn.apache.org/viewvc?view=revision&revision=1167619

    Patches contributed by Mathias Bauer
    gnumake4 work variously
    http://svn.apache.org/viewvc?view=revision&revision=1394707
    http://svn.apache.org/viewvc?view=revision&revision=1394326
    cws mba34issues01: #i117712#: fix several resource errors introduced by
    IAccessible2 implementation
    http://svn.apache.org/viewvc?view=revision&revision=1172343
    cws mba34issues01: #i117719#: use correct resource ID
    http://svn.apache.org/viewvc?view=revision&revision=1172351

    Patch contributed by Andre Fischer
    Do not add targets for junit tests when junit is disabled.
    http://svn.apache.org/viewvc?view=revision&revision=1241508

    Patches contributed by Armin Le-Grand
    #118804# corrected GraphicExporter behaviour on shortcut when pixel graphic is requested
    http://svn.apache.org/viewvc?view=revision&revision=1240195
    fix for #118525#: Using primitives for chart sub-geometry visualisation
    http://svn.apache.org/viewvc?view=revision&revision=1226879
    #118485# - Styles for OLEs are not saved.
    http://svn.apache.org/viewvc?view=revision&revision=1182166
    #118524: apply patch, followup fixes to 118485
    http://svn.apache.org/viewvc?view=revision&revision=1186077 13f79535-47bb-0310-9956-ffa450edef68

    Patch contributed by Regina Henschel
    linecap: Reintegrating finished LineCap feature
    http://svn.apache.org/viewvc?view=revision&revision=1232507

    Patch contributed by Wang Lei (leiw)
    #i118760# split the first table cell vertically, then undo&redo,
    the Presentation app will crash
    http://svn.apache.org/viewvc?view=revision&revision=1301361

cleanup globlmn hacks, undo dependent fixmes.
2012-11-27 12:55:10 +00:00

298 lines
7.9 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
#ifndef _SVDMARK_HXX
#define _SVDMARK_HXX
#include <vector>
#include <tools/string.hxx>
#include "svx/svxdllapi.h"
#include <svx/sdrobjectuser.hxx>
#include <set>
class Rectangle;
class SdrPage;
class SdrObjList;
class SdrObject;
class SdrPageView;
typedef std::set<sal_uInt16> SdrUShortCont;
// Alles was eine View ueber ein markiertes Objekt wissen muss
class SVX_DLLPUBLIC SdrMark : public sdr::ObjectUser
{
protected:
SdrObject* mpSelectedSdrObject; // the seleceted object
SdrPageView* mpPageView;
SdrUShortCont* mpPoints; // Markierte Punkte
SdrUShortCont* mpLines; // Markierte Linienabschnitte
SdrUShortCont* mpGluePoints; // Markierte Klebepunkte (deren Id's)
sal_Bool mbCon1; // fuer Connectoren
sal_Bool mbCon2; // fuer Connectoren
sal_uInt16 mnUser; // z.B. fuer CopyObjects, mitkopieren von Edges
public:
explicit SdrMark(SdrObject* pNewObj = 0L, SdrPageView* pNewPageView = 0L);
SdrMark(const SdrMark& rMark);
virtual ~SdrMark();
// derived from ObjectUser
virtual void ObjectInDestruction(const SdrObject& rObject);
SdrMark& operator=(const SdrMark& rMark);
sal_Bool operator==(const SdrMark& rMark) const;
sal_Bool operator!=(const SdrMark& rMark) const
{
return !(operator==(rMark));
}
void SetMarkedSdrObj(SdrObject* pNewObj);
SdrObject* GetMarkedSdrObj() const;
SdrPageView* GetPageView() const
{
return mpPageView;
}
void SetPageView(SdrPageView* pNewPageView)
{
mpPageView = pNewPageView;
}
void SetCon1(sal_Bool bOn)
{
mbCon1 = bOn;
}
sal_Bool IsCon1() const
{
return mbCon1;
}
void SetCon2(sal_Bool bOn)
{
mbCon2 = bOn;
}
sal_Bool IsCon2() const
{
return mbCon2;
}
void SetUser(sal_uInt16 nVal)
{
mnUser = nVal;
}
sal_uInt16 GetUser() const
{
return mnUser;
}
const SdrUShortCont* GetMarkedPoints() const
{
return mpPoints;
}
const SdrUShortCont* GetMarkedLines() const
{
return mpLines;
}
const SdrUShortCont* GetMarkedGluePoints() const
{
return mpGluePoints;
}
SdrUShortCont* GetMarkedPoints()
{
return mpPoints;
}
SdrUShortCont* GetMarkedLines()
{
return mpLines;
}
SdrUShortCont* GetMarkedGluePoints()
{
return mpGluePoints;
}
SdrUShortCont* ForceMarkedPoints()
{
if(!mpPoints)
mpPoints = new SdrUShortCont;
return mpPoints;
}
SdrUShortCont* ForceMarkedLines()
{
if(!mpLines)
mpLines = new SdrUShortCont;
return mpLines;
}
SdrUShortCont* ForceMarkedGluePoints()
{
if(!mpGluePoints)
mpGluePoints = new SdrUShortCont;
return mpGluePoints;
}
};
class SVX_DLLPUBLIC SdrMarkList
{
protected:
std::vector<SdrMark*> maList;
String maMarkName;
String maPointName;
String maGluePointName;
sal_Bool mbPointNameOk;
sal_Bool mbGluePointNameOk;
sal_Bool mbNameOk;
sal_Bool mbSorted;
private:
SVX_DLLPRIVATE sal_Bool operator==(const SdrMarkList& rCmpMarkList) const;
SVX_DLLPRIVATE void ImpForceSort();
private:
SVX_DLLPRIVATE const XubString& GetPointMarkDescription(sal_Bool bGlue) const;
public:
SdrMarkList()
: maList(),
mbPointNameOk(sal_False),
mbGluePointNameOk(sal_False),
mbNameOk(sal_False),
mbSorted(sal_True)
{
}
SdrMarkList(const SdrMarkList& rLst)
: maList()
{
*this = rLst;
}
~SdrMarkList()
{
Clear();
}
void Clear();
void ForceSort() const;
void SetUnsorted()
{
mbSorted = sal_False;
}
sal_uLong GetMarkCount() const
{
return maList.size();
}
SdrMark* GetMark(sal_uLong nNum) const;
sal_uLong FindObject(const SdrObject* pObj) const;
void InsertEntry(const SdrMark& rMark, sal_Bool bChkSort = sal_True);
void DeleteMark(sal_uLong nNum);
void ReplaceMark(const SdrMark& rNewMark, sal_uLong nNum);
void Merge(const SdrMarkList& rSrcList, sal_Bool bReverse = sal_False);
sal_Bool DeletePageView(const SdrPageView& rPV);
sal_Bool InsertPageView(const SdrPageView& rPV);
void SetNameDirty()
{
mbNameOk = sal_False;
mbPointNameOk = sal_False;
mbGluePointNameOk = sal_False;
}
// Eine verbale Beschreibung der markierten Objekte z.B.:
// "27 Linien", "12 Objekte", "Polygon" oder auch "Kein Objekt"
const String& GetMarkDescription() const;
const String& GetPointMarkDescription() const
{
return GetPointMarkDescription(sal_False);
}
const String& GetGluePointMarkDescription() const
{
return GetPointMarkDescription(sal_True);
}
// pPage=0L: Die Markierungen aller! Seiten beruecksichtigen
sal_Bool TakeBoundRect(SdrPageView* pPageView, Rectangle& rRect) const;
sal_Bool TakeSnapRect(SdrPageView* pPageView, Rectangle& rRect) const;
// Es werden saemtliche Entries kopiert!
void operator=(const SdrMarkList& rLst);
};
////////////////////////////////////////////////////////////////////////////////////////////////////
// migrate selections
namespace sdr
{
class SVX_DLLPUBLIC ViewSelection
{
SdrMarkList maMarkedObjectList;
SdrMarkList maEdgesOfMarkedNodes;
SdrMarkList maMarkedEdgesOfMarkedNodes;
std::vector<SdrObject*> maAllMarkedObjects;
// bitfield
unsigned mbEdgesOfMarkedNodesDirty : 1;
SVX_DLLPRIVATE void ImpForceEdgesOfMarkedNodes();
SVX_DLLPRIVATE void ImplCollectCompleteSelection(SdrObject* pObj);
public:
ViewSelection();
void SetEdgesOfMarkedNodesDirty();
const SdrMarkList& GetMarkedObjectList() const
{
return maMarkedObjectList;
}
const SdrMarkList& GetEdgesOfMarkedNodes() const;
const SdrMarkList& GetMarkedEdgesOfMarkedNodes() const;
const std::vector<SdrObject*>& GetAllMarkedObjects() const;
SdrMarkList& GetMarkedObjectListWriteAccess()
{
return maMarkedObjectList;
}
};
} // end of namespace sdr
#endif //_SVDMARK_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */