mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-21 12:53:53 +00:00
Merge branch 'utopium-issue-5005' into 'master'
Issue #5005: Editor : Instance window via Scene window See merge request OpenMW/openmw!112
This commit is contained in:
commit
31b3fcc07e
19 changed files with 114 additions and 1 deletions
|
@ -135,6 +135,7 @@
|
||||||
Feature #4968: Scalable UI widget skins
|
Feature #4968: Scalable UI widget skins
|
||||||
Feature #4994: Persistent pinnable windows hiding
|
Feature #4994: Persistent pinnable windows hiding
|
||||||
Feature #5000: Compressed BSA format support
|
Feature #5000: Compressed BSA format support
|
||||||
|
Feature #5005: Editor: Instance window via Scene window
|
||||||
Feature #5010: Native graphics herbalism support
|
Feature #5010: Native graphics herbalism support
|
||||||
Feature #5031: Make GetWeaponType function return different values for tools
|
Feature #5031: Make GetWeaponType function return different values for tools
|
||||||
Feature #5033: Magic armor mitigation for creatures
|
Feature #5033: Magic armor mitigation for creatures
|
||||||
|
|
|
@ -247,6 +247,9 @@ void CSMPrefs::State::declare()
|
||||||
addValues (landeditOutsideVisibleCell);
|
addValues (landeditOutsideVisibleCell);
|
||||||
declareInt ("texturebrush-maximumsize", "Maximum texture brush size", 50).
|
declareInt ("texturebrush-maximumsize", "Maximum texture brush size", 50).
|
||||||
setMin (1);
|
setMin (1);
|
||||||
|
declareBool ("open-list-view", "Open displays list view", false).
|
||||||
|
setTooltip ("When opening a reference from the scene view, it will open the"
|
||||||
|
" instance list view instead of the individual instance record view.");
|
||||||
|
|
||||||
declareCategory ("Key Bindings");
|
declareCategory ("Key Bindings");
|
||||||
|
|
||||||
|
@ -331,6 +334,7 @@ void CSMPrefs::State::declare()
|
||||||
declareShortcut ("scene-navi-primary", "Camera Rotation From Mouse Movement", QKeySequence(Qt::LeftButton));
|
declareShortcut ("scene-navi-primary", "Camera Rotation From Mouse Movement", QKeySequence(Qt::LeftButton));
|
||||||
declareShortcut ("scene-navi-secondary", "Camera Translation From Mouse Movement",
|
declareShortcut ("scene-navi-secondary", "Camera Translation From Mouse Movement",
|
||||||
QKeySequence(Qt::ControlModifier | (int)Qt::LeftButton));
|
QKeySequence(Qt::ControlModifier | (int)Qt::LeftButton));
|
||||||
|
declareShortcut ("scene-open-primary", "Primary Open", QKeySequence(Qt::ShiftModifier | (int)Qt::LeftButton));
|
||||||
declareShortcut ("scene-edit-primary", "Primary Edit", QKeySequence(Qt::RightButton));
|
declareShortcut ("scene-edit-primary", "Primary Edit", QKeySequence(Qt::RightButton));
|
||||||
declareShortcut ("scene-edit-secondary", "Secondary Edit",
|
declareShortcut ("scene-edit-secondary", "Secondary Edit",
|
||||||
QKeySequence(Qt::ControlModifier | (int)Qt::RightButton));
|
QKeySequence(Qt::ControlModifier | (int)Qt::RightButton));
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "../../model/world/idtable.hpp"
|
#include "../../model/world/idtable.hpp"
|
||||||
|
|
||||||
#include "../world/subviews.hpp"
|
#include "../world/subviews.hpp"
|
||||||
|
#include "../world/scenesubview.hpp"
|
||||||
#include "../world/tablesubview.hpp"
|
#include "../world/tablesubview.hpp"
|
||||||
|
|
||||||
#include "../tools/subviews.hpp"
|
#include "../tools/subviews.hpp"
|
||||||
|
@ -626,6 +627,20 @@ void CSVDoc::View::addSubView (const CSMWorld::UniversalId& id, const std::strin
|
||||||
connect (view, SIGNAL (updateSubViewIndices (SubView *)),
|
connect (view, SIGNAL (updateSubViewIndices (SubView *)),
|
||||||
this, SLOT (updateSubViewIndices (SubView *)));
|
this, SLOT (updateSubViewIndices (SubView *)));
|
||||||
|
|
||||||
|
CSVWorld::TableSubView* tableView = dynamic_cast<CSVWorld::TableSubView*>(view);
|
||||||
|
if (tableView)
|
||||||
|
{
|
||||||
|
connect (this, SIGNAL (requestFocus (const std::string&)),
|
||||||
|
tableView, SLOT (requestFocus (const std::string&)));
|
||||||
|
}
|
||||||
|
|
||||||
|
CSVWorld::SceneSubView* sceneView = dynamic_cast<CSVWorld::SceneSubView*>(view);
|
||||||
|
if (sceneView)
|
||||||
|
{
|
||||||
|
connect(sceneView, SIGNAL(requestFocus(const std::string&)),
|
||||||
|
this, SLOT(onRequestFocus(const std::string&)));
|
||||||
|
}
|
||||||
|
|
||||||
view->show();
|
view->show();
|
||||||
|
|
||||||
if (!hint.empty())
|
if (!hint.empty())
|
||||||
|
@ -1065,3 +1080,16 @@ void CSVDoc::View::createScrollArea()
|
||||||
mScroll->setWidget(&mSubViewWindow);
|
mScroll->setWidget(&mSubViewWindow);
|
||||||
setCentralWidget(mScroll);
|
setCentralWidget(mScroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVDoc::View::onRequestFocus (const std::string& id)
|
||||||
|
{
|
||||||
|
if(CSMPrefs::get()["3D Scene Editing"]["open-list-view"].isTrue())
|
||||||
|
{
|
||||||
|
addReferencesSubView();
|
||||||
|
emit requestFocus(id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
addSubView(CSMWorld::UniversalId (CSMWorld::UniversalId::Type_Reference, id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -140,6 +140,8 @@ namespace CSVDoc
|
||||||
|
|
||||||
void mergeDocument (CSMDoc::Document *document);
|
void mergeDocument (CSMDoc::Document *document);
|
||||||
|
|
||||||
|
void requestFocus (const std::string& id);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
void addSubView (const CSMWorld::UniversalId& id, const std::string& hint = "");
|
void addSubView (const CSMWorld::UniversalId& id, const std::string& hint = "");
|
||||||
|
@ -262,6 +264,8 @@ namespace CSVDoc
|
||||||
void moveScrollBarToEnd(int min, int max);
|
void moveScrollBarToEnd(int min, int max);
|
||||||
|
|
||||||
void merge();
|
void merge();
|
||||||
|
|
||||||
|
void onRequestFocus (const std::string& id);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@ void CSVRender::EditMode::setEditLock (bool locked)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVRender::EditMode::primaryOpenPressed (const WorldspaceHitResult& hit) {}
|
||||||
|
|
||||||
void CSVRender::EditMode::primaryEditPressed (const WorldspaceHitResult& hit) {}
|
void CSVRender::EditMode::primaryEditPressed (const WorldspaceHitResult& hit) {}
|
||||||
|
|
||||||
void CSVRender::EditMode::secondaryEditPressed (const WorldspaceHitResult& hit) {}
|
void CSVRender::EditMode::secondaryEditPressed (const WorldspaceHitResult& hit) {}
|
||||||
|
|
|
@ -39,6 +39,9 @@ namespace CSVRender
|
||||||
/// Default-implementation: Ignored.
|
/// Default-implementation: Ignored.
|
||||||
virtual void setEditLock (bool locked);
|
virtual void setEditLock (bool locked);
|
||||||
|
|
||||||
|
/// Default-implementation: Ignored.
|
||||||
|
virtual void primaryOpenPressed (const WorldspaceHitResult& hit);
|
||||||
|
|
||||||
/// Default-implementation: Ignored.
|
/// Default-implementation: Ignored.
|
||||||
virtual void primaryEditPressed (const WorldspaceHitResult& hit);
|
virtual void primaryEditPressed (const WorldspaceHitResult& hit);
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,8 @@ CSVRender::InstanceMode::InstanceMode (WorldspaceWidget *worldspaceWidget, QWidg
|
||||||
parent), mSubMode (0), mSubModeId ("move"), mSelectionMode (0), mDragMode (DragMode_None),
|
parent), mSubMode (0), mSubModeId ("move"), mSelectionMode (0), mDragMode (DragMode_None),
|
||||||
mDragAxis (-1), mLocked (false), mUnitScaleDist(1)
|
mDragAxis (-1), mLocked (false), mUnitScaleDist(1)
|
||||||
{
|
{
|
||||||
|
connect(this, SIGNAL(requestFocus(const std::string&)),
|
||||||
|
worldspaceWidget, SIGNAL(requestFocus(const std::string&)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVRender::InstanceMode::activate (CSVWidget::SceneToolbar *toolbar)
|
void CSVRender::InstanceMode::activate (CSVWidget::SceneToolbar *toolbar)
|
||||||
|
@ -174,6 +176,18 @@ void CSVRender::InstanceMode::primaryEditPressed (const WorldspaceHitResult& hit
|
||||||
primarySelectPressed (hit);
|
primarySelectPressed (hit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVRender::InstanceMode::primaryOpenPressed (const WorldspaceHitResult& hit)
|
||||||
|
{
|
||||||
|
if(hit.tag)
|
||||||
|
{
|
||||||
|
if (CSVRender::ObjectTag *objectTag = dynamic_cast<CSVRender::ObjectTag *> (hit.tag.get()))
|
||||||
|
{
|
||||||
|
const std::string refId = objectTag->mObject->getReferenceId();
|
||||||
|
emit requestFocus(refId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CSVRender::InstanceMode::secondaryEditPressed (const WorldspaceHitResult& hit)
|
void CSVRender::InstanceMode::secondaryEditPressed (const WorldspaceHitResult& hit)
|
||||||
{
|
{
|
||||||
if (CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue())
|
if (CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue())
|
||||||
|
|
|
@ -55,6 +55,8 @@ namespace CSVRender
|
||||||
|
|
||||||
virtual void setEditLock (bool locked);
|
virtual void setEditLock (bool locked);
|
||||||
|
|
||||||
|
virtual void primaryOpenPressed (const WorldspaceHitResult& hit);
|
||||||
|
|
||||||
virtual void primaryEditPressed (const WorldspaceHitResult& hit);
|
virtual void primaryEditPressed (const WorldspaceHitResult& hit);
|
||||||
|
|
||||||
virtual void secondaryEditPressed (const WorldspaceHitResult& hit);
|
virtual void secondaryEditPressed (const WorldspaceHitResult& hit);
|
||||||
|
@ -83,6 +85,10 @@ namespace CSVRender
|
||||||
|
|
||||||
virtual int getSubMode() const;
|
virtual int getSubMode() const;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
void requestFocus (const std::string& id);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
void subModeChanged (const std::string& id);
|
void subModeChanged (const std::string& id);
|
||||||
|
|
|
@ -63,6 +63,10 @@ namespace CSVRender
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PathgridMode::primaryOpenPressed(const WorldspaceHitResult& hitResult)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void PathgridMode::primaryEditPressed(const WorldspaceHitResult& hitResult)
|
void PathgridMode::primaryEditPressed(const WorldspaceHitResult& hitResult)
|
||||||
{
|
{
|
||||||
if (CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue() &&
|
if (CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue() &&
|
||||||
|
|
|
@ -21,6 +21,8 @@ namespace CSVRender
|
||||||
|
|
||||||
virtual void deactivate(CSVWidget::SceneToolbar* toolbar);
|
virtual void deactivate(CSVWidget::SceneToolbar* toolbar);
|
||||||
|
|
||||||
|
virtual void primaryOpenPressed(const WorldspaceHitResult& hit);
|
||||||
|
|
||||||
virtual void primaryEditPressed(const WorldspaceHitResult& hit);
|
virtual void primaryEditPressed(const WorldspaceHitResult& hit);
|
||||||
|
|
||||||
virtual void secondaryEditPressed(const WorldspaceHitResult& hit);
|
virtual void secondaryEditPressed(const WorldspaceHitResult& hit);
|
||||||
|
|
|
@ -77,6 +77,10 @@ void CSVRender::TerrainTextureMode::deactivate(CSVWidget::SceneToolbar* toolbar)
|
||||||
EditMode::deactivate(toolbar);
|
EditMode::deactivate(toolbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVRender::TerrainTextureMode::primaryOpenPressed(const WorldspaceHitResult& hit) // Apply changes here
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void CSVRender::TerrainTextureMode::primaryEditPressed(const WorldspaceHitResult& hit) // Apply changes here
|
void CSVRender::TerrainTextureMode::primaryEditPressed(const WorldspaceHitResult& hit) // Apply changes here
|
||||||
{
|
{
|
||||||
CSMDoc::Document& document = getWorldspaceWidget().getDocument();
|
CSMDoc::Document& document = getWorldspaceWidget().getDocument();
|
||||||
|
|
|
@ -35,6 +35,8 @@ namespace CSVRender
|
||||||
/// \brief Editmode for terrain texture grid
|
/// \brief Editmode for terrain texture grid
|
||||||
TerrainTextureMode(WorldspaceWidget*, QWidget* parent = nullptr);
|
TerrainTextureMode(WorldspaceWidget*, QWidget* parent = nullptr);
|
||||||
|
|
||||||
|
void primaryOpenPressed (const WorldspaceHitResult& hit);
|
||||||
|
|
||||||
/// \brief Create single command for one-click texture editing
|
/// \brief Create single command for one-click texture editing
|
||||||
void primaryEditPressed (const WorldspaceHitResult& hit);
|
void primaryEditPressed (const WorldspaceHitResult& hit);
|
||||||
|
|
||||||
|
|
|
@ -101,6 +101,9 @@ CSVRender::WorldspaceWidget::WorldspaceWidget (CSMDoc::Document& document, QWidg
|
||||||
// Shortcuts
|
// Shortcuts
|
||||||
CSMPrefs::Shortcut* primaryEditShortcut = new CSMPrefs::Shortcut("scene-edit-primary", "scene-speed-modifier",
|
CSMPrefs::Shortcut* primaryEditShortcut = new CSMPrefs::Shortcut("scene-edit-primary", "scene-speed-modifier",
|
||||||
CSMPrefs::Shortcut::SM_Detach, this);
|
CSMPrefs::Shortcut::SM_Detach, this);
|
||||||
|
CSMPrefs::Shortcut* primaryOpenShortcut = new CSMPrefs::Shortcut("scene-open-primary", this);
|
||||||
|
|
||||||
|
connect(primaryOpenShortcut, SIGNAL(activated(bool)), this, SLOT(primaryOpen(bool)));
|
||||||
connect(primaryEditShortcut, SIGNAL(activated(bool)), this, SLOT(primaryEdit(bool)));
|
connect(primaryEditShortcut, SIGNAL(activated(bool)), this, SLOT(primaryEdit(bool)));
|
||||||
connect(primaryEditShortcut, SIGNAL(secondary(bool)), this, SLOT(speedMode(bool)));
|
connect(primaryEditShortcut, SIGNAL(secondary(bool)), this, SLOT(speedMode(bool)));
|
||||||
|
|
||||||
|
@ -696,6 +699,8 @@ void CSVRender::WorldspaceWidget::handleInteractionPress (const WorldspaceHitRes
|
||||||
editMode.primarySelectPressed (hit);
|
editMode.primarySelectPressed (hit);
|
||||||
else if (type == InteractionType_SecondarySelect)
|
else if (type == InteractionType_SecondarySelect)
|
||||||
editMode.secondarySelectPressed (hit);
|
editMode.secondarySelectPressed (hit);
|
||||||
|
else if (type == InteractionType_PrimaryOpen)
|
||||||
|
editMode.primaryOpenPressed (hit);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSVRender::EditMode *CSVRender::WorldspaceWidget::getEditMode()
|
CSVRender::EditMode *CSVRender::WorldspaceWidget::getEditMode()
|
||||||
|
@ -703,6 +708,11 @@ CSVRender::EditMode *CSVRender::WorldspaceWidget::getEditMode()
|
||||||
return dynamic_cast<CSVRender::EditMode *> (mEditMode->getCurrent());
|
return dynamic_cast<CSVRender::EditMode *> (mEditMode->getCurrent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVRender::WorldspaceWidget::primaryOpen(bool activate)
|
||||||
|
{
|
||||||
|
handleInteraction(InteractionType_PrimaryOpen, activate);
|
||||||
|
}
|
||||||
|
|
||||||
void CSVRender::WorldspaceWidget::primaryEdit(bool activate)
|
void CSVRender::WorldspaceWidget::primaryEdit(bool activate)
|
||||||
{
|
{
|
||||||
handleInteraction(InteractionType_PrimaryEdit, activate);
|
handleInteraction(InteractionType_PrimaryEdit, activate);
|
||||||
|
|
|
@ -91,6 +91,7 @@ namespace CSVRender
|
||||||
InteractionType_PrimarySelect,
|
InteractionType_PrimarySelect,
|
||||||
InteractionType_SecondaryEdit,
|
InteractionType_SecondaryEdit,
|
||||||
InteractionType_SecondarySelect,
|
InteractionType_SecondarySelect,
|
||||||
|
InteractionType_PrimaryOpen,
|
||||||
InteractionType_None
|
InteractionType_None
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -263,6 +264,8 @@ namespace CSVRender
|
||||||
|
|
||||||
void showToolTip();
|
void showToolTip();
|
||||||
|
|
||||||
|
void primaryOpen(bool activate);
|
||||||
|
|
||||||
void primaryEdit(bool activate);
|
void primaryEdit(bool activate);
|
||||||
|
|
||||||
void secondaryEdit(bool activate);
|
void secondaryEdit(bool activate);
|
||||||
|
@ -283,6 +286,8 @@ namespace CSVRender
|
||||||
|
|
||||||
void dataDropped(const std::vector<CSMWorld::UniversalId>& data);
|
void dataDropped(const std::vector<CSMWorld::UniversalId>& data);
|
||||||
|
|
||||||
|
void requestFocus (const std::string& id);
|
||||||
|
|
||||||
friend class MouseState;
|
friend class MouseState;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,6 +83,9 @@ void CSVWorld::SceneSubView::makeConnections (CSVRender::UnpagedWorldspaceWidget
|
||||||
|
|
||||||
connect(widget, SIGNAL(cellChanged(const CSMWorld::UniversalId&)),
|
connect(widget, SIGNAL(cellChanged(const CSMWorld::UniversalId&)),
|
||||||
this, SLOT(cellSelectionChanged(const CSMWorld::UniversalId&)));
|
this, SLOT(cellSelectionChanged(const CSMWorld::UniversalId&)));
|
||||||
|
|
||||||
|
connect(widget, SIGNAL(requestFocus (const std::string&)),
|
||||||
|
this, SIGNAL(requestFocus (const std::string&)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVWorld::SceneSubView::makeConnections (CSVRender::PagedWorldspaceWidget* widget)
|
void CSVWorld::SceneSubView::makeConnections (CSVRender::PagedWorldspaceWidget* widget)
|
||||||
|
@ -94,6 +97,9 @@ void CSVWorld::SceneSubView::makeConnections (CSVRender::PagedWorldspaceWidget*
|
||||||
|
|
||||||
connect (widget, SIGNAL (cellSelectionChanged (const CSMWorld::CellSelection&)),
|
connect (widget, SIGNAL (cellSelectionChanged (const CSMWorld::CellSelection&)),
|
||||||
this, SLOT (cellSelectionChanged (const CSMWorld::CellSelection&)));
|
this, SLOT (cellSelectionChanged (const CSMWorld::CellSelection&)));
|
||||||
|
|
||||||
|
connect(widget, SIGNAL(requestFocus (const std::string&)),
|
||||||
|
this, SIGNAL(requestFocus (const std::string&)));
|
||||||
}
|
}
|
||||||
|
|
||||||
CSVWidget::SceneToolbar* CSVWorld::SceneSubView::makeToolbar (CSVRender::WorldspaceWidget* widget, widgetType type)
|
CSVWidget::SceneToolbar* CSVWorld::SceneSubView::makeToolbar (CSVRender::WorldspaceWidget* widget, widgetType type)
|
||||||
|
|
|
@ -82,6 +82,10 @@ namespace CSVWorld
|
||||||
void cellSelectionChanged (const CSMWorld::UniversalId& id);
|
void cellSelectionChanged (const CSMWorld::UniversalId& id);
|
||||||
|
|
||||||
void handleDrop(const std::vector<CSMWorld::UniversalId>& data);
|
void handleDrop(const std::vector<CSMWorld::UniversalId>& data);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
void requestFocus (const std::string& id);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -737,7 +737,12 @@ void CSVWorld::Table::requestFocus (const std::string& id)
|
||||||
QModelIndex index = mProxyModel->getModelIndex (id, 0);
|
QModelIndex index = mProxyModel->getModelIndex (id, 0);
|
||||||
|
|
||||||
if (index.isValid())
|
if (index.isValid())
|
||||||
scrollTo (index, QAbstractItemView::PositionAtTop);
|
{
|
||||||
|
// This will scroll to the row.
|
||||||
|
selectRow (index.row());
|
||||||
|
// This will actually select it.
|
||||||
|
selectionModel()->select (index, QItemSelectionModel::Select | QItemSelectionModel::Rows);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVWorld::Table::recordFilterChanged (std::shared_ptr<CSMFilter::Node> filter)
|
void CSVWorld::Table::recordFilterChanged (std::shared_ptr<CSMFilter::Node> filter)
|
||||||
|
|
|
@ -165,3 +165,8 @@ bool CSVWorld::TableSubView::eventFilter (QObject* object, QEvent* event)
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVWorld::TableSubView::requestFocus (const std::string& id)
|
||||||
|
{
|
||||||
|
mTable->requestFocus(id);
|
||||||
|
}
|
||||||
|
|
|
@ -60,6 +60,10 @@ namespace CSVWorld
|
||||||
void cloneRequest (const CSMWorld::UniversalId& toClone);
|
void cloneRequest (const CSMWorld::UniversalId& toClone);
|
||||||
void createFilterRequest(std::vector< CSMWorld::UniversalId >& types,
|
void createFilterRequest(std::vector< CSMWorld::UniversalId >& types,
|
||||||
Qt::DropAction action);
|
Qt::DropAction action);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
void requestFocus (const std::string& id);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue