/*==============================================================================

  Program: 3D Slicer

  Copyright (c) Laboratory for Percutaneous Surgery (PerkLab)
  Queen's University, Kingston, ON, Canada. All Rights Reserved.

  See COPYRIGHT.txt
  or http://www.slicer.org/copyright/copyright.txt for details.

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

  This file was originally developed by Csaba Pinter, PerkLab, Queen's University
  and was supported through the Applied Cancer Research Unit program of Cancer Care
  Ontario with funds provided by the Ontario Ministry of Health and Long-Term Care

==============================================================================*/

#ifndef __qSlicerSubjectHierarchyModule_h
#define __qSlicerSubjectHierarchyModule_h

// CTK includes
#include "ctkVTKObject.h"

// Slicer includes
#include "qSlicerLoadableModule.h"

#include "qSlicerSubjectHierarchyModuleExport.h"

class vtkObject;
class qSlicerSubjectHierarchyModulePrivate;

class Q_SLICER_QTMODULES_SUBJECTHIERARCHY_EXPORT qSlicerSubjectHierarchyModule : public qSlicerLoadableModule
{
  Q_OBJECT
  Q_PLUGIN_METADATA(IID "org.slicer.modules.loadable.qSlicerLoadableModule/1.0");
  Q_INTERFACES(qSlicerLoadableModule);
  QVTK_OBJECT

public:
  typedef qSlicerLoadableModule Superclass;
  explicit qSlicerSubjectHierarchyModule(QObject* parent = nullptr);
  ~qSlicerSubjectHierarchyModule() override;

  qSlicerGetTitleMacro(tr("Subject Hierarchy"));

  /// Help to use the module
  QString helpText() const override;

  /// Return acknowledgments
  QString acknowledgementText() const override;

  /// Return the authors of the module
  QStringList contributors() const override;

  /// Return a custom icon for the module
  QIcon icon() const override;

  /// Return the categories for the module
  QStringList categories() const override;

  /// Make this module hidden
  bool isHidden() const override { return true; };

protected:
  /// Initialize the module. Register the volumes reader/writer
  void setup() override;

  /// Create and return the logic associated to this module
  vtkMRMLAbstractLogic* createLogic() override;

  /// Create and return the widget representation associated to this module
  qSlicerAbstractModuleRepresentation* createWidgetRepresentation() override;

protected slots:
  /// Handles logic modified event, which happens on major changes in the
  /// scene (new scene, batch processing, import etc.)
  void onLogicModified();

protected:
  QScopedPointer<qSlicerSubjectHierarchyModulePrivate> d_ptr;

private:
  Q_DECLARE_PRIVATE(qSlicerSubjectHierarchyModule);
  Q_DISABLE_COPY(qSlicerSubjectHierarchyModule);
};

#endif
