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.
ktechlab/src/itemgroup.h

142 lines
4.3 KiB

/***************************************************************************
* Copyright (C) 2005 by David Saxton *
* david@bluehaze.org *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
#ifndef ITEMGROUP_H
#define ITEMGROUP_H
#include <tqguardedptr.h>
class Item;
class ICNDocument;
class ItemDocument;
class DoubleSpinBox;
class ItemGroup;
class MechanicsDocument;
class Variant;
typedef TQValueList<TQGuardedPtr<Item> > ItemList;
class TQCanvasItem;
class TQCanvasItemList;
/**
Generic base class for controlling a selection of Item. Provides
some functionality such as for dealing with item data
@author David Saxton
*/
class ItemGroup : public TQObject
{
Q_OBJECT
public:
ItemGroup( ItemDocument *view, const char *name = 0 );
virtual ~ItemGroup();
/**
* Returns a pointer to the "active" CNItem - i.e. the last CNItem
* to be added to the CNItemGroup. This will always return a pointer to
* a single item, unless there are no CNItems in the group
*/
Item *activeItem() const { return m_activeItem; }
uint itemCount() const { return m_itemList.count(); }
virtual bool addTQCanvasItem( TQCanvasItem *qcanvasItem ) = 0;
virtual void setItems( TQCanvasItemList list ) = 0;
virtual void removeTQCanvasItem( TQCanvasItem *qcanvasItem ) = 0;
virtual bool contains( TQCanvasItem *qcanvasItem ) const = 0;
virtual uint count() const = 0;
bool isEmpty() const { return (count() == 0); }
virtual void mergeGroup( ItemGroup *group ) = 0;
virtual void removeAllItems() = 0;
virtual void deleteAllItems() = 0;
/**
* Returns a list of all the Items in the group.
* @param excludeParented whether to return items whose (grand-) parents are
* already in the list.
*/
ItemList items( bool excludeParented = true ) const;
/**
* Sets the selected state of all items in the group
*/
virtual void setSelected( bool sel ) = 0;
/**
* Returns true iff either there are no items, or itemsAreSameType and the
* value of each data (excluding hidden data) for each item is the same
*/
bool itemsHaveSameData() const;
/**
* Returns truee iff either there are no items, or itemsAreSameType and the
* value of the data with the given id is the same for each item
*/
bool itemsHaveSameDataValue( const TQString &id ) const;
/**
* Returns true iff all the iff itemsHaveSameData() returns true and the
* value of the data are the defaults
*/
bool itemsHaveDefaultData() const;
/**
* Returns true if all the items in the group are the same (e.g.
* resistors). This is checked for by looking at the ids of the items,
* and seeing if the string before "__#" is the same Note: if there are zero
* items in the group, then this will return true
*/
bool itemsAreSameType() const { return b_itemsAreSameType; }
public slots:
/**
* Align the selected items horizontally so that their positions have the
* same y coordinate.
*/
void slotAlignHorizontally();
/**
* Align the selected items horizontally so that their positions have the
* same x coordinate.
*/
void slotAlignVertically();
/**
* Distribute the selected items horizontally so that they have the same
* spacing in the horizontal direction.
*/
void slotDistributeHorizontally();
/**
* Distribute the selected items vertically so that they have the same
* spacing in the vertical direction.
*/
void slotDistributeVertically();
signals:
void itemAdded( Item *item );
void itemRemoved( Item *item );
protected:
/**
* Subclasses must call this to register the item with the data interface
*/
void registerItem( Item *item );
/**
* Subclasses must call this to unregister the item with the data interface
*/
void unregisterItem( Item *item );
void updateAreSameStatus();
ItemList m_itemList;
bool b_itemsAreSameType;
ItemDocument * p_view;
ICNDocument *p_icnDocument;
MechanicsDocument *p_mechanicsDocument;;
Item *m_activeItem;
private slots:
void getViewPtrs();
};
#endif