1
0

window-extra-browsers.hpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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), model(model_)
  61. {
  62. }
  63. QWidget *createEditor(QWidget *parent,
  64. const QStyleOptionViewItem &option,
  65. const QModelIndex &index) const override;
  66. void setEditorData(QWidget *editor,
  67. const QModelIndex &index) const override;
  68. bool eventFilter(QObject *object, QEvent *event) override;
  69. void RevertText(QLineEdit *edit);
  70. bool UpdateText(QLineEdit *edit);
  71. bool ValidName(const QString &text) const;
  72. ExtraBrowsersModel *model;
  73. };