src/mainwindow.cpp

changeset 178
a23024fc98e0
parent 174
3016b494685c
child 183
97b591813c8b
equal deleted inserted replaced
177:f69d53c053df 178:a23024fc98e0
222 Document* MainWindow::currentDocument() 222 Document* MainWindow::currentDocument()
223 { 223 {
224 return qobject_cast<Document*>(this->ui->tabs->currentWidget()); 224 return qobject_cast<Document*>(this->ui->tabs->currentWidget());
225 } 225 }
226 226
227 const Document* MainWindow::currentDocument() const
228 {
229 return qobject_cast<const Document*>(this->ui->tabs->currentWidget());
230 }
231
227 void MainWindow::handleDocumentSplitterChange() 232 void MainWindow::handleDocumentSplitterChange()
228 { 233 {
229 Document* currentDocument = this->currentDocument(); 234 Document* currentDocument = this->currentDocument();
230 if (currentDocument != nullptr) 235 if (currentDocument != nullptr)
231 { 236 {
283 */ 288 */
284 void MainWindow::actionSave() 289 void MainWindow::actionSave()
285 { 290 {
286 if (this->currentDocument() != nullptr) 291 if (this->currentDocument() != nullptr)
287 { 292 {
288 const ModelId modelId = {0}; 293 const std::optional<ModelId> modelId = this->findCurrentModelId();
289 const QString* path = this->documents.modelPath(modelId); 294 if (modelId.has_value())
290 if (path == nullptr or path->isEmpty()) 295 {
291 { 296 const QString* path = this->documents.modelPath(*modelId);
292 this->actionSaveAs(); 297 if (path == nullptr or path->isEmpty())
293 }
294 else
295 {
296 QString error;
297 QTextStream errorStream{&error};
298 const bool succeeded = this->documents.saveModel(modelId, errorStream);
299 if (not succeeded)
300 { 298 {
301 QMessageBox::critical(this, tr("Save error"), error); 299 this->actionSaveAs();
302 } 300 }
303 else 301 else
304 { 302 {
305 this->addRecentlyOpenedFile(*path); 303 QString error;
304 QTextStream errorStream{&error};
305 const bool succeeded = this->documents.saveModel(*modelId, errorStream);
306 if (not succeeded)
307 {
308 QMessageBox::critical(this, tr("Save error"), error);
309 }
310 else
311 {
312 this->addRecentlyOpenedFile(*path);
313 }
306 } 314 }
307 } 315 }
308 } 316 }
309 } 317 }
310 318
313 */ 321 */
314 void MainWindow::actionSaveAs() 322 void MainWindow::actionSaveAs()
315 { 323 {
316 if (this->currentDocument() != nullptr) 324 if (this->currentDocument() != nullptr)
317 { 325 {
318 const ModelId modelId = {0}; 326 const std::optional<ModelId> modelId = this->findCurrentModelId();
319 const QString* pathPtr = this->documents.modelPath(modelId); 327 if (modelId.has_value())
320 QString defaultPath = (pathPtr != nullptr) ? *pathPtr : ""; 328 {
321 const QString newPath = QFileDialog::getSaveFileName( 329 const QString* pathPtr = this->documents.modelPath(*modelId);
322 this, 330 QString defaultPath = (pathPtr != nullptr) ? *pathPtr : "";
323 tr("Save as…"), 331 const QString newPath = QFileDialog::getSaveFileName(
324 QFileInfo{defaultPath}.absoluteDir().path(), 332 this,
325 tr("LDraw files (*.ldr *dat);;All files (*)") 333 tr("Save as…"),
326 ); 334 QFileInfo{defaultPath}.absoluteDir().path(),
327 if (not newPath.isEmpty()) 335 tr("LDraw files (*.ldr *dat);;All files (*)")
328 { 336 );
329 QString error; 337 if (not newPath.isEmpty())
330 QTextStream errorStream{&error}; 338 {
331 this->documents.setModelPath(modelId, newPath, this->libraries, errorStream); 339 QString error;
332 this->ui->tabs->setTabText(this->ui->tabs->currentIndex(), QFileInfo{newPath}.fileName()); 340 QTextStream errorStream{&error};
333 this->actionSave(); 341 this->documents.setModelPath(*modelId, newPath, this->libraries, errorStream);
342 this->ui->tabs->setTabText(this->ui->tabs->currentIndex(), QFileInfo{newPath}.fileName());
343 this->actionSave();
344 }
334 } 345 }
335 } 346 }
336 } 347 }
337 348
338 /** 349 /**
392 std::optional<ModelId> modelId = this->documents.findIdForModel(&document->getModel()); 403 std::optional<ModelId> modelId = this->documents.findIdForModel(&document->getModel());
393 if (modelId.has_value()) 404 if (modelId.has_value())
394 { 405 {
395 this->documents.closeDocument(modelId.value()); 406 this->documents.closeDocument(modelId.value());
396 delete document; 407 delete document;
408 }
409 }
410
411 std::optional<ModelId> MainWindow::findCurrentModelId() const
412 {
413 const Document* document = this->currentDocument();
414 if (document != nullptr)
415 {
416 return this->documents.findIdForModel(&document->getModel());
417 }
418 else
419 {
420 return {};
397 } 421 }
398 } 422 }
399 423
400 void MainWindow::changeEvent(QEvent* event) 424 void MainWindow::changeEvent(QEvent* event)
401 { 425 {

mercurial