Program Listing for File LoadSessionWizard.h

Return to documentation for file (src/smartpeak/include/SmartPeak/ui/LoadSessionWizard.h)

// --------------------------------------------------------------------------
//   SmartPeak -- Fast and Accurate CE-, GC- and LC-MS(/MS) Data Processing
// --------------------------------------------------------------------------
// Copyright The SmartPeak Team -- Novo Nordisk Foundation
// Center for Biosustainability, Technical University of Denmark 2018-2021.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
// INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// --------------------------------------------------------------------------
// $Maintainer: Douglas McCloskey, Bertrand Boudaud $
// $Authors: Douglas McCloskey, Bertrand Boudaud $
// --------------------------------------------------------------------------
#pragma once

#include <SmartPeak/iface/IFilePickerHandler.h>
#include <SmartPeak/core/ApplicationProcessorObservable.h>
#include <SmartPeak/ui/SessionFilesWidget.h>
#include <SmartPeak/ui/SetInputOutputWidget.h>
#include <string>
#include <memory>

/*
* This class will check if a file session popup needs to be done before to load the session
* (in case of missing files)
*/
namespace SmartPeak
{
  struct LoadSessionWizard :
    IFilePickerHandler,
    ISetInputOutputWidgetObserver,
    ApplicationProcessorObservable
  {
    LoadSessionWizard(std::shared_ptr<SessionFilesWidget>& session_files_widget_manage,
                      WorkflowManager& workflow_manager,
                      ApplicationHandler& application_handler,
                      IApplicationProcessorObserver* application_processor_observer = nullptr,
                      ISequenceProcessorObserver* sequence_processor_observer = nullptr,
                      ISequenceSegmentProcessorObserver* sequence_segment_processor_observer = nullptr,
                      ISampleGroupProcessorObserver* sample_group_processor_observer = nullptr) :
      application_handler_(application_handler),
      session_files_widget_manage_(session_files_widget_manage),
      workflow_manager_(workflow_manager),
      application_processor_observer_(application_processor_observer),
      sequence_processor_observer_(sequence_processor_observer),
      sequence_segment_processor_observer_(sequence_segment_processor_observer),
      sample_group_processor_observer_(sample_group_processor_observer)
    {
      set_input_output_widget = std::make_shared<SetInputOutputWidget>(application_handler);
      addApplicationProcessorObserver(application_processor_observer_);
    };

    virtual void onInputOutputSet();
    virtual void onInputOutputCancel();

    bool onFilePicked(const std::filesystem::path& filename, ApplicationHandler* application_handler) override;

    std::shared_ptr<SetInputOutputWidget> set_input_output_widget;

  protected:
    bool missingInputFileNames();
    bool missingInputOutputDirectories();

  protected:
    ApplicationHandler& application_handler_;
    std::shared_ptr<SessionFilesWidget> session_files_widget_manage_;
    WorkflowManager& workflow_manager_;
    IApplicationProcessorObserver* application_processor_observer_ = nullptr;
    ISequenceProcessorObserver* sequence_processor_observer_;
    ISequenceSegmentProcessorObserver* sequence_segment_processor_observer_;
    ISampleGroupProcessorObserver* sample_group_processor_observer_;
    bool missing_input_file_ = false;
    bool missing_input_output_directories_ = false;
    std::optional<Filenames> loaded_filenames_;
  };
}