Commit 5ffb4b30 authored by promayon's avatar promayon
Browse files

FIXED doxygen warnings (see http://merise.imag.fr:8080/icescrum/p/CAMITK#story/18 )

FIXED doxygen main page now in Core.h (no need to use .h.in now)
FIXED doxygen configuration updated to doxygen 1.8


git-svn-id: svn+ssh://scm.forge.imag.fr/var/lib/gforge/chroot/scmrepos/svn/camitk/trunk/camitk@501 ec899d31-69d1-42ba-9299-647d76f65fb3
parent 3461c7b5
......@@ -33,7 +33,7 @@
/**
* This class describes the QWidget that allows user to change the X,Y ans Z angle of the arbitrary slice
* of a 2D image. Moreover it also allows to change the slice number using a slider.
* @Note :
* \note
* For initialization purpose, widget must be used for only one component (arbitrary).
* If several component are selected, do not build / display it.
*
......
......@@ -57,8 +57,8 @@ public:
/// Update the widget with the correct PickedPixelMap (ImageComponent + Qlist of the selected points)
void updateComponent(ImageComponent * image);
/// Give the picked pixel map (for other actions needing picking)
PickedPixelMap * getPickedPixelMap(ImageComponent * image);
/// Give the picked pixel map (for other actions needing picking)
PickedPixelMap * getPickedPixelMap(ImageComponent * image);
public slots:
......@@ -71,26 +71,27 @@ public slots:
/// Slot called when remove button is clicked
void removePixelFromTable();
void removeSeedNumber(int, int);
void removeSeedNumber(int, int);
/// Slot called when save as button is clicked
void savePixelList();
/// Slot called when open CSV file button is clicked
void openPixelList();
/// Slot called when open CSV file button is clicked
void openPixelList();
/// Slot called when the user manually changes a value in the table
void manuallyModified(int, int);
/// Slot called when the user manually changes a value in the table
void manuallyModified(int, int);
/// Update the tableWidget when it's necessary
void updateTable();
protected:
Ui::MultiPickingWidget ui;
Ui::MultiPickingWidget ui;
/** allows to construct the table
* @param liste the * list to display in the QtableWidget
* @param valueList the pointer to the values
*/
void createItems(QList< QVector3D >* liste, QList<double> * valueList);
......@@ -100,7 +101,7 @@ protected:
/// the current PickedPixelMap
PickedPixelMap *pPM;
QMap<ImageComponent *, PickedPixelMap *> map;
QMap<ImageComponent *, PickedPixelMap *> map;
/// allows to resize the QtableWidget
void resizeGraphicalTable();
......
......@@ -48,12 +48,12 @@ public:
virtual ~PickedPixelMap();
/** Allows to remove one pixel in the list
* @param index the index in the list of the pixel to remove
* @param id the index in the list of the pixel to remove
*/
void removePixel (int id);
/** Allows to modify one pixel in the list
* @param index the index in the list of the pixel to modify using the last picked pixel
* @param row the index in the list of the pixel to modify using the last picked pixel
*/
void modifyPixel (int row);
......
......@@ -33,12 +33,12 @@
#include <Action.h>
#include <ImageComponent.h>
using namespace camitk;
// -- Core stuff classes
class InteractiveViewer;
//***************************************************************************
/**
......@@ -46,7 +46,7 @@ class InteractiveViewer;
* of 3D volumes from a set of images (ImageComponent), typically using the marching cubes algorithm.
*/
class ImageReconstructionAction : public Action {
Q_OBJECT
Q_OBJECT
public:
/// the constructor
......@@ -54,29 +54,35 @@ public:
/// the destructor
virtual ~ImageReconstructionAction();
/// this method creates and returns the widget containing the user interface for the action
virtual QWidget * getWidget();
/// Initializes the dialog options
void init();
/** Return an isosurface reconstructed with the Marching Cubes algorithm,
* from the original set of slices.
/** Return an isosurface reconstructed with the Marching Cubes algorithm,
* from the original set of slices.
* @param image the input image
* @param isoValue Grey levels corresponding to the isovalue the isosurface represents
* @param subsample If true, the image is subsampled by 1/2^3 to simplify the output object
* @param keepLargestConnectedComponent If true, keep only the largest component.
* @param subSampledDimX subsampling to apply in the X direction
* @param subSampledDimY subsampling to apply in the Y direction
* @param subSampledDimZ subsampling to apply in the 2 direction
*/
static vtkSmartPointer<vtkPointSet> getMarchingCubesReconstruction(
ImageComponent * image,
double isoValue, bool keepLargestConnectedComponent,
bool subsample, int subSampledDimX, int subSampledDimY, int subSampledDimZ);
ImageComponent * image,
double isoValue, bool keepLargestConnectedComponent,
bool subsample, int subSampledDimX, int subSampledDimY, int subSampledDimZ);
public slots:
/// method called when the action is applied (nothing to do here, everything will be done by the widget)
virtual ApplyStatus apply() { return SUCCESS; };
/// method called when the action is applied (nothing to do here, everything will be done by the widget)
virtual ApplyStatus apply() {
return SUCCESS;
};
private:
private:
/// The initial images, used for the reconstruction.
ImageComponent *myComponent;
......@@ -88,10 +94,10 @@ private:
int subSampledImageXDim;
int subSampledImageYDim;
int subSampledImageZDim;
/// Qt model designed by QtDesigner (with qt4, nor more inheritance from the ui)
Ui::ui_ImageReconstructionAction ui;
public slots:
void build3DModel();
void keepComponentcheckBox_toggled(bool toggled);
......
......@@ -409,7 +409,7 @@ void ImpMainWindow::openDirectory ( QAction *emitter ) {
statusBar()->showMessage ( tr ( "Error loading directory:" ) + dir );
}
else {
//! TODO \todo \TODO add to recent document and manage directories as recent documents
// TODO add to recent document and manage directories as recent documents
statusBar()->showMessage ( tr ( QString("Directory " + dir + " successfuly loaded" ).toStdString().c_str()) );
// refresh all
......
......@@ -93,7 +93,7 @@ public slots:
///@}
/** @name View menu slots
* \TODO everything that is linked to the InteractiveViewer has to be managed by the view (in case there is more than one InteractiveViewer)
* \note everything that is linked to the InteractiveViewer has to be managed by the view (in case there is more than one InteractiveViewer)
*/
///@{
......
......@@ -3,7 +3,7 @@
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "Computer Assited Medical Intervention Tool Kit"
PROJECT_NUMBER = @VERSION_STRING@
PROJECT_NUMBER = @CAMITK_SHORT_VERSION_STRING@
OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIR@
PROJECT_LOGO = @PROJECT_LOGO@
CREATE_SUBDIRS = NO
......@@ -69,7 +69,7 @@ GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
#obsolete SHOW_DIRECTORIES = NO
SHOW_FILES = YES
SHOW_NAMESPACES = NO
FILE_VERSION_FILTER =
......@@ -142,7 +142,7 @@ HTML_COLORSTYLE_HUE = 112
HTML_COLORSTYLE_SAT = 66
HTML_COLORSTYLE_GAMMA = 94
HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
#obsolete HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = YES
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
......@@ -169,7 +169,7 @@ ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
USE_INLINE_TREES = NO
#obsolete USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
......@@ -213,7 +213,7 @@ PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = NO
EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
......@@ -257,7 +257,7 @@ DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH = @DOT_PATH@
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
DOT_GRAPH_MAX_NODES = 75
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = YES
DOT_MULTI_TARGETS = NO
......
......@@ -38,88 +38,93 @@
* A Factory for creating MMLMonitorDiplay
*/
class MMLMonitorDisplayFactory {
public:
class MMLMonitorDisplayFactory {
public:
/// return the unique instance of the factory
static MMLMonitorDisplayFactory* getInstance();
/**
* Register a class into the map
* A registered class can be created using createMonitorDisplay()
* A registered class can be created using createMonitorDisplay().
*
* C is a subclass of MMLMonitorDisplay.
*
* @param C a subclass of MMLMonitorDisplay
* @param id unique id to associate with the Class C
* @param type the type of monitor the class can display
*/
template<typename C>
bool registerClass(std::string id,Monitor::type type){
if (mapObjectCreator.find(id) != mapObjectCreator.end()){
*/
template<typename C>
bool registerClass(std::string id,Monitor::type type) {
if (mapObjectCreator.find(id) != mapObjectCreator.end()) {
return false;
}else{
mapObjectCreator.insert( std::make_pair<std::string,CreateMonitorDisplayFunctionPointer>(id, &createTheMonitorDisplay<C> ) );
displaysByType[type].push_back(id);
return true;
}
}
else {
mapObjectCreator.insert( std::make_pair<std::string,CreateMonitorDisplayFunctionPointer>(id, &createTheMonitorDisplay<C> ) );
displaysByType[type].push_back(id);
return true;
}
}
/**
* Register a class into the map for classes wich can display every types of monitors
* Register a class into the map for classes wich can display every types of monitors.
*
* C is a subclass of MMLMonitorDisplay.
*
* @param C a subclass of MMLMonitorDisplay
* @param id unique id to associate with the Class C
*/
template<typename C>
bool registerClass(std::string id){
if (mapObjectCreator.find(id) != mapObjectCreator.end()){
*/
template<typename C>
bool registerClass(std::string id) {
if (mapObjectCreator.find(id) != mapObjectCreator.end()) {
return false;
}else{
mapObjectCreator.insert( std::make_pair<std::string,CreateMonitorDisplayFunctionPointer>(id, &createTheMonitorDisplay<C> ) );
for (unsigned int i=0;i<Monitor::typeCount;i++){
displaysByType[i].push_back(id);
}
return true;
}
}
else {
mapObjectCreator.insert( std::make_pair<std::string,CreateMonitorDisplayFunctionPointer>(id, &createTheMonitorDisplay<C> ) );
for (unsigned int i=0; i<Monitor::typeCount; i++) {
displaysByType[i].push_back(id);
}
return true;
}
}
/// Returns true if id is in the map
bool isRegistered(std::string id);
///Creates an MMLMonitorDisplay based on its string id or return null if there is no id in the map
///Creates an MMLMonitorDisplay based on its string id or return null if there is no id in the map
MMLMonitorDisplay* createMonitorDisplay(std::string id,Monitor* monitor,MMLComponent* manager);
/// give the number of displays registered for a specified type
unsigned int getNumberOfDisplaysByType(Monitor::type type);
/// get a display name by its type and index
std::string getDisplayByType(Monitor::type type,const unsigned int i);
private:
private:
MMLMonitorDisplayFactory();
typedef MMLMonitorDisplay* (*CreateMonitorDisplayFunctionPointer)(Monitor* monitor,MMLComponent* manager);
/// A map between MonitorDisplay name as string to functions (CreateMonitorDisplayFunctionPointer)
std::map<std::string, CreateMonitorDisplayFunctionPointer> mapObjectCreator;
/**
* function whose pointers are inserted into the map
* @param C type of MMLMonitorDisplay
* function whose pointers are inserted into the map. C is the type of MMLMonitorDisplay
* @return an MonitorDisplay which type is C
*/
template<typename C>
static MMLMonitorDisplay* createTheMonitorDisplay(Monitor* monitor,MMLComponent* manager){
return new C(monitor,manager);
template<typename C>
static MMLMonitorDisplay* createTheMonitorDisplay(Monitor* monitor,MMLComponent* manager) {
return new C(monitor,manager);
}
/// list of displays by type
std::vector<std::string> displaysByType[Monitor::typeCount];
/// unique instance of the factory
static MMLMonitorDisplayFactory* instance;
};
#endif // MMLMonitorDisplayFactory_H
\ No newline at end of file
#endif // MMLMonitorDisplayFactory_H
......@@ -78,14 +78,6 @@ public:
QVector3D getPosition() const;
/** intercept signal for dynamic property changed.
* \TODO: build a specific virtual class ImpProperty than have a specific slot/method
* that is automatically called when a change is made in the dynamic property (or
* may be any property). Modify the PropertyEditor::edit method to
* PropertyEditor::edit(ImpProperty). In this ImpProperty one also could
* put some specific methods in order to simplifies the properties.
* For instance, a method addProperty(string name) that automatically adds a new
* dynamic property! Then it is bye bye to Q_PROPERTY and this is a complete
* Qt wrapping!
*/
virtual bool event(QEvent* e);
......
......@@ -460,7 +460,7 @@ void LoadsEditor::updateND() {
ui.nullDisplCheckBox->setChecked(disableSliders);
/// \todo do something to set the "unspecified" flag
// TODO do something to set the "unspecified" flag
}
//---------------------- nullDisplacementClicked --------------------
......
......@@ -183,9 +183,10 @@ class PHYSICALMODEL_COMPONENT_API LoadsManager {
PhysicalModel * getReferencePM() const;
/** set the new atom data (one scalar per atom), and update display
* @param name for add-ons, this is the specific atom data name to show on screen
*/
void setAtomData(std::AtomDataVector &, QString name = "Add-On Monitor");
* @param values values to show
* @param name for add-ons, this is the specific atom data name to show on screen
*/
void setAtomData(std::AtomDataVector &values, QString name = "Add-On Monitor");
/// get the current list of all the atom data
std::AtomDataVector & getAtomData();
......@@ -286,6 +287,11 @@ class PHYSICALMODEL_COMPONENT_API LoadsManager {
/** add a decoration to atom.
* @param a the atom on which the decoration will be added
* @param ld the decoration type is dependent of the type of ld (translation, force, null translation...)
* @param time the current time
* @param defaultSize size by default
* @param min minimal value (can be updated)
* @param max maximal value (can be updated)
* @param val current value (always updated)
*/
void addDecoration(Atom *a, Load *ld, double time, double defaultSize, double *max, double *min, double *val);
......
......@@ -23,69 +23,8 @@
* $CAMITK_LICENCE_END$
****************************************************************************/
// The following content describes the index.html page of the API documentation.
// It uses CMake variable (surrounded by the '@' pattern), replaced by their content using the CONFIGURE_FILE CMake command
// This file is configured in camitk/cmake/modules/CamiTKApiDoc.cmake into the CamiTKVersion.h file.
/** @mainpage @CAMITK_VERSION_STRING@ API Documentation
*
* @section introduction Introduction
* Welcome to the Computer Assisted Medical Intervention Tool kit (CamiTK) API Documentation.
* CamiTK is an open-source framework that helps researchers and clinicians to easily and rapidly collaborate in order to prototype CAMI applications, that feature medical images, surgical navigation and biomechanical simulations. CamiTK uses famous tools such as Qt, ITK and VTK.
* This API documentation would introduce you to the architecture of the framework
*
* @section architecture Core Architecture
* CamiTK follows the Components Based Software Engineering (CBSE) principles. Each new functionality to the framework is a new module represented as a dynamic library (.dll on windows, .so on Linux systems). These principles guarantee CamiTK to be higly modular and easier to maintain.
* CamiTK is provided with its core and basic modules (to handle 2D and 3D images using VTK for instance). You can easily add new modules to the framework or create new camitk-application.
*
* @subsection design-pattern Design Pattern
* CamiTK core architecture follows the Model-View-Presenter (MVP) design-pattern. It helps dividing the logic in two parts : domain logic (data structures and algorithms) and application logic (the Model, GUI aspects to present and interact with the domain logic).
*
* \image html camitk_service_layer_1.png "The service layer" width=10cm
*
* To do so, 'viewers' (application logic modules) are used to present and interact with the domain logic : the 'components' (the data logic, the data structures) and the 'actions' (the processing logic, the algorithms to be used on these components).
* In order to easily glue together all this modules CamiTK uses a Service Layer Pattern. This service layer can be seen as a contract from the viewers consumers of services provided by the 'components' and 'actions'. The viewers interact with the components without knowing exactly which kind of data it represents.
*
* @subsection components Components
*
* \image html camitk_service_layer_2.png "The four interfaces implemented by the Component class" width=10cm
*
* CamiTK components describe data structure and therefore are used to represent the data logic. The @ref camitk::Component "Component" class implements four interfaces, which gather the different possibilities of a component in order to provide the service layer. See the @ref camitk::Component "Component" class to have more details.
*
* @subsection actions Actions
* The @ref camitk::Action "Action" class generalizes the notion of component processing. An action applies a given algorithm to one or several listed components.
* Generally viewers trigger actions on the currently selected components.
*
* @subsection viewers Viewers
* The @ref camitk::Viewer "Viewer" class handles all the presentation and interaction logic (the View and Presenter part of the MVP). The CamiTK viewers are using either Qt widget or VTK renderer but are not limited to that. Viewers manage the user interactions and map them into calls to the interface methods of the components.
*
* @section getting-started Getting started
*
* @subsection how-to-extend-camitk How to add a new action or component ?
* To add a new action or component to CamiTK, you will need to create a new dynamic link library that extends the framework with your desired data structure and / or algorithms. You may want to use the CamiTK wizard to automatically generate a code skeleton for your extension. Please check the wiki documentation about <a href="https://forge.imag.fr/plugins/mediawiki/wiki/camitk/index.php/Create_your_own_custom_action_for_CamiTK">adding a new component / action</a>.
*
* @subsection how-to-create-new-application How to create a new application ?
* You may inherites the @ref camitk::MainWindow "MainWindow" class. The MainWindow class is a kind of super presenter : it instanciates and organizes all the viewers in an application GUI. Check the wiki tutorial : <a href="https://forge.imag.fr/plugins/mediawiki/wiki/camitk/index.php/Create_your_own_application_for_CamiTK">create a new applicaiton</a>.
*
* @subsection tutorials Tutorials
* Many tutorials are proposed in the <a href="https://forge.imag.fr/plugins/mediawiki/wiki/camitk/index.php/Main_Page">CamiTK wiki</a> (you may want to edit it and share your knowledge).
*
* @section HomePage Home Page
* The home page of the project can be found at : <a href="http://camitk.imag.fr">camitk.imag.fr</a>
*
* @section copyright (c) UJF-Grenoble 1, CNRS, TIMC-IMAG UMR 5525
*/
// Here are the related pages of the documention
/**
* @page home-page CamiTK website
* The home page of the project can be found at : <a href="http://camitk.imag.fr">camitk.imag.fr</a>
*
* @page wiki CamiTK wiki
* Installation instructions, many tips and tutorials are proposed in the <a href="https://forge.imag.fr/plugins/mediawiki/wiki/camitk/index.php/Main_Page">CamiTK wiki</a> (you may want to edit it and share your knowledge).
*
*
**/
// CMake will automatically generate the corresponding CamiTKVersion.h in the build tree
// and replace the @variables using the configuration details.
namespace camitk
{
......
......@@ -26,6 +26,70 @@
#ifndef CAMITKCORE_H
#define CAMITKCORE_H
// The following content describes the index.html page of the API documentation.
// It uses CMake variable (surrounded by the '@' pattern), replaced by their content using the CONFIGURE_FILE CMake command
// This file is configured in camitk/cmake/modules/CamiTKApiDoc.cmake into the CamiTKVersion.h file.
/** @mainpage CamiTK API Documentation
*
* @section introduction Introduction
* Welcome to the Computer Assisted Medical Intervention Tool kit (CamiTK) API Documentation.
* CamiTK is an open-source framework that helps researchers and clinicians to easily and rapidly collaborate in order to prototype CAMI applications, that feature medical images, surgical navigation and biomechanical simulations. CamiTK uses famous tools such as Qt, ITK and VTK.
* This API documentation would introduce you to the architecture of the framework
*
* @section architecture Core Architecture
* CamiTK follows the Components Based Software Engineering (CBSE) principles. Each new functionality to the framework is a new module represented as a dynamic library (.dll on windows, .so on Linux systems). These principles guarantee CamiTK to be higly modular and easier to maintain.
* CamiTK is provided with its core and basic modules (to handle 2D and 3D images using VTK for instance). You can easily add new modules to the framework or create new camitk-application.
*
* @subsection design-pattern Design Pattern
* CamiTK core architecture follows the Model-View-Presenter (MVP) design-pattern. It helps dividing the logic in two parts : domain logic (data structures and algorithms) and application logic (the Model, GUI aspects to present and interact with the domain logic).
*
* \image html camitk_service_layer_1.png "The service layer" width=10cm
*
* To do so, 'viewers' (application logic modules) are used to present and interact with the domain logic : the 'components' (the data logic, the data structures) and the 'actions' (the processing logic, the algorithms to be used on these components).
* In order to easily glue together all this modules CamiTK uses a Service Layer Pattern. This service layer can be seen as a contract from the viewers consumers of services provided by the 'components' and 'actions'. The viewers interact with the components without knowing exactly which kind of data it represents.
*
* @subsection components Components
*
* \image html camitk_service_layer_2.png "The four interfaces implemented by the Component class" width=10cm
*
* CamiTK components describe data structure and therefore are used to represent the data logic. The @ref camitk::Component "Component" class implements four interfaces, which gather the different possibilities of a component in order to provide the service layer. See the @ref camitk::Component "Component" class to have more details.
*
* @subsection actions Actions
* The @ref camitk::Action "Action" class generalizes the notion of component processing. An action applies a given algorithm to one or several listed components.
* Generally viewers trigger actions on the currently selected components.
*
* @subsection viewers Viewers
* The @ref camitk::Viewer "Viewer" class handles all the presentation and interaction logic (the View and Presenter part of the MVP). The CamiTK viewers are using either Qt widget or VTK renderer but are not limited to that. Viewers manage the user interactions and map them into calls to the interface methods of the components.
*
* @section getting-started Getting started
*
* @subsection how-to-extend-camitk How to add a new action or component ?
* To add a new action or component to CamiTK, you will need to create a new dynamic link library that extends the framework with your desired data structure and / or algorithms. You may want to use the CamiTK wizard to automatically generate a code skeleton for your extension. Please check the wiki documentation about <a href="https://forge.imag.fr/plugins/mediawiki/wiki/camitk/index.php/Create_your_own_custom_action_for_CamiTK">adding a new component / action</a>.
*
* @subsection how-to-create-new-application How to create a new application ?
* You may inherites the @ref camitk::MainWindow "MainWindow" class. The MainWindow class is a kind of super presenter : it instanciates and organizes all the viewers in an application GUI. Check the wiki tutorial : <a href="https://forge.imag.fr/plugins/mediawiki/wiki/camitk/index.php/Create_your_own_application_for_CamiTK">create a new applicaiton</a>.
*
* @subsection tutorials Tutorials
* Many tutorials are proposed in the <a href="https://forge.imag.fr/plugins/mediawiki/wiki/camitk/index.php/Main_Page">CamiTK wiki</a> (you may want to edit it and share your knowledge).
*
* @section HomePage Home Page
* The home page of the project can be found at : <a href="http://camitk.imag.fr">camitk.imag.fr</a>
*
* @section copyright (c) UJF-Grenoble 1, CNRS, TIMC-IMAG UMR 5525
*/
// Here are the related pages of the documention
/**
* @page home-page CamiTK website
* The home page of the project can be found at : <a href="http://camitk.imag.fr">camitk.imag.fr</a>
*
* @page wiki CamiTK wiki
* Installation instructions, many tips and tutorials are proposed in the <a href="https://forge.imag.fr/plugins/mediawiki/wiki/camitk/index.php/Main_Page">CamiTK wiki</a> (you may want to edit it and share your knowledge).
*
*
**/
// -- Core stuff
#include "CamiTKAPI.h"
#include "HistoryItem.h"
......@@ -33,29 +97,28 @@
// -- Qt stuff
#include <QStack>
namespace camitk
{
namespace camitk {
/**
* Core class specifies the basic static information for the CamiTK API.
*/
class CAMITK_API Core {
public:
/// @name runtime directory information
///@{
/// get the camitk component extension directory name
/// @return a null QString, checkable with isNull(), if no component dir found
static const QString getComponentDir();
/// get the camitk action directory name
/// @return a null QString, checkable with isNull(), if no action dir found
static const QString getActionDir();
/// get the camitk module extension directory name
/// @param subpath name of the module type (and subdirectory) to get (this simplifies getting the subdir name on plateform with hasBuildTypeDirectory()
/// @param subpath name of the module type (and subdirectory) to get (this simplifies getting the subdir name on plateform with hasBuildTypeDirectory()
/// @return a null QString, checkable with isNull(), if no module dir found
static const QString getModuleDir(const QString & subpath = QString());
/// get the camitk test data directory name
/// @return a null QString, checkable with isNull(), if no test data directory found
static const QString getTestDataDir();
......@@ -66,9 +129,9 @@ public:
/// get more information about installation, etc...
static const QString getConfig();
///@}
/// @name miscallaneous utility method or variables
///@{
///@{
/// complete version string
static const char *version;
/// short version string (all in lower case, without the patch number)
......@@ -78,33 +141,33 @@ public:
/// version used for so name
static const char *soVersion;
///@}
private:
/// check if plateform has debug/release subdirs