improve the doxygen docu of PGetTheoryBlockDialog.* (musredit_qt6).

This commit is contained in:
2025-11-25 07:49:24 +01:00
parent b9844efc8e
commit e1bf7c1a44
2 changed files with 295 additions and 12 deletions

View File

@@ -27,6 +27,19 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/ ***************************************************************************/
/**
* @file PGetTheoryBlockDialog.cpp
* @brief Implementation of the THEORY block dialog for musredit.
*
* @details Provides the implementation of PGetTheoryBlockDialog class methods
* for creating and editing THEORY blocks in musrfit msr files. The dialog
* enables interactive selection and combination of theory functions with
* visual LaTeX equation previews.
*
* @author Andreas Suter
* @date 2009-2025
*/
#include <QMessageBox> #include <QMessageBox>
#include <QTextEdit> #include <QTextEdit>
#include <QComboBox> #include <QComboBox>
@@ -41,10 +54,32 @@
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
/** /**
* <p>Constructor. * @brief Constructor - Initializes the THEORY block dialog.
* *
* \param admin pointer to the administration class object needed to extract the default theory set informations. * @details Sets up the user interface and populates the theory function combo box
* \param helpUrl help url for the asymmetry run block * with all available theory functions from the administration object. Each function
* is displayed with its label and, if available, a LaTeX-rendered equation icon.
*
* The combo box icon size is set to 250x20 pixels to accommodate LaTeX equation
* images. Icons are loaded from embedded Qt resources (:/latex_images/) based on
* the pixmap name specified in each theory function definition.
*
* The dialog is configured as modal, requiring user interaction before returning
* control to the parent window.
*
* @param admin Pointer to the PAdmin administration object containing theory
* function definitions loaded from musrfit_startup.xml. Must not be
* nullptr for proper operation.
* @param helpUrl URL string for the online help documentation. If empty, help
* button will display a placeholder message instead of opening a
* web browser.
*
* @note The dialog assumes fAdmin is valid and contains at least one theory function.
* No validation is performed on the admin pointer.
*
* @see PAdmin::getTheoryCounts() Returns the number of available theory functions
* @see PAdmin::getTheoryItem() Retrieves a specific theory function definition
* @see PTheory Structure containing function name, parameters, label, and pixmap name
*/ */
PGetTheoryBlockDialog::PGetTheoryBlockDialog(PAdmin *admin, const QString helpUrl) : PGetTheoryBlockDialog::PGetTheoryBlockDialog(PAdmin *admin, const QString helpUrl) :
fAdmin(admin), fAdmin(admin),
@@ -73,7 +108,39 @@ PGetTheoryBlockDialog::PGetTheoryBlockDialog(PAdmin *admin, const QString helpUr
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
/** /**
* <p>returns the theory function string of the currently selected theory function. * @brief Generates the formatted theory function string for the selected function.
*
* @details Constructs a complete theory function line suitable for insertion into
* an msr file THEORY block. The format depends on the function type:
*
* For standard functions:
* @code
* functionName 1 2 3 ... (comment)
* @endcode
*
* For user-defined functions (userFcn):
* @code
* userFcn libMyLibrary.so TMyFunction 1 2 ... (comment)
* @endcode
*
* The parameter numbers (1, 2, 3, ...) are placeholders that should be replaced
* with actual FITPARAMETER indices or map references before the msr file is used
* for fitting.
*
* @return QString containing the formatted theory function line with:
* - Function name
* - Library and function names (for userFcn only)
* - Sequential parameter placeholders (1 to params count)
* - Parameter comment from theory definition
* Returns "????" if the theory item cannot be retrieved (invalid index).
*
* @note This is a private slot method typically called by addPlus() and addMultiply().
*
* @see PTheory::name Function name as defined in XML
* @see PTheory::params Number of parameters required by the function
* @see PTheory::comment Descriptive text explaining the parameters
* @see addPlus() Uses this method to add functions with addition
* @see addMultiply() Uses this method to add functions with multiplication
*/ */
QString PGetTheoryBlockDialog::getTheoFuncString() QString PGetTheoryBlockDialog::getTheoFuncString()
{ {
@@ -100,7 +167,27 @@ QString PGetTheoryBlockDialog::getTheoFuncString()
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
/** /**
* <p>adds the current theory function to the text field and additionally adds a '+'. * @brief Adds the current theory function followed by a '+' operator.
*
* @details Retrieves the formatted string for the currently selected theory
* function and appends it to the theory block text editor, followed by a newline
* and a '+' character. The '+' indicates that the next function should be added
* (summed) rather than multiplied with the current function.
*
* This creates additive terms in the fit model. For example:
* @code
* asymmetry 1
* simpleGss 2 (rate)
* +
* asymmetry 3
* simpleLor 4 (rate)
* @endcode
* Represents: A1*Gss(t) + A2*Lor(t)
*
* @note This slot is connected to the "Plus" button in the UI (fPlus_pushButton).
*
* @see getTheoFuncString() Generates the theory function string
* @see addMultiply() For multiplicative combination of functions
*/ */
void PGetTheoryBlockDialog::addPlus() void PGetTheoryBlockDialog::addPlus()
{ {
@@ -110,7 +197,27 @@ void PGetTheoryBlockDialog::addPlus()
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
/** /**
* <p>adds the current theory function to the text field (newline == '*'). * @brief Adds the current theory function for multiplication.
*
* @details Retrieves the formatted string for the currently selected theory
* function and appends it to the theory block text editor on a new line. In
* musrfit theory block syntax, functions on consecutive lines (without a '+'
* separator between them) are implicitly multiplied together.
*
* This creates multiplicative terms in the fit model. For example:
* @code
* asymmetry 1
* simpleGss 2 (rate)
* TFieldCos 3 4 (phase frequency)
* @endcode
* Represents: A1 * Gss(t) * cos(ωt + φ)
*
* @note In the code comment "newline == '*'" refers to the implicit multiplication
* semantics: a newline without '+' means multiply.
* @note This slot is connected to the "Multiply" button in the UI (fMultiply_pushButton).
*
* @see getTheoFuncString() Generates the theory function string
* @see addPlus() For additive combination of functions
*/ */
void PGetTheoryBlockDialog::addMultiply() void PGetTheoryBlockDialog::addMultiply()
{ {
@@ -120,7 +227,25 @@ void PGetTheoryBlockDialog::addMultiply()
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
/** /**
* <p>Generates a help content window showing the description of the theory block. * @brief Opens online help documentation for THEORY blocks.
*
* @details Attempts to open the help URL in the user's default web browser using
* QDesktopServices::openUrl(). The help typically provides comprehensive
* documentation on:
* - Available theory functions and their physical meanings
* - Parameter descriptions for each function
* - Syntax rules for combining functions
* - Examples of common theory block patterns for µSR data analysis
*
* Error handling:
* - If fHelpUrl is empty: displays an information dialog with a placeholder message
* - If the browser fails to open: displays a critical error dialog with the URL
* formatted as a clickable hyperlink for manual access
*
* @note The URL is parsed in TolerantMode to handle various URL formats gracefully.
* @note This slot is connected to the help button in the UI.
*
* @see PGetTheoryBlockDialog::PGetTheoryBlockDialog() Where fHelpUrl is initialized
*/ */
void PGetTheoryBlockDialog::helpContent() void PGetTheoryBlockDialog::helpContent()
{ {

View File

@@ -27,34 +27,192 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/ ***************************************************************************/
/**
* @file PGetTheoryBlockDialog.h
* @brief Dialog for creating THEORY blocks in msr files.
* @details This header defines the PGetTheoryBlockDialog class which provides
* a dialog for building theory function expressions needed to create a THEORY
* block in a musrfit msr file. The dialog presents available theory functions
* with LaTeX-rendered equation previews.
*
* @author Andreas Suter
* @date 2009-2025
* @copyright Copyright (C) 2009-2025 by Andreas Suter
* @license GNU General Public License v2 or later
*
* @see PGetParameterBlockDialog For creating FITPARAMETER blocks
* @see PGetFunctionsBlockDialog For creating FUNCTIONS blocks
* @see PAdmin For theory function definitions loaded from XML
*/
#ifndef _PGETTHEORYBLOCKDIALOG_H_ #ifndef _PGETTHEORYBLOCKDIALOG_H_
#define _PGETTHEORYBLOCKDIALOG_H_ #define _PGETTHEORYBLOCKDIALOG_H_
#include "PAdmin.h" #include "PAdmin.h"
#include "ui_PGetTheoryBlockDialog.h" #include "ui_PGetTheoryBlockDialog.h"
//----------------------------------------------------------------------------- //---------------------------------------------------------------------------
/** /**
* <p>Class handling the content of the menu: Edit/Add Block/Theory Block. * @class PGetTheoryBlockDialog
* @brief Dialog for creating THEORY blocks in msr files.
*
* @details This dialog allows users to build theory function expressions by
* selecting from a list of available theory functions. Functions can be
* combined using addition (+) or multiplication (*) operators. The dialog
* displays LaTeX-rendered equation icons for visual function identification.
*
* @par Available Theory Functions:
* Theory functions are loaded from the XML configuration file and include:
* - Asymmetry functions (asymmetry, simpleGss, simpleLor, etc.)
* - Relaxation functions (expLF, stretchedExp, etc.)
* - Oscillation functions (TFieldCos, internFld, etc.)
* - User-defined functions (userFcn)
*
* @par Theory Block Syntax:
* Functions on the same line are multiplied; functions preceded by '+' are added:
* @code
* THEORY
* asymmetry 1
* simpleGss 2 (rate)
* +
* asymmetry 3
* simpleLor 4 (rate)
* @endcode
* This represents: A1 * Gss(t) + A2 * Lor(t)
*
* @par Parameter Numbering:
* Each function line includes placeholder parameter numbers (1, 2, 3...) that
* should be replaced with actual parameter references from the FITPARAMETER
* block or map indices.
*
* @see PAdmin For loading and managing theory function definitions
* @see PTheory For the structure holding individual theory function data
*/ */
class PGetTheoryBlockDialog : public QDialog, private Ui::PGetTheoryBlockDialog class PGetTheoryBlockDialog : public QDialog, private Ui::PGetTheoryBlockDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
/**
* @brief Constructs a dialog for creating THEORY blocks.
*
* @details Initializes the dialog with available theory functions from the
* administration object. Sets up the combo box with function names and
* LaTeX equation icons loaded from embedded resources. The dialog is
* configured as modal to ensure user interaction completion.
*
* @param admin Pointer to the PAdmin object containing theory function
* definitions loaded from the XML configuration file. If nullptr,
* the dialog will not function properly.
* @param helpUrl URL string pointing to online documentation for THEORY blocks.
* If empty, help button will show a placeholder message.
*
* @see PAdmin::getTheoryCounts() For retrieving number of available functions
* @see PAdmin::getTheoryItem() For accessing individual theory function data
*/
PGetTheoryBlockDialog(PAdmin *admin = 0, const QString helpUrl = ""); PGetTheoryBlockDialog(PAdmin *admin = 0, const QString helpUrl = "");
/**
* @brief Returns the complete theory block text.
*
* @details Retrieves all theory function expressions entered by the user
* through the dialog interface. The returned string is formatted according
* to musrfit msr file specifications and is ready for direct insertion into
* the THEORY section of an msr file.
*
* @return QString containing all theory function lines, with proper formatting
* including function names, parameter placeholders, comments, and
* operators ('+' for addition, newline for multiplication).
*
* @note The returned string should be parsed and parameter numbers replaced
* with actual FITPARAMETER references before saving to file.
*/
QString getTheoryBlock() { return fTheoryBlock_plainTextEdit->toPlainText(); } QString getTheoryBlock() { return fTheoryBlock_plainTextEdit->toPlainText(); }
private slots: private slots:
/**
* @brief Generates the theory function string for the selected function.
*
* @details Constructs a formatted string for the currently selected theory
* function from the combo box. The string includes:
* - Function name (e.g., "asymmetry", "simpleGss")
* - For userFcn: library and function names (e.g., "libMyLibrary.so TMyFunction")
* - Sequential parameter placeholders (1, 2, 3, ...)
* - Function comment describing parameters
*
* Example output: "simpleGss 1 2 (phase frequency)"
*
* @return QString containing the formatted theory function line. Returns "????"
* if no valid theory item is found at the current index.
*
* @see PTheory For the structure defining theory function properties
*/
QString getTheoFuncString(); QString getTheoFuncString();
/**
* @brief Adds the selected function followed by a '+' operator.
*
* @details Appends the currently selected theory function to the text editor,
* followed by a '+' character on a new line. This indicates that the next
* function should be added (summed) rather than multiplied. In musrfit
* theory blocks, the '+' operator creates additive terms in the fit function.
*
* Example result in editor:
* @code
* asymmetry 1
* simpleGss 2 (rate)
* +
* @endcode
*
* @note Connected to the "Plus" button click signal in the UI.
*
* @see addMultiply() For multiplicative combination
*/
void addPlus(); void addPlus();
/**
* @brief Adds the selected function (multiplication with next line).
*
* @details Appends the currently selected theory function to the text editor
* on a new line. In musrfit theory blocks, functions on consecutive lines
* (without a '+' separator) are multiplied together. This is the default
* operation for combining functions like asymmetry with relaxation.
*
* Example result in editor:
* @code
* asymmetry 1
* simpleGss 2 (rate)
* @endcode
* Represents: A1 * Gss(t)
*
* @note Connected to the "Multiply" button click signal in the UI.
*
* @see addPlus() For additive combination
*/
void addMultiply(); void addMultiply();
/**
* @brief Opens the online help for THEORY blocks.
*
* @details Attempts to open the help URL in the system's default web browser
* using QDesktopServices. If the URL is empty, displays a placeholder
* information message. If the browser cannot be opened, shows an error
* dialog with the URL for manual access.
*
* The help documentation typically covers:
* - Available theory functions and their parameters
* - Syntax for combining functions
* - Examples of common theory block patterns
*
* @note Connected to the help button click signal in the UI.
*
* @see PGetTheoryBlockDialog::PGetTheoryBlockDialog() Where helpUrl is set
*/
void helpContent(); void helpContent();
private: private:
PAdmin *fAdmin; ///< pointer to the administration class object needed to extract the default theory set informations. PAdmin *fAdmin; ///< Pointer to the administration object for accessing theory function definitions.
QString fHelpUrl; ///< help url for the asymmetry run block QString fHelpUrl; ///< URL to the online documentation for THEORY blocks.
}; };
#endif // _PGETTHEORYBLOCKDIALOG_H_ #endif // _PGETTHEORYBLOCKDIALOG_H_