/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #ifndef MAPPINGTREEWIDGET_H #define MAPPINGTREEWIDGET_H #include #include #include "smtreeview.h" class MappingTreeView; class MappingTreeModel; class QComboBox; class QCheckBox; class QStringListModel; class MappingTreeResultModel; class QLineEdit; class MappingTreeProxy; // defined in mappingtreemodel.h struct MappingData; class MappingTreeWidget : public QWidget { Q_OBJECT public: explicit MappingTreeWidget(QWidget *parent = 0); MappingData selectedItem() const; public slots: void addChild(); void addType(); void deleteChild(); void deleteType(); void selectPath(const QList &data, bool reverse = true); protected: virtual void hideEvent(QHideEvent *event); private slots: void typeChanged(QString type); void editChild(); void selectionChanged(); void filter(); void clearFilter(); signals: void mappingChanged(int); private: const QModelIndex selected() const; MappingTreeView *mTree; MappingTreeModel *mModel; MappingTreeProxy *mProxy; QStringListModel *mTypesModel; QComboBox *mTypeBox; QLineEdit *mFilter; QPushButton *mDoFilter; QPushButton *mClearFilter; QPushButton *mAddType; QPushButton *mDeleteType; QAction *mAddChildA; QAction *mDeleteChildA; QAction *mEditChildA; }; class MappingTreeView : public SmTreeView { Q_OBJECT public: MappingTreeView(QWidget *parent = 0); protected: virtual void contextMenuEvent(QContextMenuEvent *e); }; class MappingTreeResultView : public SmTreeView { Q_OBJECT public: explicit MappingTreeResultView(QWidget *parent = 0); }; class MappingEditWidget : public QWidget { Q_OBJECT public: explicit MappingEditWidget(QWidget *parent = 0); const MappingTreeResultModel *model() const { return mResultModel; } public slots: void addMapping(); void removeMapping(); void setMappings(const QList &mappings); private slots: void resultMappingChanged(const QModelIndex &cur, const QModelIndex &prev); private: MappingTreeWidget *mMappingTree; MappingTreeResultView *mMappingResult; MappingTreeResultModel *mResultModel; QPushButton *mAddMapping; QPushButton *mRemoveMapping; }; class MappingInputDialog : public QDialog { Q_OBJECT public: explicit MappingInputDialog(QWidget *parent, Qt::WindowFlags f = 0); QString mappingName() const; bool createRoot() const; private: QPushButton *mOk; QPushButton *mCancel; QLineEdit *mEditor; QCheckBox *mIsRoot; }; class MappingEditDialog : public QDialog { Q_OBJECT public: explicit MappingEditDialog(QWidget *parent, Qt::WindowFlags f = 0); MappingEditWidget *editWidget() const { return mEditWidget; } private: MappingEditWidget *mEditWidget; QPushButton *mOk; QPushButton *mCancel; }; class MappingTreeProxy : public QSortFilterProxyModel { Q_OBJECT public: explicit MappingTreeProxy(QObject *parent = 0); public slots: void setFilter(const QString &filter); protected: virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; private: QRegExp mFilter; }; #endif // MAPPINGTREEWIDGET_H