apparently an older version was provided earlier and this one is newer and theoretically desync free. untested.
/*
* Hedgewars, a free turn based strategy game
* Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
*
* 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; version 2 of the License
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#include <QFile>
#include <QMessageBox>
#include <QEvent>
#include <QDebug>
#include "drawmapwidget.h"
DrawMapWidget::DrawMapWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::DrawMapWidget)
{
ui->setupUi(this);
m_scene = 0;
}
DrawMapWidget::~DrawMapWidget()
{
delete ui;
}
void DrawMapWidget::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type())
{
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void DrawMapWidget::setScene(DrawMapScene * scene)
{
m_scene = scene;
ui->graphicsView->setScene(scene);
connect(scene, SIGNAL(pathChanged()), this, SLOT(pathChanged()));
}
void DrawMapWidget::resizeEvent(QResizeEvent * event)
{
Q_UNUSED(event);
if(ui->graphicsView && ui->graphicsView->scene())
ui->graphicsView->fitInView(ui->graphicsView->scene()->sceneRect(), Qt::KeepAspectRatio);
}
void DrawMapWidget::showEvent(QShowEvent * event)
{
Q_UNUSED(event);
resizeEvent(0);
}
void DrawMapWidget::undo()
{
if(m_scene) m_scene->undo();
}
void DrawMapWidget::clear()
{
if(m_scene) m_scene->clearMap();
}
void DrawMapWidget::setErasing(bool erasing)
{
if(m_scene) m_scene->setErasing(erasing);
}
void DrawMapWidget::save(const QString & fileName)
{
if(m_scene)
{
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly))
{
QMessageBox errorMsg(this);
errorMsg.setIcon(QMessageBox::Warning);
errorMsg.setWindowTitle(QMessageBox::tr("File error"));
errorMsg.setText(QMessageBox::tr("Cannot open '%1' for writing").arg(fileName));
errorMsg.setWindowModality(Qt::WindowModal);
errorMsg.exec();
}
else
file.write(qCompress(m_scene->encode()).toBase64());
}
}
void DrawMapWidget::load(const QString & fileName)
{
if(m_scene)
{
QFile f(fileName);
if(!f.open(QIODevice::ReadOnly))
{
QMessageBox errorMsg(this);
errorMsg.setIcon(QMessageBox::Warning);
errorMsg.setWindowTitle(QMessageBox::tr("File error"));
errorMsg.setText(QMessageBox::tr("Cannot open '%1' for reading").arg(fileName));
errorMsg.setWindowModality(Qt::WindowModal);
errorMsg.exec();
}
else
m_scene->decode(qUncompress(QByteArray::fromBase64(f.readAll())));
}
}
void DrawMapWidget::pathChanged()
{
ui->lblPoints->setNum(m_scene->pointsCount());
}
DrawMapView::DrawMapView(QWidget *parent) :
QGraphicsView(parent)
{
setMouseTracking(true);
m_scene = 0;
}
DrawMapView::~DrawMapView()
{
}
void DrawMapView::setScene(DrawMapScene *scene)
{
m_scene = scene;
QGraphicsView::setScene(scene);
}
// Why don't I ever recieve this event?
void DrawMapView::enterEvent(QEvent *event)
{
if(m_scene)
m_scene->showCursor();
QGraphicsView::enterEvent(event);
}
void DrawMapView::leaveEvent(QEvent *event)
{
if(m_scene)
m_scene->hideCursor();
QGraphicsView::leaveEvent(event);
}
bool DrawMapView::viewportEvent(QEvent *event)
{
return QGraphicsView::viewportEvent(event);
}