[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdeedu/kalzium/src
From: Etienne Rebetez <etienne.rebetez () oberwallis ! ch>
Date: 2011-02-09 22:58:50
Message-ID: 20110209225850.EDCB2AC8C0 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1219644 by erebetez:
reformating, renaming of the periodsystem base and scene class.
work in progress.
M +10 -0 periodictablescene_p.cpp
M +7 -19 periodictablescene_p.h
M +78 -66 periodsystembase.cpp
M +11 -9 periodsystembase.h
--- trunk/KDE/kdeedu/kalzium/src/periodictablescene_p.cpp #1219643:1219644
@@ -44,9 +44,19 @@
}
PeriodicTableScene::~PeriodicTableScene()
+{}
+
+void PeriodicTableScene::addObject(QGraphicsObject* item)
{
+ addItem(item);
+ itemList.append(item);
}
+QList<QGraphicsObject*> PeriodicTableScene::objects() const
+{
+ return itemList;
+}
+
bool PeriodicTableScene::event(QEvent *e)
{
return QGraphicsScene::event(e);
--- trunk/KDE/kdeedu/kalzium/src/periodictablescene_p.h #1219643:1219644
@@ -44,12 +44,13 @@
Q_OBJECT
public:
- /**
- * Constructor.
- */
PeriodicTableScene(QObject *parent = 0);
~PeriodicTableScene();
+ void addObject(QGraphicsObject *object);
+
+ QList<QGraphicsObject*> objects() const;
+
Q_SIGNALS:
/**
* This signal is emitted when an element item is released.
@@ -68,31 +69,18 @@
void slotMouseover();
private:
+ QList<QGraphicsObject*> itemList;
+
QTimer m_hoverTimer;
int m_prevHoverElement;
QPointF m_eventPos;
protected:
- /**
- * Generic event handler, currently defaults to calling parent class
- * (included for future compatibility)
- */
bool event(QEvent *e);
-
- /**
- * Handles the mouse press events to change the active element.
- */
void mousePressEvent(QGraphicsSceneMouseEvent *event);
-
- /**
- * Not used at present.
- */
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-
- /**
- * Opens the Detailed view of the element.
- */
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+
};
--- trunk/KDE/kdeedu/kalzium/src/periodsystembase.cpp #1219643:1219644
@@ -26,7 +26,6 @@
#include "psetables.h"
#include "statemachine.h"
#include "periodsystembase.h"
-#include "numerationitem.h"
#include <prefs.h>
periodSystem::periodSystem(KalziumElementProperty *elProperty, QWidget *parent)
@@ -38,26 +37,25 @@
setMouseTracking( true );
- m_tableTyp = Prefs::table();
- m_maxCoords = pseTables::instance()->getTabletype( m_tableTyp )->coordsMax();
+ m_currentTableInex = Prefs::table();
+ m_hiddenPoint = QPoint(-40, -400);
- m_table = new PeriodicTableScene(this);
- m_table->setItemIndexMethod(QGraphicsScene::NoIndex);
- m_table->setBackgroundBrush(Qt::white);
+ m_tableScene = new PeriodicTableScene(this);
+ m_tableScene->setItemIndexMethod(QGraphicsScene::NoIndex);
+ m_tableScene->setBackgroundBrush(Qt::white);
foreach (int intElement, pseTables::instance()->getTabletype( 0 )->elements()) {
ElementItem *item = new ElementItem(elProperty, intElement);
connect(elProperty, SIGNAL(propertyChanged()), item, SLOT(redraw()));
- m_elementItems << item;
- m_table->addItem(item);
+ m_tableScene->addObject(item);
}
QPalette widgetPalette = palette();
- m_table->setBackgroundBrush(QBrush(widgetPalette.window()));
+ m_tableScene->setBackgroundBrush(QBrush(widgetPalette.window()));
- setScene(m_table);
+ setScene(m_tableScene);
- connect(m_table, SIGNAL(freeSpaceClick()), this, SLOT(fitPseInView()));
+ connect(m_tableScene, SIGNAL(freeSpaceClick()), this, SLOT(fitPseInView()));
setupStatesAndAnimation();
@@ -68,7 +66,8 @@
{
delete scene();
delete m_group;
- qDeleteAll(m_tableStates);
+ qDeleteAll(m_tableStatesList);
+// qDeleteAll(m_numerationItemList);
}
void periodSystem::setupStatesAndAnimation()
@@ -76,32 +75,24 @@
StateSwitcher *stateSwitcher = new StateSwitcher(&m_states);
m_group= new QParallelAnimationGroup;
- // Creating Nummerationitems here, we use the classic periodic table (0) as \
reference (18 in a row)
- QList<NumerationItem *> numerationItems;
- for (int j = 0; j < pseTables::instance()->getTabletype( 0 )->coordsMax().x(); \
++j) {
- numerationItems << new NumerationItem( j );
- m_table->addItem(numerationItems.at( j ));
- connect(this, SIGNAL(numerationChange(int)), numerationItems.at(j), \
SLOT(setNumerationType(int)));
- }
+ createNumerationItems();
// For every Tabletyp the Position of the Elements are set up.
- for (int j = 0; j < pseTables::instance()->tables().count(); ++j)
- {
- m_tableStates << new QState(stateSwitcher);
+ for (int tableIndex = 0; tableIndex < pseTables::instance()->tables().count(); \
++tableIndex) {
+ m_tableStatesList << new QState(stateSwitcher);
+
// First hide every numerationitem. It's easyer this way. Feel free to finde \
a better solution;)
- for (int i = 0; i < numerationItems.count(); ++i) {
- m_tableStates.at(j)->assignProperty(numerationItems.at( i ), "pos", \
QPointF( -m_width, -10 * m_width));
- }
+ hideAllNumerationItems( tableIndex );
// Adding position of Nummeration for each tabletyp
- for (int i = 0; i < pseTables::instance()->getTabletype( j \
)->coordsMax().x() || i < numerationItems.count(); ++i) {
- int itemAtPos = pseTables::instance()->getTabletype( j )->numeration( i \
); + for (int i = 0; i < pseTables::instance()->getTabletype( tableIndex \
)->coordsMax().x() || i < m_numerationItemList.count(); ++i) { + int \
itemAtPos = pseTables::instance()->getTabletype( tableIndex )->numeration( i );
if ( itemAtPos > 0 ) {
- m_tableStates.at(j)->assignProperty(numerationItems.at(itemAtPos - \
1), "pos", QPointF( i * m_width, m_height / 4)); + \
m_tableStatesList.at( tableIndex )->assignProperty(m_numerationItemList.at(itemAtPos \
- 1), "pos", QPointF( i * m_width, m_height / 4)); // Animation for each element
- QPropertyAnimation *anim = new \
QPropertyAnimation(numerationItems.at(itemAtPos - 1), "pos"); + \
QPropertyAnimation *anim = new QPropertyAnimation(m_numerationItemList.at(itemAtPos - \
1), "pos"); anim->setDuration( 1500 + i * 2);
anim->setEasingCurve(QEasingCurve::InOutExpo);
m_group->addAnimation(anim);
@@ -109,54 +100,69 @@
}
// Values for each Element
- for (int i = 0; i < m_elementItems.count(); ++i) {
- ElementItem *item = m_elementItems.at(i);
+ for (int i = 0; i < m_tableScene->objects().count(); ++i) {
+ QPoint coords = pseTables::instance()->getTabletype( tableIndex \
)->elementCoords( i + 1 );
- QPoint coords = pseTables::instance()->getTabletype( j )->elementCoords( \
i + 1 );
-
// put the not needed elements a bit away
if ( coords.x() == 0) {
- coords.setX(-1);
- coords.setY(-10);
+ coords = m_hiddenPoint;
}
- m_tableStates.at(j)->assignProperty(item, "pos", QPointF((coords.x()-1) \
* m_width, (coords.y()) * m_height)); + m_tableStatesList.at( tableIndex \
)->assignProperty( m_tableScene->objects().at(i), "pos", + \
QPointF((coords.x()-1) * m_width, (coords.y()) * m_height));
// Animation for each element
- QPropertyAnimation *anim = new QPropertyAnimation(m_elementItems.at(i), \
"pos"); + QPropertyAnimation *anim = new QPropertyAnimation( \
m_tableScene->objects().at(i), "pos" ); anim->setDuration( 1600 + i * 2);
anim->setEasingCurve(QEasingCurve::InOutExpo);
m_group->addAnimation(anim);
}
// Finally add the states to the statemachine
- stateSwitcher->addState(m_tableStates.at(j), m_group, j);
+ stateSwitcher->addState(m_tableStatesList.at( tableIndex ), m_group, \
tableIndex); }
connect(this , SIGNAL(tableChanged(int)), stateSwitcher, \
SLOT(slotSwitchState(int)));
m_states.setInitialState(stateSwitcher);
- stateSwitcher->setInitialState(m_tableStates.at(m_tableTyp));
+ stateSwitcher->setInitialState( m_tableStatesList.at( m_currentTableInex ) );
m_states.start();
}
+void periodSystem::createNumerationItems() {
+ // Creating Nummerationitems here, we use the classic periodic table (0) as \
reference (18 in a row) + const int xMax = pseTables::instance()->getTabletype( 0 \
)->coordsMax().x();
+ for (int i = 0; i < xMax; ++i) {
+ m_numerationItemList << new NumerationItem( i );
+ m_tableScene->addItem( m_numerationItemList.at( i ) );
+ connect(this, SIGNAL(numerationChange(int)), m_numerationItemList.at( i ), \
SLOT(setNumerationType(int))); + }
+}
+
+void periodSystem::hideAllNumerationItems(int tableIndex) {
+ foreach( NumerationItem *item, m_numerationItemList) {
+ m_tableStatesList.at( tableIndex )->assignProperty( item, "pos", QPointF( \
m_hiddenPoint )); + }
+}
+
+
PeriodicTableScene* periodSystem::pseScene() const
{
- return m_table;
+ return m_tableScene;
}
int periodSystem::table() const
{
- return m_tableTyp;
+ return m_currentTableInex;
}
void periodSystem::slotChangeTable(int table)
{
- Prefs::setTable(table);
- m_tableTyp = table;
- m_maxCoords = pseTables::instance()->getTabletype( m_tableTyp )->coordsMax();
+ m_currentTableInex = table;
+ Prefs::setTable( m_currentTableInex );
+
setBiggerSceneRect();
- emit tableChanged(m_tableTyp);
+ emit tableChanged( m_currentTableInex );
}
void periodSystem::slotSelectElement(int element)
@@ -164,43 +170,36 @@
slotUnSelectElements();
if (element > 0) {
- m_elementItems.at(--element)->setSelected(true);
+ m_tableScene->items().at(--element)->setSelected(true);
}
}
void periodSystem::slotUnSelectElements()
{
- foreach ( QGraphicsItem *item , m_table->selectedItems()) {
+ foreach ( QGraphicsItem *item , m_tableScene->selectedItems()) {
item->setSelected( false );
}
}
-void periodSystem::setBiggerSceneRect()
+bool periodSystem::event(QEvent *e)
{
- QRectF newRect(0, 0, m_table->sceneRect().width(), \
m_table->sceneRect().height());
-
- if (m_table->sceneRect().width() < m_maxCoords.x() * m_width) {
- newRect.setWidth((m_maxCoords.x() + 1) * m_width);
+ return QGraphicsView::event(e);
}
- if ( m_table->sceneRect().height() < m_maxCoords.y() * m_height ) {
- newRect.setHeight((m_maxCoords.y() + 2) * m_height );
- }
+void periodSystem::setBiggerSceneRect()
+{
+ QRectF newRect(0, 0, sceneRect().width(), sceneRect().height());
+ const QPoint maxCoords = pseTables::instance()->getTabletype( m_currentTableInex \
)->coordsMax();
- m_table->setSceneRect(newRect);
+ if (sceneRect().width() < maxCoords.x() * m_width) {
+ newRect.setWidth((maxCoords.x() + 1) * m_width);
}
-void periodSystem::fitPseInView()
-{
- if (operator!=(m_table->sceneRect(), QRectF(0, 0, m_maxCoords.x() * m_width, \
(m_maxCoords.y() + 1) * m_height)) ) {
- m_table->setSceneRect(0, 0, m_maxCoords.x() * m_width, (m_maxCoords.y() + 1) \
* m_height); + if ( sceneRect().height() < maxCoords.y() * m_height ) {
+ newRect.setHeight((maxCoords.y() + 1) * m_height );
}
- fitInView(sceneRect(), Qt::KeepAspectRatio);
-}
-bool periodSystem::event(QEvent *e)
-{
- return QGraphicsView::event(e);
+ setSceneRect(newRect);
}
void periodSystem::resizeEvent ( QResizeEvent * event )
@@ -209,14 +208,27 @@
QGraphicsView::resizeEvent(event);
}
+void periodSystem::fitPseInView()
+{
+ const QPoint maxCoords = pseTables::instance()->getTabletype( m_currentTableInex \
)->coordsMax(); + if (operator!=(sceneRect(), QRectF(0, 0, maxCoords.x() * \
m_width, (maxCoords.y() + 1) * m_height)) ) { + setSceneRect(0, 0, \
maxCoords.x() * m_width, (maxCoords.y() + 1) * m_height); + }
+ fitInView(sceneRect(), Qt::KeepAspectRatio);
+}
+
void periodSystem::generateSvg(const QString& filename)
{
QSvgGenerator *svgGen = new QSvgGenerator();
svgGen->setFileName( filename );
+ const QPoint maxCoords = pseTables::instance()->getTabletype( m_currentTableInex \
)->coordsMax(); +
QPainter painter;
painter.begin( svgGen );
- render( &painter , QRectF(0 , m_height, ( m_maxCoords.x() + 2.5) * m_width, \
(m_maxCoords.y() + 2.5) * m_height), QRect(0 , m_height, ( m_maxCoords.x() + 2.5) * \
m_width, (m_maxCoords.y() + 2.5) * m_height)); + render( &painter ,
+ QRectF(0 , m_height, ( maxCoords.x() + 2.5) * m_width, (maxCoords.y() + \
2.5) * m_height), + QRect(0 , m_height, ( maxCoords.x() + 2.5) * m_width, \
(maxCoords.y() + 2.5) * m_height)); painter.rotate(180);
painter.end();
--- trunk/KDE/kdeedu/kalzium/src/periodsystembase.h #1219643:1219644
@@ -33,6 +33,7 @@
#include "kalziumnumerationtype.h"
#include "elementitem.h"
+#include "numerationitem.h"
#include "periodictablescene_p.h"
@@ -105,26 +106,27 @@
void slotUnSelectElements();
private:
+ void setupStatesAndAnimation();
void setBiggerSceneRect();
- void setupStatesAndAnimation();
- /**
- * Width and height of the elements.
- */
+ void createNumerationItems();
+ void hideAllNumerationItems(int tableIndex);
+
int m_width, m_height;
- int m_tableTyp;
+ int m_currentTableInex;
- QPoint m_maxCoords;
+ QPoint m_hiddenPoint;
QStateMachine m_states;
QParallelAnimationGroup *m_group;
- QList<QState *> m_tableStates;
- QList<ElementItem *> m_elementItems;
+ QList<NumerationItem *> m_numerationItemList;
- PeriodicTableScene *m_table;
+ QList<QState *> m_tableStatesList;
+ PeriodicTableScene *m_tableScene;
+
protected:
/**
* Generic event handler, currently defaults to calling parent class
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic