window-extra-browsers.hpp 2.0 KB

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