mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-18 17:40:48 +02:00
Show objects preview
This commit is contained in:
parent
8a2864b788
commit
c17b1f909d
@ -622,6 +622,27 @@ void CMap::addNewObject(CGObjectInstance * obj)
|
|||||||
obj->afterAddToMap(this);
|
obj->afterAddToMap(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMap::moveObject(CGObjectInstance * obj, const int3 & pos)
|
||||||
|
{
|
||||||
|
removeBlockVisTiles(obj);
|
||||||
|
obj->pos = pos;
|
||||||
|
addBlockVisTiles(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMap::removeObject(CGObjectInstance * obj)
|
||||||
|
{
|
||||||
|
removeBlockVisTiles(obj);
|
||||||
|
instanceNames.erase(obj->instanceName);
|
||||||
|
|
||||||
|
//update indeces
|
||||||
|
auto iter = std::next(objects.begin(), obj->id.getNum());
|
||||||
|
iter = objects.erase(iter);
|
||||||
|
for(int i = obj->id.getNum(); iter != objects.end(); ++i, ++iter)
|
||||||
|
{
|
||||||
|
(*iter)->id = ObjectInstanceID(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CMap::initTerrain()
|
void CMap::initTerrain()
|
||||||
{
|
{
|
||||||
int level = twoLevel ? 2 : 1;
|
int level = twoLevel ? 2 : 1;
|
||||||
|
@ -364,6 +364,9 @@ public:
|
|||||||
|
|
||||||
///Use only this method when creating new map object instances
|
///Use only this method when creating new map object instances
|
||||||
void addNewObject(CGObjectInstance * obj);
|
void addNewObject(CGObjectInstance * obj);
|
||||||
|
void moveObject(CGObjectInstance * obj, const int3 & dst);
|
||||||
|
void removeObject(CGObjectInstance * obj);
|
||||||
|
|
||||||
|
|
||||||
/// Gets object of specified type on requested position
|
/// Gets object of specified type on requested position
|
||||||
const CGObjectInstance * getObjectiveObjectFrom(int3 pos, Obj::EObj type);
|
const CGObjectInstance * getObjectiveObjectFrom(int3 pos, Obj::EObj type);
|
||||||
|
@ -268,6 +268,16 @@ void CMapEditManager::insertObject(CGObjectInstance * obj)
|
|||||||
execute(make_unique<CInsertObjectOperation>(map, obj));
|
execute(make_unique<CInsertObjectOperation>(map, obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMapEditManager::moveObject(CGObjectInstance * obj, const int3 & pos)
|
||||||
|
{
|
||||||
|
execute(make_unique<CMoveObjectOperation>(map, obj, pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMapEditManager::removeObject(CGObjectInstance * obj)
|
||||||
|
{
|
||||||
|
execute(make_unique<CRemoveObjectOperation>(map, obj));
|
||||||
|
}
|
||||||
|
|
||||||
void CMapEditManager::execute(std::unique_ptr<CMapOperation> && operation)
|
void CMapEditManager::execute(std::unique_ptr<CMapOperation> && operation)
|
||||||
{
|
{
|
||||||
operation->execute();
|
operation->execute();
|
||||||
@ -1072,3 +1082,55 @@ std::string CInsertObjectOperation::getLabel() const
|
|||||||
{
|
{
|
||||||
return "Insert Object";
|
return "Insert Object";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CMoveObjectOperation::CMoveObjectOperation(CMap * map, CGObjectInstance * obj, const int3 & position)
|
||||||
|
: CMapOperation(map), obj(obj), pos(position)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMoveObjectOperation::execute()
|
||||||
|
{
|
||||||
|
map->moveObject(obj, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMoveObjectOperation::undo()
|
||||||
|
{
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMoveObjectOperation::redo()
|
||||||
|
{
|
||||||
|
execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CMoveObjectOperation::getLabel() const
|
||||||
|
{
|
||||||
|
return "Move Object";
|
||||||
|
}
|
||||||
|
|
||||||
|
CRemoveObjectOperation::CRemoveObjectOperation(CMap * map, CGObjectInstance * obj)
|
||||||
|
: CMapOperation(map), obj(obj)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRemoveObjectOperation::execute()
|
||||||
|
{
|
||||||
|
map->removeObject(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRemoveObjectOperation::undo()
|
||||||
|
{
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRemoveObjectOperation::redo()
|
||||||
|
{
|
||||||
|
execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CRemoveObjectOperation::getLabel() const
|
||||||
|
{
|
||||||
|
return "Remove Object";
|
||||||
|
}
|
||||||
|
@ -178,6 +178,8 @@ public:
|
|||||||
void drawRiver(const std::string & riverType, CRandomGenerator * gen = nullptr);
|
void drawRiver(const std::string & riverType, CRandomGenerator * gen = nullptr);
|
||||||
|
|
||||||
void insertObject(CGObjectInstance * obj);
|
void insertObject(CGObjectInstance * obj);
|
||||||
|
void moveObject(CGObjectInstance * obj, const int3 & pos);
|
||||||
|
void removeObject(CGObjectInstance * obj);
|
||||||
|
|
||||||
CTerrainSelection & getTerrainSelection();
|
CTerrainSelection & getTerrainSelection();
|
||||||
CObjectSelection & getObjectSelection();
|
CObjectSelection & getObjectSelection();
|
||||||
@ -418,3 +420,34 @@ public:
|
|||||||
private:
|
private:
|
||||||
CGObjectInstance * obj;
|
CGObjectInstance * obj;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// The CMoveObjectOperation class moves object to another position
|
||||||
|
class CMoveObjectOperation : public CMapOperation
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CMoveObjectOperation(CMap * map, CGObjectInstance * obj, const int3 & position);
|
||||||
|
|
||||||
|
void execute() override;
|
||||||
|
void undo() override;
|
||||||
|
void redo() override;
|
||||||
|
std::string getLabel() const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
CGObjectInstance * obj;
|
||||||
|
int3 pos;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// The CRemoveObjectOperation class removes object from the map
|
||||||
|
class CRemoveObjectOperation : public CMapOperation
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CRemoveObjectOperation(CMap * map, CGObjectInstance * obj);
|
||||||
|
|
||||||
|
void execute() override;
|
||||||
|
void undo() override;
|
||||||
|
void redo() override;
|
||||||
|
std::string getLabel() const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
CGObjectInstance * obj;
|
||||||
|
};
|
||||||
|
@ -37,7 +37,8 @@ void init()
|
|||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) :
|
MainWindow::MainWindow(QWidget *parent) :
|
||||||
QMainWindow(parent),
|
QMainWindow(parent),
|
||||||
ui(new Ui::MainWindow)
|
ui(new Ui::MainWindow),
|
||||||
|
objPreview(128, 128)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
@ -99,6 +100,9 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
sceneMini = new QGraphicsScene(this);
|
sceneMini = new QGraphicsScene(this);
|
||||||
ui->minimapView->setScene(sceneMini);
|
ui->minimapView->setScene(sceneMini);
|
||||||
|
|
||||||
|
scenePreview = new QGraphicsScene(this);
|
||||||
|
ui->objectPreview->setScene(scenePreview);
|
||||||
|
|
||||||
scenes[0]->addPixmap(QPixmap(QString::fromStdString(resPath.native())));
|
scenes[0]->addPixmap(QPixmap(QString::fromStdString(resPath.native())));
|
||||||
|
|
||||||
//loading objects
|
//loading objects
|
||||||
@ -147,6 +151,11 @@ MapHandler * MainWindow::getMapHandler()
|
|||||||
return mapHandler.get();
|
return mapHandler.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::resetMapHandler()
|
||||||
|
{
|
||||||
|
mapHandler.reset(new MapHandler(map.get()));
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::setMapRaw(std::unique_ptr<CMap> cmap)
|
void MainWindow::setMapRaw(std::unique_ptr<CMap> cmap)
|
||||||
{
|
{
|
||||||
map = std::move(cmap);
|
map = std::move(cmap);
|
||||||
@ -285,13 +294,42 @@ void MainWindow::terrainButtonClicked(Terrain terrain)
|
|||||||
|
|
||||||
void MainWindow::loadObjectsTree()
|
void MainWindow::loadObjectsTree()
|
||||||
{
|
{
|
||||||
|
//adding terrains
|
||||||
for(auto & terrain : Terrain::Manager::terrains())
|
for(auto & terrain : Terrain::Manager::terrains())
|
||||||
{
|
{
|
||||||
QPushButton *b = new QPushButton(QString::fromStdString(terrain));
|
QPushButton *b = new QPushButton(QString::fromStdString(terrain));
|
||||||
ui->terrainLayout->addWidget(b);
|
ui->terrainLayout->addWidget(b);
|
||||||
connect(b, &QPushButton::clicked, this, [this, terrain]{ terrainButtonClicked(terrain); });
|
connect(b, &QPushButton::clicked, this, [this, terrain]{ terrainButtonClicked(terrain); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//add spacer to keep terrain button on the top
|
||||||
ui->terrainLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
|
ui->terrainLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
|
||||||
|
|
||||||
|
//model
|
||||||
|
objectsModel.setHorizontalHeaderLabels(QStringList() << QStringLiteral("Type"));
|
||||||
|
|
||||||
|
//adding towns
|
||||||
|
auto * itemGroup = new QStandardItem("TOWNS");
|
||||||
|
for(auto secondaryID : VLC->objtypeh->knownSubObjects(Obj::TOWN))
|
||||||
|
{
|
||||||
|
auto factory = VLC->objtypeh->getHandlerFor(Obj::TOWN, secondaryID);
|
||||||
|
auto * itemType = new QStandardItem(QString::fromStdString(factory->subTypeName));
|
||||||
|
for(int templateId = 0; templateId < factory->getTemplates().size(); ++templateId)
|
||||||
|
{
|
||||||
|
auto templ = factory->getTemplates()[templateId];
|
||||||
|
auto * item = new QStandardItem(QString::fromStdString(templ.stringID));
|
||||||
|
QJsonObject data{{"id", QJsonValue(Obj::TOWN)},
|
||||||
|
{"subid", QJsonValue(secondaryID)},
|
||||||
|
{"animationEditor", QString::fromStdString(templ.editorAnimationFile)},
|
||||||
|
{"animation", QString::fromStdString(templ.animationFile)}};
|
||||||
|
item->setData(data);
|
||||||
|
itemType->appendRow(item);
|
||||||
|
}
|
||||||
|
itemGroup->appendRow(itemType);
|
||||||
|
}
|
||||||
|
objectsModel.appendRow(itemGroup);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
createHandler(bth, "Bonus type", pomtime);
|
createHandler(bth, "Bonus type", pomtime);
|
||||||
createHandler(generaltexth, "General text", pomtime);
|
createHandler(generaltexth, "General text", pomtime);
|
||||||
@ -309,16 +347,14 @@ void MainWindow::loadObjectsTree()
|
|||||||
createHandler(battlefieldsHandler, "Battlefields", pomtime);
|
createHandler(battlefieldsHandler, "Battlefields", pomtime);
|
||||||
createHandler(obstacleHandler, "Obstacles", pomtime);*/
|
createHandler(obstacleHandler, "Obstacles", pomtime);*/
|
||||||
|
|
||||||
std::map<std::string, std::vector<std::string>> identifiers;
|
//for(auto primaryID : VLC->objtypeh->knownObjects())
|
||||||
|
|
||||||
for(auto primaryID : VLC->objtypeh->knownObjects())
|
|
||||||
{
|
{
|
||||||
//QList<QStandardItem*> objTypes;
|
//QList<QStandardItem*> objTypes;
|
||||||
|
|
||||||
for(auto secondaryID : VLC->objtypeh->knownSubObjects(primaryID))
|
//for(auto secondaryID : VLC->objtypeh->knownSubObjects(primaryID))
|
||||||
{
|
{
|
||||||
//QList<QStandardItem*> objSubTypes;
|
//QList<QStandardItem*> objSubTypes;
|
||||||
auto handler = VLC->objtypeh->getHandlerFor(primaryID, secondaryID);
|
//auto handler = VLC->objtypeh->getHandlerFor(primaryID, secondaryID);
|
||||||
|
|
||||||
/*if(handler->isStaticObject())
|
/*if(handler->isStaticObject())
|
||||||
{
|
{
|
||||||
@ -328,22 +364,14 @@ void MainWindow::loadObjectsTree()
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
identifiers[handler->typeName].push_back(handler->subTypeName);
|
//identifiers[handler->typeName].push_back(handler->subTypeName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
objectsModel.setHorizontalHeaderLabels(QStringList() << QStringLiteral("Type"));
|
|
||||||
QList<QStandardItem*> objTypes;
|
|
||||||
for(auto & el1 : identifiers)
|
|
||||||
{
|
|
||||||
auto * objTypei = new QStandardItem(QString::fromStdString(el1.first));
|
|
||||||
for(auto & el2 : el1.second)
|
|
||||||
{
|
|
||||||
objTypei->appendRow(new QStandardItem(QString::fromStdString(el2)));
|
|
||||||
}
|
|
||||||
objectsModel.appendRow(objTypei);
|
|
||||||
}
|
|
||||||
ui->treeView->setModel(&objectsModel);
|
ui->treeView->setModel(&objectsModel);
|
||||||
|
ui->treeView->setSelectionBehavior(QAbstractItemView::SelectItems);
|
||||||
|
ui->treeView->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||||
|
connect(ui->treeView->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(treeViewSelected(const QModelIndex &, const QModelIndex &)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionLevel_triggered()
|
void MainWindow::on_actionLevel_triggered()
|
||||||
@ -372,6 +400,8 @@ void MainWindow::on_actionGrid_triggered(bool checked)
|
|||||||
scenes[0]->gridView.show(checked);
|
scenes[0]->gridView.show(checked);
|
||||||
scenes[1]->gridView.show(checked);
|
scenes[1]->gridView.show(checked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto idx = ui->treeView->selectionModel()->currentIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -412,3 +442,50 @@ void MainWindow::on_toolArea_clicked(bool checked)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::on_toolErase_clicked()
|
||||||
|
{
|
||||||
|
if(map && scenes[mapLevel])
|
||||||
|
{
|
||||||
|
scenes[mapLevel]->selectionObjectsView.deleteSelection();
|
||||||
|
resetMapHandler();
|
||||||
|
scenes[mapLevel]->updateViews();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::treeViewSelected(const QModelIndex & index, const QModelIndex & deselected)
|
||||||
|
{
|
||||||
|
objPreview.fill(QColor(255, 255, 255));
|
||||||
|
auto * item = objectsModel.itemFromIndex(index);
|
||||||
|
if(item)
|
||||||
|
{
|
||||||
|
auto data = item->data().toJsonObject();
|
||||||
|
|
||||||
|
if(!data.empty())
|
||||||
|
{
|
||||||
|
auto animfile = data["animationEditor"];
|
||||||
|
if(animfile != QJsonValue::Undefined)
|
||||||
|
{
|
||||||
|
if(animfile.toString().isEmpty())
|
||||||
|
animfile = data["animation"];
|
||||||
|
|
||||||
|
QPainter painter(&objPreview);
|
||||||
|
Animation animation(animfile.toString().toStdString());
|
||||||
|
animation.preload();
|
||||||
|
auto picture = animation.getImage(0);
|
||||||
|
if(picture && picture->width() && picture->height())
|
||||||
|
{
|
||||||
|
qreal xscale = qreal(128) / qreal(picture->width()), yscale = qreal(128) / qreal(picture->height());
|
||||||
|
qreal scale = std::min(xscale, yscale);
|
||||||
|
painter.scale(scale, scale);
|
||||||
|
painter.drawImage(QPoint(0, 0), *picture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scenePreview->clear();
|
||||||
|
scenePreview->addPixmap(objPreview);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ public:
|
|||||||
|
|
||||||
CMap * getMap();
|
CMap * getMap();
|
||||||
MapHandler * getMapHandler();
|
MapHandler * getMapHandler();
|
||||||
|
void resetMapHandler();
|
||||||
|
|
||||||
void loadObjectsTree();
|
void loadObjectsTree();
|
||||||
|
|
||||||
@ -58,13 +59,21 @@ private slots:
|
|||||||
|
|
||||||
void terrainButtonClicked(Terrain terrain);
|
void terrainButtonClicked(Terrain terrain);
|
||||||
|
|
||||||
|
void on_toolErase_clicked();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
void treeViewSelected(const QModelIndex &selected, const QModelIndex &deselected);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
|
|
||||||
std::unique_ptr<MapHandler> mapHandler;
|
std::unique_ptr<MapHandler> mapHandler;
|
||||||
std::array<MapScene *, 2> scenes;
|
std::array<MapScene *, 2> scenes;
|
||||||
QGraphicsScene * sceneMini;
|
QGraphicsScene * sceneMini;
|
||||||
|
QGraphicsScene * scenePreview;
|
||||||
QPixmap minimap;
|
QPixmap minimap;
|
||||||
|
QPixmap objPreview;
|
||||||
|
|
||||||
std::unique_ptr<CMap> map;
|
std::unique_ptr<CMap> map;
|
||||||
QString filename;
|
QString filename;
|
||||||
|
@ -15,6 +15,18 @@
|
|||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="centralwidget">
|
<widget class="QWidget" name="centralwidget">
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="MapView" name="mapView">
|
<widget class="MapView" name="mapView">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -83,14 +95,14 @@
|
|||||||
</property>
|
</property>
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>0</width>
|
<width>192</width>
|
||||||
<height>0</height>
|
<height>214</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>524287</width>
|
<width>192</width>
|
||||||
<height>524287</height>
|
<height>214</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<attribute name="dockWidgetArea">
|
<attribute name="dockWidgetArea">
|
||||||
@ -104,6 +116,18 @@
|
|||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGraphicsView" name="minimapView">
|
<widget class="QGraphicsView" name="minimapView">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -137,20 +161,20 @@
|
|||||||
</widget>
|
</widget>
|
||||||
<widget class="QDockWidget" name="dockWidget_3">
|
<widget class="QDockWidget" name="dockWidget_3">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>292</width>
|
<width>192</width>
|
||||||
<height>183</height>
|
<height>183</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>524287</width>
|
<width>192</width>
|
||||||
<height>524287</height>
|
<height>524287</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
@ -165,6 +189,18 @@
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -200,7 +236,14 @@
|
|||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="terrainFilterCombo"/>
|
<widget class="QComboBox" name="terrainFilterCombo">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTreeView" name="treeView">
|
<widget class="QTreeView" name="treeView">
|
||||||
@ -210,6 +253,15 @@
|
|||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
|
</property>
|
||||||
|
<property name="selectionBehavior">
|
||||||
|
<enum>QAbstractItemView::SelectItems</enum>
|
||||||
|
</property>
|
||||||
|
<property name="headerHidden">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
@ -222,15 +274,15 @@
|
|||||||
<widget class="QStatusBar" name="statusbar"/>
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
<widget class="QDockWidget" name="dockWidget">
|
<widget class="QDockWidget" name="dockWidget">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>118</width>
|
<width>128</width>
|
||||||
<height>372</height>
|
<height>496</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<attribute name="dockWidgetArea">
|
<attribute name="dockWidgetArea">
|
||||||
@ -251,7 +303,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>118</width>
|
<width>16777215</width>
|
||||||
<height>16777215</height>
|
<height>16777215</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
@ -271,11 +323,17 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox">
|
<widget class="QGroupBox" name="groupBox">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Brush</string>
|
<string>Brush</string>
|
||||||
</property>
|
</property>
|
||||||
@ -313,6 +371,9 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QPushButton" name="toolBrush2">
|
<widget class="QPushButton" name="toolBrush2">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
@ -344,6 +405,9 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QPushButton" name="toolBrush4">
|
<widget class="QPushButton" name="toolBrush4">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
@ -406,6 +470,9 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QPushButton" name="toolLasso">
|
<widget class="QPushButton" name="toolLasso">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
@ -472,21 +539,27 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QToolBox" name="toolBox">
|
<widget class="QToolBox" name="toolBox">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="page3">
|
<widget class="QWidget" name="page3">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>118</width>
|
<width>128</width>
|
||||||
<height>395</height>
|
<height>271</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -521,8 +594,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>118</width>
|
<width>128</width>
|
||||||
<height>395</height>
|
<height>271</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -536,6 +609,14 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="riverPage">
|
<widget class="QWidget" name="riverPage">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>128</width>
|
||||||
|
<height>271</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
@ -548,6 +629,22 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGraphicsView" name="objectPreview">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>128</width>
|
||||||
|
<height>128</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>128</width>
|
||||||
|
<height>128</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -427,7 +427,7 @@ void MapHandler::drawObjectAt(QPainter & painter, const CGObjectInstance * obj,
|
|||||||
auto objData = findObjectBitmap(obj, animationFrame);
|
auto objData = findObjectBitmap(obj, animationFrame);
|
||||||
if (objData.objBitmap)
|
if (objData.objBitmap)
|
||||||
{
|
{
|
||||||
painter.drawImage(QPoint((x - obj->getWidth()) * 32, (y - obj->getHeight()) * 32), *objData.objBitmap);
|
painter.drawImage(QPoint((x + 1) * 32 - objData.objBitmap->width(), (y + 1) * 32 - objData.objBitmap->height()), *objData.objBitmap);
|
||||||
|
|
||||||
//drawObject(targetSurf, objData.objBitmap, &srcRect, objData.isMoving);
|
//drawObject(targetSurf, objData.objBitmap, &srcRect, objData.isMoving);
|
||||||
if (objData.flagBitmap)
|
if (objData.flagBitmap)
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include <QGraphicsSceneMouseEvent>
|
#include <QGraphicsSceneMouseEvent>
|
||||||
|
|
||||||
|
#include "../lib/mapping/CMapEditManager.h"
|
||||||
|
|
||||||
MapView::MapView(QWidget *parent):
|
MapView::MapView(QWidget *parent):
|
||||||
QGraphicsView(parent),
|
QGraphicsView(parent),
|
||||||
selectionTool(MapView::SelectionTool::None)
|
selectionTool(MapView::SelectionTool::None)
|
||||||
@ -120,8 +122,17 @@ void MapView::mouseReleaseEvent(QMouseEvent *event)
|
|||||||
switch(selectionTool)
|
switch(selectionTool)
|
||||||
{
|
{
|
||||||
case MapView::SelectionTool::None:
|
case MapView::SelectionTool::None:
|
||||||
|
//switch position
|
||||||
|
if(sc->selectionObjectsView.applyShift())
|
||||||
|
{
|
||||||
|
main->resetMapHandler();
|
||||||
|
sc->updateViews();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
sc->selectionObjectsView.shift = QPoint(0, 0);
|
sc->selectionObjectsView.shift = QPoint(0, 0);
|
||||||
sc->selectionObjectsView.draw();
|
sc->selectionObjectsView.draw();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -489,6 +500,7 @@ void SelectionObjectsView::update()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
selectedObjects.clear();
|
selectedObjects.clear();
|
||||||
|
shift = QPoint();
|
||||||
|
|
||||||
pixmap.reset(new QPixmap(map->width * 32, map->height * 32));
|
pixmap.reset(new QPixmap(map->width * 32, map->height * 32));
|
||||||
//pixmap->fill(QColor(0, 0, 0, 0));
|
//pixmap->fill(QColor(0, 0, 0, 0));
|
||||||
@ -548,7 +560,7 @@ CGObjectInstance * SelectionObjectsView::selectObjectAt(int x, int y)
|
|||||||
|
|
||||||
if(object.obj->visitableAt(x, y))
|
if(object.obj->visitableAt(x, y))
|
||||||
{
|
{
|
||||||
selectedObjects.insert(objects.back().obj);
|
selectedObjects.insert(object.obj);
|
||||||
return object.obj;
|
return object.obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -561,7 +573,7 @@ CGObjectInstance * SelectionObjectsView::selectObjectAt(int x, int y)
|
|||||||
|
|
||||||
if(object.obj->blockingAt(x, y))
|
if(object.obj->blockingAt(x, y))
|
||||||
{
|
{
|
||||||
selectedObjects.insert(objects.back().obj);
|
selectedObjects.insert(object.obj);
|
||||||
return object.obj;
|
return object.obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -574,7 +586,7 @@ CGObjectInstance * SelectionObjectsView::selectObjectAt(int x, int y)
|
|||||||
|
|
||||||
if(object.obj->coveringAt(x, y))
|
if(object.obj->coveringAt(x, y))
|
||||||
{
|
{
|
||||||
selectedObjects.insert(objects.back().obj);
|
selectedObjects.insert(object.obj);
|
||||||
return object.obj;
|
return object.obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -582,6 +594,30 @@ CGObjectInstance * SelectionObjectsView::selectObjectAt(int x, int y)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SelectionObjectsView::applyShift()
|
||||||
|
{
|
||||||
|
if(shift.x() || shift.y())
|
||||||
|
{
|
||||||
|
for(auto * obj : selectedObjects)
|
||||||
|
{
|
||||||
|
int3 pos = obj->pos;
|
||||||
|
pos.x += shift.x(); pos.y += shift.y();
|
||||||
|
main->getMap()->getEditManager()->moveObject(obj, pos);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SelectionObjectsView::deleteSelection()
|
||||||
|
{
|
||||||
|
for(auto * obj : selectedObjects)
|
||||||
|
{
|
||||||
|
main->getMap()->getEditManager()->removeObject(obj);
|
||||||
|
}
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
|
||||||
std::set<CGObjectInstance *> SelectionObjectsView::selectObjects(int x1, int y1, int x2, int y2)
|
std::set<CGObjectInstance *> SelectionObjectsView::selectObjects(int x1, int y1, int x2, int y2)
|
||||||
{
|
{
|
||||||
std::set<CGObjectInstance *> result;
|
std::set<CGObjectInstance *> result;
|
||||||
|
@ -139,6 +139,9 @@ public:
|
|||||||
void moveSelection(int x, int y);
|
void moveSelection(int x, int y);
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
|
bool applyShift();
|
||||||
|
void deleteSelection();
|
||||||
|
|
||||||
QPoint shift;
|
QPoint shift;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
Reference in New Issue
Block a user