/************************************************************************ ** ** @file def.h ** @author Roman Telezhynskyi ** @date 11 4, 2015 ** ** @brief ** @copyright ** This source code is part of the Valentine project, a pattern making ** program, whose allow create and modeling patterns of clothing. ** Copyright (C) 2015 Valentina project ** All Rights Reserved. ** ** Valentina 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. ** ** Valentina is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Valentina. If not, see . ** *************************************************************************/ #ifndef DEF_H #define DEF_H #include #include #include #include #include #ifdef Q_OS_WIN #include #endif /* Q_OS_WIN */ #include "debugbreak.h" #ifdef Q_CC_MSVC #include #endif /* Q_CC_MSVC */ class QComboBox; #define SceneSize 50000 #define DefPointRadius 1.5//mm enum class NodeDetail : char { Contour, Modeling }; enum class SceneObject : char { Point, Line, Spline, Arc, SplinePath, Detail, Unknown }; enum class MeasurementsType : char { Standard, Individual , Unknown}; enum class Unit : char { Mm = 0, Cm, Inch, Px, LAST_UNIT_DO_NOT_USE}; enum class Source : char { FromGui, FromFile, FromTool }; enum class NodeUsage : bool {NotInUse = false, InUse = true}; enum class SelectionType : bool {ByMousePress, ByMouseRelease}; typedef unsigned char ToolVisHolderType; enum class Tool : ToolVisHolderType { Arrow, SinglePoint, DoublePoint, LinePoint, AbstractSpline, Cut, BasePoint, EndLine, Line, AlongLine, ShoulderPoint, Normal, Bisector, LineIntersect, Spline, CubicBezier, CutSpline, CutArc, Arc, ArcWithLength, SplinePath, CubicBezierPath, CutSplinePath, PointOfContact, Detail, NodePoint, NodeArc, NodeSpline, NodeSplinePath, Height, Triangle, LineIntersectAxis, PointOfIntersectionArcs, PointOfIntersectionCircles, PointOfIntersectionCurves, CurveIntersectAxis, ArcIntersectAxis, PointOfIntersection, PointFromCircleAndTangent, PointFromArcAndTangent, TrueDarts, UnionDetails, Group, Rotation, Midpoint, LAST_ONE_DO_NOT_USE //add new stuffs above this, this constant must be last and never used }; enum class Vis : ToolVisHolderType { ControlPointSpline = static_cast(Tool::LAST_ONE_DO_NOT_USE), GraphicsSimpleTextItem, SimplePoint, SimpleCurve, Line, Path, ToolAlongLine, ToolArc, ToolArcWithLength, ToolBisector, ToolCutArc, ToolEndLine, ToolHeight, ToolLine, ToolLineIntersect, ToolNormal, ToolPointOfContact, ToolPointOfIntersection, ToolPointOfIntersectionArcs, ToolPointOfIntersectionCircles, ToolPointOfIntersectionCurves, ToolPointFromCircleAndTangent, ToolPointFromArcAndTangent, ToolShoulderPoint, ToolSpline, ToolCubicBezier, ToolCubicBezierPath, ToolTriangle, ToolCutSpline, ToolSplinePath, ToolCutSplinePath, ToolLineIntersectAxis, ToolCurveIntersectAxis, ToolTrueDarts, ToolRotation }; enum class VarType : char { Measurement, Increment, LineLength, CurveLength, LineAngle, CurveAngle, ArcRadius, Unknown }; enum class GHeights : unsigned char { ALL, H92=92, H98=98, H104=104, H110=110, H116=116, H122=122, H128=128, H134=134, H140=140, H146=146, H152=152, H158=158, H164=164, H170=170, H176=176, H182=182, H188=188, H194=194}; enum class GSizes : unsigned char { ALL, S22=22, S24=24, S26=26, S28=28, S30=30, S32=32, S34=34, S36=36, S38=38, S40=40, S42=42, S44=44, S46=46, S48=48, S50=50, S52=52, S54=54, S56=56 }; /* QImage supports a maximum of 32768x32768 px images (signed short). * This follows from the condition: width * height * colordepth < INT_MAX (4 billion) -> 32768 * 32768 * 4 = 4 billion. * The second condition is of course that malloc is able to allocate the requested memory. * * If you really need bigger images you will have to use another wrapper or split into multiple QImage's. */ #define QIMAGE_MAX 32768 /* * This macros SCASSERT (for Stop and Continue Assert) will break into the debugger on the line of the assert and allow * you to continue afterwards should you choose to. * idea: Q_ASSERT no longer pauses debugger - http://qt-project.org/forums/viewthread/13148 * Usefull links: * 1. What's the difference between __PRETTY_FUNCTION__, __FUNCTION__, __func__? - * https://stackoverflow.com/questions/4384765/whats-the-difference-between-pretty-function-function-func * * 2. Windows Predefined Macros - http://msdn.microsoft.com/library/b0084kay.aspx * * 3. Windows DebugBreak function - http://msdn.microsoft.com/en-us/library/ms679297%28VS.85%29.aspx * * 4. Continue to debug after failed assertion on Linux? [C/C++] - * https://stackoverflow.com/questions/1721543/continue-to-debug-after-failed-assertion-on-linux-c-c */ #ifndef V_NO_ASSERT #define SCASSERT(cond) \ { \ if (!(cond)) \ { \ qCritical("ASSERT: %s in %s (%s:%u)", \ #cond, Q_FUNC_INFO , __FILE__, __LINE__); \ debug_break(); \ abort(); \ } \ } \ #else // define but disable this function if debugging is not set #define SCASSERT(cond) qt_noop(); #endif /* V_NO_ASSERT */ #ifdef Q_CC_CLANG #define V_FALLTHROUGH [[clang::fallthrough]]; #else #define V_FALLTHROUGH #endif // measurements // A extern const QString height_M; // A01 extern const QString heightNeckBack_M; // A02 extern const QString heightScapula_M; // A03 extern const QString heightArmpit_M; // A04 extern const QString heightWaistSide_M; // A05 extern const QString heightHip_M; // A06 extern const QString heightGlutealFold_M; // A07 extern const QString heightKnee_M; // A08 extern const QString heightCalf_M; // A09 extern const QString heightAnkleHigh_M; // A10 extern const QString heightAnkle_M; // A11 extern const QString heightHighhip_M; // A12 extern const QString heightWaistFront_M; // A13 extern const QString heightBustpoint_M; // A14 extern const QString heightShoulderTip_M; // A15 extern const QString heightNeckFront_M; // A16 extern const QString heightNeckSide_M; // A17 extern const QString heightNeckBackToKnee_M; // A18 extern const QString heightWaistSideToKnee_M; // A19 extern const QString heightWaistSideToHip_M; // A20 extern const QString heightKneeToAnkle_M; // A21 extern const QString heightNeckBackToWaistSide_M; // A22 extern const QString heightWaistBack_M; // A23 // B extern const QString widthShoulder_M; // B01 extern const QString widthBust_M; // B02 extern const QString widthWaist_M; // B03 extern const QString widthHip_M; // B04 extern const QString widthAbdomenToHip_M; // B05 // C extern const QString indentNeckBack_M; // C01 extern const QString indentWaistBack_M; // C02 extern const QString indentAnkleHigh_M; // C03 // D extern const QString handPalmLength_M; // D01 extern const QString handLength_M; // D02 extern const QString handPalmWidth_M; // D03 extern const QString handPalmCirc_M; // D04 extern const QString handCirc_M; // D05 // E extern const QString footWidth_M; // E01 extern const QString footLength_M; // E02 extern const QString footCirc_M; // E03 extern const QString footInstepCirc_M; // E04 // F extern const QString headCirc_M; // F01 extern const QString headLength_M; // F02 extern const QString headDepth_M; // F03 extern const QString headWidth_M; // F04 extern const QString headCrownToNeckBack_M; // F05 extern const QString headChinToNeckBack_M; // F06 // G extern const QString neckMidCirc_M; // G01 extern const QString neckCirc_M; // G02 extern const QString highbustCirc_M; // G03 extern const QString bustCirc_M; // G04 extern const QString lowbustCirc_M; // G05 extern const QString ribCirc_M; // G06 extern const QString waistCirc_M; // G07 extern const QString highhipCirc_M; // G08 extern const QString hipCirc_M; // G09 extern const QString neckArcF_M; // G10 extern const QString highbustArcF_M; // G11 extern const QString bustArcF_M; // G12 extern const QString lowbustArcF_M; // G13 extern const QString ribArcF_M; // G14 extern const QString waistArcF_M; // G15 extern const QString highhipArcF_M; // G16 extern const QString hipArcF_M; // G17 extern const QString neckArcHalfF_M; // G18 extern const QString highbustArcHalfF_M; // G19 extern const QString bustArcHalfF_M; // G20 extern const QString lowbustArcHalfF_M; // G21 extern const QString ribArcHalfF_M; // G22 extern const QString waistArcHalfF_M; // G23 extern const QString highhipArcHalfF_M; // G24 extern const QString hipArcHalfF_M; // G25 extern const QString neckArcB_M; // G26 extern const QString highbustArcB_M; // G27 extern const QString bustArcB_M; // G28 extern const QString lowbustArcB_M; // G29 extern const QString ribArcB_M; // G30 extern const QString waistArcB_M; // G31 extern const QString highhipArcB_M; // G32 extern const QString hipArcB_M; // G33 extern const QString neckArcHalfB_M; // G34 extern const QString highbustArcHalfB_M; // G35 extern const QString bustArcHalfB_M; // G36 extern const QString lowbustArcHalfB_M; // G37 extern const QString ribArcHalfB_M; // G38 extern const QString waistArcHalfB_M; // G39 extern const QString highhipArcHalfB_M; // G40 extern const QString hipArcHalfB_M; // G41 extern const QString hipWithAbdomenArcF_M; // G42 extern const QString bodyArmfoldCirc_M; // G43 extern const QString bodyBustCirc_M; // G44 extern const QString bodyTorsoCirc_M; // G45 extern const QString hipCircWithAbdomen_M; // G46 // H extern const QString neckFrontToWaistF_M; // H01 extern const QString neckFrontToWaistFlatF_M; // H02 extern const QString armpitToWaistSide_M; // H03 extern const QString shoulderTipToWaistSideF_M; // H04 extern const QString neckSideToWaistF_M; // H05 extern const QString neckSideToWaistBustpointF_M; // H06 extern const QString neckFrontToHighbustF_M; // H07 extern const QString highbustToWaistF_M; // H08 extern const QString neckFrontToBustF_M; // H09 extern const QString bustToWaistF_M; // H10 extern const QString lowbustToWaistF_M; // H11 extern const QString ribToWaistSide_M; // H12 extern const QString shoulderTipToArmfoldF_M; // H13 extern const QString neckSideToBustF_M; // H14 extern const QString neckSideToHighbustF_M; // H15 extern const QString shoulderCenterToHighbustF_M; // H16 extern const QString shoulderTipToWaistSideB_M; // H17 extern const QString neckSideToWaistB_M; // H18 extern const QString neckBackToWaistB_M; // H19 extern const QString neckSideToWaistScapulaB_M; // H20 extern const QString neckBackToHighbustB_M; // H21 extern const QString highbustToWaistB_M; // H22 extern const QString neckBackToBustB_M; // H23 extern const QString bustToWaistB_M; // H24 extern const QString lowbustToWaistB_M; // H25 extern const QString shoulderTipToArmfoldB_M; // H26 extern const QString neckSideToBustB_M; // H27 extern const QString neckSideToHighbustB_M; // H28 extern const QString shoulderCenterToHighbustB_M; // H29 extern const QString waistToHighhipF_M; // H30 extern const QString waistToHipF_M; // H31 extern const QString waistToHighhipSide_M; // H32 extern const QString waistToHighhipB_M; // H33 extern const QString waistToHipB_M; // H34 extern const QString waistToHipSide_M; // H35 extern const QString shoulderSlopeNeckSideAngle_M; // H36 extern const QString shoulderSlopeNeckSideLength_M; // H37 extern const QString shoulderSlopeNeckBackAngle_M; // H38 extern const QString shoulderSlopeNeckBackHeight_M; // H39 extern const QString shoulderSlopeShoulderTipAngle_M; // H40 extern const QString neckBackToAcrossBack_M; // H41 extern const QString acrossBackToWaistB_M; // H42 // I extern const QString shoulderLength_M; // I01 extern const QString shoulderTipToShoulderTipF_M; // I02 extern const QString acrossChestF_M; // I03 extern const QString armfoldToArmfoldF_M; // I04 extern const QString shoulderTipToShoulderTipHalfF_M; // I05 extern const QString acrossChestHalfF_M; // I06 extern const QString shoulderTipToShoulderTipB_M; // I07 extern const QString acrossBackB_M; // I08 extern const QString armfoldToArmfoldB_M; // I09 extern const QString shoulderTipToShoulderTipHalfB_M; // I10 extern const QString acrossBackHalfB_M; // I11 extern const QString neckFrontToShoulderTipF_M; // I12 extern const QString neckBackToShoulderTipB_M; // I13 extern const QString neckWidth_M; // I14 // J extern const QString bustpointToBustpoint_M; // J01 extern const QString bustpointToNeckSide_M; // J02 extern const QString bustpointToLowbust_M; // J03 extern const QString bustpointToWaist_M; // J04 extern const QString bustpointToBustpointHalf_M; // J05 extern const QString bustpointNeckSideToWaist_M; // J06 extern const QString bustpointToShoulderTip_M; // J07 extern const QString bustpointToWaistFront_M; // J08 extern const QString bustpointToBustpointHalter_M; // J09 extern const QString bustpointToShoulderCenter_M; // J10 // K extern const QString shoulderTipToWaistFront_M; // K01 extern const QString neckFrontToWaistSide_M; // K02 extern const QString neckSideToWaistSideF_M; // K03 extern const QString shoulderTipToWaistBack_M; // K04 extern const QString shoulderTipToWaistB_1inOffset_M; // K05 extern const QString neckBackToWaistSide_M; // K06 extern const QString neckSideToWaistSideB_M; // K07 extern const QString neckSideToArmfoldF_M; // K08 extern const QString neckSideToArmpitF_M; // K09 extern const QString neckSideToBustSideF_M; // K10 extern const QString neckSideToArmfoldB_M; // K11 extern const QString neckSideToArmpitB_M; // K12 extern const QString neckSideToBustSideB_M; // K13 // L extern const QString armShoulderTipToWristBent_M; // L01 extern const QString armShoulderTipToElbowBent_M; // L02 extern const QString armElbowToWristBent_M; // L03 extern const QString armElbowCircBent_M; // L04 extern const QString armShoulderTipToWrist_M; // L05 extern const QString armShoulderTipToElbow_M; // L06 extern const QString armElbowToWrist_M; // L07 extern const QString armArmpitToWrist_M; // L08 extern const QString armArmpitToElbow_M; // L09 extern const QString armElbowToWristInside_M; // L10 extern const QString armUpperCirc_M; // L11 extern const QString armAboveElbowCirc_M; // L12 extern const QString armElbowCirc_M; // L13 extern const QString armLowerCirc_M; // L14 extern const QString armWristCirc_M; // L15 extern const QString armShoulderTipToArmfoldLine_M; // L16 extern const QString armNeckSideToWrist_M; // L17 extern const QString armNeckSideToFingerTip_M; // L18 extern const QString armscyeCirc_M; // L19 extern const QString armscyeLength_M; // L20 extern const QString armscyeWidth_M; // L21 extern const QString armNeckSideToOuterElbow_M; // L22 // M extern const QString legCrotchToFloor_M; // M01 extern const QString legWaistSideToFloor_M; // M02 extern const QString legThighUpperCirc_M; // M03 extern const QString legThighMidCirc_M; // M04 extern const QString legKneeCirc_M; // M05 extern const QString legKneeSmallCirc_M; // M06 extern const QString legCalfCirc_M; // M07 extern const QString legAnkleHighCirc_M; // M08 extern const QString legAnkleCirc_M; // M09 extern const QString legKneeCircBent_M; // M10 extern const QString legAnkleDiagCirc_M; // M11 extern const QString legCrotchToAnkle_M; // M12 extern const QString legWaistSideToAnkle_M; // M13 extern const QString legWaistSideToKnee_M; // M14 // N extern const QString crotchLength_M; // N01 extern const QString crotchLengthB_M; // N02 extern const QString crotchLengthF_M; // N03 extern const QString riseLengthSideSitting_M; // N04 extern const QString riseLengthDiag_M; // N05 extern const QString riseLengthB_M; // N06 extern const QString riseLengthF_M; // N07 extern const QString riseLengthSide_M; // N08 // O extern const QString neckBackToWaistFront_M; // O01 extern const QString waistToWaistHalter_M; // O02 extern const QString waistNaturalCirc_M; // O03 extern const QString waistNaturalArcF_M; // O04 extern const QString waistNaturalArcB_M; // O05 extern const QString waistToNaturalWaistF_M; // O06 extern const QString waistToNaturalWaistB_M; // O07 extern const QString armNeckBackToElbowBent_M; // O08 extern const QString armNeckBackToWristBent_M; // O09 extern const QString armNeckSideToElbowBent_M; // O10 extern const QString armNeckSideToWristBent_M; // O11 extern const QString armAcrossBackCenterToElbowBent_M; // O12 extern const QString armAcrossBackCenterToWristBent_M; // O13 extern const QString armArmscyeBackCenterToWristBent_M; // O14 // P extern const QString neckBackToBustFront_M; // P01 extern const QString neckBackToArmfoldFront_M; // P02 extern const QString neckBackToArmfoldFrontToWaistSide_M; // P03 extern const QString highbustBackOverShoulderToArmfoldFront_M; // P04 extern const QString highbustBackOverShoulderToWaistFront_M; // P05 extern const QString neckBackToArmfoldFrontToNeckBack_M; // P06 extern const QString acrossBackCenterToArmfoldFrontToAcrossBackCenter_M; // P07 extern const QString neckBackToArmfoldFrontToHighbustBack_M; // P08 extern const QString armfoldToArmfoldBust_M; // P09 extern const QString armfoldToBustFront_M; // P10 extern const QString highbustBOverShoulderToHighbustF_M; // P11 extern const QString armscyeArc_M; // P12 // Q extern const QString dartWidthShoulder_M; // Q01 extern const QString dartWidthBust_M; // Q02 extern const QString dartWidthWaist_M; // Q03 QStringList ListGroupA(); QStringList ListGroupB(); QStringList ListGroupC(); QStringList ListGroupD(); QStringList ListGroupE(); QStringList ListGroupF(); QStringList ListGroupG(); QStringList ListGroupH(); QStringList ListGroupI(); QStringList ListGroupJ(); QStringList ListGroupK(); QStringList ListGroupL(); QStringList ListGroupM(); QStringList ListGroupN(); QStringList ListGroupO(); QStringList ListGroupP(); QStringList ListGroupQ(); QStringList ListNumbers(const QStringList & listMeasurements); QString MapDiagrams(const QString &number); // pattern making systems codes extern const QString p0_S; extern const QString p1_S; extern const QString p2_S; extern const QString p3_S; extern const QString p4_S; extern const QString p5_S; extern const QString p6_S; extern const QString p7_S; extern const QString p8_S; extern const QString p9_S; extern const QString p10_S; extern const QString p11_S; extern const QString p12_S; extern const QString p13_S; extern const QString p14_S; extern const QString p15_S; extern const QString p16_S; extern const QString p17_S; extern const QString p18_S; extern const QString p19_S; extern const QString p20_S; extern const QString p21_S; extern const QString p22_S; extern const QString p23_S; extern const QString p24_S; extern const QString p25_S; extern const QString p26_S; extern const QString p27_S; extern const QString p28_S; extern const QString p29_S; extern const QString p30_S; extern const QString p31_S; extern const QString p32_S; extern const QString p33_S; extern const QString p34_S; extern const QString p35_S; extern const QString p36_S; extern const QString p37_S; extern const QString p38_S; extern const QString p39_S; extern const QString p40_S; extern const QString p41_S; extern const QString p42_S; extern const QString p43_S; extern const QString p44_S; extern const QString p45_S; extern const QString p46_S; extern const QString p47_S; extern const QString p48_S; extern const QString p49_S; extern const QString p50_S; extern const QString p51_S; extern const QString p52_S; extern const QString p53_S; extern const QString p54_S; extern const QString p998_S; QStringList ListPMSystems(); void InitPMSystems(QComboBox *systemCombo); // functions extern const QString sin_F; extern const QString cos_F; extern const QString tan_F; extern const QString asin_F; extern const QString acos_F; extern const QString atan_F; extern const QString sinh_F; extern const QString cosh_F; extern const QString tanh_F; extern const QString asinh_F; extern const QString acosh_F; extern const QString atanh_F; extern const QString log2_F; extern const QString log10_F; extern const QString log_F; extern const QString ln_F; extern const QString exp_F; extern const QString sqrt_F; extern const QString sign_F; extern const QString rint_F; extern const QString abs_F; extern const QString min_F; extern const QString max_F; extern const QString sum_F; extern const QString avg_F; extern const QString fmod_F; extern const QStringList builInFunctions; // Postfix operators extern const QString cm_Oprt; extern const QString mm_Oprt; extern const QString in_Oprt; extern const QStringList builInPostfixOperators; extern const QString cursorArrowOpenHand; extern const QString cursorArrowCloseHand; extern const QString degreeSymbol; extern const QString trueStr; extern const QString falseStr; void SetOverrideCursor(const QString & pixmapPath, int hotX = -1, int hotY = -1); void SetOverrideCursor(Qt::CursorShape shape); void RestoreOverrideCursor(const QString & pixmapPath); void RestoreOverrideCursor(Qt::CursorShape shape); extern const qreal PrintDPI; double ToPixel(double val, const Unit &unit) Q_REQUIRED_RESULT; double FromPixel(double pix, const Unit &unit) Q_REQUIRED_RESULT; qreal UnitConvertor(qreal value, const Unit &from, const Unit &to) Q_REQUIRED_RESULT; void CheckFactor(qreal &oldFactor, const qreal &Newfactor); QStringList SupportedLocales() Q_REQUIRED_RESULT; QStringList AllGroupNames() Q_REQUIRED_RESULT; QString StrippedName(const QString &fullFileName) Q_REQUIRED_RESULT; QString RelativeMPath(const QString &patternPath, const QString &absoluteMPath) Q_REQUIRED_RESULT; QString AbsoluteMPath(const QString &patternPath, const QString &relativeMPath) Q_REQUIRED_RESULT; QSharedPointer DefaultPrinter(QPrinter::PrinterMode mode = QPrinter::ScreenResolution) Q_REQUIRED_RESULT; QPixmap darkenPixmap(const QPixmap &pixmap) Q_REQUIRED_RESULT; void ShowInGraphicalShell(const QString &filePath); static inline bool VFuzzyComparePossibleNulls(double p1, double p2) Q_REQUIRED_RESULT; static inline bool VFuzzyComparePossibleNulls(double p1, double p2) { if(qFuzzyIsNull(p1)) { return qFuzzyIsNull(p2); } else if(qFuzzyIsNull(p2)) { return false; } else { return qFuzzyCompare(p1, p2); } } /**************************************************************************** ** This file is derived from code bearing the following notice: ** The sole author of this file, Adam Higerd, has explicitly disclaimed all ** copyright interest and protection for the content within. This file has ** been placed in the public domain according to United States copyright ** statute and case law. In jurisdictions where this public domain dedication ** is not legally recognized, anyone who receives a copy of this file is ** permitted to use, modify, duplicate, and redistribute this file, in whole ** or in part, with no restrictions or conditions. In these jurisdictions, ** this file shall be copyright (C) 2006-2008 by Adam Higerd. ****************************************************************************/ #define QXT_DECLARE_PRIVATE(PUB) friend class PUB##Private; QxtPrivateInterface qxt_d; #define QXT_DECLARE_PUBLIC(PUB) friend class PUB; #define QXT_INIT_PRIVATE(PUB) qxt_d.setPublic(this); #define QXT_D(PUB) PUB##Private& d = qxt_d() #define QXT_P(PUB) PUB& p = qxt_p() template class QxtPrivate { public: QxtPrivate(): qxt_p_ptr(nullptr) {} virtual ~QxtPrivate() {} inline void QXT_setPublic(PUB* pub) { qxt_p_ptr = pub; } protected: inline PUB& qxt_p() { return *qxt_p_ptr; } inline const PUB& qxt_p() const { return *qxt_p_ptr; } inline PUB* qxt_ptr() { return qxt_p_ptr; } inline const PUB* qxt_ptr() const { return qxt_p_ptr; } private: Q_DISABLE_COPY(QxtPrivate) PUB* qxt_p_ptr; }; template class QxtPrivateInterface { friend class QxtPrivate; public: QxtPrivateInterface() : pvt(new PVT) {} ~QxtPrivateInterface() { delete pvt; } inline void setPublic(PUB* pub) { pvt->QXT_setPublic(pub); } inline PVT& operator()() { return *static_cast(pvt); } inline const PVT& operator()() const { return *static_cast(pvt); } inline PVT * operator->() { return static_cast(pvt); } inline const PVT * operator->() const { return static_cast(pvt); } private: Q_DISABLE_COPY(QxtPrivateInterface) QxtPrivate* pvt; }; #endif // DEF_H