@@ -113,57 +113,13 @@ private void FileListAdd(FileInfo file)
113113 VsList . Add ( vsItem ) ;
114114 }
115115
116- // 删除选定的项目
117- private void RemoveListSelectedItems ( )
118- {
119- if ( FileListUi . SelectedItems . Count <= 0 ) return ;
120-
121- if ( AppSettings . ListItemRemovePrompt )
122- {
123- var result = MessageBox . Show ( "你要删除选定的项目吗?" , "删除所选项" , MessageBoxButtons . YesNo , MessageBoxIcon . Question ) ;
124- if ( result == DialogResult . No ) return ;
125- }
126-
127- foreach ( ListViewItem item in FileListUi . SelectedItems )
128- {
129- if ( item . Tag == null )
130- {
131- item . Remove ( ) ;
132- continue ;
133- }
134-
135- var vsItem = ( VsItem ) item . Tag ;
136- VsList . Remove ( vsItem ) ;
137- item . Remove ( ) ;
138- }
139- MatchVideoSub ( ) ;
140- }
141-
142116 // 全选操作
143117 private void SelectListAll ( )
144118 {
145119 foreach ( ListViewItem item in FileListUi . Items )
146120 item . Selected = true ;
147121 }
148122
149- // 清空列表
150- private void ClearListAll ( )
151- {
152- if ( VsList . Count ( ) == 0 && FileListUi . Items . Count == 0 )
153- return ;
154-
155- if ( AppSettings . ListItemRemovePrompt )
156- {
157- var result = MessageBox . Show ( "你要清空列表吗?" , "清空列表" , MessageBoxButtons . YesNo , MessageBoxIcon . Question ) ;
158- if ( result == DialogResult . No ) return ;
159- }
160-
161- FileListUi . Items . Clear ( ) ;
162- VsList . Clear ( ) ;
163-
164- RefreshFileListUi ( ) ;
165- }
166-
167123 // 重新匹配
168124 private void ReMatch ( )
169125 {
@@ -209,9 +165,7 @@ private void FileListUi_DragDrop(object sender, DragEventArgs e)
209165 foreach ( var fileName in files ) FileListAdd ( new FileInfo ( fileName ) ) ;
210166 MatchVideoSub ( ) ;
211167 }
212- #endregion
213168
214- #region 各种操作
215169 private void FileListUi_MouseClick ( object sender , MouseEventArgs e )
216170 {
217171 if ( e . Button == MouseButtons . Right )
@@ -225,8 +179,12 @@ private void FileListUi_MouseClick(object sender, MouseEventArgs e)
225179 items . Add ( new MenuItem ( "编辑" , ( e1 , s1 ) => EditListSelectedItems ( ) , Shortcut . F3 ) ) ;
226180 items . Add ( "-" ) ;
227181 items . Add ( new MenuItem ( "删除" , ( e1 , s1 ) => RemoveListSelectedItems ( ) , Shortcut . Del ) ) ;
228- items . Add ( new MenuItem ( "丢弃视频" , ( e1 , s1 ) => { return ; Console . WriteLine ( "TODO" ) ; } ) ) ;
229- items . Add ( new MenuItem ( "丢弃字幕" , ( e1 , s1 ) => { return ; Console . WriteLine ( "TODO" ) ; } ) ) ;
182+ var discardVideo = new MenuItem ( "丢弃视频" , ( e1 , s1 ) => DiscardListSelectedItemsFile ( AppFileType . Video ) ) ;
183+ var discardSub = new MenuItem ( "丢弃字幕" , ( e1 , s1 ) => DiscardListSelectedItemsFile ( AppFileType . Sub ) ) ;
184+ if ( string . IsNullOrWhiteSpace ( selectedItem . Video ) ) discardVideo . Enabled = false ;
185+ if ( string . IsNullOrWhiteSpace ( selectedItem . Sub ) ) discardSub . Enabled = false ;
186+ items . Add ( discardVideo ) ;
187+ items . Add ( discardSub ) ;
230188 items . Add ( "-" ) ;
231189 items . Add ( new MenuItem ( "全选" , ( e1 , s1 ) => SelectListAll ( ) , Shortcut . CtrlA ) ) ;
232190 items . Add ( "-" ) ;
@@ -236,6 +194,8 @@ private void FileListUi_MouseClick(object sender, MouseEventArgs e)
236194 if ( string . IsNullOrWhiteSpace ( selectedItem . Sub ) ) openSubFolder . Enabled = false ;
237195 items . Add ( openVideoFolder ) ;
238196 items . Add ( openSubFolder ) ;
197+ items . Add ( "-" ) ;
198+ items . Add ( new MenuItem ( "复制改名命令至剪切板" , ( e1 , s1 ) => CopyRenameCommand ( ) ) ) ;
239199 m . Show ( FileListUi , new Point ( e . X , e . Y ) ) ;
240200 }
241201 }
@@ -274,6 +234,96 @@ private void SwitchPreview(bool value, bool force = false)
274234 RefreshFileListUi ( ) ;
275235
276236 }
237+
238+ // 清空列表
239+ private void ClearListAll ( )
240+ {
241+ if ( VsList . Count ( ) == 0 && FileListUi . Items . Count == 0 )
242+ return ;
243+
244+ if ( AppSettings . ListItemRemovePrompt )
245+ {
246+ var result = MessageBox . Show ( "你要清空列表吗?" , "清空列表" , MessageBoxButtons . YesNo , MessageBoxIcon . Question ) ;
247+ if ( result == DialogResult . No ) return ;
248+ }
249+
250+ FileListUi . Items . Clear ( ) ;
251+ VsList . Clear ( ) ;
252+
253+ RefreshFileListUi ( ) ;
254+ }
255+
256+ private void DiscardListSelectedItemsFile ( AppFileType FileType )
257+ {
258+ if ( FileListUi . SelectedItems . Count <= 0 ) return ;
259+
260+ string label = "" ;
261+ if ( FileType . Equals ( AppFileType . Video ) ) label = "视频" ;
262+ else if ( FileType . Equals ( AppFileType . Sub ) ) label = "字幕" ;
263+
264+ if ( AppSettings . ListItemRemovePrompt )
265+ {
266+ var result = MessageBox . Show ( $ "你要丢弃选定项目的{ label } 吗?源文件不会被删除", $ "丢弃所选项的{ label } ", MessageBoxButtons . YesNo , MessageBoxIcon . Question ) ;
267+ if ( result == DialogResult . No ) return ;
268+ }
269+
270+ foreach ( ListViewItem item in FileListUi . SelectedItems )
271+ {
272+ if ( item . Tag == null )
273+ {
274+ item . Remove ( ) ;
275+ continue ;
276+ }
277+
278+ var vsItem = ( VsItem ) item . Tag ;
279+ if ( FileType . Equals ( AppFileType . Video ) ) vsItem . Video = null ;
280+ if ( FileType . Equals ( AppFileType . Sub ) ) vsItem . Sub = null ;
281+ }
282+
283+ RefreshFileListUi ( ) ;
284+ }
285+
286+ // 删除选定的项目
287+ private void RemoveListSelectedItems ( )
288+ {
289+ if ( FileListUi . SelectedItems . Count <= 0 ) return ;
290+
291+ if ( AppSettings . ListItemRemovePrompt )
292+ {
293+ var result = MessageBox . Show ( "你要删除选定的项目吗?" , "删除所选项" , MessageBoxButtons . YesNo , MessageBoxIcon . Question ) ;
294+ if ( result == DialogResult . No ) return ;
295+ }
296+
297+ foreach ( ListViewItem item in FileListUi . SelectedItems )
298+ {
299+ if ( item . Tag == null )
300+ {
301+ item . Remove ( ) ;
302+ continue ;
303+ }
304+
305+ var vsItem = ( VsItem ) item . Tag ;
306+ VsList . Remove ( vsItem ) ;
307+ item . Remove ( ) ;
308+ }
309+
310+ RefreshFileListUi ( ) ;
311+ }
312+
313+ private void CopyRenameCommand ( )
314+ {
315+ var cmd = "" ;
316+ var renameDict = GetSubRenameDict ( ) ;
317+ if ( renameDict . Count < 0 ) return ;
318+ var selectedList = new List < ListViewItem > ( FileListUi . SelectedItems . OfType < ListViewItem > ( ) ) ;
319+ foreach ( var rename in renameDict )
320+ {
321+ if ( FileListUi . SelectedItems . Count > 0
322+ && ! selectedList . Exists ( o => o . Tag != null && ( ( VsItem ) o . Tag ) . Sub == rename . Key ) ) continue ;
323+ cmd += $ "mv \" { rename . Key } \" \" { rename . Value } \" { Environment . NewLine } ";
324+ }
325+ Clipboard . SetDataObject ( cmd . Trim ( ) ) ;
326+ }
277327 #endregion
278328
279329 #region 点击事件
0 commit comments