mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-28 17:56:37 +00:00 
			
		
		
		
	subview does not store row number anymore
This commit is contained in:
		
							parent
							
								
									29231b8fc9
								
							
						
					
					
						commit
						6f5935edb3
					
				
					 1 changed files with 56 additions and 37 deletions
				
			
		|  | @ -379,14 +379,15 @@ void CSVWorld::EditWidget::remake(int row) | ||||||
| 		const QModelIndex& parent = mTable->index(row, i); | 		const QModelIndex& parent = mTable->index(row, i); | ||||||
| 		if (parent.data().isValid() && mTable->hasChildren(parent)) | 		if (parent.data().isValid() && mTable->hasChildren(parent)) | ||||||
| 		{ | 		{ | ||||||
|  | 		    /*
 | ||||||
| 		    qDebug()<<row; | 		    qDebug()<<row; | ||||||
| 		    qDebug()<<i; | 		    qDebug()<<i; | ||||||
| 		    qDebug()<<"nested!"; | 		    qDebug()<<"nested!"; | ||||||
| 		    QTableView* table = new QTableView(this); | 		    QTableView* table = new QTableView(this); | ||||||
| 		    table->setModel(mTable); | 		    table->setModel(mTable); | ||||||
| 		    table->setRootIndex(mTable->index(row, i)); | 		    table->setRootIndex(mTable->index(row, i)); | ||||||
|  | 		    */ | ||||||
| 		} | 		} | ||||||
|                 //TODO
 |  | ||||||
|             } else |             } else | ||||||
|             { |             { | ||||||
|                 mDispatcher.makeDelegate (display); |                 mDispatcher.makeDelegate (display); | ||||||
|  | @ -410,9 +411,7 @@ void CSVWorld::EditWidget::remake(int row) | ||||||
|                         unlockedLayout->addWidget (editor, unlocked, 1); |                         unlockedLayout->addWidget (editor, unlocked, 1); | ||||||
|                         ++unlocked; |                         ++unlocked; | ||||||
|                     } |                     } | ||||||
|                 } else { |                 }  | ||||||
| 		    qDebug()<<"No edit widget"; |  | ||||||
| 		} |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -441,7 +440,7 @@ CSVWorld::DialogueSubView::DialogueSubView (const CSMWorld::UniversalId& id, CSM | ||||||
| 
 | 
 | ||||||
| { | { | ||||||
|     connect(mTable, SIGNAL(dataChanged (const QModelIndex&, const QModelIndex&)), this, SLOT(dataChanged(const QModelIndex&))); |     connect(mTable, SIGNAL(dataChanged (const QModelIndex&, const QModelIndex&)), this, SLOT(dataChanged(const QModelIndex&))); | ||||||
|     mCurrentId(id.getId()); |     mCurrentId = id.getId(); | ||||||
|     QWidget *mainWidget = new QWidget(this); |     QWidget *mainWidget = new QWidget(this); | ||||||
| 
 | 
 | ||||||
|     QHBoxLayout *buttonsLayout = new QHBoxLayout; |     QHBoxLayout *buttonsLayout = new QHBoxLayout; | ||||||
|  | @ -491,7 +490,7 @@ CSVWorld::DialogueSubView::DialogueSubView (const CSMWorld::UniversalId& id, CSM | ||||||
| 
 | 
 | ||||||
|     mMainLayout = new QVBoxLayout(mainWidget); |     mMainLayout = new QVBoxLayout(mainWidget); | ||||||
| 
 | 
 | ||||||
|     mEditWidget = new EditWidget(mainWidget, mCurrentId, mTable, mUndoStack, false); |     mEditWidget = new EditWidget(mainWidget, mTable->getModelIndex(mCurrentId, 0).row(), mTable, mUndoStack, false); | ||||||
|     connect(mEditWidget, SIGNAL(tableMimeDataDropped(QWidget*, const QModelIndex&, const CSMWorld::UniversalId&, const CSMDoc::Document*)), |     connect(mEditWidget, SIGNAL(tableMimeDataDropped(QWidget*, const QModelIndex&, const CSMWorld::UniversalId&, const CSMDoc::Document*)), | ||||||
|             this, SLOT(tableMimeDataDropped(QWidget*, const QModelIndex&, const CSMWorld::UniversalId&, const CSMDoc::Document*))); |             this, SLOT(tableMimeDataDropped(QWidget*, const QModelIndex&, const CSMWorld::UniversalId&, const CSMDoc::Document*))); | ||||||
| 
 | 
 | ||||||
|  | @ -512,14 +511,14 @@ CSVWorld::DialogueSubView::DialogueSubView (const CSMWorld::UniversalId& id, CSM | ||||||
|         deleteButton->setDisabled(true); |         deleteButton->setDisabled(true); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     dataChanged(getModelIndex(mCurrentId, 0)); |     dataChanged(mTable->getModelIndex(mCurrentId, 0)); | ||||||
|     mMainLayout->addLayout(buttonsLayout); |     mMainLayout->addLayout(buttonsLayout); | ||||||
|     setWidget(mainWidget); |     setWidget(mainWidget); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void CSVWorld::DialogueSubView::prevId() | void CSVWorld::DialogueSubView::prevId() | ||||||
| { | { | ||||||
|     int new Row = getModelIndex(mCurrentId, 0).row() - 1; |     int newRow = mTable->getModelIndex(mCurrentId, 0).row() - 1; | ||||||
| 
 | 
 | ||||||
|     if (newRow < 0) |     if (newRow < 0) | ||||||
|     { |     { | ||||||
|  | @ -540,7 +539,7 @@ void CSVWorld::DialogueSubView::prevId() | ||||||
|                 mEditWidget->remake(newRow); |                 mEditWidget->remake(newRow); | ||||||
|                 setUniversalId(CSMWorld::UniversalId (static_cast<CSMWorld::UniversalId::Type> (mTable->data (mTable->index (newRow, 2)).toInt()), |                 setUniversalId(CSMWorld::UniversalId (static_cast<CSMWorld::UniversalId::Type> (mTable->data (mTable->index (newRow, 2)).toInt()), | ||||||
|                                         mTable->data (mTable->index (newRow, 0)).toString().toUtf8().constData())); |                                         mTable->data (mTable->index (newRow, 0)).toString().toUtf8().constData())); | ||||||
|                 mRow = newRow; | 		mCurrentId = std::string(mTable->data (mTable->index (newRow, 0)).toString().toUtf8().constData()); | ||||||
|                 mEditWidget->setDisabled(mLocked); |                 mEditWidget->setDisabled(mLocked); | ||||||
|                 return; |                 return; | ||||||
|         } |         } | ||||||
|  | @ -550,7 +549,7 @@ void CSVWorld::DialogueSubView::prevId() | ||||||
| 
 | 
 | ||||||
| void CSVWorld::DialogueSubView::nextId() | void CSVWorld::DialogueSubView::nextId() | ||||||
| { | { | ||||||
|     int newRow = mRow + 1; |     int newRow = mTable->getModelIndex(mCurrentId, 0).row() + 1; | ||||||
| 
 | 
 | ||||||
|     if (newRow >= mTable->rowCount()) |     if (newRow >= mTable->rowCount()) | ||||||
|     { |     { | ||||||
|  | @ -571,7 +570,7 @@ void CSVWorld::DialogueSubView::nextId() | ||||||
|         { |         { | ||||||
|                 mEditWidget->remake(newRow); |                 mEditWidget->remake(newRow); | ||||||
|                 setUniversalId(CSMWorld::UniversalId (static_cast<CSMWorld::UniversalId::Type> (mTable->data (mTable->index (newRow, 2)).toInt()), |                 setUniversalId(CSMWorld::UniversalId (static_cast<CSMWorld::UniversalId::Type> (mTable->data (mTable->index (newRow, 2)).toInt()), | ||||||
|                                           mTable->data (mTable->index (newRow, 0)).toString().toUtf8().constData())); | 						      mTable->data (mTable->index (newRow, 0)).toString().toUtf8().constData())); | ||||||
| 		mCurrentId = std::string(mTable->data (mTable->index (newRow, 0)).toString().toUtf8().constData()); | 		mCurrentId = std::string(mTable->data (mTable->index (newRow, 0)).toString().toUtf8().constData()); | ||||||
|                 mEditWidget->setDisabled(mLocked); |                 mEditWidget->setDisabled(mLocked); | ||||||
|                 return; |                 return; | ||||||
|  | @ -583,8 +582,10 @@ void CSVWorld::DialogueSubView::nextId() | ||||||
| void CSVWorld::DialogueSubView::setEditLock (bool locked) | void CSVWorld::DialogueSubView::setEditLock (bool locked) | ||||||
| { | { | ||||||
|     mLocked = locked; |     mLocked = locked; | ||||||
|     CSMWorld::RecordBase::State state = static_cast<CSMWorld::RecordBase::State>(mTable->data (mTable->index (mRow, 1)).toInt()); |     QModelIndex index(mTable->getModelIndex(mCurrentId, 0)); | ||||||
|     if (state == CSMWorld::RecordBase::State_Deleted || state == CSMWorld::RecordBase::State_Erased) | 
 | ||||||
|  |     CSMWorld::RecordBase::State state = static_cast<CSMWorld::RecordBase::State>(mTable->data (mTable->index (index.row(), 1)).toInt()); | ||||||
|  |     if (state == CSMWorld::RecordBase::State_Deleted) | ||||||
|     { |     { | ||||||
|         mEditWidget->setDisabled(true); |         mEditWidget->setDisabled(true); | ||||||
|     } else |     } else | ||||||
|  | @ -595,10 +596,12 @@ void CSVWorld::DialogueSubView::setEditLock (bool locked) | ||||||
| 
 | 
 | ||||||
| void CSVWorld::DialogueSubView::dataChanged(const QModelIndex & index) | void CSVWorld::DialogueSubView::dataChanged(const QModelIndex & index) | ||||||
| { | { | ||||||
|     if (index.row() == mRow) |     QModelIndex currentIndex(mTable->getModelIndex(mCurrentId, 0)); | ||||||
|  | 
 | ||||||
|  |     if (!currentIndex.isValid() && index.row() == currentIndex.row()) | ||||||
|     { |     { | ||||||
|         CSMWorld::RecordBase::State state = static_cast<CSMWorld::RecordBase::State>(mTable->data (mTable->index (mRow, 1)).toInt()); |         CSMWorld::RecordBase::State state = static_cast<CSMWorld::RecordBase::State>(mTable->data (mTable->index (currentIndex.row(), 1)).toInt()); | ||||||
|         if (state == CSMWorld::RecordBase::State_Deleted || state == CSMWorld::RecordBase::State_Erased) |         if (state == CSMWorld::RecordBase::State_Deleted) | ||||||
|         { |         { | ||||||
|             mEditWidget->setDisabled(true); |             mEditWidget->setDisabled(true); | ||||||
|         } else |         } else | ||||||
|  | @ -621,15 +624,24 @@ void CSVWorld::DialogueSubView::tableMimeDataDropped(QWidget* editor, | ||||||
| 
 | 
 | ||||||
| void CSVWorld::DialogueSubView::revertRecord() | void CSVWorld::DialogueSubView::revertRecord() | ||||||
| { | { | ||||||
|     int rows = mTable->rowCount(); |     const int rows = mTable->rowCount(); | ||||||
|     if (!mLocked && mTable->columnCount() > 0 && mRow < mTable->rowCount() ) |     QModelIndex currentIndex(mTable->getModelIndex(mCurrentId, 0)); | ||||||
|  | 
 | ||||||
|  |     if (!currentIndex.isValid()) | ||||||
|  |     { | ||||||
|  | 	return; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const int currentRow = currentIndex.row(); | ||||||
|  | 
 | ||||||
|  |     if (!mLocked && mTable->columnCount() > 0 && currentRow < mTable->rowCount() ) | ||||||
|     { |     { | ||||||
|          CSMWorld::RecordBase::State state = |          CSMWorld::RecordBase::State state = | ||||||
|                 static_cast<CSMWorld::RecordBase::State> (mTable->data (mTable->index (mRow, 1)).toInt()); | 	     static_cast<CSMWorld::RecordBase::State> (mTable->data (mTable->index (currentRow, 1)).toInt()); | ||||||
| 
 | 
 | ||||||
|         if (state!=CSMWorld::RecordBase::State_BaseOnly) |         if (state!=CSMWorld::RecordBase::State_BaseOnly) | ||||||
|         { |         { | ||||||
|             mUndoStack.push(new CSMWorld::RevertCommand(*mTable, mTable->data(mTable->index (mRow, 0)).toString().toUtf8().constData())); |             mUndoStack.push(new CSMWorld::RevertCommand(*mTable, mCurrentId)); | ||||||
|         } |         } | ||||||
|         if (rows != mTable->rowCount()) |         if (rows != mTable->rowCount()) | ||||||
|         { |         { | ||||||
|  | @ -638,11 +650,11 @@ void CSVWorld::DialogueSubView::revertRecord() | ||||||
|                 mEditWidget->setDisabled(true); //closing the editor is other option
 |                 mEditWidget->setDisabled(true); //closing the editor is other option
 | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|             if (mRow >= mTable->rowCount()) | 	    if (currentIndex.row() >= mTable->rowCount()) | ||||||
|             { |             { | ||||||
|                 prevId(); |                 prevId(); | ||||||
|             } else { |             } else { | ||||||
|                 dataChanged(mTable->index(mRow, 0)); |                 dataChanged(currentIndex); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -650,19 +662,20 @@ void CSVWorld::DialogueSubView::revertRecord() | ||||||
| 
 | 
 | ||||||
| void CSVWorld::DialogueSubView::deleteRecord() | void CSVWorld::DialogueSubView::deleteRecord() | ||||||
| { | { | ||||||
|     int rows = mTable->rowCount(); |     const int rows = mTable->rowCount(); | ||||||
|  |     QModelIndex currentIndex(mTable->getModelIndex(mCurrentId, 0)); | ||||||
| 
 | 
 | ||||||
|     //easier than disabling the button
 |     //easier than disabling the button
 | ||||||
|     CSMWorld::RecordBase::State state = static_cast<CSMWorld::RecordBase::State>(mTable->data (mTable->index (mRow, 1)).toInt()); |     CSMWorld::RecordBase::State state = static_cast<CSMWorld::RecordBase::State>(mTable->data (mTable->index (currentIndex.row(), 1)).toInt()); | ||||||
|     bool deledetedOrErased = (state == CSMWorld::RecordBase::State_Deleted || state == CSMWorld::RecordBase::State_Erased); |     bool deledetedOrErased = (state == CSMWorld::RecordBase::State_Deleted); | ||||||
| 
 | 
 | ||||||
|     if (!mLocked && |     if (!mLocked && | ||||||
|         mTable->columnCount() > 0 && |         mTable->columnCount() > 0 && | ||||||
|         !deledetedOrErased && |         !deledetedOrErased && | ||||||
|         mRow < rows && |         currentIndex.row() < rows && | ||||||
|         mBottom->canCreateAndDelete()) |         mBottom->canCreateAndDelete()) | ||||||
|     { |     { | ||||||
|         mUndoStack.push(new CSMWorld::DeleteCommand(*mTable, mTable->data(mTable->index (mRow, 0)).toString().toUtf8().constData())); |         mUndoStack.push(new CSMWorld::DeleteCommand(*mTable, mCurrentId)); | ||||||
|         if (rows != mTable->rowCount()) |         if (rows != mTable->rowCount()) | ||||||
|         { |         { | ||||||
|             if (mTable->rowCount() == 0) |             if (mTable->rowCount() == 0) | ||||||
|  | @ -670,11 +683,11 @@ void CSVWorld::DialogueSubView::deleteRecord() | ||||||
|                 mEditWidget->setDisabled(true); //closing the editor is other option
 |                 mEditWidget->setDisabled(true); //closing the editor is other option
 | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|             if (mRow >= mTable->rowCount()) |             if (currentIndex.row() >= mTable->rowCount()) | ||||||
|             { |             { | ||||||
|                 prevId(); |                 prevId(); | ||||||
|             } else { |             } else { | ||||||
|                 dataChanged(mTable->index(mRow, 0)); |                 dataChanged(currentIndex); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -682,29 +695,35 @@ void CSVWorld::DialogueSubView::deleteRecord() | ||||||
| 
 | 
 | ||||||
| void CSVWorld::DialogueSubView::requestFocus (const std::string& id) | void CSVWorld::DialogueSubView::requestFocus (const std::string& id) | ||||||
| { | { | ||||||
|     mRow = mTable->getModelIndex (id, 0).row(); |     mCurrentId = std::string(id); | ||||||
|     mEditWidget->remake(mRow); |     mEditWidget->remake(mTable->getModelIndex (id, 0).row()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void CSVWorld::DialogueSubView::cloneRequest () | void CSVWorld::DialogueSubView::cloneRequest () | ||||||
| { | { | ||||||
|     mBottom->cloneRequest(mTable->data(mTable->index (mRow, 0)).toString().toUtf8().constData(), |     mBottom->cloneRequest(mCurrentId, static_cast<CSMWorld::UniversalId::Type>(mTable->data(mTable->getModelIndex(mCurrentId, 2)).toInt())); | ||||||
|                           static_cast<CSMWorld::UniversalId::Type>(mTable->data(mTable->index(mRow, 2)).toInt())); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void CSVWorld::DialogueSubView::showPreview () | void CSVWorld::DialogueSubView::showPreview () | ||||||
| { | { | ||||||
|     if (mTable->hasPreview() && mRow < mTable->rowCount()) |     QModelIndex currentIndex(mTable->getModelIndex(mCurrentId, 0)); | ||||||
|  | 
 | ||||||
|  |     if (currentIndex.isValid() && | ||||||
|  | 	mTable->hasPreview() &&  | ||||||
|  | 	currentIndex.row() < mTable->rowCount()) | ||||||
|     { |     { | ||||||
|        emit focusId(CSMWorld::UniversalId(CSMWorld::UniversalId::Type_Preview, mTable->data(mTable->index (mRow, 0)).toString().toUtf8().constData()), ""); | 	emit focusId(CSMWorld::UniversalId(CSMWorld::UniversalId::Type_Preview, mCurrentId), ""); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void CSVWorld::DialogueSubView::viewRecord() | void CSVWorld::DialogueSubView::viewRecord() | ||||||
| { | { | ||||||
|     if (mRow < mTable->rowCount()) |     QModelIndex currentIndex(mTable->getModelIndex(mCurrentId, 0)); | ||||||
|  | 
 | ||||||
|  |     if (currentIndex.isValid() && | ||||||
|  | 	currentIndex.row() < mTable->rowCount()) | ||||||
|     { |     { | ||||||
|         std::pair<CSMWorld::UniversalId, std::string> params = mTable->view (mRow); |         std::pair<CSMWorld::UniversalId, std::string> params = mTable->view (currentIndex.row()); | ||||||
| 
 | 
 | ||||||
|         if (params.first.getType()!=CSMWorld::UniversalId::Type_None) |         if (params.first.getType()!=CSMWorld::UniversalId::Type_None) | ||||||
|             emit focusId (params.first, params.second); |             emit focusId (params.first, params.second); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue