~openmw/openmw/openmw-packaging2

« back to all changes in this revision

Viewing changes to apps/opencs/view/render/instancemode.cpp

  • Committer: Scott Howard
  • Date: 2016-09-15 20:56:29 UTC
  • Revision ID: showard@debian.org-20160915205629-3tvfxe47zrb41a91
Cron update. Git hash: 37278b5

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
#include "instancemode.hpp"
3
3
 
4
4
#include <QDragEnterEvent>
 
5
#include <QPoint>
5
6
 
6
7
#include "../../model/prefs/state.hpp"
7
8
 
41
42
        mSubMode->addButton (new InstanceMoveMode (this), "move");
42
43
        mSubMode->addButton (":placeholder", "rotate",
43
44
            "Rotate selected instances"
44
 
            "<ul><li>Use primary edit to rotate instances freely</li>"
45
 
            "<li>Use secondary edit to rotate instances within the grid</li>"
 
45
            "<ul><li>Use {scene-edit-primary} to rotate instances freely</li>"
 
46
            "<li>Use {scene-edit-secondary} to rotate instances within the grid</li>"
46
47
            "</ul>"
47
48
            "<font color=Red>Not implemented yet</font color>");
48
49
        mSubMode->addButton (":placeholder", "scale",
49
50
            "Scale selected instances"
50
 
            "<ul><li>Use primary edit to scale instances freely</li>"
51
 
            "<li>Use secondary edit to scale instances along the grid</li>"
 
51
            "<ul><li>Use {scene-edit-primary} to scale instances freely</li>"
 
52
            "<li>Use {scene-edit-secondary} to scale instances along the grid</li>"
52
53
            "</ul>"
53
54
            "<font color=Red>Not implemented yet</font color>");
54
55
 
103
104
        getWorldspaceWidget().abortDrag();
104
105
}
105
106
 
106
 
void CSVRender::InstanceMode::primaryEditPressed (osg::ref_ptr<TagBase> tag)
107
 
{
108
 
    if (CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue())
109
 
        primarySelectPressed (tag);
110
 
}
111
 
 
112
 
void CSVRender::InstanceMode::secondaryEditPressed (osg::ref_ptr<TagBase> tag)
113
 
{
114
 
    if (CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue())
115
 
        secondarySelectPressed (tag);
116
 
}
117
 
 
118
 
void CSVRender::InstanceMode::primarySelectPressed (osg::ref_ptr<TagBase> tag)
 
107
void CSVRender::InstanceMode::primaryEditPressed (const WorldspaceHitResult& hit)
 
108
{
 
109
    if (CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue())
 
110
        primarySelectPressed (hit);
 
111
}
 
112
 
 
113
void CSVRender::InstanceMode::secondaryEditPressed (const WorldspaceHitResult& hit)
 
114
{
 
115
    if (CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue())
 
116
        secondarySelectPressed (hit);
 
117
}
 
118
 
 
119
void CSVRender::InstanceMode::primarySelectPressed (const WorldspaceHitResult& hit)
119
120
{
120
121
    getWorldspaceWidget().clearSelection (Mask_Reference);
121
122
 
122
 
    if (tag)
 
123
    if (hit.tag)
123
124
    {
124
 
        if (CSVRender::ObjectTag *objectTag = dynamic_cast<CSVRender::ObjectTag *> (tag.get()))
 
125
        if (CSVRender::ObjectTag *objectTag = dynamic_cast<CSVRender::ObjectTag *> (hit.tag.get()))
125
126
        {
126
127
            // hit an Object, select it
127
128
            CSVRender::Object* object = objectTag->mObject;
131
132
    }
132
133
}
133
134
 
134
 
void CSVRender::InstanceMode::secondarySelectPressed (osg::ref_ptr<TagBase> tag)
 
135
void CSVRender::InstanceMode::secondarySelectPressed (const WorldspaceHitResult& hit)
135
136
{
136
 
    if (tag)
 
137
    if (hit.tag)
137
138
    {
138
 
        if (CSVRender::ObjectTag *objectTag = dynamic_cast<CSVRender::ObjectTag *> (tag.get()))
 
139
        if (CSVRender::ObjectTag *objectTag = dynamic_cast<CSVRender::ObjectTag *> (hit.tag.get()))
139
140
        {
140
141
            // hit an Object, toggle its selection state
141
142
            CSVRender::Object* object = objectTag->mObject;
145
146
    }
146
147
}
147
148
 
148
 
bool CSVRender::InstanceMode::primaryEditStartDrag (osg::ref_ptr<TagBase> tag)
 
149
bool CSVRender::InstanceMode::primaryEditStartDrag (const QPoint& pos)
149
150
{
150
151
    if (mDragMode!=DragMode_None || mLocked)
151
152
        return false;
152
153
 
153
 
    if (tag && CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue())
 
154
    WorldspaceHitResult hit = getWorldspaceWidget().mousePick (pos, getWorldspaceWidget().getInteractionMask());
 
155
    if (hit.tag && CSMPrefs::get()["3D Scene Input"]["context-select"].isTrue())
154
156
    {
155
157
        getWorldspaceWidget().clearSelection (Mask_Reference);
156
 
        if (CSVRender::ObjectTag *objectTag = dynamic_cast<CSVRender::ObjectTag *> (tag.get()))
 
158
        if (CSVRender::ObjectTag *objectTag = dynamic_cast<CSVRender::ObjectTag *> (hit.tag.get()))
157
159
        {
158
160
            CSVRender::Object* object = objectTag->mObject;
159
161
            object->setSelected (true);
177
179
 
178
180
    // \todo check for sub-mode
179
181
 
180
 
    if (CSVRender::ObjectMarkerTag *objectTag = dynamic_cast<CSVRender::ObjectMarkerTag *> (tag.get()))
 
182
    if (CSVRender::ObjectMarkerTag *objectTag = dynamic_cast<CSVRender::ObjectMarkerTag *> (hit.tag.get()))
181
183
    {
182
184
        mDragAxis = objectTag->mAxis;
183
185
    }
189
191
    return true;
190
192
}
191
193
 
192
 
bool CSVRender::InstanceMode::secondaryEditStartDrag (osg::ref_ptr<TagBase> tag)
 
194
bool CSVRender::InstanceMode::secondaryEditStartDrag (const QPoint& pos)
193
195
{
194
196
    if (mLocked)
195
197
        return false;
197
199
    return false;
198
200
}
199
201
 
200
 
void CSVRender::InstanceMode::drag (int diffX, int diffY, double speedFactor)
 
202
void CSVRender::InstanceMode::drag (const QPoint& pos, int diffX, int diffY, double speedFactor)
201
203
{
202
204
    osg::Vec3f eye;
203
205
    osg::Vec3f centre;
244
246
    }
245
247
}
246
248
 
247
 
void CSVRender::InstanceMode::dragCompleted()
 
249
void CSVRender::InstanceMode::dragCompleted(const QPoint& pos)
248
250
{
249
251
    std::vector<osg::ref_ptr<TagBase> > selection =
250
252
        getWorldspaceWidget().getEdited (Mask_Reference);
333
335
        if (!mime->fromDocument (document))
334
336
            return;
335
337
 
336
 
        osg::Vec3f insertPoint = getWorldspaceWidget().getIntersectionPoint (event->pos());
 
338
        WorldspaceHitResult hit = getWorldspaceWidget().mousePick (event->pos(), getWorldspaceWidget().getInteractionMask());
337
339
 
338
 
        std::string cellId = getWorldspaceWidget().getCellId (insertPoint);
 
340
        std::string cellId = getWorldspaceWidget().getCellId (hit.worldPos);
339
341
 
340
342
        CSMWorld::IdTree& cellTable = dynamic_cast<CSMWorld::IdTree&> (
341
343
            *document.getData().getTableModel (CSMWorld::UniversalId::Type_Cells));
412
414
                 createCommand->addValue (referencesTable.findColumnIndex (
413
415
                     CSMWorld::Columns::ColumnId_Cell), QString::fromUtf8 (cellId.c_str()));
414
416
                 createCommand->addValue (referencesTable.findColumnIndex (
415
 
                     CSMWorld::Columns::ColumnId_PositionXPos), insertPoint.x());
416
 
                 createCommand->addValue (referencesTable.findColumnIndex (
417
 
                     CSMWorld::Columns::ColumnId_PositionYPos), insertPoint.y());
418
 
                 createCommand->addValue (referencesTable.findColumnIndex (
419
 
                     CSMWorld::Columns::ColumnId_PositionZPos), insertPoint.z());
 
417
                     CSMWorld::Columns::ColumnId_PositionXPos), hit.worldPos.x());
 
418
                 createCommand->addValue (referencesTable.findColumnIndex (
 
419
                     CSMWorld::Columns::ColumnId_PositionYPos), hit.worldPos.y());
 
420
                 createCommand->addValue (referencesTable.findColumnIndex (
 
421
                     CSMWorld::Columns::ColumnId_PositionZPos), hit.worldPos.z());
420
422
                 createCommand->addValue (referencesTable.findColumnIndex (
421
423
                     CSMWorld::Columns::ColumnId_ReferenceableId),
422
424
                     QString::fromUtf8 (iter->getId().c_str()));