You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/kspread/selection.h

256 lines
6.3 KiB

/* This file is part of the KDE project
Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
Copyright (C) 2005-2006 Stefan Nikolaus <stefan.nikolaus@kdemail.net>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef KSPREAD_SELECTION
#define KSPREAD_SELECTION
#include <tqobject.h>
#include <kdebug.h>
#include "region.h"
namespace KSpread
{
class View;
class Selection : public TQObject, public Region
{
Q_OBJECT
public:
Selection(View*);
Selection(const Selection&);
~Selection();
/**
* Sets the selection to the given point
*/
void initialize(const TQPoint&, Sheet* sheet = 0);
/**
* Sets the selection to the given range
*/
void initialize(const TQRect&, Sheet* sheet = 0);
/**
* Sets the selection to the given region
*/
void initialize(const Region&, Sheet* sheet = 0);
/**
* Emits signal changed(const Region&)
*/
void update();
/**
* Uses the anchor as starting point
*/
void update(const TQPoint&);
/**
* Extends the current selection with an additional point
*/
void extend(const TQPoint&, Sheet* sheet = 0);
/**
* Extends the current selection with an additional range
*/
void extend(const TQRect&, Sheet* sheet = 0);
/**
* Extends the current selection with an additional region
*/
void extend(const Region&);
/**
* @param point the point's location
* @param sheet the sheet the point belongs to
*/
virtual Element* eor(const TQPoint& point, Sheet* sheet = 0);
/**
* The anchor is the starting point of a range. For points marker and anchor are the same
*/
const TQPoint& anchor() const;
/**
* The cursor represents the cursor position. This needed for obscured cells
*/
const TQPoint& cursor() const;
/**
* The marker is the end point of a range. For points marker and anchor are the same
*/
const TQPoint& marker() const;
/**
* Checks wether the region consists only of one point
*/
bool isSingular() const;
/**
* @return the area that the 'handle' of the selection is located in painting coordinates
*/
TQRect selectionHandleArea() const;
/**
* @return the name of the region (e.g. "A1:A2")
*/
TQString name(Sheet* originSheet = 0) const;
/**
* Sets the selection's origin sheet.
* @param sheet the sheet from which the selection starts
*/
void setSheet(Sheet* sheet);
/**
* @return the selection's origin sheet
*/
Sheet* sheet() const;
/**
* Sets the element, which has @p point as anchor, as active
*/
void setActiveElement(const TQPoint& point);
/**
* Sets the @p number 'th element as active
*/
void setActiveElement(uint number);
/**
* @return the active element
*/
Element* activeElement() const;
/**
* Sets the starting position and the length of a subregion in a multiple
* selection
*/
void setActiveSubRegion(uint start, uint length);
/**
*
*/
TQString activeSubRegionName() const;
/**
* Clears the elements of the subregion
*/
void clearSubRegion();
/**
* fix subregion dimensions
*/
void fixSubRegionDimension();
/**
* Deletes all elements of the region. The result is an empty region.
*/
virtual void clear();
/**
* Sets, wether multiple selections are allowed.
*/
void setMultipleSelection(bool state);
TQRect lastRange(bool extend = true) const;
TQRect extendToMergedAreas(TQRect area) const;
const TQValueList<TQColor>& colors() const;
// TODO Stefan #2: replace this
TQRect selection(bool extend = true) const;
signals:
void changed(const Region&);
protected:
class Point;
class Range;
virtual Region::Point* createPoint(const TQPoint&) const;
virtual Region::Point* createPoint(const TQString&) const;
virtual Region::Point* createPoint(const Point&) const;
virtual Region::Range* createRange(const TQRect&) const;
virtual Region::Range* createRange(const TQString&) const;
virtual Region::Range* createRange(const Range&) const;
private:
class Private;
Private *d;
};
/***************************************************************************
class Selection::Point
****************************************************************************/
class Selection::Point : public Region::Point
{
public:
Point(const TQPoint& point);
Point(const TQString& string);
void setColor(const TQColor& color) { m_color = color; }
virtual const TQColor& color() const { return m_color; }
bool columnFixed() const { return m_columnFixed; }
bool rowFixed() const { return m_rowFixed; }
protected:
private:
TQColor m_color;
bool m_columnFixed : 1;
bool m_rowFixed : 1;
};
/***************************************************************************
class Selection::Range
****************************************************************************/
class Selection::Range : public Region::Range
{
public:
Range(const TQRect& rect);
Range(const TQString& string);
virtual bool isColorizable() const { return true; }
void setColor(const TQColor& color) { m_color = color; }
const TQColor& color() const { return m_color; }
protected:
private:
TQColor m_color;
bool m_leftFixed : 1;
bool m_rightFixed : 1;
bool m_topFixed : 1;
bool m_bottomFixed : 1;
};
} // namespace KSpread
/***************************************************************************
kdDebug support
****************************************************************************/
inline kdbgstream operator<<( kdbgstream str, const KSpread::Selection& s )
{
str << "Selection = " << s.name();
return str;
}
inline kndbgstream operator<<( kndbgstream str, const KSpread::Selection& )
{
return str;
}
#endif // KSPREAD_SELECTION