├── README.md ├── doc ├── ToDo.md ├── CQPropertyView.png ├── README.md └── DEPENDS.md ├── .gitignore ├── test ├── svg │ ├── gen_h │ ├── filter.svg │ ├── search.svg │ └── filter_svg.h ├── .qmake.stash ├── CQPropertyViewTest.pro ├── CQPropertyViewTest.h ├── CQPropertyViewTest.cpp └── .moc │ └── moc_predefs.h ├── include ├── CQPropertyViewUtil.h ├── CQPropertyViewFontType.h ├── CQPropertyViewColorType.h ├── CQPropertyViewEditor.h ├── CQPropertyViewRectFType.h ├── CQPropertyViewAngleType.h ├── CQPropertyViewAlignType.h ├── CQPropertyViewPaletteType.h ├── CQPropertyViewLineDashType.h ├── CQPropertyViewIntegerType.h ├── CQPropertyViewSizeFType.h ├── CQPropertyViewPointFType.h ├── CQPropertyViewRealType.h ├── CQPropertyViewType.h ├── CQPropertyView.h ├── CQPropertyViewFilter.h ├── CQPropertyViewDelegate.h ├── CQPropertyViewModel.h ├── CQPropertyViewTree.h └── CQPropertyViewItem.h ├── src ├── .qmake.stash ├── CQPropertyViewType.cpp ├── CQPropertyViewEditor.cpp ├── CQPropertyView.pro ├── CQPropertyViewRectFType.cpp ├── CQPropertyViewFontType.cpp ├── CQPropertyViewPaletteType.cpp ├── CQPropertyViewColorType.cpp ├── CQPropertyViewAngleType.cpp ├── CQPropertyViewPointFType.cpp ├── CQPropertyViewSizeFType.cpp ├── CQPropertyViewIntegerType.cpp ├── CQPropertyViewAlignType.cpp ├── CQPropertyViewLineDashType.cpp ├── .moc │ ├── moc_CQPropertyViewDelegate.cpp │ ├── moc_CQPropertyViewFilter.cpp │ ├── moc_CQPropertyViewModel.cpp │ ├── moc_CQPropertyViewItem.cpp │ ├── moc_CQPropertyViewTree.cpp │ └── moc_predefs.h ├── CQPropertyView.cpp ├── CQPropertyViewFilter.cpp ├── CQPropertyViewRealType.cpp └── CQPropertyViewDelegate.cpp ├── LICENSE └── scripts └── build.sh /README.md: -------------------------------------------------------------------------------- 1 | doc/README.md -------------------------------------------------------------------------------- /doc/ToDo.md: -------------------------------------------------------------------------------- 1 | . Type Column 2 | -------------------------------------------------------------------------------- /doc/CQPropertyView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/colinw7/CQPropertyView/HEAD/doc/CQPropertyView.png -------------------------------------------------------------------------------- /doc/README.md: -------------------------------------------------------------------------------- 1 | # CQPropertyView 2 | 3 | Qt Property Editor 4 | 5 | ![snapshot](CQPropertyView.png "Qt Property Editor") 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | *.a 3 | 4 | moc_*.cpp 5 | 6 | src/Makefile 7 | 8 | test/Makefile 9 | test/CQChartsTest 10 | 11 | bin/ 12 | obj/ 13 | lib/ 14 | -------------------------------------------------------------------------------- /test/svg/gen_h: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | foreach file (*.svg) 4 | CBinArr -class $file > $file:r_svg.h.1 5 | 6 | set copy = 0 7 | 8 | if (! -e $file:r_svg.h) then 9 | set copy = 1 10 | else 11 | cmp -s $file:r_svg.h.1 $file:r_svg.h 12 | 13 | if ($status != 0) then 14 | set copy = 1 15 | endif 16 | endif 17 | 18 | if ($copy == 1) then 19 | echo "Update $file:r_svg.h" 20 | 21 | cp $file:r_svg.h.1 $file:r_svg.h 22 | endif 23 | 24 | rm $file:r_svg.h.1 25 | end 26 | 27 | exit 0 28 | -------------------------------------------------------------------------------- /include/CQPropertyViewUtil.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewUtil_H 2 | #define CQPropertyViewUtil_H 3 | 4 | #include 5 | 6 | namespace CQPropertyViewUtil { 7 | 8 | inline QString variantToString(const QVariant &var) { 9 | QString str; 10 | 11 | if (var.type() == QVariant::UserType) { 12 | if (! CQUtil::userVariantToString(var, str)) 13 | return ""; 14 | } 15 | else { 16 | if (! CQUtil::variantToString(var, str)) 17 | return ""; 18 | } 19 | 20 | return str; 21 | } 22 | 23 | } 24 | 25 | #endif 26 | -------------------------------------------------------------------------------- /src/.qmake.stash: -------------------------------------------------------------------------------- 1 | QMAKE_CXX.INCDIRS = \ 2 | /usr/include/c++/5 \ 3 | /usr/include/x86_64-linux-gnu/c++/5 \ 4 | /usr/include/c++/5/backward \ 5 | /usr/lib/gcc/x86_64-linux-gnu/5/include \ 6 | /usr/local/include \ 7 | /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed \ 8 | /usr/include/x86_64-linux-gnu \ 9 | /usr/include 10 | QMAKE_CXX.LIBDIRS = \ 11 | /usr/lib/gcc/x86_64-linux-gnu/5 \ 12 | /usr/lib/x86_64-linux-gnu \ 13 | /usr/lib \ 14 | /lib/x86_64-linux-gnu \ 15 | /lib 16 | QMAKE_CXX.QT_COMPILER_STDCXX = 199711L 17 | QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 5 18 | QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 5 19 | QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0 20 | QMAKE_CXX.COMPILER_MACROS = \ 21 | QT_COMPILER_STDCXX \ 22 | QMAKE_GCC_MAJOR_VERSION \ 23 | QMAKE_GCC_MINOR_VERSION \ 24 | QMAKE_GCC_PATCH_VERSION 25 | -------------------------------------------------------------------------------- /test/.qmake.stash: -------------------------------------------------------------------------------- 1 | QMAKE_CXX.INCDIRS = \ 2 | /usr/include/c++/8 \ 3 | /usr/include/x86_64-linux-gnu/c++/8 \ 4 | /usr/include/c++/8/backward \ 5 | /usr/lib/gcc/x86_64-linux-gnu/8/include \ 6 | /usr/local/include \ 7 | /usr/lib/gcc/x86_64-linux-gnu/8/include-fixed \ 8 | /usr/include/x86_64-linux-gnu \ 9 | /usr/include 10 | QMAKE_CXX.LIBDIRS = \ 11 | /usr/lib/gcc/x86_64-linux-gnu/8 \ 12 | /usr/lib/x86_64-linux-gnu \ 13 | /usr/lib \ 14 | /lib/x86_64-linux-gnu \ 15 | /lib 16 | QMAKE_CXX.QT_COMPILER_STDCXX = 201402L 17 | QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 8 18 | QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 2 19 | QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0 20 | QMAKE_CXX.COMPILER_MACROS = \ 21 | QT_COMPILER_STDCXX \ 22 | QMAKE_GCC_MAJOR_VERSION \ 23 | QMAKE_GCC_MINOR_VERSION \ 24 | QMAKE_GCC_PATCH_VERSION 25 | -------------------------------------------------------------------------------- /src/CQPropertyViewType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | bool 7 | CQPropertyViewType:: 8 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 9 | { 10 | item->setData(value); 11 | 12 | return true; 13 | } 14 | 15 | void 16 | CQPropertyViewType:: 17 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 18 | const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) 20 | { 21 | auto str = CQPropertyViewUtil::variantToString(value); 22 | 23 | delegate->drawString(painter, option, str, index, itemState); 24 | } 25 | 26 | QString 27 | CQPropertyViewType:: 28 | tip(const QVariant &value) const 29 | { 30 | return value.toString(); 31 | } 32 | -------------------------------------------------------------------------------- /src/CQPropertyViewEditor.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | CQPropertyViewEditorMgr:: 4 | CQPropertyViewEditorMgr() 5 | { 6 | } 7 | 8 | CQPropertyViewEditorMgr:: 9 | ~CQPropertyViewEditorMgr() 10 | { 11 | for (auto &editor : editors_) 12 | delete editor.second; 13 | } 14 | 15 | void 16 | CQPropertyViewEditorMgr:: 17 | setEditor(const QString &typeName, CQPropertyViewEditorFactory *editor) 18 | { 19 | Editors::iterator p = editors_.find(typeName); 20 | 21 | if (p != editors_.end()) { 22 | std::swap((*p).second, editor); 23 | 24 | delete editor; 25 | } 26 | else 27 | (void) editors_.insert(p, Editors::value_type(typeName, editor)); 28 | } 29 | 30 | CQPropertyViewEditorFactory * 31 | CQPropertyViewEditorMgr:: 32 | getEditor(const QString &typeName) const 33 | { 34 | Editors::const_iterator p = editors_.find(typeName); 35 | 36 | if (p != editors_.end()) 37 | return (*p).second; 38 | 39 | return nullptr; 40 | } 41 | -------------------------------------------------------------------------------- /test/CQPropertyViewTest.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = app 2 | 3 | TARGET = CQPropertyViewTest 4 | 5 | QT += widgets svg 6 | 7 | DEPENDPATH += . 8 | 9 | QMAKE_CXXFLAGS += -std=c++14 10 | 11 | MOC_DIR = .moc 12 | 13 | SOURCES += \ 14 | CQPropertyViewTest.cpp \ 15 | 16 | HEADERS += \ 17 | CQPropertyViewTest.h \ 18 | 19 | DESTDIR = ../bin 20 | OBJECTS_DIR = ../obj 21 | 22 | INCLUDEPATH += \ 23 | . \ 24 | ../include \ 25 | ../../CQUtil/include \ 26 | ../../CImageLib/include \ 27 | ../../CFont/include \ 28 | ../../CFile/include \ 29 | ../../CMath/include \ 30 | ../../CStrUtil/include \ 31 | ../../CUtil/include \ 32 | ../../COS/include \ 33 | 34 | unix:LIBS += \ 35 | -L../lib \ 36 | -L../../CQUtil/lib \ 37 | -L../../CImageLib/lib \ 38 | -L../../CFont/lib \ 39 | -L../../CConfig/lib \ 40 | -L../../CUtil/lib \ 41 | -L../../CFileUtil/lib \ 42 | -L../../CFile/lib \ 43 | -L../../CMath/lib \ 44 | -L../../CStrUtil/lib \ 45 | -L../../CRegExp/lib \ 46 | -L../../COS/lib \ 47 | -lCQPropertyView -lCQUtil -lCImageLib -lCFont \ 48 | -lCConfig -lCUtil -lCFileUtil -lCFile -lCMath -lCRegExp -lCStrUtil \ 49 | -lCOS -lpng -ljpeg -ltre \ 50 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Colin Williams 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /doc/DEPENDS.md: -------------------------------------------------------------------------------- 1 | This package depends on other packages in my github directory. 2 | 3 | To get all code to successfully build follow the following steps: 4 | + Download charts into directory 5 | + git clone "https://github.com/colinw7/CQPropertyView" CQPropertyView 6 | + cd $ROOT/CQPropertyView/src 7 | + Check list of paths in CQPropertyView.pro (INCLUDEPATH variable) 8 | + for each path download the missing project into the same directory as you downloaded CQPropertyView 9 | + Check list of libraries in CQPropertyView/test/CQPropertyViewTest.pro (unix:LIBS variable) 10 | + for each library download the missing project into the same directory as you downloaded CQPropertyView 11 | + build each downloaded library using its src and/or test directory 12 | + each library may have additional dependencies in its .pro or Makefile 13 | 14 | Additional dependencies are standard UNIX packages: 15 | + png 16 | + libpng12.so.0 17 | + jpeg 18 | + libjpeg.so.8 19 | + tre 20 | + libtre.so.5 21 | 22 | There is also a 'experimental' build script in $ROOT/CQPropertyView/scripts/build.sh. To use: 23 | . make empty build directory 24 | . cp $ROOT/CQPropertyView/scripts/build.sh to empty build directory 25 | . Run ./build.sh 26 | -------------------------------------------------------------------------------- /include/CQPropertyViewFontType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewFontType_H 2 | #define CQPropertyViewFontType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for QFont 8 | */ 9 | class CQPropertyViewFontType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewFontType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | }; 21 | 22 | //------ 23 | 24 | #include 25 | 26 | /*! 27 | * \brief editor factory for QFont 28 | */ 29 | class CQPropertyViewFontEditor : public CQPropertyViewEditorFactory { 30 | public: 31 | CQPropertyViewFontEditor(); 32 | 33 | QWidget *createEdit(QWidget *parent) override; 34 | 35 | void connect(QWidget *w, QObject *obj, const char *method) override; 36 | 37 | QVariant getValue(QWidget *w) override; 38 | 39 | void setValue(QWidget *w, const QVariant &var) override; 40 | }; 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /include/CQPropertyViewColorType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewColorType_H 2 | #define CQPropertyViewColorType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for QColor 8 | */ 9 | class CQPropertyViewColorType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewColorType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | }; 21 | 22 | //------ 23 | 24 | #include 25 | 26 | /*! 27 | * \brief editor factory for QColor 28 | */ 29 | class CQPropertyViewColorEditor : public CQPropertyViewEditorFactory { 30 | public: 31 | CQPropertyViewColorEditor(); 32 | 33 | QWidget *createEdit(QWidget *parent) override; 34 | 35 | void connect(QWidget *w, QObject *obj, const char *method) override; 36 | 37 | QVariant getValue(QWidget *w) override; 38 | 39 | void setValue(QWidget *w, const QVariant &var) override; 40 | }; 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /include/CQPropertyViewEditor.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewEditor_H 2 | #define CQPropertyViewEditor_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | class QWidget; 9 | class QObject; 10 | 11 | //------ 12 | 13 | /*! 14 | * \brief Base class for editor factories 15 | */ 16 | class CQPropertyViewEditorFactory { 17 | public: 18 | CQPropertyViewEditorFactory() { } 19 | 20 | virtual ~CQPropertyViewEditorFactory() { } 21 | 22 | virtual QWidget *createEdit(QWidget *parent=nullptr) = 0; 23 | 24 | virtual void connect(QWidget *w, QObject *obj, const char *method) = 0; 25 | 26 | virtual QVariant getValue(QWidget *w) = 0; 27 | 28 | virtual void setValue(QWidget *w, const QVariant &var) = 0; 29 | }; 30 | 31 | //------ 32 | 33 | /*! 34 | * \brief Manager class for registered editors 35 | */ 36 | class CQPropertyViewEditorMgr { 37 | public: 38 | CQPropertyViewEditorMgr(); 39 | 40 | ~CQPropertyViewEditorMgr(); 41 | 42 | void setEditor(const QString &typeName, CQPropertyViewEditorFactory *editor); 43 | 44 | CQPropertyViewEditorFactory *getEditor(const QString &typeName) const; 45 | 46 | private: 47 | using Editors = std::map; 48 | 49 | Editors editors_; 50 | }; 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /include/CQPropertyViewRectFType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewRectFType_H 2 | #define CQPropertyViewRectFType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for QRectF 8 | */ 9 | class CQPropertyViewRectFType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewRectFType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | 21 | QString tip(const QVariant &value) const override; 22 | }; 23 | 24 | //------ 25 | 26 | #include 27 | 28 | /*! 29 | * \brief editor factory for QRectF 30 | */ 31 | class CQPropertyViewRectFEditor : public CQPropertyViewEditorFactory { 32 | public: 33 | CQPropertyViewRectFEditor(); 34 | 35 | QWidget *createEdit(QWidget *parent) override; 36 | 37 | void connect(QWidget *w, QObject *obj, const char *method) override; 38 | 39 | QVariant getValue(QWidget *w) override; 40 | 41 | void setValue(QWidget *w, const QVariant &var) override; 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /include/CQPropertyViewAngleType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewAngleEditor_H 2 | #define CQPropertyViewAngleEditor_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for CAngle 8 | */ 9 | class CQPropertyViewAngleType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewAngleType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | 21 | QString tip(const QVariant &value) const override; 22 | }; 23 | 24 | //------ 25 | 26 | #include 27 | 28 | /*! 29 | * \brief editor factory for CAngle 30 | */ 31 | class CQPropertyViewAngleEditor : public CQPropertyViewEditorFactory { 32 | public: 33 | CQPropertyViewAngleEditor(); 34 | 35 | QWidget *createEdit(QWidget *parent) override; 36 | 37 | void connect(QWidget *w, QObject *obj, const char *method) override; 38 | 39 | QVariant getValue(QWidget *w) override; 40 | 41 | void setValue(QWidget *w, const QVariant &var) override; 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /include/CQPropertyViewAlignType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewAlignType_H 2 | #define CQPropertyViewAlignType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for Qt::Alignment 8 | */ 9 | class CQPropertyViewAlignType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewAlignType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | 21 | QString tip(const QVariant &value) const override; 22 | }; 23 | 24 | //------ 25 | 26 | #include 27 | 28 | /*! 29 | * \brief editor factory for Qt::Alignment 30 | */ 31 | class CQPropertyViewAlignEditor : public CQPropertyViewEditorFactory { 32 | public: 33 | CQPropertyViewAlignEditor(); 34 | 35 | QWidget *createEdit(QWidget *parent) override; 36 | 37 | void connect(QWidget *w, QObject *obj, const char *method) override; 38 | 39 | QVariant getValue(QWidget *w) override; 40 | 41 | void setValue(QWidget *w, const QVariant &var) override; 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /include/CQPropertyViewPaletteType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewPaletteType_H 2 | #define CQPropertyViewPaletteType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for QPalette 8 | */ 9 | class CQPropertyViewPaletteType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewPaletteType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | 21 | QString tip(const QVariant &value) const override; 22 | }; 23 | 24 | //------ 25 | 26 | #include 27 | 28 | /*! 29 | * \brief editor factory for QPalette 30 | */ 31 | class CQPropertyViewPaletteEditor : public CQPropertyViewEditorFactory { 32 | public: 33 | CQPropertyViewPaletteEditor(); 34 | 35 | QWidget *createEdit(QWidget *parent) override; 36 | 37 | void connect(QWidget *w, QObject *obj, const char *method) override; 38 | 39 | QVariant getValue(QWidget *w) override; 40 | 41 | void setValue(QWidget *w, const QVariant &var) override; 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /include/CQPropertyViewLineDashType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewLineDashType_H 2 | #define CQPropertyViewLineDashType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for CLineDash 8 | */ 9 | class CQPropertyViewLineDashType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewLineDashType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | 21 | QString tip(const QVariant &value) const override; 22 | }; 23 | 24 | //------ 25 | 26 | #include 27 | 28 | /*! 29 | * \brief editor factory for CLineDash 30 | */ 31 | class CQPropertyViewLineDashEditor : public CQPropertyViewEditorFactory { 32 | public: 33 | CQPropertyViewLineDashEditor(); 34 | 35 | QWidget *createEdit(QWidget *parent) override; 36 | 37 | void connect(QWidget *w, QObject *obj, const char *method) override; 38 | 39 | QVariant getValue(QWidget *w) override; 40 | 41 | void setValue(QWidget *w, const QVariant &var) override; 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /include/CQPropertyViewIntegerType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewIntegerType_H 2 | #define CQPropertyViewIntegerType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for int 8 | */ 9 | class CQPropertyViewIntegerType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewIntegerType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | }; 21 | 22 | //------ 23 | 24 | #include 25 | 26 | /*! 27 | * \brief editor factory for int 28 | */ 29 | class CQPropertyViewIntegerEditor : public CQPropertyViewEditorFactory { 30 | public: 31 | CQPropertyViewIntegerEditor(int min=INT_MIN, int max=INT_MAX, int step=1); 32 | 33 | QWidget *createEdit(QWidget *parent) override; 34 | 35 | void connect(QWidget *w, QObject *obj, const char *method) override; 36 | 37 | QVariant getValue(QWidget *w) override; 38 | 39 | void setValue(QWidget *w, const QVariant &var) override; 40 | 41 | private: 42 | int min_ { INT_MIN }; 43 | int max_ { INT_MAX }; 44 | int step_ { 1 }; 45 | }; 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /include/CQPropertyViewSizeFType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewSizeFType_H 2 | #define CQPropertyViewSizeFType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for QSizeF 8 | */ 9 | class CQPropertyViewSizeFType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewSizeFType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | 21 | QString tip(const QVariant &value) const override; 22 | }; 23 | 24 | //------ 25 | 26 | #include 27 | 28 | /*! 29 | * \brief editor factory for QSizeF 30 | */ 31 | class CQPropertyViewSizeFEditor : public CQPropertyViewEditorFactory { 32 | public: 33 | CQPropertyViewSizeFEditor(double max=1000, double step=1.0); 34 | 35 | double max() const { return max_; } 36 | 37 | double step() const { return step_; } 38 | 39 | QWidget *createEdit(QWidget *parent) override; 40 | 41 | void connect(QWidget *w, QObject *obj, const char *method) override; 42 | 43 | QVariant getValue(QWidget *w) override; 44 | 45 | void setValue(QWidget *w, const QVariant &var) override; 46 | 47 | private: 48 | double max_ { 1.0 }; 49 | double step_ { 1.0 }; 50 | }; 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /scripts/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/csh -f 2 | 3 | # Instructions 4 | # . make empty build directory 5 | # . cp build.sh to empty build directory 6 | # . Run ./build.sh 7 | 8 | set cdir = `pwd` 9 | 10 | if (! -e CQPropertyView) then 11 | git clone https://github.com/colinw7/CQPropertyView.git CQPropertyView 12 | endif 13 | 14 | set inc = `cat CQPropertyView/src/CQPropertyView.pro | sed ':x; /\\$/ { N; s/\\\n//; tx }' | grep INCLUDEPATH | sed 's/INCLUDEPATH += //'` 15 | 16 | set dirs = () 17 | 18 | foreach v ($inc) 19 | set n = `echo $v | grep '..\/..\/' | wc -l` 20 | 21 | if ($n != 1) then 22 | continue 23 | endif 24 | 25 | set v1 = `echo $v | sed 's@../../\(.*\)/include@\1@'` 26 | 27 | set dirs = ($dirs $v1) 28 | 29 | if (! -e $v1) then 30 | echo "--- Clone $v1 ---" 31 | 32 | git clone https://github.com/colinw7/${v1}.git $v1 33 | endif 34 | end 35 | 36 | foreach dir ($dirs) 37 | echo "--- Build $dir ---" 38 | 39 | if (-e $cdir/$dir/src) then 40 | cd $cdir/$dir/src 41 | 42 | if (! -e ../obj) then 43 | mkdir ../obj 44 | endif 45 | 46 | if (! -e ../lib) then 47 | mkdir ../lib 48 | endif 49 | 50 | set n = `find . -maxdepth 1 -name "*.pro" | wc -l` 51 | 52 | if ($n == 1) then 53 | qmake 54 | endif 55 | 56 | make 57 | endif 58 | end 59 | 60 | echo "--- Build CQPropertyView (src) ---" 61 | 62 | cd $cdir/CQPropertyView/src 63 | 64 | qmake 65 | 66 | make 67 | 68 | echo "--- Build CQPropertyView (test) ---" 69 | 70 | cd $cdir/CQPropertyView/test 71 | 72 | qmake 73 | 74 | make 75 | -------------------------------------------------------------------------------- /include/CQPropertyViewPointFType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewPointFType_H 2 | #define CQPropertyViewPointFType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for QPointF 8 | */ 9 | class CQPropertyViewPointFType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewPointFType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | 21 | QString tip(const QVariant &value) const override; 22 | }; 23 | 24 | //------ 25 | 26 | #include 27 | 28 | /*! 29 | * \brief editor factory for QPointF 30 | */ 31 | class CQPropertyViewPointFEditor : public CQPropertyViewEditorFactory { 32 | public: 33 | CQPropertyViewPointFEditor(double min=-1E50, double max=1E50, double step=1.0); 34 | 35 | double min() const { return min_; } 36 | double max() const { return max_; } 37 | 38 | double step() const { return step_; } 39 | 40 | QWidget *createEdit(QWidget *parent) override; 41 | 42 | void connect(QWidget *w, QObject *obj, const char *method) override; 43 | 44 | QVariant getValue(QWidget *w) override; 45 | 46 | void setValue(QWidget *w, const QVariant &var) override; 47 | 48 | private: 49 | double min_ { 0.0 }; 50 | double max_ { 1.0 }; 51 | double step_ { 1.0 }; 52 | }; 53 | 54 | #endif 55 | -------------------------------------------------------------------------------- /include/CQPropertyViewRealType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewRealType_H 2 | #define CQPropertyViewRealType_H 3 | 4 | #include 5 | 6 | /*! 7 | * \brief type for double 8 | */ 9 | class CQPropertyViewRealType : public CQPropertyViewType { 10 | public: 11 | CQPropertyViewRealType(); 12 | 13 | CQPropertyViewEditorFactory *getEditor() const override; 14 | 15 | bool setEditorData(CQPropertyViewItem *item, const QVariant &value) override; 16 | 17 | void draw(CQPropertyViewItem *item, const CQPropertyViewDelegate *delegate, 18 | QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, 19 | const QVariant &value, const ItemState &itemState) override; 20 | }; 21 | 22 | //------ 23 | 24 | #include 25 | 26 | /*! 27 | * \brief editor factory for double 28 | */ 29 | class CQPropertyViewRealEditor : public CQPropertyViewEditorFactory { 30 | public: 31 | enum class Type { 32 | DoubleSpin, 33 | RealSlider, 34 | ComboSlider 35 | }; 36 | 37 | public: 38 | CQPropertyViewRealEditor(double min=-1E50, double max=1E50, double step=1.0); 39 | 40 | const Type &type() const { return type_; } 41 | void setType(const Type &v) { type_ = v; } 42 | 43 | QWidget *createEdit(QWidget *parent) override; 44 | 45 | void connect(QWidget *w, QObject *obj, const char *method) override; 46 | 47 | QVariant getValue(QWidget *w) override; 48 | 49 | void setValue(QWidget *w, const QVariant &var) override; 50 | 51 | private: 52 | Type type_ { Type::DoubleSpin }; 53 | double min_ { -1E50 }; 54 | double max_ { 1E50 }; 55 | double step_ { 1.0 }; 56 | }; 57 | 58 | #endif 59 | -------------------------------------------------------------------------------- /include/CQPropertyViewType.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewType_H 2 | #define CQPropertyViewType_H 3 | 4 | #include 5 | #include 6 | 7 | class CQPropertyViewEditorFactory; 8 | class CQPropertyViewDelegate; 9 | class CQPropertyViewItem; 10 | 11 | class QStyleOptionViewItem; 12 | class QPainter; 13 | class QModelIndex; 14 | class QVariant; 15 | 16 | /*! 17 | * \brief type base class 18 | * 19 | * support: 20 | * . create editor 21 | * . delegate draw 22 | */ 23 | class CQPropertyViewType { 24 | public: 25 | using EditorFactory = CQPropertyViewEditorFactory; 26 | using ViewDelegate = CQPropertyViewDelegate; 27 | using ViewItem = CQPropertyViewItem; 28 | using ItemState = ViewDelegate::ItemState; 29 | 30 | public: 31 | CQPropertyViewType() { } 32 | 33 | virtual ~CQPropertyViewType() { } 34 | 35 | //--- 36 | 37 | int margin() const { return margin_; } 38 | void setMargin(int m) { margin_ = m; } 39 | 40 | //--- 41 | 42 | virtual EditorFactory *getEditor() const = 0; 43 | 44 | virtual bool setEditorData(ViewItem *item, const QVariant &value); 45 | 46 | virtual void draw(ViewItem *item, const ViewDelegate *delegate, 47 | QPainter *painter, const QStyleOptionViewItem &option, 48 | const QModelIndex &index, const QVariant &value, 49 | const ItemState &itemState); 50 | 51 | virtual QString tip(const QVariant &value) const; 52 | 53 | virtual QString userName() const { return ""; } 54 | 55 | //--- 56 | 57 | //! get set registered name 58 | const QString &name() const { return name_; } 59 | void setName(const QString &name) { name_ = name; } 60 | 61 | protected: 62 | QString name_; //!< registered name 63 | int margin_ { 4 }; //! left/right margin 64 | }; 65 | 66 | #endif 67 | -------------------------------------------------------------------------------- /include/CQPropertyView.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyView_H 2 | #define CQPropertyView_H 3 | 4 | #include 5 | #include 6 | 7 | class CQPropertyViewType; 8 | class CQPropertyViewEditorMgr; 9 | class CQPropertyViewEditorFactory; 10 | class CQPropertyViewItem; 11 | 12 | #define CQPropertyViewMgrInst CQPropertyViewMgr::instance() 13 | 14 | /*! 15 | * \brief Property view manager for registered types 16 | */ 17 | class CQPropertyViewMgr { 18 | public: 19 | static CQPropertyViewMgr *instance(); 20 | 21 | ~CQPropertyViewMgr(); 22 | 23 | //--- 24 | 25 | template 26 | void addTypeT(const QString &name) { 27 | addType(name, new T); 28 | } 29 | 30 | void addType(const QString &name, CQPropertyViewType *type); 31 | 32 | CQPropertyViewType *getType(const QString &name) const; 33 | 34 | void typeNames(QStringList &names) const; 35 | 36 | //--- 37 | 38 | CQPropertyViewEditorFactory *getEditor(const QString &name) const; 39 | 40 | CQPropertyViewItem *editItem() const { return editItem_; } 41 | void setEditItem(CQPropertyViewItem *editItem) { editItem_ = editItem; } 42 | 43 | CQPropertyViewItem *drawItem() const { return drawItem_; } 44 | void setDrawItem(CQPropertyViewItem *drawItem) { drawItem_ = drawItem; } 45 | 46 | QString userName(const QString &typeName) const; 47 | 48 | void setUserName(const QString &typeName, const QString &userName); 49 | 50 | private: 51 | CQPropertyViewMgr(); 52 | 53 | private: 54 | using Types = std::map; 55 | using UserNameMap = std::map; 56 | 57 | Types types_; 58 | UserNameMap userNameMap_; 59 | CQPropertyViewEditorMgr* editorMgr_ { nullptr }; 60 | mutable CQPropertyViewItem* editItem_ { nullptr }; 61 | mutable CQPropertyViewItem* drawItem_ { nullptr }; 62 | }; 63 | 64 | #endif 65 | -------------------------------------------------------------------------------- /include/CQPropertyViewFilter.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewFilter_H 2 | #define CQPropertyViewFilter_H 3 | 4 | #include 5 | #include 6 | 7 | class CQPropertyViewTree; 8 | class CQPropertyViewItem; 9 | 10 | /*! 11 | * \brief proxy model for filter/sort of property model 12 | */ 13 | class CQPropertyViewFilter : public QSortFilterProxyModel { 14 | Q_OBJECT 15 | 16 | Q_PROPERTY(QString filter READ filter WRITE setFilter ) 17 | Q_PROPERTY(bool matchPath READ isMatchPath WRITE setMatchPath ) 18 | Q_PROPERTY(bool matchParent READ isMatchParent WRITE setMatchParent) 19 | 20 | // model indices are from source model (propertyModel) 21 | public: 22 | CQPropertyViewFilter(CQPropertyViewTree *view); 23 | 24 | CQPropertyViewTree *view() const { return view_; } 25 | 26 | const QString &filter() const { return filter_; } 27 | void setFilter(const QString &filter); 28 | 29 | bool isMatchPath() const { return matchPath_; } 30 | void setMatchPath(bool b) { matchPath_ = b; } 31 | 32 | bool isMatchParent() const { return matchParent_; } 33 | void setMatchParent(bool b) { matchParent_ = b; } 34 | 35 | bool filterAcceptsRow(int row, const QModelIndex &parent) const override; 36 | 37 | bool acceptsItem(const QModelIndex &ind) const; 38 | 39 | bool anyChildMatch(const QModelIndex &parent) const; 40 | 41 | #if 0 42 | void expandMatches(); 43 | #endif 44 | 45 | private: 46 | bool itemMatch(CQPropertyViewItem *item) const; 47 | 48 | private: 49 | using IndexMatches = std::map; 50 | using ExpandInds = std::set; 51 | 52 | CQPropertyViewTree* view_ { nullptr }; 53 | QString filter_; 54 | QRegExp regexp_; 55 | bool matchPath_ { true }; 56 | bool matchParent_ { false }; 57 | mutable IndexMatches matches_; 58 | mutable ExpandInds expand_; 59 | }; 60 | 61 | #endif 62 | -------------------------------------------------------------------------------- /src/CQPropertyView.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = lib 2 | 3 | TARGET = CQPropertyView 4 | 5 | QT += widgets svg 6 | 7 | DEPENDPATH += . 8 | 9 | QMAKE_CXXFLAGS += -std=c++17 10 | 11 | MOC_DIR = .moc 12 | 13 | CONFIG += staticlib 14 | 15 | SOURCES += \ 16 | CQPropertyView.cpp \ 17 | CQPropertyViewDelegate.cpp \ 18 | CQPropertyViewEditor.cpp \ 19 | CQPropertyViewFilter.cpp \ 20 | CQPropertyViewItem.cpp \ 21 | CQPropertyViewModel.cpp \ 22 | CQPropertyViewTree.cpp \ 23 | \ 24 | CQPropertyViewAlignType.cpp \ 25 | CQPropertyViewColorType.cpp \ 26 | CQPropertyViewFontType.cpp \ 27 | CQPropertyViewIntegerType.cpp \ 28 | CQPropertyViewPointFType.cpp \ 29 | CQPropertyViewRealType.cpp \ 30 | CQPropertyViewRectFType.cpp \ 31 | CQPropertyViewSizeFType.cpp \ 32 | CQPropertyViewType.cpp \ 33 | 34 | HEADERS += \ 35 | ../include/CQPropertyView.h \ 36 | ../include/CQPropertyViewDelegate.h \ 37 | ../include/CQPropertyViewEditor.h \ 38 | ../include/CQPropertyViewFilter.h \ 39 | ../include/CQPropertyViewItem.h \ 40 | ../include/CQPropertyViewModel.h \ 41 | ../include/CQPropertyViewTree.h \ 42 | \ 43 | ../include/CQPropertyViewAlignType.h \ 44 | ../include/CQPropertyViewAngleType.h \ 45 | ../include/CQPropertyViewColorType.h \ 46 | ../include/CQPropertyViewFontType.h \ 47 | ../include/CQPropertyViewIntegerType.h \ 48 | ../include/CQPropertyViewLineDashType.h \ 49 | ../include/CQPropertyViewPaletteType.h \ 50 | ../include/CQPropertyViewPointFType.h \ 51 | ../include/CQPropertyViewRealType.h \ 52 | ../include/CQPropertyViewRectFType.h \ 53 | ../include/CQPropertyViewSizeFType.h \ 54 | ../include/CQPropertyViewType.h \ 55 | 56 | DESTDIR = ../lib 57 | OBJECTS_DIR = ../obj 58 | LIB_DIR = ../lib 59 | 60 | INCLUDEPATH += \ 61 | . \ 62 | ../include \ 63 | ../../CQUtil/include \ 64 | ../../CConfig/include \ 65 | ../../CFont/include \ 66 | ../../CImageLib/include \ 67 | ../../CMath/include \ 68 | ../../CFile/include \ 69 | ../../CFileUtil/include \ 70 | ../../CStrUtil/include \ 71 | ../../CRegExp/include \ 72 | ../../CGlob/include \ 73 | ../../CUtil/include \ 74 | ../../COS/include \ 75 | -------------------------------------------------------------------------------- /src/CQPropertyViewRectFType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | CQPropertyViewRectFType:: 7 | CQPropertyViewRectFType() 8 | { 9 | } 10 | 11 | CQPropertyViewEditorFactory * 12 | CQPropertyViewRectFType:: 13 | getEditor() const 14 | { 15 | return new CQPropertyViewRectFEditor; 16 | } 17 | 18 | bool 19 | CQPropertyViewRectFType:: 20 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 21 | { 22 | return item->setData(value); 23 | } 24 | 25 | void 26 | CQPropertyViewRectFType:: 27 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 28 | const QStyleOptionViewItem &option, const QModelIndex &index, 29 | const QVariant &value, const ItemState &itemState) 30 | { 31 | delegate->drawRect(painter, option, value.value(), index, itemState); 32 | } 33 | 34 | QString 35 | CQPropertyViewRectFType:: 36 | tip(const QVariant &value) const 37 | { 38 | auto r = value.value(); 39 | 40 | return QString("{%1 %2} {%3 %4}").arg(r.left()).arg(r.top()).arg(r.right()).arg(r.bottom()); 41 | } 42 | 43 | //------ 44 | 45 | CQPropertyViewRectFEditor:: 46 | CQPropertyViewRectFEditor() 47 | { 48 | } 49 | 50 | QWidget * 51 | CQPropertyViewRectFEditor:: 52 | createEdit(QWidget *parent) 53 | { 54 | auto *edit = new CQBBox2DEdit(parent); 55 | 56 | return edit; 57 | } 58 | 59 | void 60 | CQPropertyViewRectFEditor:: 61 | connect(QWidget *w, QObject *obj, const char *method) 62 | { 63 | auto *edit = qobject_cast(w); 64 | assert(edit); 65 | 66 | QObject::connect(edit, SIGNAL(valueChanged()), obj, method); 67 | } 68 | 69 | QVariant 70 | CQPropertyViewRectFEditor:: 71 | getValue(QWidget *w) 72 | { 73 | auto *edit = qobject_cast(w); 74 | assert(edit); 75 | 76 | auto rect = edit->getQValue(); 77 | 78 | return rect; 79 | } 80 | 81 | void 82 | CQPropertyViewRectFEditor:: 83 | setValue(QWidget *w, const QVariant &var) 84 | { 85 | auto *edit = qobject_cast(w); 86 | assert(edit); 87 | 88 | auto rect = var.toRectF(); 89 | 90 | edit->setValue(rect); 91 | } 92 | -------------------------------------------------------------------------------- /src/CQPropertyViewFontType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | CQPropertyViewFontType:: 9 | CQPropertyViewFontType() 10 | { 11 | } 12 | 13 | CQPropertyViewEditorFactory * 14 | CQPropertyViewFontType:: 15 | getEditor() const 16 | { 17 | return new CQPropertyViewFontEditor; 18 | } 19 | 20 | bool 21 | CQPropertyViewFontType:: 22 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 23 | { 24 | return item->setData(value); 25 | } 26 | 27 | void 28 | CQPropertyViewFontType:: 29 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 30 | const QStyleOptionViewItem &option, const QModelIndex &index, 31 | const QVariant &value, const ItemState &itemState) 32 | { 33 | delegate->drawFont(painter, option, value.value(), index, itemState); 34 | } 35 | 36 | //------ 37 | 38 | CQPropertyViewFontEditor:: 39 | CQPropertyViewFontEditor() 40 | { 41 | } 42 | 43 | QWidget * 44 | CQPropertyViewFontEditor:: 45 | createEdit(QWidget *parent) 46 | { 47 | auto *tree = (parent ? qobject_cast(parent->parentWidget()) : nullptr); 48 | 49 | auto *edit = new CQFontEdit(parent); 50 | 51 | edit->setAutoFillBackground(true); 52 | 53 | if (tree) 54 | QObject::connect(edit, SIGNAL(menuHidden()), tree, SLOT(closeEditorSlot())); 55 | 56 | return edit; 57 | } 58 | 59 | void 60 | CQPropertyViewFontEditor:: 61 | connect(QWidget *w, QObject *obj, const char *method) 62 | { 63 | auto *edit = qobject_cast(w); 64 | assert(edit); 65 | 66 | QObject::connect(edit, SIGNAL(fontChanged(const QString&)), obj, method); 67 | } 68 | 69 | QVariant 70 | CQPropertyViewFontEditor:: 71 | getValue(QWidget *w) 72 | { 73 | auto *edit = qobject_cast(w); 74 | assert(edit); 75 | 76 | return edit->fontName(); 77 | } 78 | 79 | void 80 | CQPropertyViewFontEditor:: 81 | setValue(QWidget *w, const QVariant &var) 82 | { 83 | auto *edit = qobject_cast(w); 84 | assert(edit); 85 | 86 | auto str = var.toString(); 87 | 88 | edit->setFontName(str); 89 | } 90 | -------------------------------------------------------------------------------- /src/CQPropertyViewPaletteType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | CQPropertyViewPaletteType:: 7 | CQPropertyViewPaletteType() 8 | { 9 | } 10 | 11 | CQPropertyViewEditorFactory * 12 | CQPropertyViewPaletteType:: 13 | getEditor() const 14 | { 15 | return new CQPropertyViewPaletteEditor; 16 | } 17 | 18 | bool 19 | CQPropertyViewPaletteType:: 20 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 21 | { 22 | return item->setData(value); 23 | } 24 | 25 | void 26 | CQPropertyViewPaletteType:: 27 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 28 | const QStyleOptionViewItem &option, const QModelIndex &index, 29 | const QVariant &value, const ItemState &itemState) 30 | { 31 | auto str = CQUtil::paletteToString(value.value()); 32 | 33 | delegate->drawString(painter, option, str, index, itemState); 34 | } 35 | 36 | QString 37 | CQPropertyViewPaletteType:: 38 | tip(const QVariant &value) const 39 | { 40 | return CQUtil::paletteToString(value.value()); 41 | } 42 | 43 | //------ 44 | 45 | CQPropertyViewPaletteEditor:: 46 | CQPropertyViewPaletteEditor() 47 | { 48 | } 49 | 50 | QWidget * 51 | CQPropertyViewPaletteEditor:: 52 | createEdit(QWidget *parent) 53 | { 54 | auto *chooser = new CQPaletteChooser(parent); 55 | 56 | return chooser; 57 | } 58 | 59 | void 60 | CQPropertyViewPaletteEditor:: 61 | connect(QWidget *w, QObject *obj, const char *method) 62 | { 63 | auto *chooser = qobject_cast(w); 64 | assert(chooser); 65 | 66 | QObject::connect(chooser, SIGNAL(paletteChanged(const QString&)), obj, method); 67 | } 68 | 69 | QVariant 70 | CQPropertyViewPaletteEditor:: 71 | getValue(QWidget *w) 72 | { 73 | auto *chooser = qobject_cast(w); 74 | assert(chooser); 75 | 76 | return chooser->palette(); 77 | } 78 | 79 | void 80 | CQPropertyViewPaletteEditor:: 81 | setValue(QWidget *w, const QVariant &var) 82 | { 83 | auto *chooser = qobject_cast(w); 84 | assert(chooser); 85 | 86 | auto str = var.toString(); 87 | 88 | chooser->setPaletteDef(str); 89 | } 90 | -------------------------------------------------------------------------------- /src/CQPropertyViewColorType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | CQPropertyViewColorType:: 9 | CQPropertyViewColorType() 10 | { 11 | } 12 | 13 | CQPropertyViewEditorFactory * 14 | CQPropertyViewColorType:: 15 | getEditor() const 16 | { 17 | return new CQPropertyViewColorEditor; 18 | } 19 | 20 | bool 21 | CQPropertyViewColorType:: 22 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 23 | { 24 | return item->setData(value); 25 | } 26 | 27 | void 28 | CQPropertyViewColorType:: 29 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 30 | const QStyleOptionViewItem &option, const QModelIndex &index, 31 | const QVariant &value, const ItemState &itemState) 32 | { 33 | delegate->drawColor(painter, option, value.value(), index, itemState); 34 | } 35 | 36 | //------ 37 | 38 | CQPropertyViewColorEditor:: 39 | CQPropertyViewColorEditor() 40 | { 41 | } 42 | 43 | QWidget * 44 | CQPropertyViewColorEditor:: 45 | createEdit(QWidget *parent) 46 | { 47 | auto *tree = (parent ? qobject_cast(parent->parentWidget()) : nullptr); 48 | 49 | auto *edit = new CQColorEdit(parent); 50 | 51 | edit->setAutoFillBackground(true); 52 | 53 | if (tree) 54 | QObject::connect(edit, SIGNAL(menuHidden()), tree, SLOT(closeEditorSlot())); 55 | 56 | return edit; 57 | } 58 | 59 | void 60 | CQPropertyViewColorEditor:: 61 | connect(QWidget *w, QObject *obj, const char *method) 62 | { 63 | auto *edit = qobject_cast(w); 64 | assert(edit); 65 | 66 | QObject::connect(edit, SIGNAL(colorChanged(const QColor&)), obj, method); 67 | } 68 | 69 | QVariant 70 | CQPropertyViewColorEditor:: 71 | getValue(QWidget *w) 72 | { 73 | auto *edit = qobject_cast(w); 74 | assert(edit); 75 | 76 | return edit->colorName(); 77 | } 78 | 79 | void 80 | CQPropertyViewColorEditor:: 81 | setValue(QWidget *w, const QVariant &var) 82 | { 83 | auto *edit = qobject_cast(w); 84 | assert(edit); 85 | 86 | auto str = var.toString(); 87 | 88 | edit->setColorName(str); 89 | } 90 | -------------------------------------------------------------------------------- /src/CQPropertyViewAngleType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | CQPropertyViewAngleType:: 8 | CQPropertyViewAngleType() 9 | { 10 | } 11 | 12 | CQPropertyViewEditorFactory * 13 | CQPropertyViewAngleType:: 14 | getEditor() const 15 | { 16 | return new CQPropertyViewAngleEditor; 17 | } 18 | 19 | bool 20 | CQPropertyViewAngleType:: 21 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 22 | { 23 | return item->setData(value); 24 | } 25 | 26 | void 27 | CQPropertyViewAngleType:: 28 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 29 | const QStyleOptionViewItem &option, const QModelIndex &index, 30 | const QVariant &value, const ItemState &itemState) 31 | { 32 | auto str = QString(value.value().toString().c_str()); 33 | 34 | str += "\u00b0"; 35 | 36 | delegate->drawString(painter, option, str, index, itemState); 37 | } 38 | 39 | QString 40 | CQPropertyViewAngleType:: 41 | tip(const QVariant &value) const 42 | { 43 | auto str = QString(value.value().toString().c_str()); 44 | 45 | str += "\u00b0"; 46 | 47 | return str; 48 | } 49 | 50 | //------ 51 | 52 | CQPropertyViewAngleEditor:: 53 | CQPropertyViewAngleEditor() 54 | { 55 | } 56 | 57 | QWidget * 58 | CQPropertyViewAngleEditor:: 59 | createEdit(QWidget *parent) 60 | { 61 | auto *edit = new CQAngleSpinBox(parent); 62 | 63 | return edit; 64 | } 65 | 66 | void 67 | CQPropertyViewAngleEditor:: 68 | connect(QWidget *w, QObject *obj, const char *method) 69 | { 70 | auto *edit = qobject_cast(w); 71 | assert(edit); 72 | 73 | QObject::connect(edit, SIGNAL(angleChanged(const CAngle &)), obj, method); 74 | } 75 | 76 | QVariant 77 | CQPropertyViewAngleEditor:: 78 | getValue(QWidget *w) 79 | { 80 | auto *edit = qobject_cast(w); 81 | assert(edit); 82 | 83 | return QVariant::fromValue(edit->getAngle()); 84 | } 85 | 86 | void 87 | CQPropertyViewAngleEditor:: 88 | setValue(QWidget *w, const QVariant &var) 89 | { 90 | auto *edit = qobject_cast(w); 91 | assert(edit); 92 | 93 | CAngle angle = var.value(); 94 | 95 | edit->setAngle(angle); 96 | } 97 | -------------------------------------------------------------------------------- /src/CQPropertyViewPointFType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | CQPropertyViewPointFType:: 7 | CQPropertyViewPointFType() 8 | { 9 | } 10 | 11 | CQPropertyViewEditorFactory * 12 | CQPropertyViewPointFType:: 13 | getEditor() const 14 | { 15 | return new CQPropertyViewPointFEditor; 16 | } 17 | 18 | bool 19 | CQPropertyViewPointFType:: 20 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 21 | { 22 | return item->setData(value); 23 | } 24 | 25 | void 26 | CQPropertyViewPointFType:: 27 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 28 | const QStyleOptionViewItem &option, const QModelIndex &index, 29 | const QVariant &value, const ItemState &itemState) 30 | { 31 | delegate->drawPoint(painter, option, value.value(), index, itemState); 32 | } 33 | 34 | QString 35 | CQPropertyViewPointFType:: 36 | tip(const QVariant &value) const 37 | { 38 | auto p = value.value(); 39 | 40 | return QString("%1 %2").arg(p.x()).arg(p.y()); 41 | } 42 | 43 | //------ 44 | 45 | CQPropertyViewPointFEditor:: 46 | CQPropertyViewPointFEditor(double min, double max, double step) : 47 | min_(min), max_(max), step_(step) 48 | { 49 | } 50 | 51 | QWidget * 52 | CQPropertyViewPointFEditor:: 53 | createEdit(QWidget *parent) 54 | { 55 | auto *edit = new CQPoint2DEdit(parent); 56 | 57 | edit->setSpin(true); 58 | edit->setMinimum(CPoint2D(min_, min_)); 59 | edit->setMaximum(CPoint2D(max_, max_)); 60 | edit->setStep(CPoint2D(step_, step_)); 61 | 62 | return edit; 63 | } 64 | 65 | void 66 | CQPropertyViewPointFEditor:: 67 | connect(QWidget *w, QObject *obj, const char *method) 68 | { 69 | auto *edit = qobject_cast(w); 70 | assert(edit); 71 | 72 | QObject::connect(edit, SIGNAL(valueChanged()), obj, method); 73 | } 74 | 75 | QVariant 76 | CQPropertyViewPointFEditor:: 77 | getValue(QWidget *w) 78 | { 79 | auto *edit = qobject_cast(w); 80 | assert(edit); 81 | 82 | return edit->getQValue(); 83 | } 84 | 85 | void 86 | CQPropertyViewPointFEditor:: 87 | setValue(QWidget *w, const QVariant &var) 88 | { 89 | auto *edit = qobject_cast(w); 90 | assert(edit); 91 | 92 | auto p = var.toPointF(); 93 | 94 | edit->setValue(p); 95 | } 96 | -------------------------------------------------------------------------------- /src/CQPropertyViewSizeFType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | CQPropertyViewSizeFType:: 7 | CQPropertyViewSizeFType() 8 | { 9 | } 10 | 11 | CQPropertyViewEditorFactory * 12 | CQPropertyViewSizeFType:: 13 | getEditor() const 14 | { 15 | return new CQPropertyViewSizeFEditor; 16 | } 17 | 18 | bool 19 | CQPropertyViewSizeFType:: 20 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 21 | { 22 | return item->setData(value); 23 | } 24 | 25 | void 26 | CQPropertyViewSizeFType:: 27 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 28 | const QStyleOptionViewItem &option, const QModelIndex &index, 29 | const QVariant &value, const ItemState &itemState) 30 | { 31 | delegate->drawSize(painter, option, value.value(), index, itemState); 32 | } 33 | 34 | QString 35 | CQPropertyViewSizeFType:: 36 | tip(const QVariant &value) const 37 | { 38 | auto s = value.value(); 39 | 40 | return QString("%1 %2").arg(s.width()).arg(s.height()); 41 | } 42 | 43 | //------ 44 | 45 | CQPropertyViewSizeFEditor:: 46 | CQPropertyViewSizeFEditor(double max, double step) : 47 | max_(max), step_(step) 48 | { 49 | } 50 | 51 | QWidget * 52 | CQPropertyViewSizeFEditor:: 53 | createEdit(QWidget *parent) 54 | { 55 | auto *edit = new CQPoint2DEdit(parent); 56 | 57 | edit->setSpin(true); 58 | edit->setMinimum(CPoint2D(0, 0)); 59 | edit->setMaximum(CPoint2D(max_, max_)); 60 | edit->setStep(CPoint2D(step_, step_)); 61 | 62 | return edit; 63 | } 64 | 65 | void 66 | CQPropertyViewSizeFEditor:: 67 | connect(QWidget *w, QObject *obj, const char *method) 68 | { 69 | auto *edit = qobject_cast(w); 70 | assert(edit); 71 | 72 | QObject::connect(edit, SIGNAL(valueChanged()), obj, method); 73 | } 74 | 75 | QVariant 76 | CQPropertyViewSizeFEditor:: 77 | getValue(QWidget *w) 78 | { 79 | auto *edit = qobject_cast(w); 80 | assert(edit); 81 | 82 | auto p = edit->getQValue(); 83 | 84 | return QSizeF(p.x(), p.y()); 85 | } 86 | 87 | void 88 | CQPropertyViewSizeFEditor:: 89 | setValue(QWidget *w, const QVariant &var) 90 | { 91 | auto *edit = qobject_cast(w); 92 | assert(edit); 93 | 94 | auto s = var.toSizeF(); 95 | 96 | edit->setValue(QPointF(s.width(), s.height())); 97 | } 98 | -------------------------------------------------------------------------------- /src/CQPropertyViewIntegerType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | CQPropertyViewIntegerType:: 9 | CQPropertyViewIntegerType() 10 | { 11 | } 12 | 13 | CQPropertyViewEditorFactory * 14 | CQPropertyViewIntegerType:: 15 | getEditor() const 16 | { 17 | return new CQPropertyViewIntegerEditor; 18 | } 19 | 20 | bool 21 | CQPropertyViewIntegerType:: 22 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 23 | { 24 | return item->setData(value); 25 | } 26 | 27 | void 28 | CQPropertyViewIntegerType:: 29 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 30 | const QStyleOptionViewItem &option, const QModelIndex &index, 31 | const QVariant &value, const ItemState &itemState) 32 | { 33 | delegate->drawString(painter, option, value.toString(), index, itemState); 34 | } 35 | 36 | //------ 37 | 38 | CQPropertyViewIntegerEditor:: 39 | CQPropertyViewIntegerEditor(int min, int max, int step) : 40 | min_(min), max_(max), step_(step) 41 | { 42 | } 43 | 44 | QWidget * 45 | CQPropertyViewIntegerEditor:: 46 | createEdit(QWidget *parent) 47 | { 48 | auto *spin = new CQIntegerSpin(parent); 49 | 50 | auto *item = CQPropertyViewMgrInst->editItem(); 51 | 52 | if (item) { 53 | auto vmin = item->minValue(); 54 | auto vmax = item->maxValue(); 55 | 56 | if (vmin.isValid()) { bool ok; int i = vmin.toInt(&ok); if (ok) min_ = i; } 57 | if (vmax.isValid()) { bool ok; int i = vmax.toInt(&ok); if (ok) max_ = i; } 58 | } 59 | 60 | spin->setRange(min_, max_); 61 | spin->setSingleStep(step_); 62 | 63 | return spin; 64 | } 65 | 66 | void 67 | CQPropertyViewIntegerEditor:: 68 | connect(QWidget *w, QObject *obj, const char *method) 69 | { 70 | auto *spin = qobject_cast(w); 71 | assert(spin); 72 | 73 | QObject::connect(spin, SIGNAL(valueChanged(int)), obj, method); 74 | } 75 | 76 | QVariant 77 | CQPropertyViewIntegerEditor:: 78 | getValue(QWidget *w) 79 | { 80 | auto *spin = qobject_cast(w); 81 | assert(spin); 82 | 83 | return QVariant(spin->value()); 84 | } 85 | 86 | void 87 | CQPropertyViewIntegerEditor:: 88 | setValue(QWidget *w, const QVariant &var) 89 | { 90 | auto *spin = qobject_cast(w); 91 | assert(spin); 92 | 93 | int i = var.toInt(); 94 | 95 | spin->setValue(i); 96 | } 97 | -------------------------------------------------------------------------------- /src/CQPropertyViewAlignType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | CQPropertyViewAlignType:: 7 | CQPropertyViewAlignType() 8 | { 9 | } 10 | 11 | CQPropertyViewEditorFactory * 12 | CQPropertyViewAlignType:: 13 | getEditor() const 14 | { 15 | return new CQPropertyViewAlignEditor; 16 | } 17 | 18 | bool 19 | CQPropertyViewAlignType:: 20 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 21 | { 22 | return item->setData(value); 23 | } 24 | 25 | void 26 | CQPropertyViewAlignType:: 27 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 28 | const QStyleOptionViewItem &option, const QModelIndex &index, 29 | const QVariant &value, const ItemState &itemState) 30 | { 31 | auto str = CQAlignEdit::toString(static_cast(value.toInt())); 32 | 33 | delegate->drawString(painter, option, str, index, itemState); 34 | } 35 | 36 | QString 37 | CQPropertyViewAlignType:: 38 | tip(const QVariant &value) const 39 | { 40 | return CQAlignEdit::toString(static_cast(value.toInt())); 41 | } 42 | 43 | //------ 44 | 45 | CQPropertyViewAlignEditor:: 46 | CQPropertyViewAlignEditor() 47 | { 48 | } 49 | 50 | QWidget * 51 | CQPropertyViewAlignEditor:: 52 | createEdit(QWidget *parent) 53 | { 54 | auto *edit = new CQAlignEdit(parent); 55 | 56 | return edit; 57 | } 58 | 59 | void 60 | CQPropertyViewAlignEditor:: 61 | connect(QWidget *w, QObject *obj, const char *method) 62 | { 63 | auto *edit = qobject_cast(w); 64 | assert(edit); 65 | 66 | QObject::connect(edit, SIGNAL(valueChanged(Qt::Alignment)), obj, method); 67 | } 68 | 69 | QVariant 70 | CQPropertyViewAlignEditor:: 71 | getValue(QWidget *w) 72 | { 73 | auto *edit = qobject_cast(w); 74 | assert(edit); 75 | 76 | return QVariant(edit->align()); 77 | } 78 | 79 | void 80 | CQPropertyViewAlignEditor:: 81 | setValue(QWidget *w, const QVariant &var) 82 | { 83 | auto *edit = qobject_cast(w); 84 | assert(edit); 85 | 86 | Qt::Alignment align = Qt::AlignCenter; 87 | 88 | if (var.type() == QVariant::String) { 89 | if (! CQUtil::stringToAlign(var.toString(), align)) 90 | align = Qt::AlignCenter; 91 | } 92 | else { 93 | bool ok; 94 | int i = var.toInt(&ok); 95 | if (ok) 96 | align = static_cast(i); 97 | } 98 | 99 | edit->setAlign(align); 100 | } 101 | -------------------------------------------------------------------------------- /src/CQPropertyViewLineDashType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | CQPropertyViewLineDashType:: 9 | CQPropertyViewLineDashType() 10 | { 11 | } 12 | 13 | CQPropertyViewEditorFactory * 14 | CQPropertyViewLineDashType:: 15 | getEditor() const 16 | { 17 | return new CQPropertyViewLineDashEditor; 18 | } 19 | 20 | bool 21 | CQPropertyViewLineDashType:: 22 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 23 | { 24 | return item->setData(value); 25 | } 26 | 27 | void 28 | CQPropertyViewLineDashType:: 29 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 30 | const QStyleOptionViewItem &option, const QModelIndex &index, 31 | const QVariant &value, const ItemState &itemState) 32 | { 33 | delegate->drawBackground(painter, option, index, itemState); 34 | 35 | CLineDash dash = value.value(); 36 | 37 | auto icon = CQLineDash::dashIcon(dash); 38 | 39 | auto str = QString(dash.toString().c_str()); 40 | 41 | QFontMetrics fm(option.font); 42 | 43 | int w = fm.horizontalAdvance(str); 44 | 45 | //--- 46 | 47 | auto irect = option.rect; 48 | 49 | irect.setLeft(irect.left() + w + 2*margin()); 50 | 51 | painter->drawPixmap(irect, icon.pixmap(option.rect.size())); 52 | 53 | //-- 54 | 55 | auto option1 = option; 56 | 57 | option1.rect.setRight(option1.rect.left() + w + 2*margin()); 58 | 59 | delegate->drawString(painter, option1, str, index, itemState); 60 | } 61 | 62 | QString 63 | CQPropertyViewLineDashType:: 64 | tip(const QVariant &value) const 65 | { 66 | auto str = QString(value.value().toString().c_str()); 67 | 68 | return str; 69 | } 70 | 71 | //------ 72 | 73 | CQPropertyViewLineDashEditor:: 74 | CQPropertyViewLineDashEditor() 75 | { 76 | } 77 | 78 | QWidget * 79 | CQPropertyViewLineDashEditor:: 80 | createEdit(QWidget *parent) 81 | { 82 | auto *edit = new CQLineDash(parent); 83 | 84 | return edit; 85 | } 86 | 87 | void 88 | CQPropertyViewLineDashEditor:: 89 | connect(QWidget *w, QObject *obj, const char *method) 90 | { 91 | auto *edit = qobject_cast(w); 92 | assert(edit); 93 | 94 | QObject::connect(edit, SIGNAL(valueChanged(const CLineDash &)), obj, method); 95 | } 96 | 97 | QVariant 98 | CQPropertyViewLineDashEditor:: 99 | getValue(QWidget *w) 100 | { 101 | auto *edit = qobject_cast(w); 102 | assert(edit); 103 | 104 | return QVariant::fromValue(edit->getLineDash()); 105 | } 106 | 107 | void 108 | CQPropertyViewLineDashEditor:: 109 | setValue(QWidget *w, const QVariant &var) 110 | { 111 | auto *edit = qobject_cast(w); 112 | assert(edit); 113 | 114 | CLineDash dash = var.value(); 115 | 116 | edit->setLineDash(dash); 117 | } 118 | -------------------------------------------------------------------------------- /src/.moc/moc_CQPropertyViewDelegate.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'CQPropertyViewDelegate.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.13) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include 10 | #include "../../include/CQPropertyViewDelegate.h" 11 | #include 12 | #include 13 | #if !defined(Q_MOC_OUTPUT_REVISION) 14 | #error "The header file 'CQPropertyViewDelegate.h' doesn't include ." 15 | #elif Q_MOC_OUTPUT_REVISION != 67 16 | #error "This file was generated using the moc from 5.15.13. It" 17 | #error "cannot be used with the include files from this version of Qt." 18 | #error "(The moc has changed too much.)" 19 | #endif 20 | 21 | QT_BEGIN_MOC_NAMESPACE 22 | QT_WARNING_PUSH 23 | QT_WARNING_DISABLE_DEPRECATED 24 | struct qt_meta_stringdata_CQPropertyViewDelegate_t { 25 | QByteArrayData data[1]; 26 | char stringdata0[23]; 27 | }; 28 | #define QT_MOC_LITERAL(idx, ofs, len) \ 29 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 30 | qptrdiff(offsetof(qt_meta_stringdata_CQPropertyViewDelegate_t, stringdata0) + ofs \ 31 | - idx * sizeof(QByteArrayData)) \ 32 | ) 33 | static const qt_meta_stringdata_CQPropertyViewDelegate_t qt_meta_stringdata_CQPropertyViewDelegate = { 34 | { 35 | QT_MOC_LITERAL(0, 0, 22) // "CQPropertyViewDelegate" 36 | 37 | }, 38 | "CQPropertyViewDelegate" 39 | }; 40 | #undef QT_MOC_LITERAL 41 | 42 | static const uint qt_meta_data_CQPropertyViewDelegate[] = { 43 | 44 | // content: 45 | 8, // revision 46 | 0, // classname 47 | 0, 0, // classinfo 48 | 0, 0, // methods 49 | 0, 0, // properties 50 | 0, 0, // enums/sets 51 | 0, 0, // constructors 52 | 0, // flags 53 | 0, // signalCount 54 | 55 | 0 // eod 56 | }; 57 | 58 | void CQPropertyViewDelegate::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 59 | { 60 | (void)_o; 61 | (void)_id; 62 | (void)_c; 63 | (void)_a; 64 | } 65 | 66 | QT_INIT_METAOBJECT const QMetaObject CQPropertyViewDelegate::staticMetaObject = { { 67 | QMetaObject::SuperData::link(), 68 | qt_meta_stringdata_CQPropertyViewDelegate.data, 69 | qt_meta_data_CQPropertyViewDelegate, 70 | qt_static_metacall, 71 | nullptr, 72 | nullptr 73 | } }; 74 | 75 | 76 | const QMetaObject *CQPropertyViewDelegate::metaObject() const 77 | { 78 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 79 | } 80 | 81 | void *CQPropertyViewDelegate::qt_metacast(const char *_clname) 82 | { 83 | if (!_clname) return nullptr; 84 | if (!strcmp(_clname, qt_meta_stringdata_CQPropertyViewDelegate.stringdata0)) 85 | return static_cast(this); 86 | return QItemDelegate::qt_metacast(_clname); 87 | } 88 | 89 | int CQPropertyViewDelegate::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 90 | { 91 | _id = QItemDelegate::qt_metacall(_c, _id, _a); 92 | return _id; 93 | } 94 | QT_WARNING_POP 95 | QT_END_MOC_NAMESPACE 96 | -------------------------------------------------------------------------------- /src/CQPropertyView.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #ifdef CQPROPERTY_VIEW_PALETTE 11 | #include 12 | #endif 13 | #include 14 | #ifdef CQPROPERTY_VIEW_LINE_DASH 15 | #include 16 | #endif 17 | #ifdef CQPROPERTY_VIEW_ANGLE 18 | #include 19 | #endif 20 | #include 21 | 22 | CQPropertyViewMgr * 23 | CQPropertyViewMgr:: 24 | instance() 25 | { 26 | static CQPropertyViewMgr *instance; 27 | 28 | if (! instance) 29 | instance = new CQPropertyViewMgr; 30 | 31 | return instance; 32 | } 33 | 34 | CQPropertyViewMgr:: 35 | CQPropertyViewMgr() 36 | { 37 | editorMgr_ = new CQPropertyViewEditorMgr; 38 | 39 | addType("int" , new CQPropertyViewIntegerType ); 40 | addType("double" , new CQPropertyViewRealType ); 41 | addType("QColor" , new CQPropertyViewColorType ); 42 | addType("QFont" , new CQPropertyViewFontType ); 43 | addType("QPointF" , new CQPropertyViewPointFType ); 44 | addType("QRectF" , new CQPropertyViewRectFType ); 45 | addType("QSizeF" , new CQPropertyViewSizeFType ); 46 | #ifdef CQPROPERTY_VIEW_PALETTE 47 | addType("QPalette" , new CQPropertyViewPaletteType ); 48 | #endif 49 | addType("Qt::Alignment", new CQPropertyViewAlignType ); 50 | #ifdef CQPROPERTY_VIEW_LINE_DASH 51 | addType("CLineDash" , new CQPropertyViewLineDashType); 52 | #endif 53 | #ifdef CQPROPERTY_VIEW_ANGLE 54 | addType("CAngle" , new CQPropertyViewAngleType ); 55 | #endif 56 | } 57 | 58 | CQPropertyViewMgr:: 59 | ~CQPropertyViewMgr() 60 | { 61 | delete editorMgr_; 62 | 63 | for (auto &p : types_) { 64 | auto *type = p.second; 65 | 66 | delete type; 67 | } 68 | } 69 | 70 | void 71 | CQPropertyViewMgr:: 72 | addType(const QString &name, CQPropertyViewType *type) 73 | { 74 | assert(! getType(name)); 75 | 76 | types_[name] = type; 77 | 78 | type->setName(name); 79 | 80 | editorMgr_->setEditor(name, type->getEditor()); 81 | } 82 | 83 | CQPropertyViewType * 84 | CQPropertyViewMgr:: 85 | getType(const QString &name) const 86 | { 87 | auto p = types_.find(name); 88 | 89 | if (p == types_.end()) 90 | return nullptr; 91 | 92 | return (*p).second; 93 | } 94 | 95 | void 96 | CQPropertyViewMgr:: 97 | typeNames(QStringList &names) const 98 | { 99 | for (const auto &pt : types_) 100 | names.push_back(pt.first); 101 | } 102 | 103 | CQPropertyViewEditorFactory * 104 | CQPropertyViewMgr:: 105 | getEditor(const QString &name) const 106 | { 107 | return editorMgr_->getEditor(name); 108 | } 109 | 110 | void 111 | CQPropertyViewMgr:: 112 | setUserName(const QString &typeName, const QString &userName) 113 | { 114 | userNameMap_[typeName] = userName; 115 | } 116 | 117 | QString 118 | CQPropertyViewMgr:: 119 | userName(const QString &name) const 120 | { 121 | auto *type = getType(name); 122 | 123 | if (type) 124 | return type->userName(); 125 | 126 | auto p = userNameMap_.find(name); 127 | 128 | if (p != userNameMap_.end()) 129 | return (*p).second; 130 | 131 | return ""; 132 | } 133 | -------------------------------------------------------------------------------- /src/CQPropertyViewFilter.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | CQPropertyViewFilter:: 8 | CQPropertyViewFilter(CQPropertyViewTree *view) : 9 | view_(view) { 10 | } 11 | 12 | bool 13 | CQPropertyViewFilter:: 14 | filterAcceptsRow(int row, const QModelIndex &parent) const 15 | { 16 | if (filter_.length() == 0) 17 | return true; 18 | 19 | //auto *parentItem = view_->getModelItem(parent, /*map*/false); 20 | //if (! parentItem) return true; 21 | 22 | auto *model = view_->propertyModel(); 23 | 24 | auto child = model->index(row, 0, parent); 25 | 26 | auto *item = view_->getModelItem(child, /*map*/false); 27 | if (! item) return false; 28 | 29 | if (! item->object()) { 30 | if (! anyChildMatch(child)) 31 | return false; 32 | 33 | expand_.insert(child); 34 | 35 | //view_->setExpanded(child, true); 36 | 37 | return true; 38 | } 39 | else { 40 | return acceptsItem(child); 41 | } 42 | } 43 | 44 | bool 45 | CQPropertyViewFilter:: 46 | acceptsItem(const QModelIndex &ind) const 47 | { 48 | auto p = matches_.find(ind); 49 | 50 | if (p != matches_.end()) 51 | return (*p).second; 52 | 53 | auto *item = view_->getModelItem(ind, /*map*/false); 54 | if (! item) return false; 55 | 56 | bool match = true; 57 | 58 | if (item->object()) 59 | match = itemMatch(item); 60 | //std::cerr << "Match: " << (match ? "Y " : "N ") << item->path(".").toStdString() << std::endl; 61 | 62 | matches_[ind] = match; 63 | 64 | return match; 65 | } 66 | 67 | bool 68 | CQPropertyViewFilter:: 69 | itemMatch(CQPropertyViewItem *item) const 70 | { 71 | QString path; 72 | 73 | if (isMatchPath()) 74 | path = item->path(".", /*alias*/true); 75 | else 76 | path = item->aliasName(); 77 | 78 | return regexp_.exactMatch(path); 79 | } 80 | 81 | bool 82 | CQPropertyViewFilter:: 83 | anyChildMatch(const QModelIndex &parent) const 84 | { 85 | auto *model = view_->propertyModel(); 86 | 87 | for (int i = 0; i < model->rowCount(parent); ++i) { 88 | auto child = model->index(i, 0, parent); 89 | 90 | auto *item = view_->getModelItem(child, /*map*/false); 91 | assert(item); 92 | 93 | if (! item->object()) { 94 | if (anyChildMatch(child)) 95 | return true; 96 | } 97 | else { 98 | if (acceptsItem(child)) 99 | return true; 100 | } 101 | } 102 | 103 | return false; 104 | } 105 | 106 | #if 0 107 | void 108 | CQPropertyViewFilter:: 109 | expandMatches() 110 | { 111 | auto *filterModel = view_->filterModel(); 112 | 113 | std::vector inds; 114 | 115 | for (const auto &ind : expand_) { 116 | auto ind1 = filterModel->mapFromSource(ind); 117 | 118 | inds.push_back(ind1); 119 | } 120 | 121 | for (int i = inds.size() - 1; i >= 0; --i) { 122 | view_->setExpanded(inds[i], true); 123 | } 124 | } 125 | #endif 126 | 127 | void 128 | CQPropertyViewFilter:: 129 | setFilter(const QString &filter) 130 | { 131 | matches_.clear(); 132 | expand_ .clear(); 133 | 134 | filter_ = filter; 135 | 136 | if (filter_.length() && filter_[filter_.length() - 1] != '*') 137 | filter_ += "*"; 138 | 139 | if (filter_.length() && filter_[0] != '*') 140 | filter_ = "*" + filter_; 141 | 142 | regexp_ = QRegExp(filter_, Qt::CaseSensitive, QRegExp::Wildcard); 143 | 144 | invalidateFilter(); 145 | //invalidate(); 146 | 147 | view_->expandAll(); 148 | 149 | //expandMatches(); 150 | } 151 | -------------------------------------------------------------------------------- /test/svg/filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | image/svg+xml -------------------------------------------------------------------------------- /test/svg/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | image/svg+xml -------------------------------------------------------------------------------- /include/CQPropertyViewDelegate.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewDelegate_H 2 | #define CQPropertyViewDelegate_H 3 | 4 | #include 5 | //#include 6 | #include 7 | 8 | class CQPropertyViewTree; 9 | class CQPropertyViewItem; 10 | 11 | /*! 12 | * \brief Item Delegate class to handle custom editing of view items 13 | */ 14 | class CQPropertyViewDelegate : public QItemDelegate { 15 | Q_OBJECT 16 | 17 | public: 18 | struct ItemState { 19 | bool inside = false; 20 | bool dirty = false; 21 | }; 22 | 23 | public: 24 | CQPropertyViewDelegate(CQPropertyViewTree *view); 25 | 26 | // Override to create editor 27 | QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, 28 | const QModelIndex &index) const override; 29 | 30 | // Override to get content from editor 31 | void setEditorData(QWidget *editor, const QModelIndex &index) const override; 32 | 33 | void setModelData(QWidget *editor, QAbstractItemModel *model, 34 | const QModelIndex &index) const override; 35 | 36 | void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, 37 | const QModelIndex &index) const override; 38 | 39 | void paint(QPainter *painter, const QStyleOptionViewItem &option, 40 | const QModelIndex &index) const override; 41 | 42 | CQPropertyViewItem *getModelItem(const QModelIndex &index) const; 43 | 44 | QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const override; 45 | 46 | QWidget *createEdit(QWidget *parent, const QString &text) const; 47 | 48 | void drawBackground(QPainter *painter, const QStyleOptionViewItem &option, 49 | const QModelIndex &index, const ItemState &itemState) const; 50 | 51 | void drawCheckInside(QPainter *painter, const QStyleOptionViewItem &option, 52 | bool checked, const QModelIndex &index, const ItemState &itemState) const; 53 | 54 | void drawColor(QPainter *painter, const QStyleOptionViewItem &option, 55 | const QColor &c, const QModelIndex &index, const ItemState &itemState) const; 56 | void drawFont (QPainter *painter, const QStyleOptionViewItem &option, 57 | const QFont &f, const QModelIndex &index, const ItemState &itemState) const; 58 | void drawPoint(QPainter *painter, const QStyleOptionViewItem &option, 59 | const QPointF &p, const QModelIndex &index, const ItemState &itemState) const; 60 | void drawSize (QPainter *painter, const QStyleOptionViewItem &option, 61 | const QSizeF &s, const QModelIndex &index, const ItemState &itemState) const; 62 | void drawRect (QPainter *painter, const QStyleOptionViewItem &option, 63 | const QRectF &r, const QModelIndex &index, const ItemState &itemState) const; 64 | #if 0 65 | void drawAngle(QPainter *painter, const QStyleOptionViewItem &option, 66 | const CAngle &a, const QModelIndex &index, const ItemState &itemState) const; 67 | #endif 68 | void drawString(QPainter *painter, const QStyleOptionViewItem &option, 69 | const QString &str, const QModelIndex &index, const ItemState &itemState) const; 70 | 71 | void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, 72 | const QString &str) const override; 73 | 74 | //--- 75 | 76 | // get/set is editing 77 | bool isEditing() const { return editing_ && editor_; } 78 | void setEditing(bool b) { editing_ = b; } 79 | 80 | // get current editor 81 | QWidget *getEditor() const { return editor_; } 82 | 83 | // get editor index 84 | QModelIndex getEditorIndex() const { return editorIndex_; } 85 | 86 | bool eventFilter(QObject *obj, QEvent *event) override; 87 | 88 | private: 89 | using WidgetP = QPointer; 90 | 91 | CQPropertyViewTree* view_ { nullptr }; //!< parent view 92 | WidgetP editor_; //!< current editor 93 | bool editing_ { false }; //!< is editing 94 | QModelIndex editorIndex_; //!< editor model index 95 | }; 96 | 97 | #endif 98 | -------------------------------------------------------------------------------- /test/CQPropertyViewTest.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewTest_H 2 | #define CQPropertyViewTest_H 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | class CQIconCombo; 12 | class CQPropertyViewModel; 13 | class CQPropertyViewTree; 14 | 15 | //--- 16 | 17 | class Dialog : public QDialog { 18 | Q_OBJECT 19 | 20 | public: 21 | Dialog(); 22 | ~Dialog(); 23 | 24 | private slots: 25 | void filterSlot(); 26 | 27 | private: 28 | QLineEdit* filterEdit_ { nullptr }; 29 | CQIconCombo* filterCombo_ { nullptr }; 30 | CQPropertyViewModel* model_ { nullptr }; 31 | CQPropertyViewTree* view_ { nullptr }; 32 | }; 33 | 34 | //--- 35 | 36 | class Widget : public QFrame { 37 | Q_OBJECT 38 | 39 | Q_PROPERTY(int integer READ getInt WRITE setInt ) 40 | Q_PROPERTY(double real READ getReal WRITE setReal ) 41 | Q_PROPERTY(QString string READ getString WRITE setString ) 42 | Q_PROPERTY(Enum enum READ getEnum WRITE setEnum ) 43 | Q_PROPERTY(QColor color READ color WRITE setColor ) 44 | Q_PROPERTY(QFont font READ font WRITE setFont ) 45 | Q_PROPERTY(QPointF pointf READ pointf WRITE setPointf ) 46 | Q_PROPERTY(QRectF rectf READ rectf WRITE setRectf ) 47 | Q_PROPERTY(QSizeF sizef READ sizef WRITE setSizef ) 48 | Q_PROPERTY(QPalette palette READ palette WRITE setPalette ) 49 | Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment) 50 | Q_PROPERTY(CLineDash lineDash READ getLineDash WRITE setLineDash ) 51 | Q_PROPERTY(CAngle angle READ getAngle WRITE setAngle ) 52 | 53 | Q_ENUMS(Enum) 54 | 55 | public: 56 | enum class Enum { 57 | ONE, 58 | TWO, 59 | THREE 60 | }; 61 | 62 | public: 63 | Widget(); 64 | 65 | void addPropeties(const QString &path, CQPropertyViewTree *tree); 66 | 67 | int getInt() const { return integer_; } 68 | void setInt(int i) { integer_ = i; } 69 | 70 | double getReal() const { return real_; } 71 | void setReal(double r) { real_ = r; } 72 | 73 | const QString &getString() const { return string_; } 74 | void setString(const QString &s) { string_ = s; } 75 | 76 | const Enum &getEnum() const { return enumVal_; } 77 | void setEnum(const Enum &e) { enumVal_ = e; } 78 | 79 | const QColor &color() const { return color_; } 80 | void setColor(const QColor &v) { color_ = v; } 81 | 82 | const QFont &font() const { return font_; } 83 | void setFont(const QFont &v) { font_ = v; } 84 | 85 | const QPointF &pointf() const { return pointf_; } 86 | void setPointf(const QPointF &v) { pointf_ = v; } 87 | 88 | const QRectF &rectf() const { return rectf_; } 89 | void setRectf(const QRectF &v) { rectf_ = v; } 90 | 91 | const QSizeF &sizef() const { return sizef_; } 92 | void setSizef(const QSizeF &v) { sizef_ = v; } 93 | 94 | const QPalette &palette() const { return palette_; } 95 | void setPalette(const QPalette &v) { palette_ = v; } 96 | 97 | const CLineDash &getLineDash() const { return lineDash_; } 98 | void setLineDash(const CLineDash &v) { lineDash_ = v; } 99 | 100 | const CAngle &getAngle() const { return angle_; } 101 | void setAngle(const CAngle &v) { angle_ = v; } 102 | 103 | const Qt::Alignment &alignment() const { return alignment_; } 104 | void setAlignment(const Qt::Alignment &v) { alignment_ = v; } 105 | 106 | QSize sizeHint() const; 107 | 108 | private: 109 | int integer_ { 1 }; 110 | double real_ { 2.3 }; 111 | QString string_ { "test" }; 112 | Enum enumVal_ { Widget::Enum::ONE }; 113 | QColor color_ { Qt::red }; 114 | QFont font_; 115 | QPointF pointf_ { 2, 4 }; 116 | QRectF rectf_ { 1, 1, 4, 4 }; 117 | QSizeF sizef_ { 10, 20 }; 118 | QPalette palette_; 119 | CLineDash lineDash_ { 2, 2 }; 120 | CAngle angle_ { 45 }; 121 | Qt::Alignment alignment_ { Qt::AlignCenter }; 122 | }; 123 | 124 | #endif 125 | -------------------------------------------------------------------------------- /test/CQPropertyViewTest.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | //#include 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | #include 18 | #include 19 | 20 | int 21 | main(int argc, char **argv) 22 | { 23 | CQApp app(argc, argv); 24 | 25 | CQUtil::initProperties(); 26 | 27 | Dialog *dialog = new Dialog; 28 | 29 | dialog->show(); 30 | 31 | return app.exec(); 32 | } 33 | 34 | Dialog:: 35 | Dialog() 36 | { 37 | QHBoxLayout *layout = new QHBoxLayout(this); 38 | layout->setMargin(0); layout->setSpacing(2); 39 | 40 | QSplitter *splitter = new QSplitter; 41 | 42 | splitter->setObjectName("splitter"); 43 | 44 | QStackedWidget *stack = new QStackedWidget; 45 | 46 | stack->setObjectName("stack"); 47 | 48 | Widget *widget1 = new Widget; widget1->setObjectName("widget1"); 49 | Widget *widget2 = new Widget; widget2->setObjectName("widget2"); 50 | Widget *widget3 = new Widget; widget3->setObjectName("widget3"); 51 | 52 | stack->addWidget(widget1); 53 | stack->addWidget(widget2); 54 | stack->addWidget(widget3); 55 | 56 | splitter->addWidget(stack); 57 | 58 | QFrame *viewFrame = new QFrame; 59 | 60 | viewFrame->setObjectName("viewFrame"); 61 | 62 | QVBoxLayout *viewLayout = new QVBoxLayout(viewFrame); 63 | viewLayout->setMargin(0); viewLayout->setSpacing(2); 64 | 65 | //--- 66 | 67 | QFrame *filterFrame = new QFrame; 68 | 69 | filterFrame->setObjectName("filterFrame"); 70 | 71 | viewLayout->addWidget(filterFrame); 72 | 73 | QHBoxLayout *filterLayout = new QHBoxLayout(filterFrame); 74 | 75 | filterEdit_ = new QLineEdit; 76 | 77 | filterEdit_->setObjectName("filterEdit"); 78 | 79 | connect(filterEdit_, SIGNAL(returnPressed()), this, SLOT(filterSlot())); 80 | 81 | filterLayout->addWidget(filterEdit_); 82 | 83 | filterCombo_ = new CQIconCombo; 84 | 85 | filterCombo_->setObjectName("filterCombo"); 86 | 87 | filterCombo_->addItem(CQPixmapCacheInst->getIcon("FILTER"), "Filter"); 88 | filterCombo_->addItem(CQPixmapCacheInst->getIcon("SEARCH"), "Search"); 89 | 90 | filterLayout->addWidget(filterCombo_); 91 | 92 | //--- 93 | 94 | model_ = new CQPropertyViewModel; 95 | 96 | view_ = new CQPropertyViewTree(this, model_); 97 | 98 | //new ModelTest(view_->propertyModel()); 99 | //new ModelTest(view_->filterModel()); 100 | 101 | view_->addProperty("", view_, "mouseHighlight"); 102 | 103 | widget3->addPropeties("widget/widget3", view_); 104 | widget1->addPropeties("widget1", view_); 105 | widget2->addPropeties("widget2", view_); 106 | 107 | viewLayout->addWidget(view_); 108 | 109 | splitter->addWidget(viewFrame); 110 | 111 | layout->addWidget(splitter); 112 | } 113 | 114 | Dialog:: 115 | ~Dialog() 116 | { 117 | delete model_; 118 | } 119 | 120 | void 121 | Dialog:: 122 | filterSlot() 123 | { 124 | if (filterCombo_->currentIndex() == 0) 125 | view_->setFilter(filterEdit_->text()); 126 | else 127 | view_->search(filterEdit_->text()); 128 | } 129 | 130 | //------ 131 | 132 | Widget:: 133 | Widget() 134 | { 135 | } 136 | 137 | void 138 | Widget:: 139 | addPropeties(const QString &path, CQPropertyViewTree *view) 140 | { 141 | view->addProperty(path, this, "integer" ); 142 | view->addProperty(path, this, "real" ); 143 | view->addProperty(path, this, "string" ); 144 | view->addProperty(path, this, "enum" ); 145 | view->addProperty(path, this, "color" ); 146 | view->addProperty(path, this, "font" ); 147 | view->addProperty(path, this, "pointf" ); 148 | view->addProperty(path, this, "rectf" ); 149 | view->addProperty(path, this, "sizef" ); 150 | view->addProperty(path, this, "palette" ); 151 | view->addProperty(path, this, "alignment"); 152 | view->addProperty(path, this, "lineDash" ); 153 | view->addProperty(path, this, "angle" ); 154 | } 155 | 156 | QSize 157 | Widget:: 158 | sizeHint() const 159 | { 160 | return QSize(600, 600); 161 | } 162 | -------------------------------------------------------------------------------- /src/CQPropertyViewRealType.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | CQPropertyViewRealType:: 8 | CQPropertyViewRealType() 9 | { 10 | } 11 | 12 | CQPropertyViewEditorFactory * 13 | CQPropertyViewRealType:: 14 | getEditor() const 15 | { 16 | return new CQPropertyViewRealEditor; 17 | } 18 | 19 | bool 20 | CQPropertyViewRealType:: 21 | setEditorData(CQPropertyViewItem *item, const QVariant &value) 22 | { 23 | return item->setData(value); 24 | } 25 | 26 | void 27 | CQPropertyViewRealType:: 28 | draw(CQPropertyViewItem *, const CQPropertyViewDelegate *delegate, QPainter *painter, 29 | const QStyleOptionViewItem &option, const QModelIndex &index, 30 | const QVariant &value, const ItemState &itemState) 31 | { 32 | delegate->drawString(painter, option, value.toString(), index, itemState); 33 | } 34 | 35 | //------ 36 | 37 | #if 0 38 | #include 39 | #include 40 | #endif 41 | 42 | #include 43 | 44 | CQPropertyViewRealEditor:: 45 | CQPropertyViewRealEditor(double min, double max, double step) : 46 | type_(Type::DoubleSpin), min_(min), max_(max), step_(step) 47 | { 48 | } 49 | 50 | QWidget * 51 | CQPropertyViewRealEditor:: 52 | createEdit(QWidget *parent) 53 | { 54 | #if 0 55 | if (type_ == Type::RealSlider) { 56 | auto *slider = new CQRealSlider(parent); 57 | 58 | slider->setAutoFillBackground(true); 59 | 60 | slider->setMinimum(min_); 61 | slider->setMaximum(max_); 62 | //slider->setDecimals(6); 63 | 64 | slider->setSingleStep(step_); 65 | 66 | return slider; 67 | } 68 | else if (type_ == Type::ComboSlider) { 69 | auto *combo = new CQComboSlider(parent, min_, min_, max_); 70 | 71 | combo->setAutoFillBackground(true); 72 | 73 | return combo; 74 | } 75 | else { 76 | auto *spin = new CQRealSpin(parent); 77 | 78 | spin->setRange(min_, max_); 79 | spin->setSingleStep(step_); 80 | spin->setDecimals(6); 81 | 82 | return spin; 83 | } 84 | #else 85 | auto *spin = new CQRealSpin(parent); 86 | 87 | auto *item = CQPropertyViewMgrInst->editItem(); 88 | 89 | if (item) { 90 | auto vmin = item->minValue(); 91 | auto vmax = item->maxValue(); 92 | 93 | if (vmin.isValid()) { bool ok; double r = vmin.toDouble(&ok); if (ok) min_ = r; } 94 | if (vmax.isValid()) { bool ok; double r = vmax.toDouble(&ok); if (ok) max_ = r; } 95 | } 96 | 97 | spin->setRange(min_, max_); 98 | spin->setSingleStep(step_); 99 | spin->setDecimals(6); 100 | 101 | return spin; 102 | #endif 103 | } 104 | 105 | void 106 | CQPropertyViewRealEditor:: 107 | connect(QWidget *w, QObject *obj, const char *method) 108 | { 109 | #if 0 110 | if (type_ == Type::RealSlider) { 111 | auto *slider = qobject_cast(w); 112 | assert(slider); 113 | 114 | QObject::connect(slider, SIGNAL(valueChanged(double)), obj, method); 115 | } 116 | else if (type_ == Type::ComboSlider) { 117 | auto *combo = qobject_cast(w); 118 | assert(combo); 119 | 120 | QObject::connect(combo, SIGNAL(valueChanged(double)), obj, method); 121 | } 122 | else { 123 | auto *spin = qobject_cast(w); 124 | assert(spin); 125 | 126 | QObject::connect(spin, SIGNAL(valueChanged(double)), obj, method); 127 | } 128 | #else 129 | auto *spin = qobject_cast(w); 130 | assert(spin); 131 | 132 | QObject::connect(spin, SIGNAL(valueChanged(double)), obj, method); 133 | #endif 134 | } 135 | 136 | QVariant 137 | CQPropertyViewRealEditor:: 138 | getValue(QWidget *w) 139 | { 140 | #if 0 141 | if (type_ == Type::RealSlider) { 142 | auto *slider = qobject_cast(w); 143 | assert(slider); 144 | 145 | return QVariant(slider->value()); 146 | } 147 | else if (type_ == Type::ComboSlider) { 148 | auto *combo = qobject_cast(w); 149 | assert(combo); 150 | 151 | return QVariant(combo->value()); 152 | } 153 | else { 154 | auto *spin = qobject_cast(w); 155 | assert(spin); 156 | 157 | return QVariant(spin->value()); 158 | } 159 | #else 160 | auto *spin = qobject_cast(w); 161 | assert(spin); 162 | 163 | return QVariant(spin->value()); 164 | #endif 165 | } 166 | 167 | void 168 | CQPropertyViewRealEditor:: 169 | setValue(QWidget *w, const QVariant &var) 170 | { 171 | #if 0 172 | if (type_ == Type::RealSlider) { 173 | auto *slider = qobject_cast(w); 174 | assert(slider); 175 | 176 | double r = var.toDouble(); 177 | 178 | slider->setValue(r); 179 | } 180 | else if (type_ == Type::ComboSlider) { 181 | auto *combo = qobject_cast(w); 182 | assert(combo); 183 | 184 | double r = var.toDouble(); 185 | 186 | combo->setValue(r); 187 | } 188 | else { 189 | auto *spin = qobject_cast(w); 190 | assert(spin); 191 | 192 | double r = var.toDouble(); 193 | 194 | spin->setValue(r); 195 | } 196 | #else 197 | auto *spin = qobject_cast(w); 198 | assert(spin); 199 | 200 | double r = var.toDouble(); 201 | 202 | spin->setValue(r); 203 | #endif 204 | } 205 | -------------------------------------------------------------------------------- /src/.moc/moc_CQPropertyViewFilter.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'CQPropertyViewFilter.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.13) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include 10 | #include "../../include/CQPropertyViewFilter.h" 11 | #include 12 | #include 13 | #if !defined(Q_MOC_OUTPUT_REVISION) 14 | #error "The header file 'CQPropertyViewFilter.h' doesn't include ." 15 | #elif Q_MOC_OUTPUT_REVISION != 67 16 | #error "This file was generated using the moc from 5.15.13. It" 17 | #error "cannot be used with the include files from this version of Qt." 18 | #error "(The moc has changed too much.)" 19 | #endif 20 | 21 | QT_BEGIN_MOC_NAMESPACE 22 | QT_WARNING_PUSH 23 | QT_WARNING_DISABLE_DEPRECATED 24 | struct qt_meta_stringdata_CQPropertyViewFilter_t { 25 | QByteArrayData data[4]; 26 | char stringdata0[50]; 27 | }; 28 | #define QT_MOC_LITERAL(idx, ofs, len) \ 29 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 30 | qptrdiff(offsetof(qt_meta_stringdata_CQPropertyViewFilter_t, stringdata0) + ofs \ 31 | - idx * sizeof(QByteArrayData)) \ 32 | ) 33 | static const qt_meta_stringdata_CQPropertyViewFilter_t qt_meta_stringdata_CQPropertyViewFilter = { 34 | { 35 | QT_MOC_LITERAL(0, 0, 20), // "CQPropertyViewFilter" 36 | QT_MOC_LITERAL(1, 21, 6), // "filter" 37 | QT_MOC_LITERAL(2, 28, 9), // "matchPath" 38 | QT_MOC_LITERAL(3, 38, 11) // "matchParent" 39 | 40 | }, 41 | "CQPropertyViewFilter\0filter\0matchPath\0" 42 | "matchParent" 43 | }; 44 | #undef QT_MOC_LITERAL 45 | 46 | static const uint qt_meta_data_CQPropertyViewFilter[] = { 47 | 48 | // content: 49 | 8, // revision 50 | 0, // classname 51 | 0, 0, // classinfo 52 | 0, 0, // methods 53 | 3, 14, // properties 54 | 0, 0, // enums/sets 55 | 0, 0, // constructors 56 | 0, // flags 57 | 0, // signalCount 58 | 59 | // properties: name, type, flags 60 | 1, QMetaType::QString, 0x00095103, 61 | 2, QMetaType::Bool, 0x00095103, 62 | 3, QMetaType::Bool, 0x00095103, 63 | 64 | 0 // eod 65 | }; 66 | 67 | void CQPropertyViewFilter::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 68 | { 69 | 70 | #ifndef QT_NO_PROPERTIES 71 | if (_c == QMetaObject::ReadProperty) { 72 | auto *_t = static_cast(_o); 73 | (void)_t; 74 | void *_v = _a[0]; 75 | switch (_id) { 76 | case 0: *reinterpret_cast< QString*>(_v) = _t->filter(); break; 77 | case 1: *reinterpret_cast< bool*>(_v) = _t->isMatchPath(); break; 78 | case 2: *reinterpret_cast< bool*>(_v) = _t->isMatchParent(); break; 79 | default: break; 80 | } 81 | } else if (_c == QMetaObject::WriteProperty) { 82 | auto *_t = static_cast(_o); 83 | (void)_t; 84 | void *_v = _a[0]; 85 | switch (_id) { 86 | case 0: _t->setFilter(*reinterpret_cast< QString*>(_v)); break; 87 | case 1: _t->setMatchPath(*reinterpret_cast< bool*>(_v)); break; 88 | case 2: _t->setMatchParent(*reinterpret_cast< bool*>(_v)); break; 89 | default: break; 90 | } 91 | } else if (_c == QMetaObject::ResetProperty) { 92 | } 93 | #endif // QT_NO_PROPERTIES 94 | (void)_o; 95 | (void)_id; 96 | (void)_c; 97 | (void)_a; 98 | } 99 | 100 | QT_INIT_METAOBJECT const QMetaObject CQPropertyViewFilter::staticMetaObject = { { 101 | QMetaObject::SuperData::link(), 102 | qt_meta_stringdata_CQPropertyViewFilter.data, 103 | qt_meta_data_CQPropertyViewFilter, 104 | qt_static_metacall, 105 | nullptr, 106 | nullptr 107 | } }; 108 | 109 | 110 | const QMetaObject *CQPropertyViewFilter::metaObject() const 111 | { 112 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 113 | } 114 | 115 | void *CQPropertyViewFilter::qt_metacast(const char *_clname) 116 | { 117 | if (!_clname) return nullptr; 118 | if (!strcmp(_clname, qt_meta_stringdata_CQPropertyViewFilter.stringdata0)) 119 | return static_cast(this); 120 | return QSortFilterProxyModel::qt_metacast(_clname); 121 | } 122 | 123 | int CQPropertyViewFilter::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 124 | { 125 | _id = QSortFilterProxyModel::qt_metacall(_c, _id, _a); 126 | if (_id < 0) 127 | return _id; 128 | 129 | #ifndef QT_NO_PROPERTIES 130 | if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty 131 | || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { 132 | qt_static_metacall(this, _c, _id, _a); 133 | _id -= 3; 134 | } else if (_c == QMetaObject::QueryPropertyDesignable) { 135 | _id -= 3; 136 | } else if (_c == QMetaObject::QueryPropertyScriptable) { 137 | _id -= 3; 138 | } else if (_c == QMetaObject::QueryPropertyStored) { 139 | _id -= 3; 140 | } else if (_c == QMetaObject::QueryPropertyEditable) { 141 | _id -= 3; 142 | } else if (_c == QMetaObject::QueryPropertyUser) { 143 | _id -= 3; 144 | } 145 | #endif // QT_NO_PROPERTIES 146 | return _id; 147 | } 148 | QT_WARNING_POP 149 | QT_END_MOC_NAMESPACE 150 | -------------------------------------------------------------------------------- /include/CQPropertyViewModel.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewModel_H 2 | #define CQPropertyViewModel_H 3 | 4 | #include 5 | 6 | #include 7 | #include 8 | 9 | class CQPropertyViewTree; 10 | class CQPropertyViewItem; 11 | 12 | /*! 13 | * \brief Property view model 14 | */ 15 | class CQPropertyViewModel : public QAbstractItemModel { 16 | Q_OBJECT 17 | 18 | Q_PROPERTY(bool showHidden READ isShowHidden WRITE setShowHidden) 19 | Q_PROPERTY(bool autoUpdate READ isAutoUpdate WRITE setAutoUpdate) 20 | 21 | public: 22 | using NameValues = std::map; 23 | using Items = std::vector; 24 | 25 | public: 26 | CQPropertyViewModel(); 27 | ~CQPropertyViewModel(); 28 | 29 | CQPropertyViewItem *root() const; 30 | 31 | //--- 32 | 33 | CQPropertyViewTree *tree() const { return tree_; } 34 | void setTree(CQPropertyViewTree *tree) { tree_ = tree; } 35 | 36 | //--- 37 | 38 | //! get/set show hidden 39 | bool isShowHidden() const { return showHidden_; } 40 | void setShowHidden(bool b) { showHidden_ = b; } 41 | 42 | //! get/set auto update 43 | bool isAutoUpdate() const { return autoUpdate_; } 44 | void setAutoUpdate(bool b) { autoUpdate_ = b; } 45 | 46 | //--- 47 | 48 | int columnCount(const QModelIndex &parent=QModelIndex()) const override; 49 | 50 | int rowCount(const QModelIndex &parent=QModelIndex()) const override; 51 | 52 | QVariant headerData(int section, Qt::Orientation orientation, int role) const override; 53 | 54 | QVariant data(const QModelIndex &index, int role) const override; 55 | 56 | bool setData(const QModelIndex &index, const QVariant &value, int role) override; 57 | 58 | QModelIndex index(int row, int column, const QModelIndex &parent) const override; 59 | 60 | QModelIndex parent(const QModelIndex &index) const override; 61 | 62 | Qt::ItemFlags flags(const QModelIndex &index) const override; 63 | 64 | //--- 65 | 66 | void clear(); 67 | 68 | CQPropertyViewItem *addProperty(const QString &path, QObject *object, const QString &name, 69 | const QString &alias=""); 70 | 71 | bool setProperty(QObject *object, const QString &path, const QVariant &value); 72 | bool getProperty(const QObject *object, const QString &path, QVariant &value) const; 73 | 74 | bool getTclProperty(const QObject *object, const QString &path, QVariant &value) const; 75 | 76 | void removeProperties(const QString &path, QObject *object=nullptr); 77 | 78 | void hideProperty(const QString &path, const QObject *object); 79 | 80 | bool nameToPath(const QObject *obj, const QString &name, QString &path) const; 81 | 82 | void setObjectRoot(const QString &path, QObject *obj); 83 | 84 | const CQPropertyViewItem *propertyItem(const QObject *object, const QString &path, 85 | bool hidden=false) const; 86 | CQPropertyViewItem *propertyItem(QObject *object, const QString &path, bool hidden=false); 87 | 88 | CQPropertyViewItem *item(const QModelIndex &index, bool &ok) const; 89 | CQPropertyViewItem *item(const QModelIndex &index) const; 90 | 91 | QModelIndex indexFromItem(CQPropertyViewItem *item, int column) const; 92 | 93 | void refresh(); 94 | void reset(); 95 | 96 | void objectNames(const QObject *object, QStringList &names, bool hidden=false) const; 97 | 98 | void getChangedNameValues(NameValues &nameValues, bool tcl=false) const; 99 | 100 | void getChangedNameValues(const QObject *object, NameValues &nameValues, bool tcl=false) const; 101 | 102 | void getChangedNameValues(const QObject *root, const QObject *object, 103 | NameValues &nameValues, bool tcl=false) const; 104 | 105 | //--- 106 | 107 | void updateDirty(); 108 | 109 | void getDirtyItems(CQPropertyViewItem *parent, Items &items) const; 110 | 111 | public: 112 | using Children = std::vector; 113 | 114 | int numItemChildren(CQPropertyViewItem *item, bool hidden=false) const; 115 | 116 | const Children &itemChildren(CQPropertyViewItem *item, bool hidden=false) const; 117 | 118 | CQPropertyViewItem *itemChild(CQPropertyViewItem *item, int i, bool hidden=false) const; 119 | 120 | private: 121 | CQPropertyViewItem *getNamedItem(CQPropertyViewItem *item, const QString &name) const; 122 | 123 | const CQPropertyViewItem *propertyItem(const QObject *object, const QString &path, 124 | QChar splitChar, bool create, bool alias, 125 | bool hidden) const; 126 | CQPropertyViewItem *propertyItem(QObject *object, const QString &path, 127 | QChar splitChar, bool create, bool alias, bool hidden); 128 | 129 | const CQPropertyViewItem *hierItem(const QStringList &pathPaths, bool create=false, 130 | bool alias=false, bool hidden=false) const; 131 | CQPropertyViewItem *hierItem(const QStringList &pathPaths, bool create=false, 132 | bool alias=false, bool hidden=false); 133 | 134 | CQPropertyViewItem *hierItem(CQPropertyViewItem *parentRow, const QStringList &pathPaths, 135 | bool create=false, bool alias=false, bool hidden=false); 136 | 137 | CQPropertyViewItem *objectItem(const QObject *obj) const; 138 | 139 | CQPropertyViewItem *objectItem(CQPropertyViewItem *parent, const QObject *obj) const; 140 | 141 | void itemNames(CQPropertyViewItem *rootItem, const QObject *object, 142 | CQPropertyViewItem *item, QStringList &names, bool hidden=false) const; 143 | 144 | void getChangedItemNameValues(CQPropertyViewItem *rootItem, const QObject *object, 145 | CQPropertyViewItem *item, NameValues &nameValues, 146 | bool tcl=false) const; 147 | 148 | void addNameValue(CQPropertyViewItem *rootItem, CQPropertyViewItem *item, 149 | NameValues &nameValues, bool tcl=false) const; 150 | 151 | Q_SIGNALS: 152 | void valueChanged(QObject *, const QString &); 153 | 154 | private: 155 | CQPropertyViewTree* tree_ { nullptr }; //!< parent tree 156 | bool showHidden_ { false }; //!< show hidden properties 157 | bool autoUpdate_ { true }; //!< auto update 158 | CQPropertyViewItem *root_ { nullptr }; //!< root item 159 | }; 160 | 161 | #endif 162 | -------------------------------------------------------------------------------- /src/.moc/moc_CQPropertyViewModel.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'CQPropertyViewModel.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.13) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include 10 | #include "../../include/CQPropertyViewModel.h" 11 | #include 12 | #include 13 | #if !defined(Q_MOC_OUTPUT_REVISION) 14 | #error "The header file 'CQPropertyViewModel.h' doesn't include ." 15 | #elif Q_MOC_OUTPUT_REVISION != 67 16 | #error "This file was generated using the moc from 5.15.13. It" 17 | #error "cannot be used with the include files from this version of Qt." 18 | #error "(The moc has changed too much.)" 19 | #endif 20 | 21 | QT_BEGIN_MOC_NAMESPACE 22 | QT_WARNING_PUSH 23 | QT_WARNING_DISABLE_DEPRECATED 24 | struct qt_meta_stringdata_CQPropertyViewModel_t { 25 | QByteArrayData data[5]; 26 | char stringdata0[56]; 27 | }; 28 | #define QT_MOC_LITERAL(idx, ofs, len) \ 29 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 30 | qptrdiff(offsetof(qt_meta_stringdata_CQPropertyViewModel_t, stringdata0) + ofs \ 31 | - idx * sizeof(QByteArrayData)) \ 32 | ) 33 | static const qt_meta_stringdata_CQPropertyViewModel_t qt_meta_stringdata_CQPropertyViewModel = { 34 | { 35 | QT_MOC_LITERAL(0, 0, 19), // "CQPropertyViewModel" 36 | QT_MOC_LITERAL(1, 20, 12), // "valueChanged" 37 | QT_MOC_LITERAL(2, 33, 0), // "" 38 | QT_MOC_LITERAL(3, 34, 10), // "showHidden" 39 | QT_MOC_LITERAL(4, 45, 10) // "autoUpdate" 40 | 41 | }, 42 | "CQPropertyViewModel\0valueChanged\0\0" 43 | "showHidden\0autoUpdate" 44 | }; 45 | #undef QT_MOC_LITERAL 46 | 47 | static const uint qt_meta_data_CQPropertyViewModel[] = { 48 | 49 | // content: 50 | 8, // revision 51 | 0, // classname 52 | 0, 0, // classinfo 53 | 1, 14, // methods 54 | 2, 24, // properties 55 | 0, 0, // enums/sets 56 | 0, 0, // constructors 57 | 0, // flags 58 | 1, // signalCount 59 | 60 | // signals: name, argc, parameters, tag, flags 61 | 1, 2, 19, 2, 0x06 /* Public */, 62 | 63 | // signals: parameters 64 | QMetaType::Void, QMetaType::QObjectStar, QMetaType::QString, 2, 2, 65 | 66 | // properties: name, type, flags 67 | 3, QMetaType::Bool, 0x00095103, 68 | 4, QMetaType::Bool, 0x00095103, 69 | 70 | 0 // eod 71 | }; 72 | 73 | void CQPropertyViewModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 74 | { 75 | if (_c == QMetaObject::InvokeMetaMethod) { 76 | auto *_t = static_cast(_o); 77 | (void)_t; 78 | switch (_id) { 79 | case 0: _t->valueChanged((*reinterpret_cast< QObject*(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; 80 | default: ; 81 | } 82 | } else if (_c == QMetaObject::IndexOfMethod) { 83 | int *result = reinterpret_cast(_a[0]); 84 | { 85 | using _t = void (CQPropertyViewModel::*)(QObject * , const QString & ); 86 | if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&CQPropertyViewModel::valueChanged)) { 87 | *result = 0; 88 | return; 89 | } 90 | } 91 | } 92 | #ifndef QT_NO_PROPERTIES 93 | else if (_c == QMetaObject::ReadProperty) { 94 | auto *_t = static_cast(_o); 95 | (void)_t; 96 | void *_v = _a[0]; 97 | switch (_id) { 98 | case 0: *reinterpret_cast< bool*>(_v) = _t->isShowHidden(); break; 99 | case 1: *reinterpret_cast< bool*>(_v) = _t->isAutoUpdate(); break; 100 | default: break; 101 | } 102 | } else if (_c == QMetaObject::WriteProperty) { 103 | auto *_t = static_cast(_o); 104 | (void)_t; 105 | void *_v = _a[0]; 106 | switch (_id) { 107 | case 0: _t->setShowHidden(*reinterpret_cast< bool*>(_v)); break; 108 | case 1: _t->setAutoUpdate(*reinterpret_cast< bool*>(_v)); break; 109 | default: break; 110 | } 111 | } else if (_c == QMetaObject::ResetProperty) { 112 | } 113 | #endif // QT_NO_PROPERTIES 114 | } 115 | 116 | QT_INIT_METAOBJECT const QMetaObject CQPropertyViewModel::staticMetaObject = { { 117 | QMetaObject::SuperData::link(), 118 | qt_meta_stringdata_CQPropertyViewModel.data, 119 | qt_meta_data_CQPropertyViewModel, 120 | qt_static_metacall, 121 | nullptr, 122 | nullptr 123 | } }; 124 | 125 | 126 | const QMetaObject *CQPropertyViewModel::metaObject() const 127 | { 128 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 129 | } 130 | 131 | void *CQPropertyViewModel::qt_metacast(const char *_clname) 132 | { 133 | if (!_clname) return nullptr; 134 | if (!strcmp(_clname, qt_meta_stringdata_CQPropertyViewModel.stringdata0)) 135 | return static_cast(this); 136 | return QAbstractItemModel::qt_metacast(_clname); 137 | } 138 | 139 | int CQPropertyViewModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 140 | { 141 | _id = QAbstractItemModel::qt_metacall(_c, _id, _a); 142 | if (_id < 0) 143 | return _id; 144 | if (_c == QMetaObject::InvokeMetaMethod) { 145 | if (_id < 1) 146 | qt_static_metacall(this, _c, _id, _a); 147 | _id -= 1; 148 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 149 | if (_id < 1) 150 | *reinterpret_cast(_a[0]) = -1; 151 | _id -= 1; 152 | } 153 | #ifndef QT_NO_PROPERTIES 154 | else if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty 155 | || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { 156 | qt_static_metacall(this, _c, _id, _a); 157 | _id -= 2; 158 | } else if (_c == QMetaObject::QueryPropertyDesignable) { 159 | _id -= 2; 160 | } else if (_c == QMetaObject::QueryPropertyScriptable) { 161 | _id -= 2; 162 | } else if (_c == QMetaObject::QueryPropertyStored) { 163 | _id -= 2; 164 | } else if (_c == QMetaObject::QueryPropertyEditable) { 165 | _id -= 2; 166 | } else if (_c == QMetaObject::QueryPropertyUser) { 167 | _id -= 2; 168 | } 169 | #endif // QT_NO_PROPERTIES 170 | return _id; 171 | } 172 | 173 | // SIGNAL 0 174 | void CQPropertyViewModel::valueChanged(QObject * _t1, const QString & _t2) 175 | { 176 | void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))), const_cast(reinterpret_cast(std::addressof(_t2))) }; 177 | QMetaObject::activate(this, &staticMetaObject, 0, _a); 178 | } 179 | QT_WARNING_POP 180 | QT_END_MOC_NAMESPACE 181 | -------------------------------------------------------------------------------- /include/CQPropertyViewTree.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewTree_H 2 | #define CQPropertyViewTree_H 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | 10 | class CQPropertyViewModel; 11 | class CQPropertyViewItem; 12 | class CQPropertyViewFilter; 13 | class CQPropertyViewDelegate; 14 | class CQHeaderView; 15 | 16 | /*! 17 | * \brief Property view tree view 18 | */ 19 | class CQPropertyViewTree : public QTreeView { 20 | Q_OBJECT 21 | 22 | Q_PROPERTY(bool itemMenu READ isItemMenu WRITE setItemMenu ) 23 | Q_PROPERTY(bool showHidden READ isShowHidden WRITE setShowHidden ) 24 | Q_PROPERTY(bool mouseHighlight READ isMouseHighlight WRITE setMouseHighlight) 25 | Q_PROPERTY(bool resizeOnShow READ isResizeOnShow WRITE setResizeOnShow ) 26 | Q_PROPERTY(bool resizeOnExpand READ isResizeOnExpand WRITE setResizeOnExpand) 27 | 28 | public: 29 | using Items = std::vector; 30 | using Objs = std::vector; 31 | 32 | public: 33 | CQPropertyViewTree(QWidget *parent=nullptr); 34 | CQPropertyViewTree(QWidget *parent, CQPropertyViewModel *model); 35 | 36 | virtual ~CQPropertyViewTree(); 37 | 38 | CQPropertyViewModel *propertyModel() const { return model_; } 39 | void setPropertyModel(CQPropertyViewModel *model); 40 | 41 | CQPropertyViewFilter *filterModel() const { return filter_; } 42 | 43 | void clear(); 44 | 45 | void addProperty(const QString &path, QObject *obj, 46 | const QString &name, const QString &alias=""); 47 | 48 | bool setProperty(QObject *object, const QString &path, const QVariant &value); 49 | bool getProperty(const QObject *object, const QString &path, QVariant &value) const; 50 | 51 | void selectObject(const QObject *obj); 52 | 53 | void deselectAllObjects(); 54 | 55 | bool setCurrentProperty(QObject *object, const QString &path); 56 | 57 | void getSelectedObjects(Objs &objs); 58 | 59 | bool isItemMenu() const { return itemMenu_; } 60 | void setItemMenu(bool b) { itemMenu_ = b; } 61 | 62 | bool isShowHidden() const; 63 | 64 | bool isMouseHighlight() const { return mouseHighlight_; } 65 | void setMouseHighlight(bool b); 66 | 67 | bool isResizeOnShow() const { return resizeOnShow_; } 68 | void setResizeOnShow(bool b) { resizeOnShow_ = b; } 69 | 70 | bool isResizeOnExpand() const { return resizeOnExpand_; } 71 | void setResizeOnExpand(bool b) { resizeOnExpand_ = b; } 72 | 73 | void setMouseInd(const QModelIndex &i); 74 | void unsetMouseInd(); 75 | bool isMouseInd(const QModelIndex &i); 76 | 77 | CQPropertyViewItem *getModelItem(const QModelIndex &index, bool map=true) const; 78 | 79 | void resizeColumns(); 80 | 81 | void expandAll(CQPropertyViewItem *item); 82 | void collapseAll(CQPropertyViewItem *item); 83 | 84 | void scrollToItem(CQPropertyViewItem *item); 85 | 86 | void expandItem(CQPropertyViewItem *item); 87 | void collapseItem(CQPropertyViewItem *item); 88 | 89 | void selectItem(CQPropertyViewItem *item, bool selected); 90 | 91 | void editItem(CQPropertyViewItem *item); 92 | 93 | void closeCurrentEditor(); 94 | 95 | virtual void addMenuItems(QMenu *menu); 96 | 97 | void addStandardMenuItems(QMenu *menu); 98 | 99 | CQPropertyViewItem *menuItem() const { return menuItem_; } 100 | 101 | virtual void initEditor(QWidget *) { } 102 | 103 | Q_SIGNALS: 104 | void valueChanged(QObject *, const QString &); 105 | 106 | void itemClicked( QObject *obj, const QString &path); 107 | void itemSelected(QObject *obj, const QString &path); 108 | 109 | void menuExec(QObject *obj, const QPoint &gpos); 110 | 111 | void startUpdate(); 112 | void endUpdate(); 113 | 114 | public Q_SLOTS: 115 | void redraw(); 116 | 117 | void expandAll(); 118 | void collapseAll(); 119 | 120 | void expandSelected(); 121 | 122 | void setShowHidden(bool); 123 | 124 | void setFilter(const QString &filter); 125 | void search(const QString &text); 126 | 127 | void copySlot() const; 128 | 129 | void printSlot() const; 130 | void printChangedSlot() const; 131 | 132 | void closeEditorSlot(); 133 | 134 | protected Q_SLOTS: 135 | void modelResetSlot(); 136 | 137 | void itemClickedSlot(const QModelIndex &index); 138 | 139 | void expandSlot(const QModelIndex &); 140 | 141 | void itemSelectionSlot(); 142 | 143 | void customContextMenuSlot(const QPoint &pos); 144 | 145 | void closeEditorSlot(QWidget *, QAbstractItemDelegate::EndEditHint); 146 | 147 | void autoUpdateSlot(bool); 148 | 149 | void updateDirtySlot(); 150 | 151 | protected: 152 | void init(); 153 | 154 | void copyAt(const QPoint &p, bool html) const; 155 | 156 | bool selectObject(CQPropertyViewItem *item, const QObject *obj); 157 | 158 | void getItemData(CQPropertyViewItem *item, QObject* &obj, QString &path); 159 | 160 | void searchItemTree(CQPropertyViewItem *item, const QRegExp ®exp, Items &items); 161 | 162 | void expandItemTree (CQPropertyViewItem *item); 163 | void collapseItemTree(CQPropertyViewItem *item); 164 | 165 | //--- 166 | 167 | void saveState(); 168 | 169 | void restoreState(); 170 | 171 | //--- 172 | 173 | void showContextMenu(QObject *obj, const QPoint &globalPos); 174 | 175 | void mouseMoveEvent(QMouseEvent *) override; 176 | 177 | void leaveEvent(QEvent *) override; 178 | 179 | void keyPressEvent(QKeyEvent *ke) override; 180 | 181 | void showEvent(QShowEvent *e) override; 182 | 183 | void resizeEvent(QResizeEvent *e) override; 184 | 185 | QModelIndex indexFromItem(CQPropertyViewItem *item, int column, bool map=false) const; 186 | 187 | private: 188 | using ItemPath = QStringList; 189 | using ItemPaths = std::vector; 190 | using DepthItemPaths = std::map; 191 | 192 | struct StateData { 193 | ItemPath topItem; 194 | DepthItemPaths expandPaths; 195 | QModelIndex topIndex; 196 | }; 197 | 198 | void saveState1 (const QModelIndex &parent, StateData &stateData, int depth); 199 | void restoreState1(const QModelIndex &parent, StateData &stateData, int depth); 200 | 201 | void itemPath(const QModelIndex &ind, ItemPath &path) const; 202 | 203 | //void printPath(const ItemPath &path) const; 204 | 205 | private: 206 | CQHeaderView* header_ { nullptr }; 207 | CQPropertyViewModel* model_ { nullptr }; 208 | bool modelAllocated_ { false }; 209 | CQPropertyViewFilter* filter_ { nullptr }; 210 | CQPropertyViewDelegate* delegate_ { nullptr }; 211 | bool itemMenu_ { false }; 212 | bool mouseHighlight_ { false }; 213 | bool resizeOnShow_ { true }; 214 | bool resizeOnExpand_ { true }; 215 | bool hasMouseInd_ { false }; 216 | bool shown_ { false }; 217 | QModelIndex mouseInd_; 218 | CQPropertyViewItem* menuItem_ { nullptr }; 219 | QPoint menuPos_; 220 | StateData stateData_; 221 | }; 222 | 223 | #endif 224 | -------------------------------------------------------------------------------- /src/.moc/moc_CQPropertyViewItem.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'CQPropertyViewItem.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.13) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include 10 | #include "../../include/CQPropertyViewItem.h" 11 | #include 12 | #include 13 | #if !defined(Q_MOC_OUTPUT_REVISION) 14 | #error "The header file 'CQPropertyViewItem.h' doesn't include ." 15 | #elif Q_MOC_OUTPUT_REVISION != 67 16 | #error "This file was generated using the moc from 5.15.13. It" 17 | #error "cannot be used with the include files from this version of Qt." 18 | #error "(The moc has changed too much.)" 19 | #endif 20 | 21 | QT_BEGIN_MOC_NAMESPACE 22 | QT_WARNING_PUSH 23 | QT_WARNING_DISABLE_DEPRECATED 24 | struct qt_meta_stringdata_CQPropertyViewItem_t { 25 | QByteArrayData data[11]; 26 | char stringdata0[89]; 27 | }; 28 | #define QT_MOC_LITERAL(idx, ofs, len) \ 29 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 30 | qptrdiff(offsetof(qt_meta_stringdata_CQPropertyViewItem_t, stringdata0) + ofs \ 31 | - idx * sizeof(QByteArrayData)) \ 32 | ) 33 | static const qt_meta_stringdata_CQPropertyViewItem_t qt_meta_stringdata_CQPropertyViewItem = { 34 | { 35 | QT_MOC_LITERAL(0, 0, 18), // "CQPropertyViewItem" 36 | QT_MOC_LITERAL(1, 19, 12), // "valueChanged" 37 | QT_MOC_LITERAL(2, 32, 0), // "" 38 | QT_MOC_LITERAL(3, 33, 3), // "obj" 39 | QT_MOC_LITERAL(4, 37, 4), // "name" 40 | QT_MOC_LITERAL(5, 42, 11), // "updateValue" 41 | QT_MOC_LITERAL(6, 54, 5), // "alias" 42 | QT_MOC_LITERAL(7, 60, 8), // "editable" 43 | QT_MOC_LITERAL(8, 69, 6), // "hidden" 44 | QT_MOC_LITERAL(9, 76, 6), // "inside" 45 | QT_MOC_LITERAL(10, 83, 5) // "dirty" 46 | 47 | }, 48 | "CQPropertyViewItem\0valueChanged\0\0obj\0" 49 | "name\0updateValue\0alias\0editable\0hidden\0" 50 | "inside\0dirty" 51 | }; 52 | #undef QT_MOC_LITERAL 53 | 54 | static const uint qt_meta_data_CQPropertyViewItem[] = { 55 | 56 | // content: 57 | 8, // revision 58 | 0, // classname 59 | 0, 0, // classinfo 60 | 2, 14, // methods 61 | 6, 30, // properties 62 | 0, 0, // enums/sets 63 | 0, 0, // constructors 64 | 0, // flags 65 | 1, // signalCount 66 | 67 | // signals: name, argc, parameters, tag, flags 68 | 1, 2, 24, 2, 0x06 /* Public */, 69 | 70 | // slots: name, argc, parameters, tag, flags 71 | 5, 0, 29, 2, 0x08 /* Private */, 72 | 73 | // signals: parameters 74 | QMetaType::Void, QMetaType::QObjectStar, QMetaType::QString, 3, 4, 75 | 76 | // slots: parameters 77 | QMetaType::Void, 78 | 79 | // properties: name, type, flags 80 | 4, QMetaType::QString, 0x00095103, 81 | 6, QMetaType::QString, 0x00095103, 82 | 7, QMetaType::Bool, 0x00095103, 83 | 8, QMetaType::Bool, 0x00095103, 84 | 9, QMetaType::Bool, 0x00095103, 85 | 10, QMetaType::Bool, 0x00095103, 86 | 87 | 0 // eod 88 | }; 89 | 90 | void CQPropertyViewItem::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 91 | { 92 | if (_c == QMetaObject::InvokeMetaMethod) { 93 | auto *_t = static_cast(_o); 94 | (void)_t; 95 | switch (_id) { 96 | case 0: _t->valueChanged((*reinterpret_cast< QObject*(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; 97 | case 1: _t->updateValue(); break; 98 | default: ; 99 | } 100 | } else if (_c == QMetaObject::IndexOfMethod) { 101 | int *result = reinterpret_cast(_a[0]); 102 | { 103 | using _t = void (CQPropertyViewItem::*)(QObject * , const QString & ); 104 | if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&CQPropertyViewItem::valueChanged)) { 105 | *result = 0; 106 | return; 107 | } 108 | } 109 | } 110 | #ifndef QT_NO_PROPERTIES 111 | else if (_c == QMetaObject::ReadProperty) { 112 | auto *_t = static_cast(_o); 113 | (void)_t; 114 | void *_v = _a[0]; 115 | switch (_id) { 116 | case 0: *reinterpret_cast< QString*>(_v) = _t->name(); break; 117 | case 1: *reinterpret_cast< QString*>(_v) = _t->alias(); break; 118 | case 2: *reinterpret_cast< bool*>(_v) = _t->isEditable(); break; 119 | case 3: *reinterpret_cast< bool*>(_v) = _t->isHidden(); break; 120 | case 4: *reinterpret_cast< bool*>(_v) = _t->isInside(); break; 121 | case 5: *reinterpret_cast< bool*>(_v) = _t->isDirty(); break; 122 | default: break; 123 | } 124 | } else if (_c == QMetaObject::WriteProperty) { 125 | auto *_t = static_cast(_o); 126 | (void)_t; 127 | void *_v = _a[0]; 128 | switch (_id) { 129 | case 0: _t->setName(*reinterpret_cast< QString*>(_v)); break; 130 | case 1: _t->setAlias(*reinterpret_cast< QString*>(_v)); break; 131 | case 2: _t->setEditable(*reinterpret_cast< bool*>(_v)); break; 132 | case 3: _t->setHidden(*reinterpret_cast< bool*>(_v)); break; 133 | case 4: _t->setInside(*reinterpret_cast< bool*>(_v)); break; 134 | case 5: _t->setDirty(*reinterpret_cast< bool*>(_v)); break; 135 | default: break; 136 | } 137 | } else if (_c == QMetaObject::ResetProperty) { 138 | } 139 | #endif // QT_NO_PROPERTIES 140 | } 141 | 142 | QT_INIT_METAOBJECT const QMetaObject CQPropertyViewItem::staticMetaObject = { { 143 | QMetaObject::SuperData::link(), 144 | qt_meta_stringdata_CQPropertyViewItem.data, 145 | qt_meta_data_CQPropertyViewItem, 146 | qt_static_metacall, 147 | nullptr, 148 | nullptr 149 | } }; 150 | 151 | 152 | const QMetaObject *CQPropertyViewItem::metaObject() const 153 | { 154 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 155 | } 156 | 157 | void *CQPropertyViewItem::qt_metacast(const char *_clname) 158 | { 159 | if (!_clname) return nullptr; 160 | if (!strcmp(_clname, qt_meta_stringdata_CQPropertyViewItem.stringdata0)) 161 | return static_cast(this); 162 | return QObject::qt_metacast(_clname); 163 | } 164 | 165 | int CQPropertyViewItem::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 166 | { 167 | _id = QObject::qt_metacall(_c, _id, _a); 168 | if (_id < 0) 169 | return _id; 170 | if (_c == QMetaObject::InvokeMetaMethod) { 171 | if (_id < 2) 172 | qt_static_metacall(this, _c, _id, _a); 173 | _id -= 2; 174 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 175 | if (_id < 2) 176 | *reinterpret_cast(_a[0]) = -1; 177 | _id -= 2; 178 | } 179 | #ifndef QT_NO_PROPERTIES 180 | else if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty 181 | || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { 182 | qt_static_metacall(this, _c, _id, _a); 183 | _id -= 6; 184 | } else if (_c == QMetaObject::QueryPropertyDesignable) { 185 | _id -= 6; 186 | } else if (_c == QMetaObject::QueryPropertyScriptable) { 187 | _id -= 6; 188 | } else if (_c == QMetaObject::QueryPropertyStored) { 189 | _id -= 6; 190 | } else if (_c == QMetaObject::QueryPropertyEditable) { 191 | _id -= 6; 192 | } else if (_c == QMetaObject::QueryPropertyUser) { 193 | _id -= 6; 194 | } 195 | #endif // QT_NO_PROPERTIES 196 | return _id; 197 | } 198 | 199 | // SIGNAL 0 200 | void CQPropertyViewItem::valueChanged(QObject * _t1, const QString & _t2) 201 | { 202 | void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))), const_cast(reinterpret_cast(std::addressof(_t2))) }; 203 | QMetaObject::activate(this, &staticMetaObject, 0, _a); 204 | } 205 | QT_WARNING_POP 206 | QT_END_MOC_NAMESPACE 207 | -------------------------------------------------------------------------------- /include/CQPropertyViewItem.h: -------------------------------------------------------------------------------- 1 | #ifndef CQPropertyViewItem_H 2 | #define CQPropertyViewItem_H 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | #include 14 | 15 | class CQPropertyViewModel; 16 | class CQPropertyViewDelegate; 17 | class CQPropertyViewEditorFactory; 18 | class CQPropertyViewItemTableTip; 19 | 20 | class QStyleOptionViewItem; 21 | class QPainter; 22 | class QWidget; 23 | 24 | /*! 25 | * \brief Property view item 26 | */ 27 | class CQPropertyViewItem : public QObject { 28 | Q_OBJECT 29 | 30 | Q_PROPERTY(QString name READ name WRITE setName ) 31 | Q_PROPERTY(QString alias READ alias WRITE setAlias ) 32 | Q_PROPERTY(bool editable READ isEditable WRITE setEditable) 33 | Q_PROPERTY(bool hidden READ isHidden WRITE setHidden ) 34 | Q_PROPERTY(bool inside READ isInside WRITE setInside ) 35 | Q_PROPERTY(bool dirty READ isDirty WRITE setDirty ) 36 | 37 | public: 38 | using Children = std::vector; 39 | 40 | public: 41 | CQPropertyViewItem(CQPropertyViewModel *model, CQPropertyViewItem *parent, 42 | QObject *object, const QString &name); 43 | 44 | ~CQPropertyViewItem(); 45 | 46 | //--- 47 | 48 | void setInitValue(); 49 | 50 | //--- 51 | 52 | //! check if valid 53 | bool isValid() const { return id_ == 0xFEEDBEEF; } 54 | 55 | //! get parent item 56 | CQPropertyViewItem *parent() const { return parent_; } 57 | 58 | //! get associated object 59 | QObject *object() const { return object_; } 60 | 61 | //! get/set root 62 | QObject *root() const { return root_; } 63 | void setRoot(QObject *root) { root_ = root; } 64 | 65 | //! get associated object from this item or child items 66 | QObject *hierObject() const; 67 | 68 | //--- 69 | 70 | // get number of children 71 | int numChildren() const { return int(children_.size()); } 72 | 73 | //! get children 74 | const Children &children() const { return children_; } 75 | 76 | // get child 77 | CQPropertyViewItem *child(int i) const { return CUtil::safeIndex(children_, i); } 78 | 79 | //--- 80 | 81 | //! add child 82 | void addChild(CQPropertyViewItem *row); 83 | 84 | //! remove child 85 | void removeChild(CQPropertyViewItem *row); 86 | 87 | //--- 88 | 89 | //! get number of visible children 90 | int numVisibleChildren() const { return int(visibleChildren().size()); } 91 | 92 | //! get visible children 93 | const Children &visibleChildren() const; 94 | 95 | //! get visible child 96 | CQPropertyViewItem *visibleChild(int i) const { return CUtil::safeIndex(visibleChildren(), i); } 97 | 98 | //! invalidate cached visible children 99 | void invalidateVisible(); 100 | 101 | //--- 102 | 103 | //! get/set name 104 | const QString &name() const { return name_; } 105 | CQPropertyViewItem &setName(const QString &s) { name_ = s; return *this; } 106 | 107 | //! get/set alias 108 | const QString &alias() const { return alias_; } 109 | CQPropertyViewItem &setAlias(const QString &s) { alias_ = s; return *this; } 110 | 111 | //! get/set editable 112 | bool isEditable() const { return editable_; } 113 | CQPropertyViewItem &setEditable(bool b) { editable_ = b; return *this; } 114 | 115 | //! get/set hidden 116 | bool isHidden() const { return hidden_; } 117 | CQPropertyViewItem &setHidden(bool b); 118 | 119 | //! get/set inside 120 | bool isInside() const { return inside_; } 121 | CQPropertyViewItem &setInside(bool b) { inside_ = b; return *this; } 122 | 123 | //! get/set enum values 124 | const QStringList &values() const { return values_; } 125 | CQPropertyViewItem &setValues(const QStringList &v) { values_ = v; return *this; } 126 | 127 | //! get/set min value 128 | const QVariant &minValue() const { return minValue_; } 129 | CQPropertyViewItem &setMinValue(const QVariant &v) { minValue_ = v; return *this; } 130 | 131 | //! get/set max value 132 | const QVariant &maxValue() const { return maxValue_; } 133 | CQPropertyViewItem &setMaxValue(const QVariant &v) { maxValue_ = v; return *this; } 134 | 135 | //---- 136 | 137 | //! get/set dirty 138 | bool isDirty() const { return dirty_; } 139 | void setDirty(bool b) { dirty_ = b; } 140 | 141 | const QVariant &dirtyValue() const { return dirtyValue_; } 142 | void setDirtyValue(const QVariant &v) { dirtyValue_ = v; } 143 | 144 | //---- 145 | 146 | //! get alias name 147 | QString aliasName() const; 148 | 149 | //! get path 150 | QString path(const QString &sep="/", bool alias=false, CQPropertyViewItem *root=nullptr) const; 151 | 152 | //! get initial value as string 153 | QString initStr() const; 154 | 155 | //! get data value as string 156 | QString dataStr() const; 157 | 158 | //! set editor 159 | void setEditorFactory(CQPropertyViewEditorFactory *editor) { editor_ = editor; } 160 | 161 | //! handle click 162 | bool click(); 163 | 164 | //! create editor widget 165 | QWidget *createEditor(QWidget *parent); 166 | 167 | //! set widget property from variant 168 | void setEditorData(const QVariant &value); 169 | 170 | //! get editor widget text 171 | QVariant getEditorData() const; 172 | 173 | //! initial value 174 | QVariant initValue() const { return initValue_; } 175 | 176 | //! get/set data 177 | QVariant data() const; 178 | bool setData(const QVariant &value); 179 | 180 | //! apply dirty value 181 | bool applyDirty(); 182 | 183 | //! get tcl data 184 | QVariant tclData() const; 185 | 186 | //! get/set desc 187 | const QString &desc() const { return desc_; } 188 | CQPropertyViewItem &setDesc(const QString &s) { desc_ = s; return *this; } 189 | 190 | //! get type name 191 | QString typeName() const; 192 | 193 | //! is enum 194 | bool isEnum() const; 195 | 196 | //! get user type name 197 | QString userTypeName() const; 198 | 199 | //! get tip for name column 200 | QString nameTip(bool html=true) const; 201 | 202 | //! get tip for value column 203 | QString valueTip(bool html=true) const; 204 | 205 | //! paint item 206 | bool paint(const CQPropertyViewDelegate *delegate, QPainter *painter, 207 | const QStyleOptionViewItem &option, const QModelIndex &index); 208 | 209 | private: 210 | QWidget *createDefaultEdit(QWidget *parent, const QString &valueStr); 211 | 212 | QString getDefaultValue() const; 213 | 214 | QString calcTip() const; 215 | 216 | void addCommonType(CQPropertyViewItemTableTip &tableTip) const; 217 | 218 | bool isHierHidden() const; 219 | 220 | Q_SIGNALS: 221 | //! emitted when value changed 222 | void valueChanged(QObject *obj, const QString &name); 223 | 224 | private Q_SLOTS: 225 | //! called when the editor widget is changed 226 | void updateValue(); 227 | 228 | //bool enumValueToString(const CQUtil::PropInfo &propInfo, int value, QString &str) const; 229 | //bool enumStringToValue(const CQUtil::PropInfo &propInfo, const QString &str, int &value) const; 230 | 231 | private: 232 | CQPropertyViewModel* model_ { nullptr }; //!< parent model 233 | uint id_ { 0xFEEDBEEF }; //!< unique id 234 | CQPropertyViewItem* parent_ { nullptr }; //!< parent item 235 | QPointer object_; //!< associated objects 236 | QPointer root_; //!< root for object 237 | QString name_; //!< name 238 | QString alias_; //!< alias 239 | QString desc_; //!< description 240 | Children children_; //!< child items 241 | QVariant initValue_; //!< init value 242 | bool editable_ { false }; //!< is editable 243 | bool hidden_ { false }; //!< is hidden 244 | bool inside_ { false }; //!< is mouse inside 245 | bool dirty_ { false }; //!< is dirty (value changed/not applied) 246 | QVariant dirtyValue_; //!< dirty value 247 | QPointer widget_; //!< edit widget 248 | CQPropertyViewEditorFactory *editor_ { nullptr }; //!< editor interface 249 | QStringList values_; //!< enum values 250 | QVariant minValue_; //!< min value 251 | QVariant maxValue_; //!< max value 252 | 253 | Children visibleChildren_; //!< visible child items 254 | bool visibleChildrenValid_ { false }; //!< visible child items valid 255 | bool visibleChildrenSet_ { false }; //!< any children hidden 256 | }; 257 | 258 | #endif 259 | -------------------------------------------------------------------------------- /src/CQPropertyViewDelegate.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include 14 | 15 | /*! create tree view delegate 16 | */ 17 | CQPropertyViewDelegate:: 18 | CQPropertyViewDelegate(CQPropertyViewTree *view) : 19 | QItemDelegate(view), view_(view) 20 | { 21 | } 22 | 23 | /*! create editor for view item 24 | */ 25 | QWidget * 26 | CQPropertyViewDelegate:: 27 | createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &index) const 28 | { 29 | if (index.column() != 1) 30 | return nullptr; 31 | 32 | auto *item = view_->getModelItem(index); 33 | assert(item); 34 | 35 | auto *th = const_cast(this); 36 | 37 | auto *w = item->createEditor(parent); 38 | 39 | assert(w); 40 | 41 | w->updateGeometry(); 42 | 43 | if (w->layout()) 44 | w->layout()->invalidate(); 45 | 46 | //w->setFixedSize(sizeHint(option, index)); 47 | 48 | w->installEventFilter(th); 49 | 50 | th->editor_ = w; 51 | th->editing_ = true; 52 | th->editorIndex_ = index; 53 | 54 | return w; 55 | } 56 | 57 | /*! get data to display in view item 58 | */ 59 | void 60 | CQPropertyViewDelegate:: 61 | setEditorData(QWidget *, const QModelIndex &index) const 62 | { 63 | if (index.column() != 1) 64 | return; 65 | 66 | auto *item = view_->getModelItem(index); 67 | assert(item); 68 | 69 | auto var = item->data(); 70 | 71 | if (var.isNull()) { 72 | //std::cerr << "Failed to get model data" << std::endl; 73 | } 74 | 75 | item->setEditorData(var); 76 | } 77 | 78 | /*! store displayed view item data in model 79 | */ 80 | void 81 | CQPropertyViewDelegate:: 82 | setModelData(QWidget *, QAbstractItemModel *model, const QModelIndex &index) const 83 | { 84 | if (index.column() != 1) 85 | return; 86 | 87 | auto *item = view_->getModelItem(index); 88 | assert(item); 89 | 90 | auto var = item->getEditorData(); 91 | 92 | model->setData(index, var); 93 | } 94 | 95 | /*! update geometry 96 | */ 97 | void 98 | CQPropertyViewDelegate:: 99 | updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, 100 | const QModelIndex &index) const 101 | { 102 | if (index.column() != 1) 103 | return; 104 | 105 | editor->setGeometry(option.rect); 106 | } 107 | 108 | /*! draw item 109 | */ 110 | void 111 | CQPropertyViewDelegate:: 112 | paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 113 | { 114 | auto *item = view_->getModelItem(index); 115 | assert(item); 116 | 117 | CQPropertyViewMgrInst->setDrawItem(item); 118 | 119 | //--- 120 | 121 | auto option1 = option; 122 | 123 | //--- 124 | 125 | // read only is drawn italic 126 | if (! item->isEditable()) { 127 | option1.font.setItalic(true); 128 | } 129 | 130 | //--- 131 | 132 | ItemState itemState; 133 | 134 | itemState.inside = view_->isMouseInd(index); 135 | 136 | //--- 137 | 138 | // property name 139 | if (index.column() == 0) { 140 | auto label = item->aliasName(); 141 | 142 | drawString(painter, option, label, index, itemState); 143 | 144 | //QItemDelegate::paint(painter, option1, index); 145 | } 146 | // property value 147 | else if (index.column() == 1) { 148 | if (itemState.inside) 149 | item->setInside(true); 150 | 151 | if (! item->paint(this, painter, option1, index)) 152 | QItemDelegate::paint(painter, option1, index); 153 | 154 | if (itemState.inside) 155 | item->setInside(false); 156 | } 157 | } 158 | 159 | /*! size hint 160 | */ 161 | QSize 162 | CQPropertyViewDelegate:: 163 | sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const 164 | { 165 | // TODO: add item->sizeHint() virtual 166 | auto size = QItemDelegate::sizeHint(option, index); 167 | 168 | size.setHeight(size.height() + 2); 169 | 170 | return size; 171 | } 172 | 173 | /*! create edit widget 174 | */ 175 | QWidget * 176 | CQPropertyViewDelegate:: 177 | createEdit(QWidget *parent, const QString &text) const 178 | { 179 | auto *edit = new QLineEdit(parent); 180 | 181 | edit->setObjectName("edit"); 182 | 183 | edit->setText(text); 184 | 185 | edit->setMouseTracking(false); 186 | edit->setFocusPolicy(Qt::NoFocus); 187 | edit->setAcceptDrops(false); 188 | edit->setFrame(false); 189 | edit->setReadOnly(true); 190 | 191 | // set background of preview text to window background 192 | auto plt = QApplication::palette(); 193 | auto bgColor = plt.color(QPalette::Window); 194 | auto styleStr = 195 | QString::asprintf("background: #%2x%2x%2x", bgColor.red(), bgColor.green(), bgColor.blue()); 196 | edit->setStyleSheet(styleStr); 197 | 198 | return edit; 199 | } 200 | 201 | void 202 | CQPropertyViewDelegate:: 203 | drawBackground(QPainter *painter, const QStyleOptionViewItem &option, 204 | const QModelIndex &index, const ItemState & /*itemState*/) const 205 | { 206 | QItemDelegate::drawBackground(painter, option, index); 207 | } 208 | 209 | void 210 | CQPropertyViewDelegate:: 211 | drawCheckInside(QPainter *painter, const QStyleOptionViewItem &option, 212 | bool checked, const QModelIndex &index, const ItemState &itemState) const 213 | { 214 | drawBackground(painter, option, index, itemState); 215 | 216 | Qt::CheckState checkState = (checked ? Qt::Checked : Qt::Unchecked); 217 | 218 | auto rect = option.rect; 219 | 220 | rect.setWidth(option.rect.height()); 221 | 222 | rect.adjust(0, 1, -3, -2); 223 | 224 | QItemDelegate::drawCheck(painter, option, rect, checkState); 225 | 226 | int x = rect.right() + 4; 227 | 228 | QRect rect1; 229 | 230 | rect1.setCoords(x, option.rect.top(), option.rect.right(), option.rect.bottom()); 231 | 232 | drawDisplay(painter, option, rect1, checked ? "true" : "false"); 233 | } 234 | 235 | void 236 | CQPropertyViewDelegate:: 237 | drawColor(QPainter *painter, const QStyleOptionViewItem &option, 238 | const QColor &c, const QModelIndex &index, const ItemState &itemState) const 239 | { 240 | drawBackground(painter, option, index, itemState); 241 | 242 | int margin = qApp->style()->pixelMetric(QStyle::PM_HeaderMargin); 243 | 244 | auto rect = option.rect; 245 | 246 | rect.setWidth(option.rect.height()); 247 | 248 | rect.adjust(0, 1, -3, -2); 249 | 250 | rect.setLeft(rect.left() + margin); 251 | 252 | painter->setBrush(QBrush(c)); 253 | painter->setPen(QColor(Qt::black)); // TODO: contrast border 254 | 255 | painter->drawRect(rect); 256 | 257 | int x = rect.right() + margin; 258 | 259 | QRect rect1; 260 | 261 | rect1.setCoords(x, option.rect.top(), option.rect.right(), option.rect.bottom()); 262 | 263 | drawDisplay(painter, option, rect1, c.name()); 264 | } 265 | 266 | void 267 | CQPropertyViewDelegate:: 268 | drawFont(QPainter *painter, const QStyleOptionViewItem &option, 269 | const QFont &f, const QModelIndex &index, const ItemState &itemState) const 270 | { 271 | static QString previewStr("Abc"); 272 | 273 | drawBackground(painter, option, index, itemState); 274 | 275 | auto rect = option.rect; 276 | 277 | rect.setWidth(option.rect.height()); 278 | 279 | rect.adjust(0, 1, -3, -2); 280 | 281 | auto f1 = f; 282 | auto f2 = painter->font(); 283 | 284 | QFontMetrics fm1(f1); 285 | //QFontMetrics fm2(f2); 286 | 287 | int fw = fm1.horizontalAdvance(previewStr); 288 | int fh = fm1.height(); 289 | 290 | if (fh > rect.height()) { 291 | f1.setPixelSize(rect.height()); 292 | 293 | fm1 = QFontMetrics(f1); 294 | 295 | fw = fm1.horizontalAdvance(previewStr); 296 | } 297 | 298 | int x1 = rect.left(); 299 | int y1 = rect.top() + fm1.ascent(); 300 | 301 | painter->save(); 302 | 303 | painter->setFont(f1); 304 | 305 | auto fg = view_->palette().color(QPalette::Text); 306 | 307 | painter->setPen(fg); 308 | 309 | painter->drawText(x1, y1, previewStr); 310 | 311 | painter->restore(); 312 | 313 | int x2 = x1 + fw + 4; 314 | //int y2 = rect.top() + fm2.ascent(); 315 | 316 | QRect rect1; 317 | 318 | rect1.setCoords(x2, option.rect.top(), option.rect.right(), option.rect.bottom()); 319 | 320 | //painter->drawText(x2, y2, f.toString()); 321 | drawDisplay(painter, option, rect1, f.toString()); 322 | } 323 | 324 | void 325 | CQPropertyViewDelegate:: 326 | drawPoint(QPainter *painter, const QStyleOptionViewItem &option, 327 | const QPointF &p, const QModelIndex &index, const ItemState &itemState) const 328 | { 329 | drawBackground(painter, option, index, itemState); 330 | 331 | auto rect = option.rect; 332 | 333 | //rect.setWidth(option.rect.height()); 334 | 335 | //QFontMetrics fm(painter->font()); 336 | 337 | auto str = QString("%1 %2").arg(p.x()).arg(p.y()); 338 | 339 | drawDisplay(painter, option, rect, str); 340 | } 341 | 342 | void 343 | CQPropertyViewDelegate:: 344 | drawSize(QPainter *painter, const QStyleOptionViewItem &option, 345 | const QSizeF &s, const QModelIndex &index, const ItemState &itemState) const 346 | { 347 | drawBackground(painter, option, index, itemState); 348 | 349 | auto rect = option.rect; 350 | 351 | //rect.setWidth(option.rect.height()); 352 | 353 | //QFontMetrics fm(painter->font()); 354 | 355 | auto str = QString("%1 %2").arg(s.width()).arg(s.height()); 356 | 357 | drawDisplay(painter, option, rect, str); 358 | } 359 | 360 | void 361 | CQPropertyViewDelegate:: 362 | drawRect(QPainter *painter, const QStyleOptionViewItem &option, 363 | const QRectF &r, const QModelIndex &index, const ItemState &itemState) const 364 | { 365 | drawBackground(painter, option, index, itemState); 366 | 367 | auto rect = option.rect; 368 | 369 | //rect.setWidth(option.rect.height()); 370 | 371 | //QFontMetrics fm(painter->font()); 372 | 373 | auto str = QString("{%1 %2} {%3 %4}").arg(r.left ()).arg(r.top ()). 374 | arg(r.right()).arg(r.bottom()); 375 | 376 | drawDisplay(painter, option, rect, str); 377 | } 378 | 379 | #if 0 380 | void 381 | CQPropertyViewDelegate:: 382 | drawAngle(QPainter *painter, const QStyleOptionViewItem &option, 383 | const CAngle &a, const QModelIndex &index, const ItemState &itemState) const 384 | { 385 | drawBackground(painter, option, index, itemState); 386 | 387 | auto rect = option.rect; 388 | 389 | //rect.setWidth(option.rect.height()); 390 | 391 | //QFontMetrics fm(painter->font()); 392 | 393 | auto str = QString("%1").arg(a.degrees()); 394 | 395 | drawDisplay(painter, option, rect, str); 396 | } 397 | #endif 398 | 399 | void 400 | CQPropertyViewDelegate:: 401 | drawString(QPainter *painter, const QStyleOptionViewItem &option, const QString &str, 402 | const QModelIndex &index, const ItemState &itemState) const 403 | { 404 | drawBackground(painter, option, index, itemState); 405 | 406 | auto rect = option.rect; 407 | 408 | if (itemState.inside) { 409 | auto option1 = option; 410 | 411 | auto c = QColor(100, 100, 200); 412 | 413 | option1.palette.setColor(QPalette::WindowText, c); 414 | option1.palette.setColor(QPalette::Text , c); 415 | 416 | drawDisplay(painter, option1, rect, str); 417 | } 418 | else 419 | drawDisplay(painter, option, rect, str); 420 | 421 | //painter->fillRect(option.rect, Qt::red); 422 | } 423 | 424 | void 425 | CQPropertyViewDelegate:: 426 | drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, 427 | const QString &str) const 428 | { 429 | QItemDelegate::drawDisplay(painter, option, rect, str); 430 | } 431 | 432 | bool 433 | CQPropertyViewDelegate:: 434 | eventFilter(QObject *obj, QEvent *event) 435 | { 436 | return QObject::eventFilter(obj, event); 437 | } 438 | -------------------------------------------------------------------------------- /test/.moc/moc_predefs.h: -------------------------------------------------------------------------------- 1 | #define __SSP_STRONG__ 3 2 | #define __DBL_MIN_EXP__ (-1021) 3 | #define __FLT32X_MAX_EXP__ 1024 4 | #define __cpp_attributes 200809 5 | #define __UINT_LEAST16_MAX__ 0xffff 6 | #define __ATOMIC_ACQUIRE 2 7 | #define __FLT128_MAX_10_EXP__ 4932 8 | #define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F 9 | #define __GCC_IEC_559_COMPLEX 2 10 | #define __cpp_aggregate_nsdmi 201304 11 | #define __UINT_LEAST8_TYPE__ unsigned char 12 | #define __SIZEOF_FLOAT80__ 16 13 | #define __INTMAX_C(c) c ## L 14 | #define __CHAR_BIT__ 8 15 | #define __UINT8_MAX__ 0xff 16 | #define __WINT_MAX__ 0xffffffffU 17 | #define __FLT32_MIN_EXP__ (-125) 18 | #define __cpp_static_assert 200410 19 | #define __ORDER_LITTLE_ENDIAN__ 1234 20 | #define __SIZE_MAX__ 0xffffffffffffffffUL 21 | #define __WCHAR_MAX__ 0x7fffffff 22 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 23 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 24 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 25 | #define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) 26 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 27 | #define __GCC_ATOMIC_CHAR_LOCK_FREE 2 28 | #define __GCC_IEC_559 2 29 | #define __FLT32X_DECIMAL_DIG__ 17 30 | #define __FLT_EVAL_METHOD__ 0 31 | #define __unix__ 1 32 | #define __cpp_binary_literals 201304 33 | #define __FLT64_DECIMAL_DIG__ 17 34 | #define __CET__ 3 35 | #define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 36 | #define __x86_64 1 37 | #define __cpp_variadic_templates 200704 38 | #define __UINT_FAST64_MAX__ 0xffffffffffffffffUL 39 | #define __SIG_ATOMIC_TYPE__ int 40 | #define __DBL_MIN_10_EXP__ (-307) 41 | #define __FINITE_MATH_ONLY__ 0 42 | #define __cpp_variable_templates 201304 43 | #define __GNUC_PATCHLEVEL__ 0 44 | #define __FLT32_HAS_DENORM__ 1 45 | #define __UINT_FAST8_MAX__ 0xff 46 | #define __has_include(STR) __has_include__(STR) 47 | #define __DEC64_MAX_EXP__ 385 48 | #define __INT8_C(c) c 49 | #define __INT_LEAST8_WIDTH__ 8 50 | #define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL 51 | #define __SHRT_MAX__ 0x7fff 52 | #define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L 53 | #define __FLT64X_MAX_10_EXP__ 4932 54 | #define __UINT_LEAST8_MAX__ 0xff 55 | #define __GCC_ATOMIC_BOOL_LOCK_FREE 2 56 | #define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 57 | #define __UINTMAX_TYPE__ long unsigned int 58 | #define __linux 1 59 | #define __DEC32_EPSILON__ 1E-6DF 60 | #define __FLT_EVAL_METHOD_TS_18661_3__ 0 61 | #define __OPTIMIZE__ 1 62 | #define __unix 1 63 | #define __UINT32_MAX__ 0xffffffffU 64 | #define __GXX_EXPERIMENTAL_CXX0X__ 1 65 | #define __LDBL_MAX_EXP__ 16384 66 | #define __FLT128_MIN_EXP__ (-16381) 67 | #define __WINT_MIN__ 0U 68 | #define __linux__ 1 69 | #define __FLT128_MIN_10_EXP__ (-4931) 70 | #define __INT_LEAST16_WIDTH__ 16 71 | #define __SCHAR_MAX__ 0x7f 72 | #define __FLT128_MANT_DIG__ 113 73 | #define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) 74 | #define __INT64_C(c) c ## L 75 | #define __DBL_DIG__ 15 76 | #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 77 | #define __FLT64X_MANT_DIG__ 64 78 | #define _FORTIFY_SOURCE 2 79 | #define __SIZEOF_INT__ 4 80 | #define __SIZEOF_POINTER__ 8 81 | #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 82 | #define __USER_LABEL_PREFIX__ 83 | #define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x 84 | #define __STDC_HOSTED__ 1 85 | #define __LDBL_HAS_INFINITY__ 1 86 | #define __FLT32_DIG__ 6 87 | #define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F 88 | #define __GXX_WEAK__ 1 89 | #define __SHRT_WIDTH__ 16 90 | #define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L 91 | #define __DEC32_MAX__ 9.999999E96DF 92 | #define __cpp_threadsafe_static_init 200806 93 | #define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x 94 | #define __FLT32X_HAS_INFINITY__ 1 95 | #define __INT32_MAX__ 0x7fffffff 96 | #define __INT_WIDTH__ 32 97 | #define __SIZEOF_LONG__ 8 98 | #define __STDC_IEC_559__ 1 99 | #define __STDC_ISO_10646__ 201706L 100 | #define __UINT16_C(c) c 101 | #define __PTRDIFF_WIDTH__ 64 102 | #define __DECIMAL_DIG__ 21 103 | #define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 104 | #define __gnu_linux__ 1 105 | #define __INTMAX_WIDTH__ 64 106 | #define __FLT64_MIN_EXP__ (-1021) 107 | #define __has_include_next(STR) __has_include_next__(STR) 108 | #define __FLT64X_MIN_10_EXP__ (-4931) 109 | #define __LDBL_HAS_QUIET_NAN__ 1 110 | #define __FLT64_MANT_DIG__ 53 111 | #define __GNUC__ 8 112 | #define __GXX_RTTI 1 113 | #define __pie__ 2 114 | #define __MMX__ 1 115 | #define __cpp_delegating_constructors 200604 116 | #define __FLT_HAS_DENORM__ 1 117 | #define __SIZEOF_LONG_DOUBLE__ 16 118 | #define __BIGGEST_ALIGNMENT__ 16 119 | #define __STDC_UTF_16__ 1 120 | #define __FLT64_MAX_10_EXP__ 308 121 | #define __FLT32_HAS_INFINITY__ 1 122 | #define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) 123 | #define __cpp_raw_strings 200710 124 | #define __INT_FAST32_MAX__ 0x7fffffffffffffffL 125 | #define __DBL_HAS_INFINITY__ 1 126 | #define __DEC32_MIN_EXP__ (-94) 127 | #define __INTPTR_WIDTH__ 64 128 | #define __FLT32X_HAS_DENORM__ 1 129 | #define __INT_FAST16_TYPE__ long int 130 | #define __STRICT_ANSI__ 1 131 | #define __LDBL_HAS_DENORM__ 1 132 | #define __cplusplus 201402L 133 | #define __cpp_ref_qualifiers 200710 134 | #define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL 135 | #define __INT_LEAST32_MAX__ 0x7fffffff 136 | #define __DEC32_MIN__ 1E-95DF 137 | #define __DEPRECATED 1 138 | #define __cpp_rvalue_references 200610 139 | #define __DBL_MAX_EXP__ 1024 140 | #define __WCHAR_WIDTH__ 32 141 | #define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 142 | #define __DEC128_EPSILON__ 1E-33DL 143 | #define __SSE2_MATH__ 1 144 | #define __ATOMIC_HLE_RELEASE 131072 145 | #define __PTRDIFF_MAX__ 0x7fffffffffffffffL 146 | #define __amd64 1 147 | #define __ATOMIC_HLE_ACQUIRE 65536 148 | #define __FLT32_HAS_QUIET_NAN__ 1 149 | #define __GNUG__ 8 150 | #define __LONG_LONG_MAX__ 0x7fffffffffffffffLL 151 | #define __SIZEOF_SIZE_T__ 8 152 | #define __cpp_rvalue_reference 200610 153 | #define __cpp_nsdmi 200809 154 | #define __FLT64X_MIN_EXP__ (-16381) 155 | #define __SIZEOF_WINT_T__ 4 156 | #define __LONG_LONG_WIDTH__ 64 157 | #define __cpp_initializer_lists 200806 158 | #define __FLT32_MAX_EXP__ 128 159 | #define __cpp_hex_float 201603 160 | #define __GCC_HAVE_DWARF2_CFI_ASM 1 161 | #define __GXX_ABI_VERSION 1013 162 | #define __FLT128_HAS_INFINITY__ 1 163 | #define __FLT_MIN_EXP__ (-125) 164 | #define __cpp_lambdas 200907 165 | #define __FLT64X_HAS_QUIET_NAN__ 1 166 | #define __INT_FAST64_TYPE__ long int 167 | #define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 168 | #define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) 169 | #define __PIE__ 2 170 | #define __LP64__ 1 171 | #define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x 172 | #define __DECIMAL_BID_FORMAT__ 1 173 | #define __FLT64_MIN_10_EXP__ (-307) 174 | #define __FLT64X_DECIMAL_DIG__ 21 175 | #define __DEC128_MIN__ 1E-6143DL 176 | #define __REGISTER_PREFIX__ 177 | #define __UINT16_MAX__ 0xffff 178 | #define __DBL_HAS_DENORM__ 1 179 | #define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 180 | #define __UINT8_TYPE__ unsigned char 181 | #define __FLT_MANT_DIG__ 24 182 | #define __LDBL_DECIMAL_DIG__ 21 183 | #define __VERSION__ "8.4.0" 184 | #define __UINT64_C(c) c ## UL 185 | #define __cpp_unicode_characters 200704 186 | #define _STDC_PREDEF_H 1 187 | #define __cpp_decltype_auto 201304 188 | #define __GCC_ATOMIC_INT_LOCK_FREE 2 189 | #define __FLT128_MAX_EXP__ 16384 190 | #define __FLT32_MANT_DIG__ 24 191 | #define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ 192 | #define __STDC_IEC_559_COMPLEX__ 1 193 | #define __FLT128_HAS_DENORM__ 1 194 | #define __FLT128_DIG__ 33 195 | #define __SCHAR_WIDTH__ 8 196 | #define __INT32_C(c) c 197 | #define __DEC64_EPSILON__ 1E-15DD 198 | #define __ORDER_PDP_ENDIAN__ 3412 199 | #define __DEC128_MIN_EXP__ (-6142) 200 | #define __FLT32_MAX_10_EXP__ 38 201 | #define __INT_FAST32_TYPE__ long int 202 | #define __UINT_LEAST16_TYPE__ short unsigned int 203 | #define __FLT64X_HAS_INFINITY__ 1 204 | #define __INT16_MAX__ 0x7fff 205 | #define __cpp_rtti 199711 206 | #define __SIZE_TYPE__ long unsigned int 207 | #define __UINT64_MAX__ 0xffffffffffffffffUL 208 | #define __FLT64X_DIG__ 18 209 | #define __INT8_TYPE__ signed char 210 | #define __cpp_digit_separators 201309 211 | #define __ELF__ 1 212 | #define __GCC_ASM_FLAG_OUTPUTS__ 1 213 | #define __FLT_RADIX__ 2 214 | #define __INT_LEAST16_TYPE__ short int 215 | #define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L 216 | #define __UINTMAX_C(c) c ## UL 217 | #define __k8 1 218 | #define __SIG_ATOMIC_MAX__ 0x7fffffff 219 | #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 220 | #define __SIZEOF_PTRDIFF_T__ 8 221 | #define __FLT32X_MANT_DIG__ 53 222 | #define __x86_64__ 1 223 | #define __FLT32X_MIN_EXP__ (-1021) 224 | #define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF 225 | #define __INT_FAST16_MAX__ 0x7fffffffffffffffL 226 | #define __FLT64_DIG__ 15 227 | #define __UINT_FAST32_MAX__ 0xffffffffffffffffUL 228 | #define __UINT_LEAST64_TYPE__ long unsigned int 229 | #define __FLT_HAS_QUIET_NAN__ 1 230 | #define __FLT_MAX_10_EXP__ 38 231 | #define __LONG_MAX__ 0x7fffffffffffffffL 232 | #define __FLT64X_HAS_DENORM__ 1 233 | #define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL 234 | #define __FLT_HAS_INFINITY__ 1 235 | #define __cpp_unicode_literals 200710 236 | #define __UINT_FAST16_TYPE__ long unsigned int 237 | #define __DEC64_MAX__ 9.999999999999999E384DD 238 | #define __INT_FAST32_WIDTH__ 64 239 | #define __CHAR16_TYPE__ short unsigned int 240 | #define __PRAGMA_REDEFINE_EXTNAME 1 241 | #define __SIZE_WIDTH__ 64 242 | #define __SEG_FS 1 243 | #define __INT_LEAST16_MAX__ 0x7fff 244 | #define __DEC64_MANT_DIG__ 16 245 | #define __INT64_MAX__ 0x7fffffffffffffffL 246 | #define __UINT_LEAST32_MAX__ 0xffffffffU 247 | #define __SEG_GS 1 248 | #define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 249 | #define __GCC_ATOMIC_LONG_LOCK_FREE 2 250 | #define __SIG_ATOMIC_WIDTH__ 32 251 | #define __INT_LEAST64_TYPE__ long int 252 | #define __INT16_TYPE__ short int 253 | #define __INT_LEAST8_TYPE__ signed char 254 | #define __DEC32_MAX_EXP__ 97 255 | #define __INT_FAST8_MAX__ 0x7f 256 | #define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 257 | #define __INTPTR_MAX__ 0x7fffffffffffffffL 258 | #define __cpp_sized_deallocation 201309 259 | #define __cpp_range_based_for 200907 260 | #define __FLT64_HAS_QUIET_NAN__ 1 261 | #define __FLT32_MIN_10_EXP__ (-37) 262 | #define __SSE2__ 1 263 | #define __EXCEPTIONS 1 264 | #define __LDBL_MANT_DIG__ 64 265 | #define __DBL_HAS_QUIET_NAN__ 1 266 | #define __FLT64_HAS_INFINITY__ 1 267 | #define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x 268 | #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) 269 | #define __code_model_small__ 1 270 | #define __cpp_return_type_deduction 201304 271 | #define __k8__ 1 272 | #define __INTPTR_TYPE__ long int 273 | #define __UINT16_TYPE__ short unsigned int 274 | #define __WCHAR_TYPE__ int 275 | #define __SIZEOF_FLOAT__ 4 276 | #define __pic__ 2 277 | #define __UINTPTR_MAX__ 0xffffffffffffffffUL 278 | #define __INT_FAST64_WIDTH__ 64 279 | #define __DEC64_MIN_EXP__ (-382) 280 | #define __cpp_decltype 200707 281 | #define __FLT32_DECIMAL_DIG__ 9 282 | #define __INT_FAST64_MAX__ 0x7fffffffffffffffL 283 | #define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 284 | #define __FLT_DIG__ 6 285 | #define __FLT64X_MAX_EXP__ 16384 286 | #define __UINT_FAST64_TYPE__ long unsigned int 287 | #define __INT_MAX__ 0x7fffffff 288 | #define __amd64__ 1 289 | #define __INT64_TYPE__ long int 290 | #define __FLT_MAX_EXP__ 128 291 | #define __ORDER_BIG_ENDIAN__ 4321 292 | #define __DBL_MANT_DIG__ 53 293 | #define __cpp_inheriting_constructors 201511 294 | #define __SIZEOF_FLOAT128__ 16 295 | #define __INT_LEAST64_MAX__ 0x7fffffffffffffffL 296 | #define __DEC64_MIN__ 1E-383DD 297 | #define __WINT_TYPE__ unsigned int 298 | #define __UINT_LEAST32_TYPE__ unsigned int 299 | #define __SIZEOF_SHORT__ 2 300 | #define __SSE__ 1 301 | #define __LDBL_MIN_EXP__ (-16381) 302 | #define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 303 | #define __WINT_WIDTH__ 32 304 | #define __INT_LEAST8_MAX__ 0x7f 305 | #define __FLT32X_MAX_10_EXP__ 308 306 | #define __SIZEOF_INT128__ 16 307 | #define __LDBL_MAX_10_EXP__ 4932 308 | #define __ATOMIC_RELAXED 0 309 | #define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) 310 | #define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 311 | #define _LP64 1 312 | #define __UINT8_C(c) c 313 | #define __FLT64_MAX_EXP__ 1024 314 | #define __INT_LEAST32_TYPE__ int 315 | #define __SIZEOF_WCHAR_T__ 4 316 | #define __FLT128_HAS_QUIET_NAN__ 1 317 | #define __INT_FAST8_TYPE__ signed char 318 | #define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x 319 | #define __GNUC_STDC_INLINE__ 1 320 | #define __FLT64_HAS_DENORM__ 1 321 | #define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 322 | #define __DBL_DECIMAL_DIG__ 17 323 | #define __STDC_UTF_32__ 1 324 | #define __INT_FAST8_WIDTH__ 8 325 | #define __FXSR__ 1 326 | #define __DEC_EVAL_METHOD__ 2 327 | #define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x 328 | #define __cpp_runtime_arrays 198712 329 | #define __UINT64_TYPE__ long unsigned int 330 | #define __UINT32_C(c) c ## U 331 | #define __INTMAX_MAX__ 0x7fffffffffffffffL 332 | #define __cpp_alias_templates 200704 333 | #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ 334 | #define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F 335 | #define __INT8_MAX__ 0x7f 336 | #define __LONG_WIDTH__ 64 337 | #define __PIC__ 2 338 | #define __UINT_FAST32_TYPE__ long unsigned int 339 | #define __CHAR32_TYPE__ unsigned int 340 | #define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F 341 | #define __cpp_constexpr 201304 342 | #define __INT32_TYPE__ int 343 | #define __SIZEOF_DOUBLE__ 8 344 | #define __cpp_exceptions 199711 345 | #define __FLT_MIN_10_EXP__ (-37) 346 | #define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 347 | #define __INT_LEAST32_WIDTH__ 32 348 | #define __INTMAX_TYPE__ long int 349 | #define __DEC128_MAX_EXP__ 6145 350 | #define __FLT32X_HAS_QUIET_NAN__ 1 351 | #define __ATOMIC_CONSUME 1 352 | #define __GNUC_MINOR__ 4 353 | #define __INT_FAST16_WIDTH__ 64 354 | #define __UINTMAX_MAX__ 0xffffffffffffffffUL 355 | #define __DEC32_MANT_DIG__ 7 356 | #define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x 357 | #define __DBL_MAX_10_EXP__ 308 358 | #define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L 359 | #define __INT16_C(c) c 360 | #define __cpp_generic_lambdas 201304 361 | #define __STDC__ 1 362 | #define __FLT32X_DIG__ 15 363 | #define __PTRDIFF_TYPE__ long int 364 | #define __ATOMIC_SEQ_CST 5 365 | #define __UINT32_TYPE__ unsigned int 366 | #define __FLT32X_MIN_10_EXP__ (-307) 367 | #define __UINTPTR_TYPE__ long unsigned int 368 | #define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD 369 | #define __DEC128_MANT_DIG__ 34 370 | #define __LDBL_MIN_10_EXP__ (-4931) 371 | #define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 372 | #define __SSE_MATH__ 1 373 | #define __SIZEOF_LONG_LONG__ 8 374 | #define __cpp_user_defined_literals 200809 375 | #define __FLT128_DECIMAL_DIG__ 36 376 | #define __GCC_ATOMIC_LLONG_LOCK_FREE 2 377 | #define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x 378 | #define __LDBL_DIG__ 18 379 | #define __FLT_DECIMAL_DIG__ 9 380 | #define __UINT_FAST16_MAX__ 0xffffffffffffffffUL 381 | #define __GCC_ATOMIC_SHORT_LOCK_FREE 2 382 | #define __INT_LEAST64_WIDTH__ 64 383 | #define __UINT_FAST8_TYPE__ unsigned char 384 | #define _GNU_SOURCE 1 385 | #define __cpp_init_captures 201304 386 | #define __ATOMIC_ACQ_REL 4 387 | #define __ATOMIC_RELEASE 3 388 | -------------------------------------------------------------------------------- /src/.moc/moc_CQPropertyViewTree.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'CQPropertyViewTree.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.13) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include 10 | #include "../../include/CQPropertyViewTree.h" 11 | #include 12 | #include 13 | #if !defined(Q_MOC_OUTPUT_REVISION) 14 | #error "The header file 'CQPropertyViewTree.h' doesn't include ." 15 | #elif Q_MOC_OUTPUT_REVISION != 67 16 | #error "This file was generated using the moc from 5.15.13. It" 17 | #error "cannot be used with the include files from this version of Qt." 18 | #error "(The moc has changed too much.)" 19 | #endif 20 | 21 | QT_BEGIN_MOC_NAMESPACE 22 | QT_WARNING_PUSH 23 | QT_WARNING_DISABLE_DEPRECATED 24 | struct qt_meta_stringdata_CQPropertyViewTree_t { 25 | QByteArrayData data[41]; 26 | char stringdata0[484]; 27 | }; 28 | #define QT_MOC_LITERAL(idx, ofs, len) \ 29 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 30 | qptrdiff(offsetof(qt_meta_stringdata_CQPropertyViewTree_t, stringdata0) + ofs \ 31 | - idx * sizeof(QByteArrayData)) \ 32 | ) 33 | static const qt_meta_stringdata_CQPropertyViewTree_t qt_meta_stringdata_CQPropertyViewTree = { 34 | { 35 | QT_MOC_LITERAL(0, 0, 18), // "CQPropertyViewTree" 36 | QT_MOC_LITERAL(1, 19, 12), // "valueChanged" 37 | QT_MOC_LITERAL(2, 32, 0), // "" 38 | QT_MOC_LITERAL(3, 33, 11), // "itemClicked" 39 | QT_MOC_LITERAL(4, 45, 3), // "obj" 40 | QT_MOC_LITERAL(5, 49, 4), // "path" 41 | QT_MOC_LITERAL(6, 54, 12), // "itemSelected" 42 | QT_MOC_LITERAL(7, 67, 8), // "menuExec" 43 | QT_MOC_LITERAL(8, 76, 4), // "gpos" 44 | QT_MOC_LITERAL(9, 81, 11), // "startUpdate" 45 | QT_MOC_LITERAL(10, 93, 9), // "endUpdate" 46 | QT_MOC_LITERAL(11, 103, 6), // "redraw" 47 | QT_MOC_LITERAL(12, 110, 9), // "expandAll" 48 | QT_MOC_LITERAL(13, 120, 11), // "collapseAll" 49 | QT_MOC_LITERAL(14, 132, 14), // "expandSelected" 50 | QT_MOC_LITERAL(15, 147, 13), // "setShowHidden" 51 | QT_MOC_LITERAL(16, 161, 9), // "setFilter" 52 | QT_MOC_LITERAL(17, 171, 6), // "filter" 53 | QT_MOC_LITERAL(18, 178, 6), // "search" 54 | QT_MOC_LITERAL(19, 185, 4), // "text" 55 | QT_MOC_LITERAL(20, 190, 8), // "copySlot" 56 | QT_MOC_LITERAL(21, 199, 9), // "printSlot" 57 | QT_MOC_LITERAL(22, 209, 16), // "printChangedSlot" 58 | QT_MOC_LITERAL(23, 226, 15), // "closeEditorSlot" 59 | QT_MOC_LITERAL(24, 242, 14), // "modelResetSlot" 60 | QT_MOC_LITERAL(25, 257, 15), // "itemClickedSlot" 61 | QT_MOC_LITERAL(26, 273, 11), // "QModelIndex" 62 | QT_MOC_LITERAL(27, 285, 5), // "index" 63 | QT_MOC_LITERAL(28, 291, 10), // "expandSlot" 64 | QT_MOC_LITERAL(29, 302, 17), // "itemSelectionSlot" 65 | QT_MOC_LITERAL(30, 320, 21), // "customContextMenuSlot" 66 | QT_MOC_LITERAL(31, 342, 3), // "pos" 67 | QT_MOC_LITERAL(32, 346, 8), // "QWidget*" 68 | QT_MOC_LITERAL(33, 355, 34), // "QAbstractItemDelegate::EndEdi..." 69 | QT_MOC_LITERAL(34, 390, 14), // "autoUpdateSlot" 70 | QT_MOC_LITERAL(35, 405, 15), // "updateDirtySlot" 71 | QT_MOC_LITERAL(36, 421, 8), // "itemMenu" 72 | QT_MOC_LITERAL(37, 430, 10), // "showHidden" 73 | QT_MOC_LITERAL(38, 441, 14), // "mouseHighlight" 74 | QT_MOC_LITERAL(39, 456, 12), // "resizeOnShow" 75 | QT_MOC_LITERAL(40, 469, 14) // "resizeOnExpand" 76 | 77 | }, 78 | "CQPropertyViewTree\0valueChanged\0\0" 79 | "itemClicked\0obj\0path\0itemSelected\0" 80 | "menuExec\0gpos\0startUpdate\0endUpdate\0" 81 | "redraw\0expandAll\0collapseAll\0" 82 | "expandSelected\0setShowHidden\0setFilter\0" 83 | "filter\0search\0text\0copySlot\0printSlot\0" 84 | "printChangedSlot\0closeEditorSlot\0" 85 | "modelResetSlot\0itemClickedSlot\0" 86 | "QModelIndex\0index\0expandSlot\0" 87 | "itemSelectionSlot\0customContextMenuSlot\0" 88 | "pos\0QWidget*\0QAbstractItemDelegate::EndEditHint\0" 89 | "autoUpdateSlot\0updateDirtySlot\0itemMenu\0" 90 | "showHidden\0mouseHighlight\0resizeOnShow\0" 91 | "resizeOnExpand" 92 | }; 93 | #undef QT_MOC_LITERAL 94 | 95 | static const uint qt_meta_data_CQPropertyViewTree[] = { 96 | 97 | // content: 98 | 8, // revision 99 | 0, // classname 100 | 0, 0, // classinfo 101 | 25, 14, // methods 102 | 5, 198, // properties 103 | 0, 0, // enums/sets 104 | 0, 0, // constructors 105 | 0, // flags 106 | 6, // signalCount 107 | 108 | // signals: name, argc, parameters, tag, flags 109 | 1, 2, 139, 2, 0x06 /* Public */, 110 | 3, 2, 144, 2, 0x06 /* Public */, 111 | 6, 2, 149, 2, 0x06 /* Public */, 112 | 7, 2, 154, 2, 0x06 /* Public */, 113 | 9, 0, 159, 2, 0x06 /* Public */, 114 | 10, 0, 160, 2, 0x06 /* Public */, 115 | 116 | // slots: name, argc, parameters, tag, flags 117 | 11, 0, 161, 2, 0x0a /* Public */, 118 | 12, 0, 162, 2, 0x0a /* Public */, 119 | 13, 0, 163, 2, 0x0a /* Public */, 120 | 14, 0, 164, 2, 0x0a /* Public */, 121 | 15, 1, 165, 2, 0x0a /* Public */, 122 | 16, 1, 168, 2, 0x0a /* Public */, 123 | 18, 1, 171, 2, 0x0a /* Public */, 124 | 20, 0, 174, 2, 0x0a /* Public */, 125 | 21, 0, 175, 2, 0x0a /* Public */, 126 | 22, 0, 176, 2, 0x0a /* Public */, 127 | 23, 0, 177, 2, 0x0a /* Public */, 128 | 24, 0, 178, 2, 0x09 /* Protected */, 129 | 25, 1, 179, 2, 0x09 /* Protected */, 130 | 28, 1, 182, 2, 0x09 /* Protected */, 131 | 29, 0, 185, 2, 0x09 /* Protected */, 132 | 30, 1, 186, 2, 0x09 /* Protected */, 133 | 23, 2, 189, 2, 0x09 /* Protected */, 134 | 34, 1, 194, 2, 0x09 /* Protected */, 135 | 35, 0, 197, 2, 0x09 /* Protected */, 136 | 137 | // signals: parameters 138 | QMetaType::Void, QMetaType::QObjectStar, QMetaType::QString, 2, 2, 139 | QMetaType::Void, QMetaType::QObjectStar, QMetaType::QString, 4, 5, 140 | QMetaType::Void, QMetaType::QObjectStar, QMetaType::QString, 4, 5, 141 | QMetaType::Void, QMetaType::QObjectStar, QMetaType::QPoint, 4, 8, 142 | QMetaType::Void, 143 | QMetaType::Void, 144 | 145 | // slots: parameters 146 | QMetaType::Void, 147 | QMetaType::Void, 148 | QMetaType::Void, 149 | QMetaType::Void, 150 | QMetaType::Void, QMetaType::Bool, 2, 151 | QMetaType::Void, QMetaType::QString, 17, 152 | QMetaType::Void, QMetaType::QString, 19, 153 | QMetaType::Void, 154 | QMetaType::Void, 155 | QMetaType::Void, 156 | QMetaType::Void, 157 | QMetaType::Void, 158 | QMetaType::Void, 0x80000000 | 26, 27, 159 | QMetaType::Void, 0x80000000 | 26, 2, 160 | QMetaType::Void, 161 | QMetaType::Void, QMetaType::QPoint, 31, 162 | QMetaType::Void, 0x80000000 | 32, 0x80000000 | 33, 2, 2, 163 | QMetaType::Void, QMetaType::Bool, 2, 164 | QMetaType::Void, 165 | 166 | // properties: name, type, flags 167 | 36, QMetaType::Bool, 0x00095103, 168 | 37, QMetaType::Bool, 0x00095103, 169 | 38, QMetaType::Bool, 0x00095103, 170 | 39, QMetaType::Bool, 0x00095103, 171 | 40, QMetaType::Bool, 0x00095103, 172 | 173 | 0 // eod 174 | }; 175 | 176 | void CQPropertyViewTree::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 177 | { 178 | if (_c == QMetaObject::InvokeMetaMethod) { 179 | auto *_t = static_cast(_o); 180 | (void)_t; 181 | switch (_id) { 182 | case 0: _t->valueChanged((*reinterpret_cast< QObject*(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; 183 | case 1: _t->itemClicked((*reinterpret_cast< QObject*(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; 184 | case 2: _t->itemSelected((*reinterpret_cast< QObject*(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; 185 | case 3: _t->menuExec((*reinterpret_cast< QObject*(*)>(_a[1])),(*reinterpret_cast< const QPoint(*)>(_a[2]))); break; 186 | case 4: _t->startUpdate(); break; 187 | case 5: _t->endUpdate(); break; 188 | case 6: _t->redraw(); break; 189 | case 7: _t->expandAll(); break; 190 | case 8: _t->collapseAll(); break; 191 | case 9: _t->expandSelected(); break; 192 | case 10: _t->setShowHidden((*reinterpret_cast< bool(*)>(_a[1]))); break; 193 | case 11: _t->setFilter((*reinterpret_cast< const QString(*)>(_a[1]))); break; 194 | case 12: _t->search((*reinterpret_cast< const QString(*)>(_a[1]))); break; 195 | case 13: _t->copySlot(); break; 196 | case 14: _t->printSlot(); break; 197 | case 15: _t->printChangedSlot(); break; 198 | case 16: _t->closeEditorSlot(); break; 199 | case 17: _t->modelResetSlot(); break; 200 | case 18: _t->itemClickedSlot((*reinterpret_cast< const QModelIndex(*)>(_a[1]))); break; 201 | case 19: _t->expandSlot((*reinterpret_cast< const QModelIndex(*)>(_a[1]))); break; 202 | case 20: _t->itemSelectionSlot(); break; 203 | case 21: _t->customContextMenuSlot((*reinterpret_cast< const QPoint(*)>(_a[1]))); break; 204 | case 22: _t->closeEditorSlot((*reinterpret_cast< QWidget*(*)>(_a[1])),(*reinterpret_cast< QAbstractItemDelegate::EndEditHint(*)>(_a[2]))); break; 205 | case 23: _t->autoUpdateSlot((*reinterpret_cast< bool(*)>(_a[1]))); break; 206 | case 24: _t->updateDirtySlot(); break; 207 | default: ; 208 | } 209 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 210 | switch (_id) { 211 | default: *reinterpret_cast(_a[0]) = -1; break; 212 | case 22: 213 | switch (*reinterpret_cast(_a[1])) { 214 | default: *reinterpret_cast(_a[0]) = -1; break; 215 | case 0: 216 | *reinterpret_cast(_a[0]) = qRegisterMetaType< QWidget* >(); break; 217 | } 218 | break; 219 | } 220 | } else if (_c == QMetaObject::IndexOfMethod) { 221 | int *result = reinterpret_cast(_a[0]); 222 | { 223 | using _t = void (CQPropertyViewTree::*)(QObject * , const QString & ); 224 | if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&CQPropertyViewTree::valueChanged)) { 225 | *result = 0; 226 | return; 227 | } 228 | } 229 | { 230 | using _t = void (CQPropertyViewTree::*)(QObject * , const QString & ); 231 | if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&CQPropertyViewTree::itemClicked)) { 232 | *result = 1; 233 | return; 234 | } 235 | } 236 | { 237 | using _t = void (CQPropertyViewTree::*)(QObject * , const QString & ); 238 | if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&CQPropertyViewTree::itemSelected)) { 239 | *result = 2; 240 | return; 241 | } 242 | } 243 | { 244 | using _t = void (CQPropertyViewTree::*)(QObject * , const QPoint & ); 245 | if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&CQPropertyViewTree::menuExec)) { 246 | *result = 3; 247 | return; 248 | } 249 | } 250 | { 251 | using _t = void (CQPropertyViewTree::*)(); 252 | if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&CQPropertyViewTree::startUpdate)) { 253 | *result = 4; 254 | return; 255 | } 256 | } 257 | { 258 | using _t = void (CQPropertyViewTree::*)(); 259 | if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&CQPropertyViewTree::endUpdate)) { 260 | *result = 5; 261 | return; 262 | } 263 | } 264 | } 265 | #ifndef QT_NO_PROPERTIES 266 | else if (_c == QMetaObject::ReadProperty) { 267 | auto *_t = static_cast(_o); 268 | (void)_t; 269 | void *_v = _a[0]; 270 | switch (_id) { 271 | case 0: *reinterpret_cast< bool*>(_v) = _t->isItemMenu(); break; 272 | case 1: *reinterpret_cast< bool*>(_v) = _t->isShowHidden(); break; 273 | case 2: *reinterpret_cast< bool*>(_v) = _t->isMouseHighlight(); break; 274 | case 3: *reinterpret_cast< bool*>(_v) = _t->isResizeOnShow(); break; 275 | case 4: *reinterpret_cast< bool*>(_v) = _t->isResizeOnExpand(); break; 276 | default: break; 277 | } 278 | } else if (_c == QMetaObject::WriteProperty) { 279 | auto *_t = static_cast(_o); 280 | (void)_t; 281 | void *_v = _a[0]; 282 | switch (_id) { 283 | case 0: _t->setItemMenu(*reinterpret_cast< bool*>(_v)); break; 284 | case 1: _t->setShowHidden(*reinterpret_cast< bool*>(_v)); break; 285 | case 2: _t->setMouseHighlight(*reinterpret_cast< bool*>(_v)); break; 286 | case 3: _t->setResizeOnShow(*reinterpret_cast< bool*>(_v)); break; 287 | case 4: _t->setResizeOnExpand(*reinterpret_cast< bool*>(_v)); break; 288 | default: break; 289 | } 290 | } else if (_c == QMetaObject::ResetProperty) { 291 | } 292 | #endif // QT_NO_PROPERTIES 293 | } 294 | 295 | QT_INIT_METAOBJECT const QMetaObject CQPropertyViewTree::staticMetaObject = { { 296 | QMetaObject::SuperData::link(), 297 | qt_meta_stringdata_CQPropertyViewTree.data, 298 | qt_meta_data_CQPropertyViewTree, 299 | qt_static_metacall, 300 | nullptr, 301 | nullptr 302 | } }; 303 | 304 | 305 | const QMetaObject *CQPropertyViewTree::metaObject() const 306 | { 307 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 308 | } 309 | 310 | void *CQPropertyViewTree::qt_metacast(const char *_clname) 311 | { 312 | if (!_clname) return nullptr; 313 | if (!strcmp(_clname, qt_meta_stringdata_CQPropertyViewTree.stringdata0)) 314 | return static_cast(this); 315 | return QTreeView::qt_metacast(_clname); 316 | } 317 | 318 | int CQPropertyViewTree::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 319 | { 320 | _id = QTreeView::qt_metacall(_c, _id, _a); 321 | if (_id < 0) 322 | return _id; 323 | if (_c == QMetaObject::InvokeMetaMethod) { 324 | if (_id < 25) 325 | qt_static_metacall(this, _c, _id, _a); 326 | _id -= 25; 327 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 328 | if (_id < 25) 329 | qt_static_metacall(this, _c, _id, _a); 330 | _id -= 25; 331 | } 332 | #ifndef QT_NO_PROPERTIES 333 | else if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty 334 | || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { 335 | qt_static_metacall(this, _c, _id, _a); 336 | _id -= 5; 337 | } else if (_c == QMetaObject::QueryPropertyDesignable) { 338 | _id -= 5; 339 | } else if (_c == QMetaObject::QueryPropertyScriptable) { 340 | _id -= 5; 341 | } else if (_c == QMetaObject::QueryPropertyStored) { 342 | _id -= 5; 343 | } else if (_c == QMetaObject::QueryPropertyEditable) { 344 | _id -= 5; 345 | } else if (_c == QMetaObject::QueryPropertyUser) { 346 | _id -= 5; 347 | } 348 | #endif // QT_NO_PROPERTIES 349 | return _id; 350 | } 351 | 352 | // SIGNAL 0 353 | void CQPropertyViewTree::valueChanged(QObject * _t1, const QString & _t2) 354 | { 355 | void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))), const_cast(reinterpret_cast(std::addressof(_t2))) }; 356 | QMetaObject::activate(this, &staticMetaObject, 0, _a); 357 | } 358 | 359 | // SIGNAL 1 360 | void CQPropertyViewTree::itemClicked(QObject * _t1, const QString & _t2) 361 | { 362 | void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))), const_cast(reinterpret_cast(std::addressof(_t2))) }; 363 | QMetaObject::activate(this, &staticMetaObject, 1, _a); 364 | } 365 | 366 | // SIGNAL 2 367 | void CQPropertyViewTree::itemSelected(QObject * _t1, const QString & _t2) 368 | { 369 | void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))), const_cast(reinterpret_cast(std::addressof(_t2))) }; 370 | QMetaObject::activate(this, &staticMetaObject, 2, _a); 371 | } 372 | 373 | // SIGNAL 3 374 | void CQPropertyViewTree::menuExec(QObject * _t1, const QPoint & _t2) 375 | { 376 | void *_a[] = { nullptr, const_cast(reinterpret_cast(std::addressof(_t1))), const_cast(reinterpret_cast(std::addressof(_t2))) }; 377 | QMetaObject::activate(this, &staticMetaObject, 3, _a); 378 | } 379 | 380 | // SIGNAL 4 381 | void CQPropertyViewTree::startUpdate() 382 | { 383 | QMetaObject::activate(this, &staticMetaObject, 4, nullptr); 384 | } 385 | 386 | // SIGNAL 5 387 | void CQPropertyViewTree::endUpdate() 388 | { 389 | QMetaObject::activate(this, &staticMetaObject, 5, nullptr); 390 | } 391 | QT_WARNING_POP 392 | QT_END_MOC_NAMESPACE 393 | -------------------------------------------------------------------------------- /src/.moc/moc_predefs.h: -------------------------------------------------------------------------------- 1 | #define __DBL_MIN_EXP__ (-1021) 2 | #define __UINT_LEAST16_MAX__ 0xffff 3 | #define __FLT16_HAS_QUIET_NAN__ 1 4 | #define __ATOMIC_ACQUIRE 2 5 | #define __FLT128_MAX_10_EXP__ 4932 6 | #define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F 7 | #define __GCC_IEC_559_COMPLEX 2 8 | #define __UINT_LEAST8_TYPE__ unsigned char 9 | #define __SIZEOF_FLOAT80__ 16 10 | #define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 11 | #define __INTMAX_C(c) c ## L 12 | #define __CHAR_BIT__ 8 13 | #define __UINT8_MAX__ 0xff 14 | #define __SCHAR_WIDTH__ 8 15 | #define __WINT_MAX__ 0xffffffffU 16 | #define __FLT32_MIN_EXP__ (-125) 17 | #define __cpp_static_assert 200410L 18 | #define __BFLT16_MIN_10_EXP__ (-37) 19 | #define __ORDER_LITTLE_ENDIAN__ 1234 20 | #define __WCHAR_MAX__ 0x7fffffff 21 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 22 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 23 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 24 | #define __GCC_ATOMIC_CHAR_LOCK_FREE 2 25 | #define __GCC_IEC_559 2 26 | #define __FLT32X_DECIMAL_DIG__ 17 27 | #define __FLT_EVAL_METHOD__ 0 28 | #define __cpp_binary_literals 201304L 29 | #define __FLT64_DECIMAL_DIG__ 17 30 | #define __CET__ 3 31 | #define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 32 | #define __cpp_variadic_templates 200704L 33 | #define __UINT_FAST64_MAX__ 0xffffffffffffffffUL 34 | #define __SIG_ATOMIC_TYPE__ int 35 | #define __DBL_MIN_10_EXP__ (-307) 36 | #define __FINITE_MATH_ONLY__ 0 37 | #define __FLT32X_MAX_EXP__ 1024 38 | #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 39 | #define __FLT32_HAS_DENORM__ 1 40 | #define __UINT_FAST8_MAX__ 0xff 41 | #define __cpp_rvalue_reference 200610L 42 | #define __FLT32_MAX_10_EXP__ 38 43 | #define __DEC64_MAX_EXP__ 385 44 | #define __INT8_C(c) c 45 | #define __LDBL_HAS_INFINITY__ 1 46 | #define __INT_LEAST8_WIDTH__ 8 47 | #define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL 48 | #define __INT_LEAST8_MAX__ 0x7f 49 | #define __cpp_attributes 200809L 50 | #define __SHRT_MAX__ 0x7fff 51 | #define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L 52 | #define __FLT64X_MAX_10_EXP__ 4932 53 | #define __BFLT16_MAX_10_EXP__ 38 54 | #define __BFLT16_MAX_EXP__ 128 55 | #define __LDBL_IS_IEC_60559__ 1 56 | #define __FLT64X_HAS_QUIET_NAN__ 1 57 | #define __UINT_LEAST8_MAX__ 0xff 58 | #define __GCC_ATOMIC_BOOL_LOCK_FREE 2 59 | #define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 60 | #define __UINTMAX_TYPE__ long unsigned int 61 | #define __cpp_nsdmi 200809L 62 | #define __BFLT16_DECIMAL_DIG__ 4 63 | #define __linux 1 64 | #define __DEC32_EPSILON__ 1E-6DF 65 | #define __FLT_EVAL_METHOD_TS_18661_3__ 0 66 | #define __OPTIMIZE__ 1 67 | #define __UINT32_MAX__ 0xffffffffU 68 | #define __GXX_EXPERIMENTAL_CXX0X__ 1 69 | #define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) 70 | #define __FLT128_MIN_EXP__ (-16381) 71 | #define __WINT_MIN__ 0U 72 | #define __FLT128_MIN_10_EXP__ (-4931) 73 | #define __FLT32X_IS_IEC_60559__ 1 74 | #define __INT_LEAST16_WIDTH__ 16 75 | #define __SCHAR_MAX__ 0x7f 76 | #define __FLT128_MANT_DIG__ 113 77 | #define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) 78 | #define __INT64_C(c) c ## L 79 | #define __SSP_STRONG__ 3 80 | #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 81 | #define __ATOMIC_SEQ_CST 5 82 | #define _FORTIFY_SOURCE 3 83 | #define __unix 1 84 | #define __INT_LEAST64_MAX__ 0x7fffffffffffffffL 85 | #define __FLT32X_MANT_DIG__ 53 86 | #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 87 | #define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x 88 | #define __STDC_HOSTED__ 1 89 | #define __DEC64_MIN_EXP__ (-382) 90 | #define __DBL_DIG__ 15 91 | #define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F 92 | #define __GXX_WEAK__ 1 93 | #define __SHRT_WIDTH__ 16 94 | #define __FLT32_IS_IEC_60559__ 1 95 | #define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L 96 | #define __DBL_IS_IEC_60559__ 1 97 | #define __DEC32_MAX__ 9.999999E96DF 98 | #define __cpp_threadsafe_static_init 200806L 99 | #define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x 100 | #define __FLT32X_HAS_INFINITY__ 1 101 | #define __unix__ 1 102 | #define __INT_WIDTH__ 32 103 | #define __STDC_IEC_559__ 1 104 | #define __STDC_ISO_10646__ 201706L 105 | #define __DECIMAL_DIG__ 21 106 | #define __STDC_IEC_559_COMPLEX__ 1 107 | #define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 108 | #define __gnu_linux__ 1 109 | #define __INT16_MAX__ 0x7fff 110 | #define __FLT64_MIN_EXP__ (-1021) 111 | #define __FLT64X_MIN_10_EXP__ (-4931) 112 | #define __LDBL_HAS_QUIET_NAN__ 1 113 | #define __FLT16_MIN_EXP__ (-13) 114 | #define __FLT64_MANT_DIG__ 53 115 | #define __FLT64X_MANT_DIG__ 64 116 | #define __BFLT16_DIG__ 2 117 | #define __GNUC__ 13 118 | #define __GXX_RTTI 1 119 | #define __MMX__ 1 120 | #define __FLT_HAS_DENORM__ 1 121 | #define __SIZEOF_LONG_DOUBLE__ 16 122 | #define __BIGGEST_ALIGNMENT__ 16 123 | #define __STDC_UTF_16__ 1 124 | #define __FLT64_MAX_10_EXP__ 308 125 | #define __BFLT16_IS_IEC_60559__ 0 126 | #define __FLT16_MAX_10_EXP__ 4 127 | #define __cpp_delegating_constructors 200604L 128 | #define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) 129 | #define __cpp_raw_strings 200710L 130 | #define __INT_FAST32_MAX__ 0x7fffffffffffffffL 131 | #define __DBL_HAS_INFINITY__ 1 132 | #define __INT64_MAX__ 0x7fffffffffffffffL 133 | #define __SIZEOF_FLOAT__ 4 134 | #define __HAVE_SPECULATION_SAFE_VALUE 1 135 | #define __DEC32_MIN_EXP__ (-94) 136 | #define __INTPTR_WIDTH__ 64 137 | #define __UINT_LEAST32_MAX__ 0xffffffffU 138 | #define __FLT32X_HAS_DENORM__ 1 139 | #define __INT_FAST16_TYPE__ long int 140 | #define __MMX_WITH_SSE__ 1 141 | #define __LDBL_HAS_DENORM__ 1 142 | #define __SEG_GS 1 143 | #define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 144 | #define __cplusplus 201103L 145 | #define __cpp_ref_qualifiers 200710L 146 | #define __DEC32_MIN__ 1E-95DF 147 | #define __DEPRECATED 1 148 | #define __cpp_rvalue_references 200610L 149 | #define __DBL_MAX_EXP__ 1024 150 | #define __WCHAR_WIDTH__ 32 151 | #define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 152 | #define __DEC128_EPSILON__ 1E-33DL 153 | #define __FLT16_DECIMAL_DIG__ 5 154 | #define __SSE2_MATH__ 1 155 | #define __ATOMIC_HLE_RELEASE 131072 156 | #define __PTRDIFF_MAX__ 0x7fffffffffffffffL 157 | #define __amd64 1 158 | #define __ATOMIC_HLE_ACQUIRE 65536 159 | #define __GNUG__ 13 160 | #define __LONG_LONG_MAX__ 0x7fffffffffffffffLL 161 | #define __SIZEOF_SIZE_T__ 8 162 | #define __BFLT16_HAS_INFINITY__ 1 163 | #define __FLT64X_MIN_EXP__ (-16381) 164 | #define __SIZEOF_WINT_T__ 4 165 | #define __FLT32X_DIG__ 15 166 | #define __LONG_LONG_WIDTH__ 64 167 | #define __cpp_initializer_lists 200806L 168 | #define __FLT32_MAX_EXP__ 128 169 | #define __cpp_hex_float 201603L 170 | #define __GXX_ABI_VERSION 1018 171 | #define __FLT_MIN_EXP__ (-125) 172 | #define __GCC_HAVE_DWARF2_CFI_ASM 1 173 | #define __x86_64 1 174 | #define __cpp_lambdas 200907L 175 | #define __INT_FAST64_TYPE__ long int 176 | #define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 177 | #define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 178 | #define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 179 | #define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 180 | #define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x 181 | #define __SIZEOF_POINTER__ 8 182 | #define __SIZE_TYPE__ long unsigned int 183 | #define __LP64__ 1 184 | #define __DBL_HAS_QUIET_NAN__ 1 185 | #define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x 186 | #define __LDBL_MAX_EXP__ 16384 187 | #define __DECIMAL_BID_FORMAT__ 1 188 | #define __FLT64_MIN_10_EXP__ (-307) 189 | #define __FLT16_MIN_10_EXP__ (-4) 190 | #define __FLT64X_DECIMAL_DIG__ 21 191 | #define __DEC128_MIN__ 1E-6143DL 192 | #define __REGISTER_PREFIX__ 193 | #define __UINT16_MAX__ 0xffff 194 | #define __FLT128_HAS_INFINITY__ 1 195 | #define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 196 | #define __UINT8_TYPE__ unsigned char 197 | #define __FLT_DIG__ 6 198 | #define __DEC_EVAL_METHOD__ 2 199 | #define __FLT_MANT_DIG__ 24 200 | #define __LDBL_DECIMAL_DIG__ 21 201 | #define __VERSION__ "13.2.0" 202 | #define __UINT64_C(c) c ## UL 203 | #define __cpp_unicode_characters 200704L 204 | #define _STDC_PREDEF_H 1 205 | #define __INT_LEAST32_MAX__ 0x7fffffff 206 | #define __GCC_ATOMIC_INT_LOCK_FREE 2 207 | #define __FLT128_MAX_EXP__ 16384 208 | #define __FLT32_MANT_DIG__ 24 209 | #define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ 210 | #define __FLT32X_MIN_EXP__ (-1021) 211 | #define __STDC_IEC_60559_COMPLEX__ 201404L 212 | #define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 213 | #define __FLT128_HAS_DENORM__ 1 214 | #define __FLT32_DECIMAL_DIG__ 9 215 | #define __FLT128_DIG__ 33 216 | #define __INT32_C(c) c 217 | #define __DEC64_EPSILON__ 1E-15DD 218 | #define __ORDER_PDP_ENDIAN__ 3412 219 | #define __DEC128_MIN_EXP__ (-6142) 220 | #define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL 221 | #define __INT_FAST32_TYPE__ long int 222 | #define __UINT_LEAST16_TYPE__ short unsigned int 223 | #define __DEC128_MAX_EXP__ 6145 224 | #define unix 1 225 | #define __DBL_HAS_DENORM__ 1 226 | #define __cpp_rtti 199711L 227 | #define __UINT64_MAX__ 0xffffffffffffffffUL 228 | #define __FLT_IS_IEC_60559__ 1 229 | #define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" 230 | #define __FLT64X_DIG__ 18 231 | #define __INT8_TYPE__ signed char 232 | #define __ELF__ 1 233 | #define __GCC_ASM_FLAG_OUTPUTS__ 1 234 | #define __UINT32_TYPE__ unsigned int 235 | #define __BFLT16_HAS_QUIET_NAN__ 1 236 | #define __FLT_RADIX__ 2 237 | #define __INT_LEAST16_TYPE__ short int 238 | #define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L 239 | #define __UINTMAX_C(c) c ## UL 240 | #define __FLT16_DIG__ 3 241 | #define __k8 1 242 | #define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x 243 | #define __SIG_ATOMIC_MAX__ 0x7fffffff 244 | #define __cpp_constexpr 200704L 245 | #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 246 | #define __USER_LABEL_PREFIX__ 247 | #define __STDC_IEC_60559_BFP__ 201404L 248 | #define __SIZEOF_PTRDIFF_T__ 8 249 | #define __FLT64X_HAS_INFINITY__ 1 250 | #define __SIZEOF_LONG__ 8 251 | #define __LDBL_DIG__ 18 252 | #define __FLT64_IS_IEC_60559__ 1 253 | #define __x86_64__ 1 254 | #define __FLT16_IS_IEC_60559__ 1 255 | #define __FLT16_MAX_EXP__ 16 256 | #define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF 257 | #define __INT_FAST16_MAX__ 0x7fffffffffffffffL 258 | #define __GCC_CONSTRUCTIVE_SIZE 64 259 | #define __FLT64_DIG__ 15 260 | #define __UINT_FAST32_MAX__ 0xffffffffffffffffUL 261 | #define __UINT_LEAST64_TYPE__ long unsigned int 262 | #define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 263 | #define __FLT_HAS_QUIET_NAN__ 1 264 | #define __FLT_MAX_10_EXP__ 38 265 | #define __LONG_MAX__ 0x7fffffffffffffffL 266 | #define __FLT64X_HAS_DENORM__ 1 267 | #define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL 268 | #define __FLT_HAS_INFINITY__ 1 269 | #define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" 270 | #define __cpp_unicode_literals 200710L 271 | #define __UINT_FAST16_TYPE__ long unsigned int 272 | #define __DEC64_MAX__ 9.999999999999999E384DD 273 | #define __INT_FAST32_WIDTH__ 64 274 | #define __CHAR16_TYPE__ short unsigned int 275 | #define __PRAGMA_REDEFINE_EXTNAME 1 276 | #define __SIZE_WIDTH__ 64 277 | #define __SEG_FS 1 278 | #define __INT_LEAST16_MAX__ 0x7fff 279 | #define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 280 | #define __DEC64_MANT_DIG__ 16 281 | #define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 282 | #define __SIG_ATOMIC_WIDTH__ 32 283 | #define __INT_LEAST64_TYPE__ long int 284 | #define __INT16_TYPE__ short int 285 | #define __INT_LEAST8_TYPE__ signed char 286 | #define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 287 | #define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 288 | #define __SIZEOF_INT__ 4 289 | #define __DEC32_MAX_EXP__ 97 290 | #define __INT_FAST8_MAX__ 0x7f 291 | #define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 292 | #define __INTPTR_MAX__ 0x7fffffffffffffffL 293 | #define linux 1 294 | #define __FLT64_HAS_QUIET_NAN__ 1 295 | #define __FLT32_MIN_10_EXP__ (-37) 296 | #define __EXCEPTIONS 1 297 | #define __UINT16_C(c) c 298 | #define __PTRDIFF_WIDTH__ 64 299 | #define __LDBL_MANT_DIG__ 64 300 | #define __cpp_range_based_for 200907L 301 | #define __INT_FAST16_WIDTH__ 64 302 | #define __FLT64_HAS_INFINITY__ 1 303 | #define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x 304 | #define __FLT16_HAS_INFINITY__ 1 305 | #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) 306 | #define __code_model_small__ 1 307 | #define __GCC_ATOMIC_LONG_LOCK_FREE 2 308 | #define __DEC32_MANT_DIG__ 7 309 | #define __k8__ 1 310 | #define __INTPTR_TYPE__ long int 311 | #define __UINT16_TYPE__ short unsigned int 312 | #define __WCHAR_TYPE__ int 313 | #define __pic__ 2 314 | #define __UINTPTR_MAX__ 0xffffffffffffffffUL 315 | #define __INT_FAST64_WIDTH__ 64 316 | #define __cpp_decltype 200707L 317 | #define __INT_FAST64_MAX__ 0x7fffffffffffffffL 318 | #define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 319 | #define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F 320 | #define __FLT32_HAS_INFINITY__ 1 321 | #define __FLT64X_MAX_EXP__ 16384 322 | #define __UINT_FAST64_TYPE__ long unsigned int 323 | #define __BFLT16_MIN_EXP__ (-125) 324 | #define __INT_MAX__ 0x7fffffff 325 | #define __linux__ 1 326 | #define __INT64_TYPE__ long int 327 | #define __FLT_MAX_EXP__ 128 328 | #define __ORDER_BIG_ENDIAN__ 4321 329 | #define __DBL_MANT_DIG__ 53 330 | #define __cpp_inheriting_constructors 201511L 331 | #define __SIZEOF_FLOAT128__ 16 332 | #define __BFLT16_MANT_DIG__ 8 333 | #define __DEC64_MIN__ 1E-383DD 334 | #define __WINT_TYPE__ unsigned int 335 | #define __UINT_LEAST32_TYPE__ unsigned int 336 | #define __SIZEOF_SHORT__ 2 337 | #define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 338 | #define __SSE__ 1 339 | #define __LDBL_MIN_EXP__ (-16381) 340 | #define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 341 | #define __amd64__ 1 342 | #define __WINT_WIDTH__ 32 343 | #define __INT_LEAST64_WIDTH__ 64 344 | #define __FLT32X_MAX_10_EXP__ 308 345 | #define __SIZEOF_INT128__ 16 346 | #define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 347 | #define __FLT64X_IS_IEC_60559__ 1 348 | #define __LDBL_MAX_10_EXP__ 4932 349 | #define __ATOMIC_RELAXED 0 350 | #define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) 351 | #define __INT_LEAST32_TYPE__ int 352 | #define _LP64 1 353 | #define __UINT8_C(c) c 354 | #define __FLT64_MAX_EXP__ 1024 355 | #define __SIZEOF_WCHAR_T__ 4 356 | #define __GNUC_PATCHLEVEL__ 0 357 | #define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 358 | #define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 359 | #define __FLT128_HAS_QUIET_NAN__ 1 360 | #define __INTMAX_MAX__ 0x7fffffffffffffffL 361 | #define __INT_FAST8_TYPE__ signed char 362 | #define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x 363 | #define __STDCPP_THREADS__ 1 364 | #define __BFLT16_HAS_DENORM__ 1 365 | #define __GNUC_STDC_INLINE__ 1 366 | #define __FLT64_HAS_DENORM__ 1 367 | #define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 368 | #define __FLT16_HAS_DENORM__ 1 369 | #define __DBL_DECIMAL_DIG__ 17 370 | #define __STDC_UTF_32__ 1 371 | #define __INT_FAST8_WIDTH__ 8 372 | #define __FXSR__ 1 373 | #define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x 374 | #define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) 375 | #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ 376 | #define __GCC_DESTRUCTIVE_SIZE 64 377 | #define __INTMAX_WIDTH__ 64 378 | #define __cpp_runtime_arrays 198712L 379 | #define __FLT32_DIG__ 6 380 | #define __UINT64_TYPE__ long unsigned int 381 | #define __UINT32_C(c) c ## U 382 | #define __cpp_alias_templates 200704L 383 | #define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F 384 | #define __FLT128_IS_IEC_60559__ 1 385 | #define __INT8_MAX__ 0x7f 386 | #define __LONG_WIDTH__ 64 387 | #define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) 388 | #define __PIC__ 2 389 | #define __INT32_MAX__ 0x7fffffff 390 | #define __UINT_FAST32_TYPE__ long unsigned int 391 | #define __FLT16_MANT_DIG__ 11 392 | #define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x 393 | #define __CHAR32_TYPE__ unsigned int 394 | #define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F 395 | #define __SSE2__ 1 396 | #define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 397 | #define __INT32_TYPE__ int 398 | #define __SIZEOF_DOUBLE__ 8 399 | #define __cpp_exceptions 199711L 400 | #define __FLT_MIN_10_EXP__ (-37) 401 | #define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 402 | #define __INT_LEAST32_WIDTH__ 32 403 | #define __INTMAX_TYPE__ long int 404 | #define __GLIBCXX_BITSIZE_INT_N_0 128 405 | #define __FLT32X_HAS_QUIET_NAN__ 1 406 | #define __ATOMIC_CONSUME 1 407 | #define __GNUC_MINOR__ 2 408 | #define __GLIBCXX_TYPE_INT_N_0 __int128 409 | #define __UINTMAX_MAX__ 0xffffffffffffffffUL 410 | #define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x 411 | #define __DBL_MAX_10_EXP__ 308 412 | #define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L 413 | #define __INT16_C(c) c 414 | #define __STDC__ 1 415 | #define __PTRDIFF_TYPE__ long int 416 | #define __FLT32X_MIN_10_EXP__ (-307) 417 | #define __UINTPTR_TYPE__ long unsigned int 418 | #define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD 419 | #define __DEC128_MANT_DIG__ 34 420 | #define __LDBL_MIN_10_EXP__ (-4931) 421 | #define __SSE_MATH__ 1 422 | #define __SIZEOF_LONG_LONG__ 8 423 | #define __cpp_user_defined_literals 200809L 424 | #define __FLT128_DECIMAL_DIG__ 36 425 | #define __GCC_ATOMIC_LLONG_LOCK_FREE 2 426 | #define __FLT32_HAS_QUIET_NAN__ 1 427 | #define __FLT_DECIMAL_DIG__ 9 428 | #define __UINT_FAST16_MAX__ 0xffffffffffffffffUL 429 | #define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L 430 | #define __GCC_ATOMIC_SHORT_LOCK_FREE 2 431 | #define __SIZE_MAX__ 0xffffffffffffffffUL 432 | #define __UINT_FAST8_TYPE__ unsigned char 433 | #define _GNU_SOURCE 1 434 | #define __ATOMIC_ACQ_REL 4 435 | #define __ATOMIC_RELEASE 3 436 | -------------------------------------------------------------------------------- /test/svg/filter_svg.h: -------------------------------------------------------------------------------- 1 | #ifndef FILTER_pixmap_H 2 | #define FILTER_pixmap_H 3 | 4 | #include 5 | 6 | class FILTER_pixmap { 7 | private: 8 | uchar data_[3401] = { 9 | 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31, 10 | 0x2e,0x30,0x22,0x20,0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22,0x55,0x54, 11 | 0x46,0x2d,0x38,0x22,0x20,0x73,0x74,0x61,0x6e,0x64,0x61,0x6c,0x6f,0x6e,0x65,0x3d, 12 | 0x22,0x6e,0x6f,0x22,0x3f,0x3e,0x0a,0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65, 13 | 0x72,0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65,0x20,0x49,0x6c,0x6c, 14 | 0x75,0x73,0x74,0x72,0x61,0x74,0x6f,0x72,0x20,0x39,0x2e,0x30,0x2c,0x20,0x53,0x56, 15 | 0x47,0x20,0x45,0x78,0x70,0x6f,0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, 16 | 0x20,0x20,0x0a,0x2d,0x2d,0x3e,0x0a,0x0a,0x3c,0x73,0x76,0x67,0x0a,0x20,0x20,0x20, 17 | 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, 18 | 0x2f,0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65, 19 | 0x6d,0x65,0x6e,0x74,0x73,0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20,0x20,0x78, 20 | 0x6d,0x6c,0x6e,0x73,0x3a,0x63,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, 21 | 0x63,0x72,0x65,0x61,0x74,0x69,0x76,0x65,0x63,0x6f,0x6d,0x6d,0x6f,0x6e,0x73,0x2e, 22 | 0x6f,0x72,0x67,0x2f,0x6e,0x73,0x23,0x22,0x0a,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e, 23 | 0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, 24 | 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32, 25 | 0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,0x78,0x2d,0x6e, 26 | 0x73,0x23,0x22,0x0a,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73,0x76,0x67, 27 | 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, 28 | 0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x0a,0x20,0x20, 29 | 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, 30 | 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73, 31 | 0x76,0x67,0x22,0x0a,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x73,0x6f,0x64, 32 | 0x69,0x70,0x6f,0x64,0x69,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x6f, 33 | 0x64,0x69,0x70,0x6f,0x64,0x69,0x2e,0x73,0x6f,0x75,0x72,0x63,0x65,0x66,0x6f,0x72, 34 | 0x67,0x65,0x2e,0x6e,0x65,0x74,0x2f,0x44,0x54,0x44,0x2f,0x73,0x6f,0x64,0x69,0x70, 35 | 0x6f,0x64,0x69,0x2d,0x30,0x2e,0x64,0x74,0x64,0x22,0x0a,0x20,0x20,0x20,0x78,0x6d, 36 | 0x6c,0x6e,0x73,0x3a,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3d,0x22,0x68,0x74, 37 | 0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70, 38 | 0x65,0x2e,0x6f,0x72,0x67,0x2f,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x73, 39 | 0x2f,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x22,0x0a,0x20,0x20,0x20,0x77,0x69, 40 | 0x64,0x74,0x68,0x3d,0x22,0x34,0x38,0x70,0x74,0x22,0x0a,0x20,0x20,0x20,0x68,0x65, 41 | 0x69,0x67,0x68,0x74,0x3d,0x22,0x34,0x38,0x70,0x74,0x22,0x0a,0x20,0x20,0x20,0x76, 42 | 0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x34,0x38,0x20,0x34, 43 | 0x38,0x22,0x0a,0x20,0x20,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, 44 | 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x0a,0x20,0x20,0x20,0x69,0x64, 45 | 0x3d,0x22,0x73,0x76,0x67,0x32,0x22,0x0a,0x20,0x20,0x20,0x76,0x65,0x72,0x73,0x69, 46 | 0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31,0x22,0x0a,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73, 47 | 0x63,0x61,0x70,0x65,0x3a,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x30,0x2e, 48 | 0x39,0x31,0x20,0x72,0x31,0x33,0x37,0x32,0x35,0x22,0x0a,0x20,0x20,0x20,0x73,0x6f, 49 | 0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x64,0x6f,0x63,0x6e,0x61,0x6d,0x65,0x3d,0x22, 50 | 0x66,0x69,0x6c,0x74,0x65,0x72,0x2e,0x73,0x76,0x67,0x22,0x3e,0x3c,0x6d,0x65,0x74, 51 | 0x61,0x64,0x61,0x74,0x61,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6d, 52 | 0x65,0x74,0x61,0x64,0x61,0x74,0x61,0x32,0x38,0x22,0x3e,0x3c,0x72,0x64,0x66,0x3a, 53 | 0x52,0x44,0x46,0x3e,0x3c,0x63,0x63,0x3a,0x57,0x6f,0x72,0x6b,0x0a,0x20,0x20,0x20, 54 | 0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d, 55 | 0x22,0x22,0x3e,0x3c,0x64,0x63,0x3a,0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e,0x69,0x6d, 56 | 0x61,0x67,0x65,0x2f,0x73,0x76,0x67,0x2b,0x78,0x6d,0x6c,0x3c,0x2f,0x64,0x63,0x3a, 57 | 0x66,0x6f,0x72,0x6d,0x61,0x74,0x3e,0x3c,0x64,0x63,0x3a,0x74,0x79,0x70,0x65,0x0a, 58 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x64,0x66,0x3a,0x72, 59 | 0x65,0x73,0x6f,0x75,0x72,0x63,0x65,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, 60 | 0x70,0x75,0x72,0x6c,0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x64,0x63,0x6d,0x69, 61 | 0x74,0x79,0x70,0x65,0x2f,0x53,0x74,0x69,0x6c,0x6c,0x49,0x6d,0x61,0x67,0x65,0x22, 62 | 0x20,0x2f,0x3e,0x3c,0x2f,0x63,0x63,0x3a,0x57,0x6f,0x72,0x6b,0x3e,0x3c,0x2f,0x72, 63 | 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x3c,0x2f,0x6d,0x65,0x74,0x61,0x64,0x61,0x74, 64 | 0x61,0x3e,0x3c,0x64,0x65,0x66,0x73,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d, 65 | 0x22,0x64,0x65,0x66,0x73,0x32,0x36,0x22,0x20,0x2f,0x3e,0x3c,0x73,0x6f,0x64,0x69, 66 | 0x70,0x6f,0x64,0x69,0x3a,0x6e,0x61,0x6d,0x65,0x64,0x76,0x69,0x65,0x77,0x0a,0x20, 67 | 0x20,0x20,0x20,0x20,0x70,0x61,0x67,0x65,0x63,0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x23, 68 | 0x66,0x66,0x66,0x66,0x66,0x66,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72, 69 | 0x64,0x65,0x72,0x63,0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x23,0x36,0x36,0x36,0x36,0x36, 70 | 0x36,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x6f,0x70, 71 | 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x31,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x6f, 72 | 0x62,0x6a,0x65,0x63,0x74,0x74,0x6f,0x6c,0x65,0x72,0x61,0x6e,0x63,0x65,0x3d,0x22, 73 | 0x31,0x30,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x67,0x72,0x69,0x64,0x74,0x6f,0x6c, 74 | 0x65,0x72,0x61,0x6e,0x63,0x65,0x3d,0x22,0x31,0x30,0x22,0x0a,0x20,0x20,0x20,0x20, 75 | 0x20,0x67,0x75,0x69,0x64,0x65,0x74,0x6f,0x6c,0x65,0x72,0x61,0x6e,0x63,0x65,0x3d, 76 | 0x22,0x31,0x30,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61, 77 | 0x70,0x65,0x3a,0x70,0x61,0x67,0x65,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, 78 | 0x30,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65, 79 | 0x3a,0x70,0x61,0x67,0x65,0x73,0x68,0x61,0x64,0x6f,0x77,0x3d,0x22,0x32,0x22,0x0a, 80 | 0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69, 81 | 0x6e,0x64,0x6f,0x77,0x2d,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x30,0x33,0x36, 82 | 0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a, 83 | 0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31, 84 | 0x35,0x30,0x38,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x6e,0x61, 85 | 0x6d,0x65,0x64,0x76,0x69,0x65,0x77,0x32,0x34,0x22,0x0a,0x20,0x20,0x20,0x20,0x20, 86 | 0x73,0x68,0x6f,0x77,0x67,0x72,0x69,0x64,0x3d,0x22,0x66,0x61,0x6c,0x73,0x65,0x22, 87 | 0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x7a, 88 | 0x6f,0x6f,0x6d,0x3d,0x22,0x31,0x39,0x2e,0x31,0x39,0x34,0x38,0x33,0x32,0x22,0x0a, 89 | 0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x78, 90 | 0x3d,0x22,0x33,0x33,0x2e,0x32,0x39,0x39,0x38,0x22,0x0a,0x20,0x20,0x20,0x20,0x20, 91 | 0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x79,0x3d,0x22,0x32,0x36,0x2e, 92 | 0x36,0x37,0x38,0x32,0x32,0x36,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b, 93 | 0x73,0x63,0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x78,0x3d,0x22, 94 | 0x34,0x39,0x30,0x32,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63, 95 | 0x61,0x70,0x65,0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x79,0x3d,0x22,0x35,0x35, 96 | 0x33,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65, 97 | 0x3a,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2d,0x6d,0x61,0x78,0x69,0x6d,0x69,0x7a,0x65, 98 | 0x64,0x3d,0x22,0x30,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63, 99 | 0x61,0x70,0x65,0x3a,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x2d,0x6c,0x61,0x79,0x65, 100 | 0x72,0x3d,0x22,0x73,0x76,0x67,0x32,0x22,0x20,0x2f,0x3e,0x3c,0x67,0x0a,0x20,0x20, 101 | 0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x4c,0x61,0x79,0x65,0x72,0x5f,0x78,0x30,0x30, 102 | 0x32,0x30,0x5f,0x33,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65, 103 | 0x3d,0x22,0x63,0x6c,0x69,0x70,0x2d,0x72,0x75,0x6c,0x65,0x3a,0x6e,0x6f,0x6e,0x7a, 104 | 0x65,0x72,0x6f,0x3b,0x66,0x69,0x6c,0x6c,0x3a,0x23,0x66,0x66,0x66,0x66,0x66,0x66, 105 | 0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x72,0x75,0x6c,0x65,0x3a,0x6e,0x6f,0x6e,0x7a,0x65, 106 | 0x72,0x6f,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3a,0x23,0x30,0x30,0x30,0x30,0x30, 107 | 0x30,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c,0x69, 108 | 0x6d,0x69,0x74,0x3a,0x34,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x74,0x72,0x61,0x6e, 109 | 0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x74,0x72,0x61,0x6e,0x73,0x6c,0x61,0x74,0x65, 110 | 0x28,0x30,0x2e,0x38,0x31,0x33,0x35,0x35,0x39,0x33,0x32,0x2c,0x30,0x29,0x22,0x3e, 111 | 0x3c,0x67,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d, 112 | 0x22,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3a,0x6e,0x6f,0x6e,0x65,0x22,0x0a,0x20,0x20, 113 | 0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x67,0x35,0x22,0x3e,0x3c,0x70,0x61, 114 | 0x74,0x68,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c, 115 | 0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x6e,0x6f,0x6e,0x65,0x3b,0x73,0x74,0x72, 116 | 0x6f,0x6b,0x65,0x3a,0x23,0x66,0x66,0x66,0x66,0x66,0x66,0x3b,0x73,0x74,0x72,0x6f, 117 | 0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x36,0x2e,0x39,0x36,0x31,0x32,0x30, 118 | 0x30,0x32,0x34,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d, 119 | 0x22,0x4d,0x20,0x33,0x37,0x2e,0x39,0x2c,0x33,0x38,0x2e,0x38,0x20,0x33,0x30,0x2e, 120 | 0x31,0x2c,0x33,0x31,0x20,0x63,0x20,0x2d,0x30,0x2e,0x37,0x2c,0x2d,0x30,0x2e,0x37, 121 | 0x20,0x2d,0x31,0x2e,0x38,0x2c,0x2d,0x30,0x2e,0x39,0x20,0x2d,0x32,0x2e,0x37,0x2c, 122 | 0x2d,0x30,0x2e,0x36,0x20,0x31,0x2e,0x38,0x2c,0x2d,0x32,0x2e,0x32,0x20,0x32,0x2e, 123 | 0x39,0x2c,0x2d,0x35,0x20,0x32,0x2e,0x39,0x2c,0x2d,0x38,0x20,0x30,0x2c,0x2d,0x36, 124 | 0x2e,0x39,0x20,0x2d,0x35,0x2e,0x36,0x2c,0x2d,0x31,0x32,0x2e,0x35,0x20,0x2d,0x31, 125 | 0x32,0x2e,0x35,0x2c,0x2d,0x31,0x32,0x2e,0x35,0x20,0x2d,0x36,0x2e,0x39,0x2c,0x30, 126 | 0x20,0x2d,0x31,0x32,0x2e,0x36,0x2c,0x35,0x2e,0x35,0x20,0x2d,0x31,0x32,0x2e,0x36, 127 | 0x2c,0x31,0x32,0x2e,0x34,0x20,0x30,0x2c,0x36,0x2e,0x39,0x20,0x35,0x2e,0x36,0x2c, 128 | 0x31,0x32,0x2e,0x35,0x20,0x31,0x32,0x2e,0x35,0x2c,0x31,0x32,0x2e,0x35,0x20,0x33, 129 | 0x2c,0x30,0x20,0x35,0x2e,0x38,0x2c,0x2d,0x31,0x2e,0x31,0x20,0x38,0x2c,0x2d,0x32, 130 | 0x2e,0x39,0x20,0x2d,0x30,0x2e,0x33,0x2c,0x30,0x2e,0x39,0x20,0x2d,0x30,0x2e,0x31, 131 | 0x2c,0x32,0x20,0x30,0x2e,0x36,0x2c,0x32,0x2e,0x37,0x20,0x6c,0x20,0x37,0x2e,0x38, 132 | 0x2c,0x37,0x2e,0x38,0x20,0x63,0x20,0x31,0x2c,0x31,0x20,0x32,0x2e,0x37,0x2c,0x31, 133 | 0x20,0x33,0x2e,0x37,0x2c,0x30,0x20,0x31,0x2c,0x2d,0x31,0x20,0x31,0x2c,0x2d,0x32, 134 | 0x2e,0x37,0x20,0x30,0x2c,0x2d,0x33,0x2e,0x37,0x20,0x7a,0x20,0x4d,0x20,0x31,0x37, 135 | 0x2e,0x38,0x2c,0x33,0x31,0x2e,0x35,0x20,0x63,0x20,0x2d,0x35,0x2e,0x31,0x2c,0x30, 136 | 0x20,0x2d,0x39,0x2e,0x32,0x2c,0x2d,0x34,0x2e,0x31,0x20,0x2d,0x39,0x2e,0x32,0x2c, 137 | 0x2d,0x39,0x2e,0x32,0x20,0x30,0x2c,0x2d,0x35,0x2e,0x31,0x20,0x34,0x2e,0x31,0x2c, 138 | 0x2d,0x39,0x2e,0x32,0x20,0x39,0x2e,0x32,0x2c,0x2d,0x39,0x2e,0x32,0x20,0x35,0x2e, 139 | 0x31,0x2c,0x30,0x20,0x39,0x2e,0x32,0x2c,0x34,0x2e,0x31,0x20,0x39,0x2e,0x32,0x2c, 140 | 0x39,0x2e,0x32,0x20,0x30,0x2c,0x35,0x2e,0x31,0x20,0x2d,0x34,0x2e,0x31,0x2c,0x39, 141 | 0x2e,0x32,0x20,0x2d,0x39,0x2e,0x32,0x2c,0x39,0x2e,0x32,0x20,0x7a,0x22,0x0a,0x20, 142 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74,0x68, 143 | 0x37,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73, 144 | 0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x6f,0x72,0x2d,0x63, 145 | 0x75,0x72,0x76,0x61,0x74,0x75,0x72,0x65,0x3d,0x22,0x30,0x22,0x20,0x2f,0x3e,0x3c, 146 | 0x70,0x61,0x74,0x68,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74, 147 | 0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x6e,0x6f,0x6e,0x65,0x3b,0x73, 148 | 0x74,0x72,0x6f,0x6b,0x65,0x3a,0x23,0x66,0x66,0x66,0x66,0x66,0x66,0x3b,0x73,0x74, 149 | 0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x31,0x33,0x2e,0x32,0x34, 150 | 0x34,0x39,0x39,0x39,0x38,0x39,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69, 151 | 0x6e,0x65,0x6a,0x6f,0x69,0x6e,0x3a,0x72,0x6f,0x75,0x6e,0x64,0x22,0x0a,0x20,0x20, 152 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d,0x22,0x6d,0x20,0x33,0x38,0x2e,0x33, 153 | 0x2c,0x31,0x37,0x2e,0x31,0x20,0x30,0x2c,0x32,0x30,0x2e,0x36,0x20,0x2d,0x32,0x35, 154 | 0x2e,0x33,0x2c,0x30,0x20,0x30,0x2c,0x2d,0x32,0x39,0x2e,0x32,0x20,0x31,0x36,0x2e, 155 | 0x39,0x2c,0x30,0x20,0x38,0x2e,0x33,0x2c,0x38,0x2e,0x35,0x20,0x7a,0x22,0x0a,0x20, 156 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74,0x68, 157 | 0x39,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73, 158 | 0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x6f,0x72,0x2d,0x63, 159 | 0x75,0x72,0x76,0x61,0x74,0x75,0x72,0x65,0x3d,0x22,0x30,0x22,0x20,0x2f,0x3e,0x3c, 160 | 0x70,0x61,0x74,0x68,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74, 161 | 0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c,0x6c,0x3a,0x6e,0x6f,0x6e,0x65,0x3b,0x73, 162 | 0x74,0x72,0x6f,0x6b,0x65,0x3a,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x3b,0x73,0x74, 163 | 0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69,0x64,0x74,0x68,0x3a,0x36,0x2e,0x36,0x32,0x32, 164 | 0x34,0x39,0x39,0x39,0x34,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e, 165 | 0x65,0x6a,0x6f,0x69,0x6e,0x3a,0x72,0x6f,0x75,0x6e,0x64,0x22,0x0a,0x20,0x20,0x20, 166 | 0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d,0x22,0x6d,0x20,0x33,0x38,0x2e,0x33,0x2c, 167 | 0x31,0x37,0x2e,0x31,0x20,0x30,0x2c,0x32,0x30,0x2e,0x36,0x20,0x2d,0x32,0x35,0x2e, 168 | 0x33,0x2c,0x30,0x20,0x30,0x2c,0x2d,0x32,0x39,0x2e,0x32,0x20,0x31,0x36,0x2e,0x39, 169 | 0x2c,0x30,0x20,0x38,0x2e,0x33,0x2c,0x38,0x2e,0x35,0x20,0x7a,0x22,0x0a,0x20,0x20, 170 | 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74,0x68,0x31, 171 | 0x31,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73, 172 | 0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x6f,0x72,0x2d,0x63, 173 | 0x75,0x72,0x76,0x61,0x74,0x75,0x72,0x65,0x3d,0x22,0x30,0x22,0x20,0x2f,0x3e,0x3c, 174 | 0x70,0x61,0x74,0x68,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d, 175 | 0x22,0x6d,0x20,0x33,0x38,0x2e,0x33,0x2c,0x31,0x37,0x2e,0x31,0x20,0x30,0x2c,0x32, 176 | 0x30,0x2e,0x36,0x20,0x2d,0x32,0x35,0x2e,0x33,0x2c,0x30,0x20,0x30,0x2c,0x2d,0x32, 177 | 0x39,0x2e,0x32,0x20,0x31,0x36,0x2e,0x39,0x2c,0x30,0x20,0x38,0x2e,0x33,0x2c,0x38, 178 | 0x2e,0x35,0x20,0x7a,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69, 179 | 0x64,0x3d,0x22,0x70,0x61,0x74,0x68,0x31,0x33,0x22,0x0a,0x20,0x20,0x20,0x20,0x20, 180 | 0x20,0x20,0x20,0x20,0x69,0x6e,0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,0x6e, 181 | 0x6e,0x65,0x63,0x74,0x6f,0x72,0x2d,0x63,0x75,0x72,0x76,0x61,0x74,0x75,0x72,0x65, 182 | 0x3d,0x22,0x30,0x22,0x20,0x2f,0x3e,0x3c,0x67,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, 183 | 0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x67,0x31,0x35,0x22,0x20,0x2f,0x3e,0x3c,0x2f, 184 | 0x67,0x3e,0x3c,0x2f,0x67,0x3e,0x3c,0x67,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x64, 185 | 0x3d,0x22,0x63,0x72,0x6f,0x70,0x5f,0x78,0x30,0x30,0x32,0x30,0x5f,0x6d,0x61,0x72, 186 | 0x6b,0x73,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22, 187 | 0x66,0x69,0x6c,0x6c,0x2d,0x72,0x75,0x6c,0x65,0x3a,0x6e,0x6f,0x6e,0x7a,0x65,0x72, 188 | 0x6f,0x3b,0x63,0x6c,0x69,0x70,0x2d,0x72,0x75,0x6c,0x65,0x3a,0x6e,0x6f,0x6e,0x7a, 189 | 0x65,0x72,0x6f,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3a,0x23,0x30,0x30,0x30,0x30, 190 | 0x30,0x30,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6d,0x69,0x74,0x65,0x72,0x6c, 191 | 0x69,0x6d,0x69,0x74,0x3a,0x34,0x3b,0x22,0x3e,0x3c,0x70,0x61,0x74,0x68,0x0a,0x20, 192 | 0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c, 193 | 0x6c,0x3a,0x6e,0x6f,0x6e,0x65,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x3a,0x6e,0x6f, 194 | 0x6e,0x65,0x3b,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x3d,0x22,0x4d, 195 | 0x34,0x38,0x2c,0x34,0x38,0x48,0x30,0x56,0x30,0x68,0x34,0x38,0x76,0x34,0x38,0x7a, 196 | 0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70,0x61,0x74, 197 | 0x68,0x32,0x32,0x22,0x20,0x2f,0x3e,0x3c,0x2f,0x67,0x3e,0x3c,0x70,0x61,0x74,0x68, 198 | 0x0a,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22,0x66,0x69,0x6c, 199 | 0x6c,0x3a,0x23,0x30,0x30,0x30,0x30,0x30,0x30,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x6f, 200 | 0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x3b,0x66,0x69,0x6c,0x6c,0x2d,0x72,0x75, 201 | 0x6c,0x65,0x3a,0x65,0x76,0x65,0x6e,0x6f,0x64,0x64,0x3b,0x73,0x74,0x72,0x6f,0x6b, 202 | 0x65,0x3a,0x6e,0x6f,0x6e,0x65,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x77,0x69, 203 | 0x64,0x74,0x68,0x3a,0x30,0x2e,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x70,0x78, 204 | 0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65,0x63,0x61,0x70,0x3a, 205 | 0x62,0x75,0x74,0x74,0x3b,0x73,0x74,0x72,0x6f,0x6b,0x65,0x2d,0x6c,0x69,0x6e,0x65, 206 | 0x6a,0x6f,0x69,0x6e,0x3a,0x6d,0x69,0x74,0x65,0x72,0x3b,0x73,0x74,0x72,0x6f,0x6b, 207 | 0x65,0x2d,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3a,0x31,0x22,0x0a,0x20,0x20,0x20, 208 | 0x20,0x20,0x64,0x3d,0x22,0x6d,0x20,0x31,0x36,0x2e,0x31,0x33,0x37,0x34,0x39,0x36, 209 | 0x2c,0x31,0x35,0x2e,0x38,0x37,0x34,0x32,0x36,0x34,0x20,0x31,0x37,0x2e,0x37,0x31, 210 | 0x38,0x39,0x2c,0x2d,0x30,0x2e,0x30,0x34,0x31,0x36,0x38,0x20,0x2d,0x37,0x2e,0x30, 211 | 0x36,0x33,0x30,0x31,0x32,0x2c,0x39,0x2e,0x32,0x38,0x39,0x33,0x39,0x36,0x20,0x2d, 212 | 0x30,0x2e,0x32,0x37,0x38,0x35,0x37,0x38,0x2c,0x31,0x30,0x2e,0x38,0x30,0x37,0x32, 213 | 0x35,0x37,0x20,0x2d,0x33,0x2e,0x36,0x31,0x39,0x36,0x30,0x36,0x2c,0x2d,0x32,0x2e, 214 | 0x31,0x33,0x32,0x30,0x33,0x36,0x20,0x30,0x2c,0x2d,0x38,0x2e,0x39,0x30,0x35,0x35, 215 | 0x33,0x37,0x20,0x7a,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3d,0x22,0x70, 216 | 0x61,0x74,0x68,0x34,0x31,0x37,0x35,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x69,0x6e, 217 | 0x6b,0x73,0x63,0x61,0x70,0x65,0x3a,0x63,0x6f,0x6e,0x6e,0x65,0x63,0x74,0x6f,0x72, 218 | 0x2d,0x63,0x75,0x72,0x76,0x61,0x74,0x75,0x72,0x65,0x3d,0x22,0x30,0x22,0x0a,0x20, 219 | 0x20,0x20,0x20,0x20,0x73,0x6f,0x64,0x69,0x70,0x6f,0x64,0x69,0x3a,0x6e,0x6f,0x64, 220 | 0x65,0x74,0x79,0x70,0x65,0x73,0x3d,0x22,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x22, 221 | 0x20,0x2f,0x3e,0x3c,0x2f,0x73,0x76,0x67,0x3e, 222 | }; 223 | 224 | public: 225 | FILTER_pixmap() { 226 | CQPixmapCache::instance()->addData("FILTER", data_, 3401); 227 | } 228 | }; 229 | 230 | static FILTER_pixmap s_FILTER_pixmap; 231 | 232 | #endif 233 | --------------------------------------------------------------------------------