ExtraBrowsersModel.hpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #pragma once
  2. #include <QDialog>
  3. #include <QScopedPointer>
  4. #include <QAbstractTableModel>
  5. #include <QStyledItemDelegate>
  6. #include <memory>
  7. class Ui_OBSExtraBrowsers;
  8. class ExtraBrowsersModel;
  9. class QCefWidget;
  10. class OBSExtraBrowsers : public QDialog {
  11. Q_OBJECT
  12. std::unique_ptr<Ui_OBSExtraBrowsers> ui;
  13. ExtraBrowsersModel *model;
  14. public:
  15. OBSExtraBrowsers(QWidget *parent);
  16. ~OBSExtraBrowsers();
  17. void closeEvent(QCloseEvent *event) override;
  18. public slots:
  19. void on_apply_clicked();
  20. };
  21. class ExtraBrowsersModel : public QAbstractTableModel {
  22. Q_OBJECT
  23. public:
  24. inline ExtraBrowsersModel(QObject *parent = nullptr) : QAbstractTableModel(parent)
  25. {
  26. Reset();
  27. QMetaObject::invokeMethod(this, "Init", Qt::QueuedConnection);
  28. }
  29. int rowCount(const QModelIndex &parent = QModelIndex()) const override;
  30. int columnCount(const QModelIndex &parent = QModelIndex()) const override;
  31. QVariant data(const QModelIndex &index, int role) const override;
  32. QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
  33. Qt::ItemFlags flags(const QModelIndex &index) const override;
  34. struct Item {
  35. int prevIdx;
  36. QString title;
  37. QString url;
  38. };
  39. void TabSelection(bool forward);
  40. void AddDeleteButton(int idx);
  41. void Reset();
  42. void CheckToAdd();
  43. void UpdateItem(Item &item);
  44. void DeleteItem();
  45. void Apply();
  46. QVector<Item> items;
  47. QVector<int> deleted;
  48. QString newTitle;
  49. QString newURL;
  50. public slots:
  51. void Init();
  52. };
  53. class ExtraBrowsersDelegate : public QStyledItemDelegate {
  54. Q_OBJECT
  55. public:
  56. inline ExtraBrowsersDelegate(ExtraBrowsersModel *model_) : QStyledItemDelegate(nullptr), model(model_) {}
  57. QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
  58. const QModelIndex &index) const override;
  59. void setEditorData(QWidget *editor, const QModelIndex &index) const override;
  60. bool eventFilter(QObject *object, QEvent *event) override;
  61. void RevertText(QLineEdit *edit);
  62. bool UpdateText(QLineEdit *edit);
  63. bool ValidName(const QString &text) const;
  64. ExtraBrowsersModel *model;
  65. };