|
|
|
//
|
|
|
|
// C++ Implementation: k9menueditor
|
|
|
|
//
|
|
|
|
// Description:
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
|
|
|
|
//
|
|
|
|
// Copyright: See COPYING file that comes with this distribution
|
|
|
|
//
|
|
|
|
//
|
|
|
|
#include "k9menueditor.h"
|
|
|
|
#include "k9menubutton.h"
|
|
|
|
#include "k9menuedit.h"
|
|
|
|
#include "k9canvasselection.h"
|
|
|
|
#include <tqwmatrix.h>
|
|
|
|
#include <tqcursor.h>
|
|
|
|
#include <kcursor.h>
|
|
|
|
k9MenuEditor::k9MenuEditor(
|
|
|
|
TQCanvas& c, TQWidget* parent,
|
|
|
|
const char* name, WFlags f) :
|
|
|
|
TQCanvasView(&c,parent,name,f) {
|
|
|
|
this->setMaximumSize(TQSize(724,580));
|
|
|
|
moving=NULL;
|
|
|
|
m_canvasSelection=new k9CanvasSelection(this);
|
|
|
|
viewport()->setMouseTracking(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void k9MenuEditor::contentsMouseReleaseEvent(TQMouseEvent* e) {
|
|
|
|
m_canvasSelection->release();
|
|
|
|
emit itemSelected();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void k9MenuEditor::contentsMousePressEvent(TQMouseEvent* e) {
|
|
|
|
TQPoint p = inverseWorldMatrix().map(e->pos());
|
|
|
|
moving_start = p;
|
|
|
|
TQCanvasItemList l=canvas()->collisions(p);
|
|
|
|
moving=0;
|
|
|
|
for (TQCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
|
|
|
|
TQCanvasItem *item=*it;
|
|
|
|
if (item->rtti()==TQCanvasItem::Rtti_Rectangle)
|
|
|
|
moving = item;
|
|
|
|
if (item->rtti()>2000) {
|
|
|
|
moving=item;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (moving)
|
|
|
|
return;
|
|
|
|
for (TQCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
|
|
|
|
// if ((*it)->rtti()==TQCanvasItem::Rtti_Rectangle)
|
|
|
|
// continue;
|
|
|
|
moving = *it;
|
|
|
|
if (moving->rtti()==1000) {
|
|
|
|
if (e->state() & TQt::ControlButton)
|
|
|
|
addSelection(moving);
|
|
|
|
else {
|
|
|
|
if (!isSelected(moving)) {
|
|
|
|
clearSelection();
|
|
|
|
addSelection(moving);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
m_canvasSelection->setPosition(p);
|
|
|
|
m_canvasSelection->drawSelection();
|
|
|
|
} else if (moving->rtti() <1001 )
|
|
|
|
clearSelection();
|
|
|
|
emit itemSelected();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
m_canvasSelection->setPosition(p);
|
|
|
|
clearSelection();
|
|
|
|
emit itemSelected();
|
|
|
|
}
|
|
|
|
|
|
|
|
void k9MenuEditor::clear() {
|
|
|
|
TQCanvasItemList list = canvas()->allItems();
|
|
|
|
TQCanvasItemList::Iterator it = list.begin();
|
|
|
|
for (; it != list.end(); ++it) {
|
|
|
|
if ( *it )
|
|
|
|
delete *it;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void k9MenuEditor::clearSelection() {
|
|
|
|
for (k9MenuButton *b=m_selection.first();b;b=m_selection.next())
|
|
|
|
b->select(false);
|
|
|
|
m_selection.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool k9MenuEditor::isSelected(TQCanvasItem *_item) {
|
|
|
|
k9CanvasSprite *s=(k9CanvasSprite *)_item;
|
|
|
|
k9MenuButton *button=s->getButton();
|
|
|
|
if (m_selection.find(button) !=-1)
|
|
|
|
return true;
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void k9MenuEditor::addSelection(TQCanvasItem *_item) {
|
|
|
|
k9CanvasSprite *s=(k9CanvasSprite *)_item;
|
|
|
|
k9MenuButton *button=s->getButton();
|
|
|
|
if (m_selection.find(button) !=-1) {
|
|
|
|
button->select(false);
|
|
|
|
m_selection.remove(button);
|
|
|
|
} else {
|
|
|
|
button->select(true);
|
|
|
|
m_selection.append(button);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void k9MenuEditor::updateCursor(TQMouseEvent *e) {
|
|
|
|
TQPoint p = inverseWorldMatrix().map(e->pos());
|
|
|
|
TQCanvasItemList l=canvas()->collisions(p);
|
|
|
|
for (TQCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
|
|
|
|
TQCanvasItem *item=*it;
|
|
|
|
switch (item->rtti()) {
|
|
|
|
case TQCanvasItem::Rtti_Rectangle :
|
|
|
|
setCursor(KCursor::sizeAllCursor());
|
|
|
|
return;
|
|
|
|
case 2002 :
|
|
|
|
case 2008:
|
|
|
|
setCursor(KCursor::sizeFDiagCursor());
|
|
|
|
return;
|
|
|
|
case 2003:
|
|
|
|
case 2007:
|
|
|
|
setCursor(KCursor::sizeVerCursor());
|
|
|
|
return;
|
|
|
|
case 2004:
|
|
|
|
case 2006:
|
|
|
|
setCursor(KCursor::sizeBDiagCursor());
|
|
|
|
return;
|
|
|
|
case 2005:
|
|
|
|
case 2009:
|
|
|
|
setCursor(KCursor::sizeHorCursor());
|
|
|
|
return;
|
|
|
|
default:
|
|
|
|
setCursor(KCursor::arrowCursor());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
setCursor(KCursor::arrowCursor());
|
|
|
|
}
|
|
|
|
|
|
|
|
void k9MenuEditor::contentsMouseMoveEvent(TQMouseEvent* e) {
|
|
|
|
updateCursor(e);
|
|
|
|
if ( moving && (e->state() & TQt::LeftButton ==TQt::LeftButton) ) {
|
|
|
|
if (moving->rtti() !=TQCanvasItem::Rtti_Text || moving==m_menu->getText()) {
|
|
|
|
TQPoint p = inverseWorldMatrix().map(e->pos());
|
|
|
|
int offsetX=p.x() - moving_start.x();
|
|
|
|
int offsetY=p.y() - moving_start.y();
|
|
|
|
moving_start = p;
|
|
|
|
if (moving->rtti()==1000 || moving->rtti() == TQCanvasItem::Rtti_Rectangle) {
|
|
|
|
for (k9MenuButton *b=m_selection.first();b;b=m_selection.next()) {
|
|
|
|
k9CanvasSprite*spr=b->getSprite();
|
|
|
|
spr->moveBy(offsetX,offsetY);
|
|
|
|
spr->update();
|
|
|
|
}
|
|
|
|
|
|
|
|
} else
|
|
|
|
moving->moveBy(offsetX,offsetY);
|
|
|
|
|
|
|
|
if (moving->rtti() >2001 && moving->rtti() <2010) {
|
|
|
|
k9CanvasSelectionRedim *ssr=(k9CanvasSelectionRedim*)moving;
|
|
|
|
ssr->updateSelection();
|
|
|
|
} else if (moving->rtti() != TQCanvasItem::Rtti_Text ){
|
|
|
|
//if selection not resized, move the selection
|
|
|
|
m_canvasSelection->moveBy(offsetX,offsetY);
|
|
|
|
m_canvasSelection->update();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (moving==m_menu->getText())
|
|
|
|
emit m_menu->updateTextPos(TQPoint(moving->x(),moving->y()));
|
|
|
|
canvas()->update();
|
|
|
|
}
|
|
|
|
} else if ((e->state() & TQt::LeftButton) ==TQt::LeftButton ) {
|
|
|
|
m_canvasSelection->hide();
|
|
|
|
canvas()->update();
|
|
|
|
TQPoint p = inverseWorldMatrix().map(e->pos());
|
|
|
|
int offsetX=p.x() - moving_start.x();
|
|
|
|
int offsetY=p.y() - moving_start.y();
|
|
|
|
m_canvasSelection->setSize(offsetX,offsetY);
|
|
|
|
m_canvasSelection->show();
|
|
|
|
canvas()->update();
|
|
|
|
clearSelection();
|
|
|
|
TQCanvasItemList l=canvas()->collisions(m_canvasSelection->getRect());
|
|
|
|
for (TQCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
|
|
|
|
TQCanvasItem *item = *it;
|
|
|
|
if (item->rtti()==1000) {
|
|
|
|
addSelection(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void k9MenuEditor::resizeEvent ( TQResizeEvent * e ) {
|
|
|
|
TQWMatrix m;
|
|
|
|
double scalex=(e->size().width()-4.0)/720.0;
|
|
|
|
double scaley=(e->size().height()-4.0)/576.0;
|
|
|
|
m.scale(TQMIN(scalex,scaley),TQMIN(scalex,scaley));
|
|
|
|
this->setWorldMatrix(m);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
k9MenuButton * k9MenuEditor::getSelected() {
|
|
|
|
/* if (moving) {
|
|
|
|
if (moving->rtti()==1000) {
|
|
|
|
k9CanvasSprite *s=(k9CanvasSprite *)moving;
|
|
|
|
return s->getButton();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
if (m_selection.count() >0)
|
|
|
|
return m_selection.first();
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
TQCanvasItem* k9MenuEditor::getMoving() const {
|
|
|
|
return moving;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void k9MenuEditor::setMoving(TQCanvasItem* _value) {
|
|
|
|
moving = _value;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TQPtrList< k9MenuButton > *k9MenuEditor::getSelection() {
|
|
|
|
return &m_selection;
|
|
|
|
}
|
|
|
|
|
|
|
|
void k9MenuEditor::hideSelection() {
|
|
|
|
m_canvasSelection->hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "k9menueditor.moc"
|