00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef TECPLOT_TOOLBOX_STYLEVALUE_H
00012 #define TECPLOT_TOOLBOX_STYLEVALUE_H
00013
00014 #if defined MSWIN
00015 #pragma once
00016 #endif
00017
00018 #include <string>
00019 #include "tptoolbox.h"
00020 #include "ArgList.h"
00021 #include "StringList.h"
00022 #include "Set.h"
00023
00024
00025
00026
00027
00028 #define STYLEVALUE_NO_OFFSET BAD_SET_VALUE
00029 #define STYLEVALUE_NO_ASSIGNOP AssignOp_Invalid
00030 #define STYLEVALUE_MAX_PARAMETERS 7
00031
00032 namespace tecplot { namespace toolbox {
00033
00039 class TPTOOLBOX_DLLAPI StyleValue
00040 {
00041 public:
00131 StyleValue(const char* P1 = NULL,
00132 const char* P2 = NULL,
00133 const char* P3 = NULL,
00134 const char* P4 = NULL,
00135 const char* P5 = NULL,
00136 const char* P6 = NULL,
00137 const char* P7 = NULL);
00138
00177 StyleValue(UniqueID_t pageOrFrameUniqueID,
00178 const char* P1 = NULL,
00179 const char* P2 = NULL,
00180 const char* P3 = NULL,
00181 const char* P4 = NULL,
00182 const char* P5 = NULL,
00183 const char* P6 = NULL,
00184 const char* P7 = NULL);
00185
00193 StyleValue(const StringList& paramList);
00194
00208 StyleValue(UniqueID_t pageOrFrameUniqueID,
00209 const StringList& paramList);
00210
00211 StyleValue(const StyleValue& other);
00212 virtual ~StyleValue();
00213
00217 inline const StringList& getParamList() const {return m_params;}
00218
00230 static bool returnCodeOk(SetValueReturnCode_e SVRC);
00231
00242 static bool returnCodeOk(GetValueReturnCode_e GVRC);
00243
00289 template <typename T>
00290 SetValueReturnCode_e set(T value,
00291 const char* aP1 = NULL,
00292 const char* aP2 = NULL,
00293 const char* aP3 = NULL,
00294 const char* aP4 = NULL,
00295 const char* aP5 = NULL,
00296 const char* aP6 = NULL,
00297 const char* aP7 = NULL) const
00298 {
00299 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00300 return setValue(value,
00301 extraParams,
00302 NULL,
00303 STYLEVALUE_NO_OFFSET,
00304 STYLEVALUE_NO_OFFSET,
00305 STYLEVALUE_NO_ASSIGNOP);
00306 }
00307
00356 template <typename T>
00357 SetValueReturnCode_e set(T value,
00358 LgIndex_t offset1,
00359 const char* aP1 = NULL,
00360 const char* aP2 = NULL,
00361 const char* aP3 = NULL,
00362 const char* aP4 = NULL,
00363 const char* aP5 = NULL,
00364 const char* aP6 = NULL,
00365 const char* aP7 = NULL) const
00366 {
00367 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00368 return setValue(value,
00369 extraParams,
00370 NULL,
00371 offset1,
00372 STYLEVALUE_NO_OFFSET,
00373 STYLEVALUE_NO_ASSIGNOP);
00374 }
00375
00427 template <typename T>
00428 SetValueReturnCode_e set(T value,
00429 AssignOp_e assignOp,
00430 const char* aP1 = NULL,
00431 const char* aP2 = NULL,
00432 const char* aP3 = NULL,
00433 const char* aP4 = NULL,
00434 const char* aP5 = NULL,
00435 const char* aP6 = NULL,
00436 const char* aP7 = NULL) const
00437 {
00438 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00439 return setValue(value,
00440 extraParams,
00441 NULL,
00442 STYLEVALUE_NO_OFFSET,
00443 STYLEVALUE_NO_OFFSET,
00444 assignOp);
00445 }
00446
00492 template <typename T>
00493 SetValueReturnCode_e set(T value,
00494 LgIndex_t offset1,
00495 AssignOp_e assignOp,
00496 const char* aP1 = NULL,
00497 const char* aP2 = NULL,
00498 const char* aP3 = NULL,
00499 const char* aP4 = NULL,
00500 const char* aP5 = NULL,
00501 const char* aP6 = NULL,
00502 const char* aP7 = NULL) const
00503 {
00504 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00505 return setValue(value,
00506 extraParams,
00507 NULL,
00508 offset1,
00509 STYLEVALUE_NO_OFFSET,
00510 assignOp);
00511 }
00512
00558 template <typename T>
00559 SetValueReturnCode_e set(T value,
00560 LgIndex_t offset1,
00561 LgIndex_t offset2,
00562 const char* aP1 = NULL,
00563 const char* aP2 = NULL,
00564 const char* aP3 = NULL,
00565 const char* aP4 = NULL,
00566 const char* aP5 = NULL,
00567 const char* aP6 = NULL,
00568 const char* aP7 = NULL) const
00569 {
00570 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00571 return setValue(value,
00572 extraParams,
00573 NULL,
00574 offset1,
00575 offset2,
00576 STYLEVALUE_NO_ASSIGNOP);
00577 }
00578
00627 template <typename T>
00628 SetValueReturnCode_e set(T value,
00629 LgIndex_t offset1,
00630 LgIndex_t offset2,
00631 AssignOp_e assignOp,
00632 const char* aP1 = NULL,
00633 const char* aP2 = NULL,
00634 const char* aP3 = NULL,
00635 const char* aP4 = NULL,
00636 const char* aP5 = NULL,
00637 const char* aP6 = NULL,
00638 const char* aP7 = NULL) const
00639 {
00640 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00641 return setValue(value,
00642 extraParams,
00643 NULL,
00644 offset1,
00645 offset2,
00646 assignOp);
00647 }
00648
00701 template <typename T>
00702 SetValueReturnCode_e set(T value,
00703 const Set& objectSet,
00704 const char* aP1 = NULL,
00705 const char* aP2 = NULL,
00706 const char* aP3 = NULL,
00707 const char* aP4 = NULL,
00708 const char* aP5 = NULL,
00709 const char* aP6 = NULL,
00710 const char* aP7 = NULL) const
00711 {
00712 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00713 return setValue(value,
00714 extraParams,
00715 &objectSet,
00716 STYLEVALUE_NO_OFFSET,
00717 STYLEVALUE_NO_OFFSET,
00718 STYLEVALUE_NO_ASSIGNOP);
00719 }
00720
00774 template <typename T>
00775 SetValueReturnCode_e set(T value,
00776 const Set& objectSet,
00777 AssignOp_e assignOp,
00778 const char* aP1 = NULL,
00779 const char* aP2 = NULL,
00780 const char* aP3 = NULL,
00781 const char* aP4 = NULL,
00782 const char* aP5 = NULL,
00783 const char* aP6 = NULL,
00784 const char* aP7 = NULL) const
00785 {
00786 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00787 return setValue(value,
00788 extraParams,
00789 &objectSet,
00790 STYLEVALUE_NO_OFFSET,
00791 STYLEVALUE_NO_OFFSET,
00792 assignOp);
00793 }
00794
00795
00842 template <typename T>
00843 GetValueReturnCode_e get(T* value,
00844 const char* aP1 = NULL,
00845 const char* aP2 = NULL,
00846 const char* aP3 = NULL,
00847 const char* aP4 = NULL,
00848 const char* aP5 = NULL,
00849 const char* aP6 = NULL,
00850 const char* aP7 = NULL) const
00851 {
00852 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00853 return getValue(value,
00854 STYLEVALUE_NO_OFFSET,
00855 STYLEVALUE_NO_OFFSET,
00856 extraParams);
00857 }
00858
00910 template <typename T>
00911 GetValueReturnCode_e get(T* value,
00912 LgIndex_t offset1,
00913 const char* aP1 = NULL,
00914 const char* aP2 = NULL,
00915 const char* aP3 = NULL,
00916 const char* aP4 = NULL,
00917 const char* aP5 = NULL,
00918 const char* aP6 = NULL,
00919 const char* aP7 = NULL) const
00920 {
00921 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00922 return getValue(value,
00923 offset1,
00924 STYLEVALUE_NO_OFFSET,
00925 extraParams);
00926 }
00927
00970 template <typename T>
00971 GetValueReturnCode_e get(T* value,
00972 LgIndex_t offset1,
00973 LgIndex_t offset2,
00974 const char* aP1 = NULL,
00975 const char* aP2 = NULL,
00976 const char* aP3 = NULL,
00977 const char* aP4 = NULL,
00978 const char* aP5 = NULL,
00979 const char* aP6 = NULL,
00980 const char* aP7 = NULL) const
00981 {
00982 StringList extraParams(aP1, aP2, aP3, aP4, aP5, aP6, aP7, NULL);
00983 return getValue(value,
00984 offset1,
00985 offset2,
00986 extraParams);
00987 }
00988
00989 #if 0
00990
00991
00992
00993 static const LgIndex_t NO_OFFSET = BAD_SET_VALUE;
00994 static const AssignOp_e NO_ASSIGNOP = AssignOp_Invalid;
00995 static const int MAX_PARAMETERS = 7;
00996 #endif
00997
00998 protected:
01000
01002
01022 virtual SetValueReturnCode_e styleSetLowLevel(const ArgList& argList) const;
01023
01024 template <typename T>
01025 SetValueReturnCode_e setFinalValue(T value,
01026 ArgList& argList) const
01027 {
01028 REQUIRE("value can be any value");
01029 REQUIRE("no way to check argList");
01030 argList.appendArbParam(SV_IVALUE, (ArbParam_t)value);
01031 return styleSetLowLevel(argList);
01032 }
01033
01034 SetValueReturnCode_e setFinalValue(bool value,
01035 ArgList& argList) const;
01036 SetValueReturnCode_e setFinalValue(int value,
01037 ArgList& argList) const;
01038 SetValueReturnCode_e setFinalValue(double value,
01039 ArgList& argList) const;
01040 SetValueReturnCode_e setFinalValue(const Set_pa value,
01041 ArgList& argList) const;
01042 SetValueReturnCode_e setFinalValue(const Set& value,
01043 ArgList& argList) const;
01044 SetValueReturnCode_e setFinalValue(const char* value,
01045 ArgList& argList) const;
01046 SetValueReturnCode_e setFinalValue(const std::string& value,
01047 ArgList& argList) const;
01048
01049 template <typename T>
01050 SetValueReturnCode_e setValue(const T& value,
01051 const StringList& extraParams,
01052 const Set* objectSet,
01053 LgIndex_t offset1,
01054 LgIndex_t offset2,
01055 AssignOp_e assignOp) const
01056 {
01057 REQUIRE("valid can be any value");
01058 REQUIRE(extraParams.size() >= 0);
01059 REQUIRE(VALID_REF_OR_NULL(objectSet));
01060 REQUIRE(offset1 >= 1 || offset1 == STYLEVALUE_NO_OFFSET);
01061 REQUIRE(offset2 >= 1 || offset2 == STYLEVALUE_NO_OFFSET);
01062 REQUIRE(VALID_ENUM(assignOp, AssignOp_e) || assignOp == STYLEVALUE_NO_ASSIGNOP);
01063
01064 REQUIRE(IMPLICATION(VALID_REF(objectSet), offset1 == STYLEVALUE_NO_OFFSET));
01065 REQUIRE(IMPLICATION(offset1 >= 1, objectSet == NULL));
01066
01067 StringList finalParams(m_params);
01068 finalParams.append(extraParams);
01069
01070 ArgList argList;
01071 setupSetValueArgList(finalParams,
01072 objectSet,
01073 offset1,
01074 offset2,
01075 assignOp,
01076 argList);
01077 return setFinalValue(value, argList);
01078 }
01079
01080
01082
01084
01101 virtual GetValueReturnCode_e styleGetLowLevel(const ArgList& argList) const;
01102
01103 template <typename T>
01104 GetValueReturnCode_e getFinalValue(T* value,
01105 ArgList& argList) const
01106 {
01107 REQUIRE(VALID_REF(value));
01108 REQUIRE("no way to check argList");
01109
01110 ArbParam_t arbValue = 0;
01111 argList.appendArbParamPtr(SV_IVALUE, &arbValue);
01112 GetValueReturnCode_e GVRC = styleGetLowLevel(argList);
01113 if ( returnCodeOk(GVRC) )
01114 *value = (T)arbValue;
01115
01116 ENSURE(VALID_ENUM(GVRC, GetValueReturnCode_e));
01117 return GVRC;
01118 }
01119
01120 GetValueReturnCode_e getFinalValue(bool* value,
01121 ArgList& argList) const;
01122 GetValueReturnCode_e getFinalValue(double* value,
01123 ArgList& argList) const;
01124 GetValueReturnCode_e getFinalValue(std::string* value,
01125 ArgList& argList) const;
01126 GetValueReturnCode_e getFinalValue(char** value,
01127 ArgList& argList) const;
01128 GetValueReturnCode_e getFinalValue(Set* value,
01129 ArgList& argList) const;
01130 GetValueReturnCode_e getFinalValue(Set_pa* value,
01131 ArgList& argList) const;
01132
01133 template <typename T>
01134 GetValueReturnCode_e getValue(T* value,
01135 LgIndex_t offset1,
01136 LgIndex_t offset2,
01137 const StringList& extraParams) const
01138 {
01139 REQUIRE(VALID_REF(value));
01140 REQUIRE(offset1 >= 1 || offset1 == STYLEVALUE_NO_OFFSET);
01141 REQUIRE(offset2 >= 1 || offset2 == STYLEVALUE_NO_OFFSET);
01142 REQUIRE(extraParams.size() >= 0);
01143
01144 StringList finalParams(m_params);
01145 finalParams.append(extraParams);
01146
01147 ArgList argList;
01148 setupGetValueArgList(finalParams,
01149 offset1,
01150 offset2,
01151 argList);
01152 return getFinalValue(value, argList);
01153 }
01154
01156
01158 const char *getPValueString(int depth) const;
01159
01160 void validateParamList(StringList& stringList) const;
01161 void setupPValueArgList(const StringList& parameters,
01162 ArgList& argList) const;
01163 void setupSetValueArgList(const StringList& parameters,
01164 const Set* objectSet,
01165 LgIndex_t offset1,
01166 LgIndex_t offset2,
01167 AssignOp_e assignOp,
01168 ArgList& argList) const;
01169
01170 void setupGetValueArgList(const StringList& parameters,
01171 LgIndex_t offset1,
01172 LgIndex_t offset2,
01173 ArgList& argList) const;
01174
01175 private:
01176 UniqueID_t m_pageOrFrameUniqueID;
01177 StringList m_params;
01178
01182 StyleValue& operator = (const StyleValue&);
01183 };
01184
01185 }}
01186
01187 #endif
01188
01189