123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- /*=========================================================================
- Library: CTK
- Copyright (c) Kitware Inc.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0.txt
- 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.
- =========================================================================*/
- #ifndef __ctkDICOMBrowser_h
- #define __ctkDICOMBrowser_h
- // Qt includes
- #include <QItemSelection>
- #include <QWidget>
- #include "ctkDICOMWidgetsExport.h"
- class ctkDICOMBrowserPrivate;
- class ctkDICOMDatabase;
- class ctkDICOMTableManager;
- class ctkFileDialog;
- class ctkThumbnailLabel;
- class QMenu;
- class QModelIndex;
- /// \ingroup DICOM_Widgets
- ///
- /// \brief The DICOM browser widget provides an interface to organize DICOM
- /// data stored in a local ctkDICOMDatabase.
- ///
- /// Using a local database avoids redundant calculations and speed up subsequent
- /// access.
- ///
- /// Supported operations are:
- ///
- /// * Import
- /// * Export
- /// * Send
- /// * Query
- /// * Remove
- /// * Repair
- ///
- class CTK_DICOM_WIDGETS_EXPORT ctkDICOMBrowser : public QWidget
- {
- Q_OBJECT
- Q_ENUMS(ImportDirectoryMode)
- Q_PROPERTY(QString databaseDirectory READ databaseDirectory WRITE setDatabaseDirectory)
- Q_PROPERTY(int patientsAddedDuringImport READ patientsAddedDuringImport)
- Q_PROPERTY(int studiesAddedDuringImport READ studiesAddedDuringImport)
- Q_PROPERTY(int seriesAddedDuringImport READ seriesAddedDuringImport)
- Q_PROPERTY(int instancesAddedDuringImport READ instancesAddedDuringImport)
- Q_PROPERTY(QStringList tagsToPrecache READ tagsToPrecache WRITE setTagsToPrecache)
- Q_PROPERTY(bool displayImportSummary READ displayImportSummary WRITE setDisplayImportSummary)
- Q_PROPERTY(ctkDICOMBrowser::ImportDirectoryMode ImportDirectoryMode READ importDirectoryMode WRITE setImportDirectoryMode)
- public:
- typedef ctkDICOMBrowser Self;
- typedef QWidget Superclass;
- explicit ctkDICOMBrowser(QWidget* parent=0);
- virtual ~ctkDICOMBrowser();
- /// Directory being used to store the dicom database
- QString databaseDirectory() const;
- /// Return settings key used to store the directory.
- Q_INVOKABLE static QString databaseDirectorySettingsKey();
- /// See ctkDICOMDatabase for description - these accessors
- /// delegate to the corresponding routines of the internal
- /// instance of the database.
- /// @see ctkDICOMDatabase
- void setTagsToPrecache(const QStringList tags);
- const QStringList tagsToPrecache();
- /// Updates schema of loaded database to match the one
- /// coded by the current version of ctkDICOMDatabase.
- /// Also provides a dialog box for progress
- Q_INVOKABLE void updateDatabaseSchemaIfNeeded();
- Q_INVOKABLE ctkDICOMDatabase* database();
- Q_INVOKABLE ctkDICOMTableManager* dicomTableManager();
- /// Option to show or not import summary dialog.
- /// Since the summary dialog is modal, we give the option
- /// of disabling it for batch modes or testing.
- void setDisplayImportSummary(bool);
- bool displayImportSummary();
- /// Accessors to status of last directory import operation
- int patientsAddedDuringImport();
- int studiesAddedDuringImport();
- int seriesAddedDuringImport();
- int instancesAddedDuringImport();
- enum ImportDirectoryMode
- {
- ImportDirectoryCopy = 0,
- ImportDirectoryAddLink
- };
- /// \brief Get value of ImportDirectoryMode settings.
- ///
- /// \sa setImportDirectoryMode(ctkDICOMBrowser::ImportDirectoryMode)
- ctkDICOMBrowser::ImportDirectoryMode importDirectoryMode()const;
- /// \brief Return instance of import dialog.
- ///
- /// \internal
- Q_INVOKABLE ctkFileDialog* importDialog()const;
- public Q_SLOTS:
- /// \brief Set value of ImportDirectoryMode settings.
- ///
- /// Setting the value will update the comboBox found at the bottom
- /// of the import dialog.
- ///
- /// \sa importDirectoryMode()
- void setImportDirectoryMode(ctkDICOMBrowser::ImportDirectoryMode mode);
- void setDatabaseDirectory(const QString& directory);
- void onFileIndexed(const QString& filePath);
- /// \brief Pop-up file dialog allowing to select and import one or multiple
- /// DICOM directories.
- ///
- /// The dialog is extented with two additional controls:
- ///
- /// * **ImportDirectoryMode** combox: Allow user to select "Add Link" or "Copy" mode.
- /// Associated settings is stored using key `DICOM/ImportDirectoryMode`.
- void openImportDialog();
- void openExportDialog();
- void openQueryDialog();
- void onRemoveAction();
- void onRepairAction();
- void onTablesDensityComboBox(QString);
- /// \brief Import directories
- ///
- /// This can be used to externally trigger an import (i.e. for testing or to support drag-and-drop)
- ///
- /// By default, \a mode is ImportDirectoryMode::ImportDirectoryAddLink is set.
- ///
- /// \sa importDirectory(QString directory, int mode)
- void importDirectories(QStringList directories, ctkDICOMBrowser::ImportDirectoryMode mode = ImportDirectoryAddLink);
- /// \brief Import a directory
- ///
- /// This can be used to externally trigger an import (i.e. for testing or to support drag-and-drop)
- ///
- /// By default, \a mode is ImportDirectoryMode::ImportDirectoryAddLink is set.
- void importDirectory(QString directory, ctkDICOMBrowser::ImportDirectoryMode mode = ImportDirectoryAddLink);
- /// \deprecated importDirectory() should be used
- void onImportDirectory(QString directory, ctkDICOMBrowser::ImportDirectoryMode mode = ImportDirectoryAddLink);
- /// slots to capture status updates from the database during an
- /// import operation
- void onPatientAdded(int, QString, QString, QString);
- void onStudyAdded(QString);
- void onSeriesAdded(QString);
- void onInstanceAdded(QString);
- Q_SIGNALS:
- /// Emited when directory is changed
- void databaseDirectoryChanged(const QString&);
- /// Emited when query/retrieve operation has happened
- void queryRetrieveFinished();
- /// Emited when the directory import operation has completed
- void directoryImported();
- protected:
- QScopedPointer<ctkDICOMBrowserPrivate> d_ptr;
- /// Confirm with the user that they wish to delete the selected uids.
- /// Add information about the selected UIDs to a message box, checks
- /// for patient name, series description, study description, if all
- /// empty, uses the UID.
- /// Returns true if the user confirms the delete, false otherwise.
- /// Remembers if the user doesn't want to show the confirmation again.
- bool confirmDeleteSelectedUIDs(QStringList uids);
- protected Q_SLOTS:
- /// \brief Import directories
- ///
- /// This is used when user selected one or multiple
- /// directories from the Import Dialog.
- ///
- /// \sa importDirectories(QString directory, int mode)
- void onImportDirectoriesSelected(QStringList directories);
- void onImportDirectoryComboBoxCurrentIndexChanged(int index);
- void onModelSelected(const QItemSelection&, const QItemSelection&);
- /// Called when a right mouse click is made in the patients table
- void onPatientsRightClicked(const QPoint &point);
- /// Called when a right mouse click is made in the studies table
- void onStudiesRightClicked(const QPoint &point);
- /// Called when a right mouse click is made in the series table
- void onSeriesRightClicked(const QPoint &point);
- /// Called to export the series associated with the selected UIDs
- /// \sa exportSelectedStudies, exportSelectedPatients
- void exportSelectedSeries(QString dirPath, QStringList uids);
- /// Called to export the studies associated with the selected UIDs
- /// \sa exportSelectedSeries, exportSelectedPatients
- void exportSelectedStudies(QString dirPath, QStringList uids);
- /// Called to export the patients associated with the selected UIDs
- /// \sa exportSelectedStudies, exportSelectedSeries
- void exportSelectedPatients(QString dirPath, QStringList uids);
- /// To be called when dialog finishes
- void onQueryRetrieveFinished();
- private:
- Q_DECLARE_PRIVATE(ctkDICOMBrowser);
- Q_DISABLE_COPY(ctkDICOMBrowser);
- };
- Q_DECLARE_METATYPE(ctkDICOMBrowser::ImportDirectoryMode)
- #endif
|