BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SaveService Class Reference

Provides save/autosave of ProjectDocument in a thread. More...

Inheritance diagram for SaveService:
[legend]
Collaboration diagram for SaveService:
[legend]

Public Slots

void onAutosaveRequest ()
 

Signals

void projectSaved ()
 

Public Member Functions

 SaveService (QObject *parent=0)
 
bool isAutosaveEnabled () const
 
bool isSaving () const
 
void save (const QString &project_file_name)
 
void setAutosaveEnabled (bool value)
 
void setAutosaveTime (int timerInterval)
 Sets autosave time (in msec) More...
 
void setDocument (ProjectDocument *document)
 
void stopService ()
 

Private Slots

void onProjectSaved ()
 

Private Member Functions

void process_queue ()
 

Private Attributes

AutosaveControllerm_autosave
 
ProjectDocumentm_document
 
bool m_is_saving
 
QQueue< QString > m_save_queue
 

Detailed Description

Provides save/autosave of ProjectDocument in a thread.

Definition at line 26 of file SaveService.h.

Constructor & Destructor Documentation

◆ SaveService()

SaveService::SaveService ( QObject *  parent = 0)
explicit

Definition at line 41 of file SaveService.cpp.

42  : QObject(parent), m_is_saving(false), m_autosave(nullptr), m_document(nullptr)
43 {
44 }
ProjectDocument * m_document
Definition: SaveService.h:61
AutosaveController * m_autosave
Definition: SaveService.h:60
bool m_is_saving
Definition: SaveService.h:59

Member Function Documentation

◆ isAutosaveEnabled()

bool SaveService::isAutosaveEnabled ( ) const

Definition at line 78 of file SaveService.cpp.

79 {
80  return m_autosave;
81 }

References m_autosave.

Referenced by ProjectManager::isAutosaveEnabled().

◆ isSaving()

bool SaveService::isSaving ( ) const

Definition at line 91 of file SaveService.cpp.

92 {
93  return m_is_saving;
94 }

References m_is_saving.

Referenced by stopService().

◆ onAutosaveRequest

void SaveService::onAutosaveRequest ( )
slot

Definition at line 120 of file SaveService.cpp.

121 {
123 }
QString autosaveName() const
void save(const QString &project_file_name)
Definition: SaveService.cpp:56

References AutosaveController::autosaveName(), m_autosave, and save().

Referenced by setAutosaveEnabled().

Here is the call graph for this function:

◆ onProjectSaved

void SaveService::onProjectSaved ( )
privateslot

Definition at line 125 of file SaveService.cpp.

126 {
128 
129  m_is_saving = false;
130  emit projectSaved();
131 
132  // processing possible consequent saves
133  process_queue();
134 }
#define ASSERT(condition)
Definition: Assert.h:31
void projectSaved()
void process_queue()

References ASSERT, m_document, m_is_saving, process_queue(), and projectSaved().

Referenced by process_queue().

Here is the call graph for this function:

◆ process_queue()

void SaveService::process_queue ( )
private

Definition at line 136 of file SaveService.cpp.

137 {
139 
140  if (m_is_saving)
141  return;
142 
143  if (!m_save_queue.isEmpty()) {
144  // use set/reset class to ensure correct resetting even in case of an exception
145  AutoSetResetFlag autoSetReset(&m_is_saving);
146 
147  QString project_file_name = m_save_queue.dequeue();
148 
149  // saving project file in a main thread
150  const bool isAutosave = project_file_name.contains(ProjectUtils::autosaveSubdir());
151  m_document->save_project_file(project_file_name, isAutosave);
152 
153  if (m_document->hasData()) {
154  // saving heavy data in separate thread
155  SaveThread* saveThread = new SaveThread(this);
156  saveThread->setSaveContext(m_document, project_file_name);
157 
158  connect(saveThread, &SaveThread::saveReady, this, &SaveService::onProjectSaved);
159  connect(saveThread, &SaveThread::finished, saveThread, &QObject::deleteLater);
160  saveThread->start();
161  } else {
162  onProjectSaved();
163  }
164  }
165 }
bool hasData() const
void save_project_file(const QString &project_file_name, bool autoSave=false)
QQueue< QString > m_save_queue
Definition: SaveService.h:58
void onProjectSaved()
Performs saving of heavy intensity data in a thread.
Definition: SaveThread.h:25
void saveReady()
void setSaveContext(ProjectDocument *document, const QString &project_file_name)
Definition: SaveThread.cpp:33
QString autosaveSubdir()
Returns fixed name for autosave sub-directory.

References ASSERT, ProjectUtils::autosaveSubdir(), ProjectDocument::hasData(), m_document, m_is_saving, m_save_queue, onProjectSaved(), ProjectDocument::save_project_file(), SaveThread::saveReady(), and SaveThread::setSaveContext().

Referenced by onProjectSaved(), and save().

Here is the call graph for this function:

◆ projectSaved

void SaveService::projectSaved ( )
signal

Referenced by onProjectSaved().

◆ save()

void SaveService::save ( const QString &  project_file_name)

Definition at line 56 of file SaveService.cpp.

57 {
59 
60  m_save_queue.enqueue(project_file_name);
61  process_queue();
62 }

References ASSERT, m_document, m_save_queue, and process_queue().

Referenced by onAutosaveRequest(), and ProjectManager::saveProject().

Here is the call graph for this function:

◆ setAutosaveEnabled()

void SaveService::setAutosaveEnabled ( bool  value)

Definition at line 64 of file SaveService.cpp.

65 {
66  if (value) {
67  delete m_autosave;
68  m_autosave = new AutosaveController(this);
72  } else {
73  delete m_autosave;
74  m_autosave = 0;
75  }
76 }
Triggers autosave request after some accumulated ammount of document changes.
void setDocument(ProjectDocument *document)
void onAutosaveRequest()

References AutosaveController::autosaveRequest(), m_autosave, m_document, onAutosaveRequest(), and AutosaveController::setDocument().

Referenced by ProjectManager::setAutosaveEnabled(), and setAutosaveTime().

Here is the call graph for this function:

◆ setAutosaveTime()

void SaveService::setAutosaveTime ( int  timerInterval)

Sets autosave time (in msec)

Definition at line 83 of file SaveService.cpp.

84 {
85  if (!m_autosave)
86  setAutosaveEnabled(true);
87 
88  m_autosave->setAutosaveTime(timerInterval);
89 }
void setAutosaveTime(int timerInterval)
Sets autosave time (in msec)
void setAutosaveEnabled(bool value)
Definition: SaveService.cpp:64

References m_autosave, setAutosaveEnabled(), and AutosaveController::setAutosaveTime().

Here is the call graph for this function:

◆ setDocument()

void SaveService::setDocument ( ProjectDocument document)

Definition at line 46 of file SaveService.cpp.

47 {
48  m_document = document;
49 
50  if (m_autosave)
51  m_autosave->setDocument(document);
52 
53  m_save_queue.clear();
54 }

References m_autosave, m_document, m_save_queue, and AutosaveController::setDocument().

Referenced by ProjectManager::createNewProject(), and stopService().

Here is the call graph for this function:

◆ stopService()

void SaveService::stopService ( )

Definition at line 98 of file SaveService.cpp.

99 {
100  QApplication::setOverrideCursor(Qt::WaitCursor);
101 
102  if (isSaving()) {
103  QTime dieTime = QTime::currentTime().addSecs(60);
104  while (QTime::currentTime() < dieTime) {
105  QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
106  if (!isSaving())
107  break;
108  }
109  if (isSaving())
110  throw GUIHelpers::Error("SaveService::stopService() -> Error. Can't stop service. ");
111  }
112 
113  if (m_autosave)
115 
116  setDocument(nullptr);
117  QApplication::restoreOverrideCursor();
118 }
void removeAutosaveDir()
remove auto save directory for given project and all its content
bool isSaving() const
Definition: SaveService.cpp:91
void setDocument(ProjectDocument *document)
Definition: SaveService.cpp:46

References isSaving(), m_autosave, AutosaveController::removeAutosaveDir(), and setDocument().

Referenced by ProjectManager::deleteCurrentProject().

Here is the call graph for this function:

Member Data Documentation

◆ m_autosave

AutosaveController* SaveService::m_autosave
private

◆ m_document

ProjectDocument* SaveService::m_document
private

Definition at line 61 of file SaveService.h.

Referenced by onProjectSaved(), process_queue(), save(), setAutosaveEnabled(), and setDocument().

◆ m_is_saving

bool SaveService::m_is_saving
private

Definition at line 59 of file SaveService.h.

Referenced by isSaving(), onProjectSaved(), and process_queue().

◆ m_save_queue

QQueue<QString> SaveService::m_save_queue
private

Definition at line 58 of file SaveService.h.

Referenced by process_queue(), save(), and setDocument().


The documentation for this class was generated from the following files: