]> git.sesse.net Git - nageru/blobdiff - futatabi/clip_list.cpp
Fix an indentation issue.
[nageru] / futatabi / clip_list.cpp
index 0321727cef00888b4ce96bc719b5ed016d6da897..c586b1a93dcd719db43e79221a24324d1fd74533 100644 (file)
@@ -58,7 +58,7 @@ int ClipList::columnCount(const QModelIndex &parent) const
 {
        if (parent.isValid())
                return 0;
-       return int(Column::NUM_NON_CAMERA_COLUMNS) + NUM_CAMERAS;
+       return int(Column::NUM_NON_CAMERA_COLUMNS) + num_cameras;
 }
 
 int PlayList::columnCount(const QModelIndex &parent) const
@@ -131,6 +131,7 @@ QVariant PlayList::data(const QModelIndex &parent, int role) const
                case Column::OUT:
                case Column::DURATION:
                case Column::FADE_TIME:
+               case Column::SPEED:
                        return Qt::AlignRight + Qt::AlignVCenter;
                case Column::CAMERA:
                        return Qt::AlignCenter;
@@ -192,6 +193,13 @@ QVariant PlayList::data(const QModelIndex &parent, int role) const
                ss << fixed << clips[row].fade_time_seconds;
                return QString::fromStdString(ss.str());
        }
+       case Column::SPEED: {
+               stringstream ss;
+               ss.imbue(locale("C"));
+               ss.precision(3);
+               ss << fixed << clips[row].speed;
+               return QString::fromStdString(ss.str());
+       }
        default:
                return "";
        }
@@ -212,7 +220,7 @@ QVariant ClipList::headerData(int section, Qt::Orientation orientation, int role
        case Column::DURATION:
                return "Duration";
        default:
-               if (section >= int(Column::CAMERA_1) && section < int(Column::CAMERA_1) + NUM_CAMERAS) {
+               if (is_camera_column(section)) {
                        return QString::fromStdString("Camera " + to_string(section - int(Column::CAMERA_1) + 1));
                } else {
                        return "";
@@ -242,6 +250,8 @@ QVariant PlayList::headerData(int section, Qt::Orientation orientation, int role
                return "Description";
        case Column::FADE_TIME:
                return "Fade time";
+       case Column::SPEED:
+               return "Speed";
        default:
                return "";
        }
@@ -274,7 +284,7 @@ Qt::ItemFlags PlayList::flags(const QModelIndex &index) const
        case Column::DESCRIPTION:
        case Column::CAMERA:
        case Column::FADE_TIME:
-               return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
+       case Column::SPEED:
                return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
        default:
                return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
@@ -319,7 +329,7 @@ bool PlayList::setData(const QModelIndex &index, const QVariant &value, int role
        case Column::CAMERA: {
                bool ok;
                int camera_idx = value.toInt(&ok);
-               if (!ok || camera_idx < 1 || camera_idx > NUM_CAMERAS) {
+               if (!ok || camera_idx < 1 || camera_idx > int(num_cameras)) {
                        return false;
                }
                clips[row].stream_idx = camera_idx - 1;
@@ -336,6 +346,16 @@ bool PlayList::setData(const QModelIndex &index, const QVariant &value, int role
                emit_data_changed(row);
                return true;
        }
+       case Column::SPEED: {
+               bool ok;
+               double val = value.toDouble(&ok);
+               if (!ok || !(val >= 0.001)) {
+                       return false;
+               }
+               clips[row].speed = val;
+               emit_data_changed(row);
+               return true;
+       }
        default:
                return false;
        }
@@ -390,7 +410,7 @@ void PlayList::move_clips(size_t first, size_t last, int delta)
 
 void ClipList::emit_data_changed(size_t row)
 {
-       emit dataChanged(index(row, 0), index(row, int(Column::NUM_NON_CAMERA_COLUMNS) + NUM_CAMERAS));
+       emit dataChanged(index(row, 0), index(row, int(Column::NUM_NON_CAMERA_COLUMNS) + num_cameras));
        emit any_content_changed();
 }
 
@@ -400,6 +420,19 @@ void PlayList::emit_data_changed(size_t row)
        emit any_content_changed();
 }
 
+void ClipList::change_num_cameras(size_t num_cameras)
+{
+       assert(num_cameras >= this->num_cameras);
+       if (num_cameras == this->num_cameras) {
+               return;
+       }
+
+       beginInsertColumns(QModelIndex(), int(Column::NUM_NON_CAMERA_COLUMNS) + this->num_cameras, int(Column::NUM_NON_CAMERA_COLUMNS) + num_cameras - 1);
+       this->num_cameras = num_cameras;
+       endInsertColumns();
+       emit any_content_changed();
+}
+
 void PlayList::set_currently_playing(int index, double progress)
 {
        int old_index = currently_playing_index;
@@ -444,11 +477,16 @@ Clip deserialize_clip(const ClipProto &clip_proto)
        Clip clip;
        clip.pts_in = clip_proto.pts_in();
        clip.pts_out = clip_proto.pts_out();
-       for (int camera_idx = 0; camera_idx < min(clip_proto.description_size(), NUM_CAMERAS); ++camera_idx) {
+       for (int camera_idx = 0; camera_idx < min(clip_proto.description_size(), MAX_STREAMS); ++camera_idx) {
                clip.descriptions[camera_idx] = clip_proto.description(camera_idx);
        }
        clip.stream_idx = clip_proto.stream_idx();
        clip.fade_time_seconds = clip_proto.fade_time_seconds();
+       if (clip_proto.speed() < 0.001) {
+               clip.speed = 0.5;  // Default.
+       } else {
+               clip.speed = clip_proto.speed();
+       }
        return clip;
 }
 
@@ -456,11 +494,12 @@ void serialize_clip(const Clip &clip, ClipProto *clip_proto)
 {
        clip_proto->set_pts_in(clip.pts_in);
        clip_proto->set_pts_out(clip.pts_out);
-       for (int camera_idx = 0; camera_idx < NUM_CAMERAS; ++camera_idx) {
+       for (int camera_idx = 0; camera_idx < MAX_STREAMS; ++camera_idx) {
                *clip_proto->add_description() = clip.descriptions[camera_idx];
        }
        clip_proto->set_stream_idx(clip.stream_idx);
        clip_proto->set_fade_time_seconds(clip.fade_time_seconds);
+       clip_proto->set_speed(clip.speed);
 }
 
 }  // namespace