@@ -126,9 +126,9 @@ public ItemsControl FilesContent
126126 }
127127 }
128128
129- private Class currentClass ;
129+ private UIClass currentClass ;
130130
131- public Class CurrentClass
131+ public UIClass CurrentClass
132132 {
133133 get => currentClass ; private set
134134 {
@@ -185,17 +185,20 @@ public ObservableCollection<UIFile> FileTree
185185
186186 #region 文件相关
187187
188+ /// <summary>
189+ /// 当前文件集合的类型
190+ /// </summary>
188191 public FileCollectionType FileCollectionType { get ; private set ; }
189192
190193 /// <summary>
191194 /// 设置文件
192195 /// </summary>
193196 /// <param name="files"></param>
194197 /// <returns></returns>
195- public async Task SetFilesAsync ( IEnumerable < UIFile > files , Class currentClass , FileCollectionType type )
198+ public async Task SetFilesAsync ( IEnumerable < UIFile > files , UIClass currentClass , FileCollectionType type )
196199 {
197200 CurrentClass = currentClass ;
198- FileCollectionType = FileCollectionType ;
201+ FileCollectionType = type ;
199202 if ( files == null || ! files . Any ( ) )
200203 {
201204 //如果为空
@@ -217,7 +220,7 @@ await Task.Run(() =>
217220 }
218221 } ) ;
219222 await Dispatcher . InvokeAsync ( ( ) =>
220- Files = uiFiles , System . Windows . Threading . DispatcherPriority . ApplicationIdle ) ;
223+ Files = uiFiles , DispatcherPriority . ApplicationIdle ) ;
221224 }
222225 if ( CurrentFileView == FileView . Tree )
223226 {
@@ -945,12 +948,32 @@ private void ContextMenu_Opened(object sender, RoutedEventArgs e)
945948 menuCopy . Click += MenuCopy_Click ;
946949 menu . Items . Add ( menuCopy ) ;
947950
948- if ( ! IsSingleWindow )
951+ if ( files . Count == 1 )
952+ {
953+ MenuItem menuShowExifs = new MenuItem ( ) { Header = "查看文件元数据" } ;
954+ menuShowExifs . Click += ( p1 , p2 ) =>
955+ new FileMetadataDialog ( files [ 0 ] . File . GetAbsolutePath ( ) ) { Owner = Window . GetWindow ( this ) } . ShowDialog ( ) ;
956+ menu . Items . Add ( menuShowExifs ) ;
957+
958+ MenuItem menuShowProperties = new MenuItem ( ) { Header = "属性" } ;
959+ menuShowProperties . Click += ( p1 , p2 ) =>
960+ FileProperty . ShowFileProperties ( files [ 0 ] . File . GetAbsolutePath ( ) ) ;
961+ menu . Items . Add ( menuShowProperties ) ;
962+ }
963+ if ( ! IsSingleWindow ) //位于主窗体
949964 {
965+ menu . Items . Add ( new Separator ( ) ) ;
950966 MenuItem menuDelete = new MenuItem ( ) { Header = "删除文件" } ;
951967 menuDelete . Click += MenuDelete_Click ;
952968 menu . Items . Add ( menuDelete ) ;
953969
970+ if ( FileCollectionType == FileCollectionType . Class && CurrentClass != null )
971+ {
972+ MenuItem menuRemoveFromClass = new MenuItem ( ) { Header = "从当前类中移出" } ;
973+ menuRemoveFromClass . Click += MenuRemoveFromClass_Click ;
974+ menu . Items . Add ( menuRemoveFromClass ) ;
975+ }
976+
954977 if ( FileCollectionType == FileCollectionType . Disabled || FileCollectionType == FileCollectionType . Manual )
955978 {
956979 MenuItem menuRecover = new MenuItem ( ) { Header = "恢复为正常状态" , ToolTip = "这将使文件被再次自动分类,剔除手动的任何成分" } ;
@@ -959,18 +982,6 @@ private void ContextMenu_Opened(object sender, RoutedEventArgs e)
959982 }
960983 }
961984
962- if ( files . Count == 1 )
963- {
964- MenuItem menuShowExifs = new MenuItem ( ) { Header = "查看文件元数据" } ;
965- menuShowExifs . Click += ( p1 , p2 ) =>
966- new FileMetadataDialog ( files [ 0 ] . File . GetAbsolutePath ( ) ) { Owner = Window . GetWindow ( this ) } . ShowDialog ( ) ;
967- menu . Items . Add ( menuShowExifs ) ;
968-
969- MenuItem menuShowProperties = new MenuItem ( ) { Header = "属性" } ;
970- menuShowProperties . Click += ( p1 , p2 ) =>
971- FileProperty . ShowFileProperties ( files [ 0 ] . File . GetAbsolutePath ( ) ) ;
972- menu . Items . Add ( menuShowProperties ) ;
973- }
974985 var classesMenus = new List < CheckBox > ( ) ;
975986 if ( ! IsSingleWindow && Project . Classes != null && Project . Classes . Count > 0 )
976987 {
@@ -1010,14 +1021,14 @@ private void ContextMenu_Opened(object sender, RoutedEventArgs e)
10101021 int maxClassesMenuCount = 6 ;
10111022 if ( CurrentClass != null && classesMenus . Count > maxClassesMenuCount )
10121023 {
1013- if ( classesMenus . All ( p => ( p . Tag as Class ) . GroupName == CurrentClass . GroupName ) )
1024+ if ( classesMenus . All ( p => ( p . Tag as Class ) . GroupName == CurrentClass . Class . GroupName ) )
10141025 {
10151026 AddWithoutDiscrimination ( ) ;
10161027 }
10171028 else
10181029 {
1019- var sameGroup = classesMenus . Where ( p => ( p . Tag as Class ) . GroupName == CurrentClass . GroupName ) ;
1020- var otherGroup = classesMenus . Where ( p => ( p . Tag as Class ) . GroupName != CurrentClass . GroupName ) ;
1030+ var sameGroup = classesMenus . Where ( p => ( p . Tag as Class ) . GroupName == CurrentClass . Class . GroupName ) ;
1031+ var otherGroup = classesMenus . Where ( p => ( p . Tag as Class ) . GroupName != CurrentClass . Class . GroupName ) ;
10211032 sameGroup . ForEach ( p => menu . Items . Add ( p ) ) ;
10221033 MenuItem menuItem = new MenuItem ( ) { Header = "其它分类" } ;
10231034 otherGroup . ForEach ( p => menuItem . Items . Add ( p ) ) ;
@@ -1044,6 +1055,28 @@ void AddWithoutDiscrimination()
10441055 }
10451056 }
10461057
1058+ private async void MenuRemoveFromClass_Click ( object sender , RoutedEventArgs e )
1059+ {
1060+ await MainWindow . Current . DoProcessAsync ( Do ( ) ) ;
1061+ async Task Do ( )
1062+ {
1063+ var files = GetSelectedFiles ( ) ;
1064+
1065+ //从类中删除
1066+ await Task . Run ( ( ) => RemoveFilesFromClass ( files . Select ( p => p . File ) , CurrentClass . Class ) ) ;
1067+ foreach ( var file in files )
1068+ {
1069+ //var c = file.Classes.FirstOrDefault(p => p.ID == CurrentClass.ID);
1070+ //if (c != null)
1071+ //{
1072+ // file.Classes.Remove(c);
1073+ //}
1074+ Files . Remove ( file ) ;
1075+ }
1076+ await CurrentClass . UpdatePropertiesAsync ( ) ;
1077+ }
1078+ }
1079+
10471080 private async void MenuRecover_Click ( object sender , RoutedEventArgs e )
10481081 {
10491082 var files = GetSelectedFiles ( ) ;
0 commit comments