//************************************************************************************************** // LblUnits.cpp * // -------------- * // Started : 2014-03-01 * // Last Update : 2015-01-18 * // Copyright : (C) 2014-2016 MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "LblUnits.hpp" //************************************************************************************************** // Constructor. LblUnits::LblUnits( void ) { bClear( ); } //************************************************************************************************** // Destructor. LblUnits::~LblUnits( ) { } //************************************************************************************************** // Create an instance of this object. // // Argument List : // poWin - The parent window // oWinID - The window identifier // iWidth - The width of the wxLabel (wxStaticText) control in pixels // // Return Values : // true - Success // false - Failure bool LblUnits::bCreate( wxWindow * poWin, wxWindowID oWinID, int iWidth ) { // Check if the object has already been created if( bIsCreated( ) ) return( true ); // Create the object if( ! wxLabel::Create( poWin, oWinID, wxT(""), wxDefaultPosition, wxSize( iWidth, GUI_CTRL_HT-2 ), wxST_NO_AUTORESIZE ) ) return( false ); return( true ); } //************************************************************************************************** // Clear object attributes. // // Return Values : // Success - true // Failure - false bool LblUnits::bClear( void ) { m_eUnitsType = eUNITS_NONE; m_iUnitsExp = 0; if( bIsCreated( ) ) SetLabel( wxT("") ); return( true ); } //************************************************************************************************** // Set the units type attribute. // // Argument List : // eUType - the enumerated units type // // Return Values : // true - Success // false - Failure bool LblUnits::bSetUnitsType( eTypeUnits eUType ) { wxString osUnits; wxChar ocPrefix; m_eUnitsType = eUType; // Set the units label string if possible if( UnitsBase::bGetUnitsType( eUType, osUnits ) ) { // Prepend units prefix if non-zero if( m_iUnitsExp != 0 ) if( CnvtType::bUnitExpToPfx( m_iUnitsExp, &ocPrefix ) ) osUnits.Prepend( ocPrefix ); } else osUnits = wxT(""); // Set the units label SetLabel( osUnits ); return( true ); } //************************************************************************************************** // Set the units from a string. // // Argument List : // rosUnits - the units string // // Return Values : // true - Success // false - Failure bool LblUnits::bSetUnits( const wxString & rosUnits ) { eTypeUnits eUType; int iExp; if( ! bIsCreated( ) ) return( false ); if( ! rosUnits.IsEmpty( ) ) { // Set the units label SetLabel( rosUnits ); // Attempt to determine the enumerated units type if( bGetUnitsType( rosUnits, &eUType ) ) m_eUnitsType = eUType; // Attempt to determine the units exponent if( ! rosUnits.Lower( ).StartsWith( wxT("metre") ) ) if( CnvtType::bUnitPfxToExp( rosUnits[ 0 ], &iExp ) ) m_iUnitsExp = iExp; } else bClear( ); return( true ); } //************************************************************************************************** // Set the units as an exponent. // // Argument List : // iExp - the units exponent // // Return Values : // true - Success // false - Failure bool LblUnits::bSetUnits( int iExp ) { if( iExp<-24 || iExp>24 ) return( false ); if( iExp%3 != 0 ) return( false ); m_iUnitsExp = iExp; bSetUnitsType( m_eUnitsType ); return( true ); } //************************************************************************************************** // Get the units. // // Return Values : // Success - The selected units // Failure - An empty string const wxString & LblUnits::rosGetUnits( void ) { static wxString osUnits; osUnits.Empty( ); if( ! bIsCreated( ) ) return( osUnits ); osUnits = GetLabel( ); return( osUnits ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void LblUnits::Print( const wxString & rosPrefix ) { std::cout << rosPrefix.mb_str( ) << "m_eUnitsType : "; switch( m_eUnitsType ) { case eUNITS_CAP : std::cout << "eUNITS_CAP"; break; case eUNITS_IND : std::cout << "eUNITS_IND"; break; case eUNITS_RES : std::cout << "eUNITS_RES"; break; case eUNITS_COND : std::cout << "eUNITS_COND"; break; case eUNITS_VOLT : std::cout << "eUNITS_VOLT"; break; case eUNITS_CURR : std::cout << "eUNITS_CURR"; break; case eUNITS_TIME : std::cout << "eUNITS_TIME"; break; case eUNITS_FREQ : std::cout << "eUNITS_FREQ"; break; case eUNITS_CHRG : std::cout << "eUNITS_CHRG"; break; case eUNITS_PHAD : std::cout << "eUNITS_PHAD"; break; case eUNITS_PHAR : std::cout << "eUNITS_PHAR"; break; case eUNITS_TMPC : std::cout << "eUNITS_TMPC"; break; case eUNITS_TMPF : std::cout << "eUNITS_TMPF"; break; case eUNITS_PCT : std::cout << "eUNITS_PCT"; break; case eUNITS_EXP : std::cout << "eUNITS_EXP"; break; case eUNITS_NONE : std::cout << "eUNITS_NONE"; break; default : std::cout << "Invalid"; } std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_iUnitsExp : " << m_iUnitsExp << '\n'; } //**************************************************************************************************