Files
oak-editor/app/dialog/otioproperties/otiopropertiesdialog.cpp
T
Mike-Solar 66d761b4b7 R8: finish app/ pure C ABI migration (P3-P9) and make OTIO required
- app/ no longer includes engine C++ headers nor holds engine C++ types:
  engine access goes through the oakengine C ABI plus C++ wrappers
  (oakutil/oaknode.h, oakutil/oakvideo.h) and app-local mirror types
  (tooltypes, trackreferencehandle, timelinecommonapp, keyframetypes,
  subtitleapp, serializedlayoutinfoapp, nodevaluehandle, sliderdisplaytypeapp)
- engine: new C ABI functions for block/track/clip/transition navigation
  and predicates, links, caches, waveform/playback, disk folder,
  sequence_track_list, node_free, footage_is_valid, block_get_track,
  get_brush; loadotio/saveotio ported to the current engine API
- OTIO is now a required dependency: CI and CD build it on every
  platform, FindOpenTimelineIO fixed for OTIO 0.16/0.19 (the old deps
  include requirement silently disabled OTIO everywhere), runtime
  libraries are bundled into packages and copied next to macOS binaries
  (oak_copy_otio_runtime)
- fix ProjectViewModel drag&drop mime read/write size mismatch (segfault)
- unify color label naming (k_olive -> "Oak") in the app-side mirror
- docs: OTIO required, FFmpeg minimum corrected to 6.0 (en/zh)
- gtest suite: 1925 passed, 0 failed
2026-07-31 22:46:52 +08:00

102 lines
3.3 KiB
C++

/***
Olive - Non-Linear Video Editor
Copyright (C) 2019 Olive Team
Modifications Copyright (C) 2025 mikesolar
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
***/
#include "otiopropertiesdialog.h"
#include <QDialogButtonBox>
#include <QFileDialog>
#include <QFileInfo>
#include <QHeaderView>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include "core.h"
#include "dialog/sequence/sequence.h"
#include "oakutil/oaknode.h"
namespace olive
{
OTIOPropertiesDialog::OTIOPropertiesDialog(
const QList<OakEngineSequence *> &sequences,
OakEngineProject *active_project, QWidget *parent)
: QDialog(parent)
, sequences_(sequences)
{
QVBoxLayout *layout = new QVBoxLayout(this);
QLabel *msg = new QLabel(tr(
"OpenTimelineIO files do not store sequence parameters (resolution, frame rate, etc.)\n\n"
"Please set the correct parameters on the sequences below (they have been set to your default sequence parameters as a starting point)."));
msg->setWordWrap(true);
layout->addWidget(msg);
table_ = new QTreeWidget();
table_->setColumnCount(2);
table_->setHeaderLabels({ tr("Sequence"), tr("Actions") });
table_->setRootIsDecorated(false);
for (int i = 0; i < sequences.size(); i++) {
QTreeWidgetItem *item = new QTreeWidgetItem();
OakEngineSequence *s = sequences.at(i);
QWidget *item_actions = new QWidget();
QHBoxLayout *item_actions_layout = new QHBoxLayout(item_actions);
QPushButton *item_settings_btn = new QPushButton(tr("Settings"));
item_settings_btn->setProperty("index", i);
connect(item_settings_btn, &QPushButton::clicked, this,
&OTIOPropertiesDialog::SetupSequence);
item_actions_layout->addWidget(item_settings_btn);
item->setText(
0, oak::Node(reinterpret_cast<OakEngineNode *>(s)).get_label());
table_->addTopLevelItem(item);
table_->setItemWidget(item, 1, item_actions);
}
// Stretch first column to take up as much space as possible, and second column to take as little
table_->header()->setSectionResizeMode(0, QHeaderView::Stretch);
table_->header()->setSectionResizeMode(1, QHeaderView::Fixed);
table_->header()->setStretchLastSection(false);
layout->addWidget(table_);
QDialogButtonBox *buttons =
new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(buttons, &QDialogButtonBox::accepted, this,
&OTIOPropertiesDialog::accept);
connect(buttons, &QDialogButtonBox::rejected, this,
&OTIOPropertiesDialog::reject);
layout->addWidget(buttons);
setWindowTitle(tr("Load OpenTimelineIO Project"));
}
void OTIOPropertiesDialog::SetupSequence()
{
int index = sender()->property("index").toInt();
OakEngineSequence *s = sequences_.at(index);
SequenceDialog sd(reinterpret_cast<OakEngineNode *>(s),
SequenceDialog::k_new);
sd.set_undoable(false);
sd.exec();
}
} // namespace olive