| 103 | } |
| 104 | |
| 105 | bool ScreenSetupModel::dropMimeData( |
| 106 | const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent |
| 107 | ) |
| 108 | { |
| 109 | if (action == Qt::IgnoreAction) |
| 110 | return true; |
| 111 | |
| 112 | if (!data->hasFormat(m_MimeType)) |
| 113 | return false; |
| 114 | |
| 115 | if (!parent.isValid() || row != -1 || column != -1) |
| 116 | return false; |
| 117 | |
| 118 | QByteArray encodedData = data->data(m_MimeType); |
| 119 | QDataStream stream(&encodedData, QIODevice::ReadOnly); |
| 120 | |
| 121 | int sourceColumn = -1; |
| 122 | int sourceRow = -1; |
| 123 | |
| 124 | stream >> sourceColumn; |
| 125 | stream >> sourceRow; |
| 126 | |
| 127 | const auto pColumn = parent.column(); |
| 128 | const auto pRow = parent.row(); |
| 129 | |
| 130 | // don't drop screen onto itself |
| 131 | if (sourceColumn == pColumn && sourceRow == pRow) |
| 132 | return false; |
| 133 | |
| 134 | Screen droppedScreen; |
| 135 | stream >> droppedScreen; |
| 136 | |
| 137 | if (auto oldScreen = Screen(screen(pColumn, pRow)); !oldScreen.isNull() && sourceColumn != -1 && sourceRow != -1) { |
| 138 | // mark the screen so it isn't deleted after the dragndrop succeeded |
| 139 | // see ScreenSetupView::startDrag() |
| 140 | oldScreen.setSwapped(true); |
| 141 | screen(sourceColumn, sourceRow) = oldScreen; |
| 142 | } |
| 143 | |
| 144 | screen(pColumn, pRow) = droppedScreen; |
| 145 | |
| 146 | Q_EMIT screensChanged(); |
| 147 | |
| 148 | return true; |
| 149 | } |
| 150 | |
| 151 | void ScreenSetupModel::addScreen(const Screen &newScreen) |
| 152 | { |