LDLIBS=$(shell pkg-config --libs $(PKG_MODULES)) -pthread -lavformat -lavcodec -lavutil -lswscale
# Qt objects
-OBJS_WITH_MOC = mainwindow.o jpeg_frame_view.o
+OBJS_WITH_MOC = mainwindow.o jpeg_frame_view.o clip_list.o
OBJS += $(OBJS_WITH_MOC)
OBJS += $(OBJS_WITH_MOC:.o=.moc.o)
--- /dev/null
+#include "mainwindow.h"
+
+#include "clip_list.h"
+#include "ui_mainwindow.h"
+
+#include <string>
+#include <vector>
+
+using namespace std;
+
+int ClipList::rowCount(const QModelIndex &parent) const {
+ if (parent.isValid()) return 0;
+ return clips.size();
+}
+
+int ClipList::columnCount(const QModelIndex &parent) const {
+ if (parent.isValid()) return 0;
+ return 7;
+}
+
+QVariant ClipList::data(const QModelIndex &parent, int role) const {
+ if (!parent.isValid())
+ return QVariant();
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ const int row = parent.row(), column = parent.column();
+ if (size_t(row) >= clips.size())
+ return QVariant();
+
+ switch (column) {
+ case 0:
+ return qlonglong(clips[row].pts_in);
+ case 1:
+ if (clips[row].pts_out >= 0) {
+ return qlonglong(clips[row].pts_out);
+ } else {
+ return QVariant();
+ }
+ default:
+ return QVariant();
+ }
+}
+
+QVariant ClipList::headerData(int section, Qt::Orientation orientation, int role) const {
+ if (role != Qt::DisplayRole)
+ return QVariant();
+ if (orientation != Qt::Horizontal)
+ return QVariant();
+
+ switch (section) {
+ case 0:
+ return "In";
+ case 1:
+ return "Out";
+ case 2:
+ return "Duration";
+ case 3:
+ return "Camera 1";
+ case 4:
+ return "Camera 2";
+ case 5:
+ return "Camera 3";
+ case 6:
+ return "Camera 4";
+ default:
+ return "";
+ }
+}
+
+void ClipList::add_clip(int64_t pts_in)
+{
+ Clip clip;
+ clip.pts_in = pts_in;
+
+ beginInsertRows(QModelIndex(), clips.size(), clips.size());
+ clips.push_back(clip);
+ endInsertRows();
+}
--- /dev/null
+#ifndef _CLIP_LIST_H
+#define _CLIP_LIST_H 1
+
+#include <QAbstractTableModel>
+
+#include <stdint.h>
+
+#include <vector>
+#include <string>
+
+struct Clip {
+ int64_t pts_in = -1, pts_out = -1;
+ std::vector<std::string> descriptions; // One per camera.
+};
+
+class ClipList : public QAbstractTableModel {
+ Q_OBJECT
+
+public:
+ int rowCount(const QModelIndex &parent) const override;
+ int columnCount(const QModelIndex &parent) const override;
+ QVariant data(const QModelIndex &parent, int role) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+
+ void add_clip(int64_t pts_in);
+ size_t size() const { return clips.size(); }
+
+private:
+ std::vector<Clip> clips;
+};
+
+#endif // !defined (_CLIP_LIST_H)
#include "mainwindow.h"
+#include "clip_list.h"
#include "ui_mainwindow.h"
+#include <string>
+#include <vector>
+
+#include <QShortcut>
+
+using namespace std;
+
MainWindow *global_mainwindow = nullptr;
MainWindow::MainWindow()
{
global_mainwindow = this;
ui->setupUi(this);
+
+ ClipList *clips = new ClipList;
+ ui->clip_list->setModel(clips);
+
+ QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_Q), this);
+ connect(shortcut, &QShortcut::activated, [clips]{
+ clips->add_clip(12345);
+ });
}
<widget class="QWidget" name="verticalLayoutWidget_4">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
- <widget class="QTableWidget" name="clip_list">
- <column>
- <property name="text">
- <string>In</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Out</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Duration</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Camera 1</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Camera 2</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Camera 3</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Camera 4</string>
- </property>
- </column>
- </widget>
+ <widget class="QTableView" name="clip_list"/>
</item>
<item>
<widget class="QTableWidget" name="playlist">