LCOV - code coverage report
Current view: top level - src/utils/gui/div - GUIParameterTableItem.h (source / functions) Coverage Total Hit
Test: lcov.info Lines: 0.0 % 40 0
Test Date: 2024-11-20 15:55:46 Functions: 0.0 % 43 0

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4              : // This program and the accompanying materials are made available under the
       5              : // terms of the Eclipse Public License 2.0 which is available at
       6              : // https://www.eclipse.org/legal/epl-2.0/
       7              : // This Source Code may also be made available under the following Secondary
       8              : // Licenses when the conditions for such availability set forth in the Eclipse
       9              : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10              : // or later which is available at
      11              : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12              : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13              : /****************************************************************************/
      14              : /// @file    GUIParameterTableItem.h
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Michael Behrisch
      17              : /// @date
      18              : ///
      19              : // A single line in a parameter window
      20              : /****************************************************************************/
      21              : #pragma once
      22              : #include <config.h>
      23              : 
      24              : #include <string>
      25              : #include <utils/foxtools/fxheader.h>
      26              : #include <utils/common/ValueSource.h>
      27              : #include <utils/common/ToString.h>
      28              : #include <utils/gui/div/GUIParam_PopupMenu.h>
      29              : #include <utils/gui/images/GUIIconSubSys.h>
      30              : #include <utils/gui/windows/GUIAppEnum.h>
      31              : 
      32              : 
      33              : // ===========================================================================
      34              : // class definitions
      35              : // ===========================================================================
      36              : // ---------------------------------------------------------------------------
      37              : // GUIParameterTableItemInterface
      38              : // ---------------------------------------------------------------------------
      39              : /**
      40              :  * @class GUIParameterTableItemInterface
      41              :  * @brief Interface to a single line in a parameter window
      42              :  *
      43              :  * Because a single line in a parameter window may display different kinds of
      44              :  *  information (different value types, dynamic or static information), an
      45              :  *  interface is needed in order to allow a common access to the functions of
      46              :  *  a line - basically the possibility to open a tracker (GUIParameterTracker)
      47              :  *  for the stored, dynamic value.
      48              :  *
      49              :  * The implementation is done by GUIParameterTableItem.
      50              :  *
      51              :  * @see GUIParameterTracker
      52              :  * @see GUIParameterTableItem
      53              :  */
      54              : class GUIParameterTableItemInterface {
      55              : public:
      56              :     /// @brief Destructor
      57              :     virtual ~GUIParameterTableItemInterface()  {}
      58              : 
      59              : 
      60              :     /// @name Methods to be implemented by derived classes
      61              :     /// @{
      62              : 
      63              :     /// @brief Returns the information whether the value changes over simulation time
      64              :     virtual bool dynamic() const = 0;
      65              : 
      66              :     /// @brief Forces an update of the value
      67              :     virtual void update() = 0;
      68              : 
      69              :     /// @brief Returns a double-typed copy of the value-source
      70              :     virtual ValueSource<double>* getdoubleSourceCopy() const = 0;
      71              : 
      72              :     /// @brief Returns the name of the value
      73              :     virtual const std::string& getName() const = 0;
      74              :     /// @}
      75              : };
      76              : 
      77              : 
      78              : // ---------------------------------------------------------------------------
      79              : // GUIParameterTableItem
      80              : // ---------------------------------------------------------------------------
      81              : /**
      82              :  * @class GUIParameterTableItem
      83              :  * @brief Instance of a single line in a parameter window
      84              :  *
      85              :  * This class represents a single item of a parameter table and is an
      86              :  *  implementation of the GUIParameterTableItemInterface that allows different
      87              :  *  value-types.
      88              :  *
      89              :  * As some values may change over the simulation, this class holds the
      90              :  * information whether they change and how to ask for new values if they do.
      91              :  *
      92              :  * @see GUIParameterTracker
      93              :  * @see GUIParameterTableItemInterface
      94              :  */
      95              : template<class T>
      96              : class GUIParameterTableItem : public GUIParameterTableItemInterface {
      97              : public:
      98              :     /** @brief Constructor for changing (dynamic) values
      99              :      *
     100              :      * @param[in] table The table this item belongs to
     101              :      * @param[in] pos The row of the table this item fills
     102              :      * @param[in] name The name of the represented value
     103              :      * @param[in] dynamic Information whether this value changes over time
     104              :      * @param[in] src The value source
     105              :      * @todo Consider using a reference to the table
     106              :      * @todo Check whether the name should be stored in GUIParameterTableItemInterface
     107              :      */
     108            0 :     GUIParameterTableItem(FXTable* table, unsigned pos, const std::string& name,
     109              :                           bool dynamic, ValueSource<T>* src) :
     110            0 :         myAmDynamic(dynamic), myName(name), myTablePosition((FXint) pos), mySource(src),
     111            0 :         myValue(src->getValue()), myTable(table) {
     112            0 :         init(dynamic, toString<T>(src->getValue()));
     113            0 :     }
     114              : 
     115              :     /** @brief Constructor for non-changing (static) values
     116              :      *
     117              :      * @param[in] table The table this item belongs to
     118              :      * @param[in] pos The row of the table this item fills
     119              :      * @param[in] name The name of the represented value
     120              :      * @param[in] dynamic Information whether this value changes over time
     121              :      * @param[in] value The value
     122              :      * @todo Consider using a reference to the table
     123              :      * @todo Check whether the name should be stored in GUIParameterTableItemInterface
     124              :      * @todo Should never be dynamic!?
     125              :      */
     126            0 :     GUIParameterTableItem(FXTable* table, unsigned pos, const std::string& name,
     127              :                           bool dynamic, T value) :
     128            0 :         myAmDynamic(dynamic), myName(name), myTablePosition((FXint) pos), mySource(0),
     129            0 :         myValue(value), myTable(table) {
     130            0 :         init(dynamic, toString<T>(value));
     131            0 :     }
     132              : 
     133              :     /// @brief Destructor
     134            0 :     ~GUIParameterTableItem() {
     135            0 :         delete mySource;
     136            0 :     }
     137              : 
     138              :     /** @brief Initialises the line
     139              :      *
     140              :      * Fills the line using the name, the current value, and the information
     141              :      *  whether the value changes over time.
     142              :      *
     143              :      * @param[in] dynamic Information whether this value changes over time
     144              :      * @param[in] value The current (initial) value
     145              :      */
     146            0 :     void init(bool dynamic, std::string value) {
     147            0 :         myTable->setItemText(myTablePosition, 0, myName.c_str());
     148            0 :         myTable->setItemText(myTablePosition, 1, value.c_str());
     149            0 :         if (dynamic) {
     150            0 :             if (getdoubleSourceCopy() == nullptr) {
     151            0 :                 myTable->setItemIcon(myTablePosition, 2, GUIIconSubSys::getIcon(GUIIcon::YES));
     152              :             } else {
     153            0 :                 myTable->setItemIcon(myTablePosition, 2, GUIIconSubSys::getIcon(GUIIcon::TRACKER));
     154              :             }
     155              :         } else {
     156            0 :             myTable->setItemIcon(myTablePosition, 2, GUIIconSubSys::getIcon(GUIIcon::NO));
     157              :         }
     158            0 :         const int lineBreaks = (int)std::count(value.begin(), value.end(), '\n');
     159            0 :         if (lineBreaks > 0) {
     160            0 :             myTable->setRowHeight(myTablePosition, myTable->getRowHeight(myTablePosition) * (lineBreaks + 1));
     161              :         }
     162            0 :         myTable->setItemJustify(myTablePosition, 2, FXTableItem::CENTER_X | FXTableItem::CENTER_Y);
     163            0 :     }
     164              : 
     165              :     /// @brief Returns the information whether this item may change over time
     166            0 :     bool dynamic() const {
     167            0 :         return myAmDynamic;
     168              :     }
     169              : 
     170              :     /// @brief Returns the name of this value
     171            0 :     const std::string& getName() const {
     172            0 :         return myName;
     173              :     }
     174              : 
     175              :     /** @brief Resets the value if it's dynamic
     176              :      *
     177              :      * If the value is dynamic, the current value is retrieved from the value
     178              :      *  source. If it is different from the previous one (stored in myValue),
     179              :      *  it is stored in myValue and set as the current value text within the
     180              :      *  according table cell.
     181              :      */
     182            0 :     void update() {
     183            0 :         if (!dynamic() || mySource == 0) {
     184            0 :             return;
     185              :         }
     186            0 :         T value = mySource->getValue();
     187            0 :         if (value != myValue) {
     188            0 :             myValue = value;
     189            0 :             myTable->setItemText(myTablePosition, 1, toString<T>(myValue).c_str());
     190              :         }
     191              :     }
     192              : 
     193              :     /// @brief Returns a copy of the source if the value is dynamic
     194              :     ValueSource<T>* getSourceCopy() const {
     195              :         if (mySource == 0) {
     196              :             return 0;
     197              :         }
     198              :         return mySource->copy();
     199              :     }
     200              : 
     201              :     /// @brief Returns a double-typed copy of the source if the value is dynamic
     202            0 :     ValueSource<double>* getdoubleSourceCopy() const {
     203            0 :         if (mySource == 0) {
     204              :             return 0;
     205              :         }
     206            0 :         return mySource->makedoubleReturningCopy();
     207              :     }
     208              : 
     209              : private:
     210              :     /// @brief Information whether the value may change
     211              :     bool myAmDynamic;
     212              : 
     213              :     /// @brief The name of this value
     214              :     std::string myName;
     215              : 
     216              :     /// @brief The position within the table
     217              :     FXint myTablePosition;
     218              : 
     219              :     /// @brief The source to gain new values from; this source is==0 if the values are not dynamic
     220              :     ValueSource<T>* mySource;
     221              : 
     222              :     /// @brief A backup of the value to avoid the redrawing when nothing has changed
     223              :     T myValue;
     224              : 
     225              :     /// @brief The table this entry belongs to
     226              :     FXTable* myTable;
     227              : };
        

Generated by: LCOV version 2.0-1