Commit d2fb7787 authored by xuanweiace's avatar xuanweiace

fix bug

parent 4f04de43
...@@ -137,11 +137,14 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -137,11 +137,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 表格双击和发生change时的处理 # 表格双击和发生change时的处理
self.zm_tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) self.zm_tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.all_tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) self.all_tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.all_tableWidget.itemDoubleClicked.connect(self.all_item_changed_by_double_clicked_slot)
self.pb_tableWidget.itemDoubleClicked.connect(self.writeHistory) self.pb_tableWidget.itemDoubleClicked.connect(self.writeHistory)
self.pb_tableWidget.itemDoubleClicked.connect(self.pb_item_changed_by_double_clicked_slot)
self.pb_tableWidget.itemChanged.connect(self.rewriteHistory) self.pb_tableWidget.itemChanged.connect(self.rewriteHistory)
self.pb_tableWidget.itemChanged.connect(self.generate_audio_slot) self.pb_tableWidget.itemChanged.connect(self.generate_audio_slot)
# todo 现在只在【旁白】tab上双击修改,会保存表格到本地,【字幕旁白】tab上不行。
self.pb_tableWidget.itemChanged.connect(self.write2ProjectFromAside) self.pb_tableWidget.itemChanged.connect(self.write2ProjectFromAside)
self.zm_tableWidget.itemDoubleClicked.connect(self.change_video_time) self.zm_tableWidget.itemDoubleClicked.connect(self.change_video_time)
self.pb_tableWidget.itemDoubleClicked.connect(self.change_video_time) self.pb_tableWidget.itemDoubleClicked.connect(self.change_video_time)
self.all_tableWidget.itemDoubleClicked.connect(self.change_video_time) self.all_tableWidget.itemDoubleClicked.connect(self.change_video_time)
...@@ -165,6 +168,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -165,6 +168,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.all_tableWidget_idx = 0 self.all_tableWidget_idx = 0
self.pb_tableWidget_idx = 0 self.pb_tableWidget_idx = 0
self.zm_tableWidget_idx = 0 self.zm_tableWidget_idx = 0
# 只有双击item,才算用户修改。从【操作表格】功能修改的不算
self.user_editing_aside = False
self.user_editing_content = False
# 重写关闭Mmainwindow窗口 # 重写关闭Mmainwindow窗口
def closeEvent(self, event): def closeEvent(self, event):
...@@ -510,13 +516,16 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -510,13 +516,16 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.zm_tableWidget_idx = 0 self.zm_tableWidget_idx = 0
self.set_table_to_window() self.set_table_to_window()
def set_table_to_window(self, need_refresh_all = True): def set_table_to_window(self, need_refresh_all = True, user_operation = False):
""" """
把projectContext里的内容呈现在UI上。 把projectContext里的内容呈现在UI上。
只有在初始化工程时,need_refresh_all = True,此时才需要initial_ing置为true。 在初始化工程时,need_refresh_all = True,代表是从无到有的加载,决定了表格更新的起始坐标。
user_operation代表是否是用户双击进行的操作,此时需要initial_ing置为true。
user_operation=False的情况:因为添加一行而进行的被迫修改
user_operation=True的情况:用户双击操作表格,通过【操作表格】进行增删改,通过【在此处添加旁白】来添加一行
initial_ing为true时,不会生成音频,不会写入历史记录 initial_ing为true时,不会生成音频,不会写入历史记录
""" """
if need_refresh_all: if user_operation:
self.projectContext.initial_ing = True self.projectContext.initial_ing = True
header = self.projectContext.header header = self.projectContext.header
subtitle_list = self.projectContext.subtitle_list subtitle_list = self.projectContext.subtitle_list
...@@ -555,7 +564,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -555,7 +564,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.pb_tableWidget_idx = len(aside_list) self.pb_tableWidget_idx = len(aside_list)
self.zm_tableWidget_idx = len(subtitle_list) self.zm_tableWidget_idx = len(subtitle_list)
if need_refresh_all: if user_operation:
self.projectContext.initial_ing = False self.projectContext.initial_ing = False
def setElememtToTable(self, table: QTableWidget, elem: Element, idx: int): def setElememtToTable(self, table: QTableWidget, elem: Element, idx: int):
...@@ -662,6 +671,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -662,6 +671,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if item is None: if item is None:
print("WRONG!!!! item Is None") print("WRONG!!!! item Is None")
return return
if self.is_user_editing() == False:
return
self.set_user_edit(False)
row = item.row() # 获取行数 row = item.row() # 获取行数
col = item.column() # 获取列数 注意是column而不是col col = item.column() # 获取列数 注意是column而不是col
...@@ -690,9 +703,19 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -690,9 +703,19 @@ class MainWindow(QMainWindow, Ui_MainWindow):
t.setDaemon(True) t.setDaemon(True)
t.start() t.start()
def is_user_editing(self):
return self.user_editing_content or self.user_editing_aside
def set_user_edit(self, val:bool):
self.user_editing_content = val
self.user_editing_aside = val
def rewriteHistory(self, item): def rewriteHistory(self, item):
if self.projectContext.initial_ing == True: if self.projectContext.initial_ing == True:
return return
if self.is_user_editing() == False:
return
self.set_user_edit(False)
if item is None: if item is None:
print("WRONG!!!! item Is None") print("WRONG!!!! item Is None")
return return
...@@ -743,6 +766,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -743,6 +766,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def write2ProjectFromAside(self, item): def write2ProjectFromAside(self, item):
if self.projectContext.initial_ing == True: if self.projectContext.initial_ing == True:
return return
if self.is_user_editing() == False:
return
if item is None: if item is None:
print("WRONG!!!! item Is None") print("WRONG!!!! item Is None")
return return
...@@ -837,8 +862,12 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -837,8 +862,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.sld_video.setMaximum(self.player.duration()/1000 + 1) self.sld_video.setMaximum(self.player.duration()/1000 + 1)
def refresh_tab_slot(self): def refresh_tab_slot(self):
self.set_table_to_window(False) """
self.projectContext.save_project(False) 刷新整个表格
"""
self.set_table_to_window()
# 不需要加这个,因为只要itemchange,就会触发保存的
# self.projectContext.save_project(False)
def operate_slot(self): def operate_slot(self):
...@@ -847,6 +876,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -847,6 +876,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def insert_aside_from_now_slot(self): def insert_aside_from_now_slot(self):
cur_time = round(self.player.position()/1000, 2) cur_time = round(self.player.position()/1000, 2)
idx = self.calculate_element_row(cur_time) idx = self.calculate_element_row(cur_time)
print("[insert_aside_from_now_slot] idx=", idx)
# 其实end_time目前是没啥用的,可以删掉了 # 其实end_time目前是没啥用的,可以删掉了
if idx != len(self.projectContext.all_elements): if idx != len(self.projectContext.all_elements):
self.add_line_operation_slot(idx, str(cur_time), self.projectContext.all_elements[idx+1].st_time_sec, self.add_line_operation_slot(idx, str(cur_time), self.projectContext.all_elements[idx+1].st_time_sec,
...@@ -867,7 +897,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -867,7 +897,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 注意,这里需要用同一对象,不能生成多个Element # 注意,这里需要用同一对象,不能生成多个Element
new_element = Element(start_time, end_time, subtitle, suggest, aside, speed) new_element = Element(start_time, end_time, subtitle, suggest, aside, speed)
self.projectContext.all_elements.insert(int(row), new_element) self.projectContext.all_elements.insert(int(row), new_element)
self.all_tableWidget_idx+=1 self.all_tableWidget_idx=int(row)
if suggest is not None and "插入旁白,推荐字数为" in suggest: if suggest is not None and "插入旁白,推荐字数为" in suggest:
idx = 0 idx = 0
while idx < len(self.projectContext.aside_list): while idx < len(self.projectContext.aside_list):
...@@ -875,7 +905,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -875,7 +905,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
break break
idx += 1 idx += 1
self.projectContext.aside_list.insert(idx, new_element) self.projectContext.aside_list.insert(idx, new_element)
self.pb_tableWidget_idx += 1 self.pb_tableWidget_idx =idx
else: else:
idx = 0 idx = 0
while idx < len(self.projectContext.subtitle_list): while idx < len(self.projectContext.subtitle_list):
...@@ -883,9 +913,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -883,9 +913,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
break break
idx += 1 idx += 1
self.projectContext.subtitle_list.insert(idx, new_element) self.projectContext.subtitle_list.insert(idx, new_element)
self.zm_tableWidget_idx += 1 self.zm_tableWidget_idx =idx
self.refresh_tab_slot()
self.prompt_dialog.show_with_msg("操作成功!!请刷新表格查看变化") self.projectContext.save_project()
self.prompt_dialog.show_with_msg("操作成功!!请查看变化")
#只需要改all_elements就可以了,因为是同一对象 #只需要改all_elements就可以了,因为是同一对象
def mod_line_operation_slot(self, row, start_time, end_time, subtitle, suggest, aside): def mod_line_operation_slot(self, row, start_time, end_time, subtitle, suggest, aside):
...@@ -896,7 +927,22 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -896,7 +927,22 @@ class MainWindow(QMainWindow, Ui_MainWindow):
elem.suggest = suggest elem.suggest = suggest
elem.aside = aside elem.aside = aside
self.prompt_dialog.show_with_msg("操作成功!!请刷新表格查看变化") to_be_modify_element = self.projectContext.all_elements[int(row) - 1]
if suggest is not None and "插入旁白,推荐字数为" in suggest:
for i in range(len(self.projectContext.aside_list)):
if to_be_modify_element.equalTo(self.projectContext.aside_list[i]):
self.pb_tableWidget_idx =i
self.setElememtToTable(self.pb_tableWidget, self.projectContext.aside_list[i], i)
break
else:
for i in range(len(self.projectContext.subtitle_header)):
if to_be_modify_element.equalTo(self.projectContext.subtitle_list[i]):
self.zm_tableWidget_idx = i
self.setElememtToTable(self.zm_tableWidget, self.projectContext.subtitle_list[i], i)
break
self.setElememtToTable(self.all_tableWidget, self.projectContext.all_elements[int(row)-1], int(row)-1)
self.projectContext.save_project()
self.prompt_dialog.show_with_msg("操作成功!!请查看变化")
# 只有row起作用 # 只有row起作用
def del_line_operation_slot(self, row, start_time, end_time, subtitle, suggest, aside): def del_line_operation_slot(self, row, start_time, end_time, subtitle, suggest, aside):
...@@ -906,18 +952,43 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -906,18 +952,43 @@ class MainWindow(QMainWindow, Ui_MainWindow):
and "插入旁白,推荐字数为" in self.projectContext.all_elements[int(row)-1].suggest: and "插入旁白,推荐字数为" in self.projectContext.all_elements[int(row)-1].suggest:
for i in range(len(self.projectContext.aside_list)): for i in range(len(self.projectContext.aside_list)):
if to_be_delete_element.equalTo(self.projectContext.aside_list[i]): if to_be_delete_element.equalTo(self.projectContext.aside_list[i]):
self.pb_tableWidget_idx = i
self.projectContext.aside_list.pop(i) self.projectContext.aside_list.pop(i)
break break
self.pb_tableWidget_idx -= 1
else: else:
for i in range(len(self.projectContext.subtitle_header)): for i in range(len(self.projectContext.subtitle_header)):
if to_be_delete_element.equalTo(self.projectContext.subtitle_list[i]): if to_be_delete_element.equalTo(self.projectContext.subtitle_list[i]):
self.zm_tableWidget_idx = i
self.projectContext.subtitle_list.pop(i) self.projectContext.subtitle_list.pop(i)
break break
self.zm_tableWidget_idx -= 1
self.all_tableWidget_idx -= 1 self.all_tableWidget_idx = int(row)-1
self.projectContext.all_elements.pop(int(row)-1) self.projectContext.all_elements.pop(int(row)-1)
self.projectContext.save_project()
self.prompt_dialog.show_with_msg("操作成功!!请查看变化")
def pb_item_changed_by_double_clicked_slot(self, item):
if item is None:
return
row = item.row() # 获取行数
col = item.column() # 获取列数 注意是column而不是col哦
text = item.text() # 获取内容
if col not in constant.Aside.ActivateColumns:
return
print("已经set user_editing_aside=True")
self.user_editing_aside = True
def all_item_changed_by_double_clicked_slot(self, item):
if item is None:
return
row = item.row() # 获取行数
col = item.column() # 获取列数 注意是column而不是col哦
text = item.text() # 获取内容
self.prompt_dialog.show_with_msg("操作成功!!请刷新表格查看变化")
if col not in constant.Content.ActivateColumns:
return
print("已经set user_editing_content=True")
self.user_editing_content = True
\ No newline at end of file
...@@ -249,6 +249,7 @@ class ProjectContext: ...@@ -249,6 +249,7 @@ class ProjectContext:
def history_pop(self)-> OperateRecord: def history_pop(self)-> OperateRecord:
if len(self.history_records) == 0: if len(self.history_records) == 0:
return None return None
print(f"[history_pop] {self.history_records}, {self.records_pos}")
self.records_pos -= 1 self.records_pos -= 1
return self.history_records[self.records_pos] return self.history_records[self.records_pos]
......
...@@ -113,7 +113,8 @@ class Operation_Dialog(QDialog, Ui_Dialog): ...@@ -113,7 +113,8 @@ class Operation_Dialog(QDialog, Ui_Dialog):
# 这些是只有【modify】才需要检测的 # 这些是只有【modify】才需要检测的
if self.comboBox_2.currentText() == "修改一行": if self.comboBox_2.currentText() == "修改一行":
try: try:
suggest = self.mainWindow.projectContext.all_elements[row_number].suggest suggest = self.mainWindow.projectContext.all_elements[row_number-1].suggest
print("suggest:", suggest)
# 如果当前行是旁白 # 如果当前行是旁白
if suggest is not None and "插入旁白" in suggest: if suggest is not None and "插入旁白" in suggest:
assert self.comboBox.currentText() == "旁白" assert self.comboBox.currentText() == "旁白"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment