Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
* Scripting: Added API for custom property types (with dogboydog, #3971)
* Scripting: Added TileMap.chunkSize and TileMap.compressionLevel properties
* Scripting: Added tiled.session to read and write session properties (by Kanishka, #4345)
* Scripting: Added MapEditor.selectedTool and MapEditor.tool (#4330)
* AutoMapping: Don't match rules based on empty input indexes
* AutoMapping: Optimized reloading of rule maps and load rule maps on-demand
* tBIN plugin: Added support for the tIDE XML format (by Casey Warrington, #4308)
Expand Down
45 changes: 45 additions & 0 deletions docs/scripting-doc/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2772,6 +2772,51 @@ interface MapEditor {
* Access the Tilesets view.
*/
readonly tilesetsView: TilesetsView;

/**
* Get or set the currently selected tool.
*
* @since 1.12
*/
selectedTool: Tool | null;

/**
* Signal emitted when {@link selectedTool} changes.
*
* @since 1.12
*/
readonly selectedToolChanged: Signal<Tool | null>;

/**
* Returns the tool with the given `shortName`, or `null` if no tool was found.
*
* Can be used to retrieve tools registered with {@link tiled.registerTool}
* as well as the built-in tools:
*
* - BucketFillTool
* - CreateCapsuleObjectTool
* - CreateEllipseObjectTool
* - CreatePointObjectTool
* - CreatePolygonObjectTool
* - CreateRectangleObjectTool
* - CreateTemplateTool
* - CreateTileObjectTool
* - EditPolygonTool
* - EraserTool
* - LayerOffsetTool
* - MagicWandTool
* - ObjectReferenceTool (hidden)
* - ObjectSelectionTool
* - SelectSameTileTool
* - ShapeFillTool
* - StampTool
* - TileSelectionTool
* - WangTool
* - WorldMoveMapTool
*
* @since 1.12
*/
tool(shortName: string): Tool | null;
}

/**
Expand Down
16 changes: 11 additions & 5 deletions src/tiled/mapeditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -289,9 +289,9 @@ MapEditor::MapEditor(QObject *parent)
connect(mTileStampsDock, &TileStampsDock::setStamp,
this, &MapEditor::setStamp);

setSelectedTool(mToolManager->selectedTool());
onSelectedToolChanged(mToolManager->selectedTool());
connect(mToolManager, &ToolManager::selectedToolChanged,
this, &MapEditor::setSelectedTool);
this, &MapEditor::onSelectedToolChanged);

setupQuickStamps();
retranslateUi();
Expand Down Expand Up @@ -645,7 +645,7 @@ void MapEditor::restoreDocumentState(MapDocument *mapDocument) const
mapDocument->switchCurrentLayer(layer);
}

void MapEditor::setSelectedTool(AbstractTool *tool)
void MapEditor::onSelectedToolChanged(AbstractTool *tool)
{
if (mSelectedTool == tool)
return;
Expand Down Expand Up @@ -676,6 +676,7 @@ void MapEditor::setSelectedTool(AbstractTool *tool)
}

updateActiveUndoStack();
emit selectedToolChanged(tool);
}

void MapEditor::updateActiveUndoStack()
Expand Down Expand Up @@ -1097,9 +1098,14 @@ void MapEditor::setCurrentWangColorIndex(int newIndex)
mWangDock->setCurrentWangColor(newIndex);
}

AbstractTool *MapEditor::selectedTool() const
void MapEditor::setSelectedTool(AbstractTool *tool)
{
mToolManager->selectTool(tool);
}

AbstractTool *MapEditor::tool(const QByteArray &id) const
{
return mSelectedTool;
return mToolManager->findTool(id);
}

} // namespace Tiled
Expand Down
13 changes: 11 additions & 2 deletions src/tiled/mapeditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@

#include "clipboardmanager.h"
#include "editor.h"
#include "tiled.h"
#include "tileset.h"

#include <memory>
Expand Down Expand Up @@ -77,6 +76,7 @@ class MapEditor final : public Editor
Q_PROPERTY(Tiled::EditableWangSet *currentWangSet READ currentWangSet WRITE setCurrentWangSet NOTIFY currentWangSetChanged)
Q_PROPERTY(int currentWangColorIndex READ currentWangColorIndex WRITE setCurrentWangColorIndex NOTIFY currentWangColorIndexChanged)
Q_PROPERTY(Tiled::MapView *currentMapView READ currentMapView CONSTANT)
Q_PROPERTY(Tiled::AbstractTool *selectedTool READ selectedTool WRITE setSelectedTool NOTIFY selectedToolChanged)

public:
explicit MapEditor(QObject *parent = nullptr);
Expand Down Expand Up @@ -131,14 +131,18 @@ class MapEditor final : public Editor
QAction *actionSelectPreviousTileset() const;

AbstractTool *selectedTool() const;
void setSelectedTool(AbstractTool *tool);

Q_INVOKABLE AbstractTool *tool(const QByteArray &id) const;

signals:
void currentBrushChanged();
void currentWangSetChanged();
void currentWangColorIndexChanged(int colorIndex);
void selectedToolChanged(AbstractTool *tool);

private:
void setSelectedTool(AbstractTool *tool);
void onSelectedToolChanged(AbstractTool *tool);
void currentDocumentChanged(Document *document);
void updateActiveUndoStack();

Expand Down Expand Up @@ -224,4 +228,9 @@ inline MapView *MapEditor::currentMapView() const
return viewForDocument(mCurrentMapDocument);
}

inline AbstractTool *MapEditor::selectedTool() const
{
return mSelectedTool;
}

} // namespace Tiled
11 changes: 11 additions & 0 deletions src/tiled/toolmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,17 @@ bool ToolManager::selectTool(AbstractTool *tool)
return tool == nullptr;
}

AbstractTool *ToolManager::findTool(Id id)
{
const auto actions = mActionGroup->actions();
for (QAction *action : actions) {
AbstractTool *abstractTool = action->data().value<AbstractTool*>();
if (abstractTool->id() == id)
return abstractTool;
}
return nullptr;
}

QAction *ToolManager::findAction(AbstractTool *tool) const
{
const auto actions = mActionGroup->actions();
Expand Down
2 changes: 2 additions & 0 deletions src/tiled/toolmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

#pragma once

#include "id.h"
#include "layer.h"

#include <QActionGroup>
Expand Down Expand Up @@ -63,6 +64,7 @@ class ToolManager : public QObject

template<typename Tool>
Tool *findTool();
AbstractTool *findTool(Id id);

QAction *findAction(AbstractTool *tool) const;

Expand Down
Loading