Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
2ee4cc53
O
obs-studio
项目概览
尘离序散
/
obs-studio
与 Fork 源项目一致
从无法访问的项目Fork
通知
30
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
obs-studio
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2ee4cc53
编写于
8月 28, 2015
作者:
J
jp9000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
UI: Implement scene duplication (context menu)
上级
ba718e94
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
77 addition
and
0 deletion
+77
-0
obs/window-basic-main.cpp
obs/window-basic-main.cpp
+76
-0
obs/window-basic-main.hpp
obs/window-basic-main.hpp
+1
-0
未找到文件。
obs/window-basic-main.cpp
浏览文件 @
2ee4cc53
...
...
@@ -1324,6 +1324,23 @@ void OBSBasic::AddScene(OBSSource source)
item
->
setData
(
static_cast
<
int
>
(
QtDataRole
::
OBSSignals
),
QVariant
::
fromValue
(
handlers
));
/* if the scene already has items (a duplicated scene) add them */
auto
addSceneItem
=
[
this
]
(
obs_sceneitem_t
*
item
)
{
AddSceneItem
(
item
);
};
using
addSceneItem_t
=
decltype
(
addSceneItem
);
obs_scene_enum_items
(
scene
,
[]
(
obs_scene_t
*
,
obs_sceneitem_t
*
item
,
void
*
param
)
{
addSceneItem_t
*
func
;
func
=
reinterpret_cast
<
addSceneItem_t
*>
(
param
);
(
*
func
)(
item
);
return
true
;
},
&
addSceneItem
);
SaveProject
();
}
...
...
@@ -1668,6 +1685,63 @@ void OBSBasic::updateFileFinished(const QString &text, const QString &error)
obs_data_release
(
returnData
);
}
void
OBSBasic
::
DuplicateSelectedScene
()
{
OBSScene
curScene
=
GetCurrentScene
();
if
(
!
curScene
)
return
;
OBSSource
curSceneSource
=
obs_scene_get_source
(
curScene
);
QString
format
{
obs_source_get_name
(
curSceneSource
)};
format
+=
" %1"
;
int
i
=
2
;
QString
placeHolderText
=
format
.
arg
(
i
);
obs_source_t
*
source
=
nullptr
;
while
((
source
=
obs_get_source_by_name
(
QT_TO_UTF8
(
placeHolderText
))))
{
obs_source_release
(
source
);
placeHolderText
=
format
.
arg
(
++
i
);
}
for
(;;)
{
string
name
;
bool
accepted
=
NameDialog
::
AskForName
(
this
,
QTStr
(
"Basic.Main.AddSceneDlg.Title"
),
QTStr
(
"Basic.Main.AddSceneDlg.Text"
),
name
,
placeHolderText
);
if
(
!
accepted
)
return
;
if
(
name
.
empty
())
{
QMessageBox
::
information
(
this
,
QTStr
(
"NoNameEntered.Title"
),
QTStr
(
"NoNameEntered.Text"
));
continue
;
}
obs_source_t
*
source
=
obs_get_source_by_name
(
name
.
c_str
());
if
(
source
)
{
QMessageBox
::
information
(
this
,
QTStr
(
"NameExists.Title"
),
QTStr
(
"NameExists.Text"
));
obs_source_release
(
source
);
continue
;
}
obs_scene_t
*
scene
=
obs_scene_duplicate
(
curScene
,
name
.
c_str
());
source
=
obs_scene_get_source
(
scene
);
obs_add_source
(
source
);
obs_scene_release
(
scene
);
obs_set_output_source
(
0
,
source
);
return
;
}
}
void
OBSBasic
::
RemoveSelectedScene
()
{
OBSScene
scene
=
GetCurrentScene
();
...
...
@@ -2348,6 +2422,8 @@ void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos)
if
(
item
)
{
popup
.
addSeparator
();
popup
.
addAction
(
QTStr
(
"Duplicate"
),
this
,
SLOT
(
DuplicateSelectedScene
()));
popup
.
addAction
(
QTStr
(
"Rename"
),
this
,
SLOT
(
EditSceneName
()));
popup
.
addAction
(
QTStr
(
"Remove"
),
...
...
obs/window-basic-main.hpp
浏览文件 @
2ee4cc53
...
...
@@ -217,6 +217,7 @@ private slots:
void
ActivateAudioSource
(
OBSSource
source
);
void
DeactivateAudioSource
(
OBSSource
source
);
void
DuplicateSelectedScene
();
void
RemoveSelectedScene
();
void
RemoveSelectedSceneItem
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录