window-extra-browsers.hpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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)
  25. : QAbstractTableModel(parent)
  26. {
  27. Reset();
  28. QMetaObject::invokeMethod(this, "Init", Qt::QueuedConnection);
  29. }
  30. int rowCount(const QModelIndex &parent = QModelIndex()) const override;
  31. int
  32. columnCount(const QModelIndex &parent = QModelIndex()) const override;
  33. QVariant data(const QModelIndex &index, int role) const override;
  34. QVariant headerData(int section, Qt::Orientation orientation,
  35. int role = Qt::DisplayRole) const override;
  36. Qt::ItemFlags flags(const QModelIndex &index) const override;
  37. struct Item {
  38. int prevIdx;
  39. QString title;
  40. QString url;
  41. };
  42. void TabSelection(bool forward);
  43. void AddDeleteButton(int idx);
  44. void Reset();
  45. void CheckToAdd();
  46. void UpdateItem(Item &item);
  47. void DeleteItem();
  48. void Apply();
  49. QVector<Item> items;
  50. QVector<int> deleted;
  51. QString newTitle;
  52. QString newURL;
  53. public slots:
  54. void Init();
  55. };
  56. class ExtraBrowsersDelegate : public QStyledItemDelegate {
  57. Q_OBJECT
  58. public:
  59. inline ExtraBrowsersDelegate(ExtraBrowsersModel *model_)
  60. : QStyledItemDelegate(nullptr),
  61. model(model_)
  62. {
  63. }
  64. QWidget *createEditor(QWidget *parent,
  65. const QStyleOptionViewItem &option,
  66. const QModelIndex &index) const override;
  67. void setEditorData(QWidget *editor,
  68. const QModelIndex &index) const override;
  69. bool eventFilter(QObject *object, QEvent *event) override;
  70. void RevertText(QLineEdit *edit);
  71. bool UpdateText(QLineEdit *edit);
  72. bool ValidName(const QString &text) const;
  73. ExtraBrowsersModel *model;
  74. };