Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update EnumRepositoryItemGridListEditorController #439
- Loading branch information
1 parent
d8f9fa2
commit a9fd90a
Showing
3 changed files
with
48 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
64 changes: 43 additions & 21 deletions
64
...pand.ExpressApp/Xpand.ExpressApp.Win/SystemModule/EnumRepositoryItemListViewController.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,65 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using DevExpress.ExpressApp; | ||
using DevExpress.ExpressApp.DC; | ||
using DevExpress.ExpressApp.Win.Editors; | ||
using DevExpress.XtraEditors.Controls; | ||
using DevExpress.XtraEditors.Repository; | ||
using DevExpress.XtraGrid.Columns; | ||
using DevExpress.XtraGrid.Views.Grid; | ||
using Xpand.Utils.Helpers; | ||
using EnumPropertyEditor = Xpand.ExpressApp.Win.PropertyEditors.EnumPropertyEditor; | ||
|
||
namespace Xpand.ExpressApp.Win.SystemModule { | ||
public class EnumRepositoryItemGridListEditorController:ViewController<ListView> { | ||
private IEnumerable<IMemberInfo> _memberInfos; | ||
private IEnumerable<(GridColumn column, RepositoryItem repositoryItem,IMemberInfo memberInfo)> _repos; | ||
|
||
protected override void OnViewControlsCreated() { | ||
base.OnViewControlsCreated(); | ||
if (View.Editor is GridListEditor gridListEditor) { | ||
View.SelectionChanged+=ViewOnSelectionChanged; | ||
FilterRepositories(gridListEditor); | ||
_memberInfos = View.Model.Columns.Where(_ =>_.Index > -1 && (_.ModelMember.MemberInfo.MemberType.IsEnum || | ||
_.ModelMember.MemberInfo.MemberType.IsNullableType() && _.ModelMember.MemberInfo.MemberType.GetGenericArguments().First().IsEnum)) | ||
.Select(_ => _.ModelMember.MemberInfo).ToArray(); | ||
_repos = _memberInfos.Select(info => { | ||
var gridColumn = gridListEditor.GridView.Columns[info.Name]; | ||
var tuple = (column: gridColumn,repositoryItem: gridColumn.ColumnEdit,info); | ||
gridColumn.ColumnEdit=new RepositoryItemTextEdit(); | ||
return tuple; | ||
}).ToArray(); | ||
gridListEditor.GridView.CustomRowCellEditForEditing+=GridViewOnCustomRowCellEdit; | ||
} | ||
|
||
} | ||
|
||
private void FilterRepositories(GridListEditor gridListEditor){ | ||
var memberInfos = View.Model.Columns.Where(_ => | ||
_.Index > -1 && (_.ModelMember.MemberInfo.MemberType.IsEnum || | ||
_.ModelMember.MemberInfo.MemberType.IsNullableType() && _.ModelMember.MemberInfo | ||
.MemberType.GetGenericArguments().First().IsEnum)) | ||
.Select(_ => _.ModelMember.MemberInfo); | ||
foreach (var memberInfo in memberInfos){ | ||
var repositoryItem = gridListEditor.GridView.Columns[memberInfo.Name].ColumnEdit; | ||
var itemsData = EnumPropertyEditor.GetItemsData(repositoryItem, memberInfo); | ||
EnumPropertyEditor.FilterRepositoryItem(repositoryItem, memberInfo, | ||
View.SelectedObjects.Cast<object>().FirstOrDefault(), ObjectSpace, itemsData); | ||
private void GridViewOnCustomRowCellEdit(object sender, CustomRowCellEditEventArgs e) { | ||
var data = _repos.FirstOrDefault(_ => _.column==e.Column); | ||
if (data!=default) { | ||
var hasFlagsAttribute = EnumPropertyEditor.TypeHasFlagsAttribute(data.memberInfo); | ||
var values = EnumsNET.NonGeneric.NonGenericEnums.GetValues(data.memberInfo.MemberType).ToArray(); | ||
e.RepositoryItem = hasFlagsAttribute? (RepositoryItem) NewRepositoryItemCheckedComboBoxEdit(values,data.repositoryItem): NewRepositoryItemEnumEdit(values,data.repositoryItem); | ||
var tuple = hasFlagsAttribute | ||
? ((ImageComboBoxItem[] startComboBoxItems, CheckedListBoxItem[] startCheckedListBoxItems)) (null,((RepositoryItemCheckedComboBoxEdit) e.RepositoryItem).Items.ToArray()) | ||
: (((RepositoryItemEnumEdit) e.RepositoryItem).Items.ToArray(), null); | ||
EnumPropertyEditor.FilterRepositoryItem(e.RepositoryItem, data.memberInfo,View.SelectedObjects.Cast<object>().FirstOrDefault(), ObjectSpace, tuple); | ||
} | ||
} | ||
|
||
protected override void OnDeactivated() { | ||
base.OnDeactivated(); | ||
View.SelectionChanged-=ViewOnSelectionChanged; | ||
private object[] GetNullItem(RepositoryItem repositoryItem) { | ||
return repositoryItem is RepositoryItemCheckedComboBoxEdit comboBoxEdit? new object[] {comboBoxEdit.Items.First()} | ||
: new object[] {((RepositoryItemEnumEdit) repositoryItem).Items.First()}; | ||
} | ||
|
||
private RepositoryItemEnumEdit NewRepositoryItemEnumEdit(object[] values,RepositoryItem repositoryItem) { | ||
var item = new RepositoryItemEnumEdit(); | ||
item.Items.AddRange(GetNullItem(repositoryItem).Cast<ImageComboBoxItem>().Concat(values.Select(o => new ImageComboBoxItem(o))).ToArray()); | ||
return item; | ||
} | ||
|
||
private void ViewOnSelectionChanged(object sender, EventArgs e) { | ||
|
||
FilterRepositories((GridListEditor) View.Editor); | ||
private RepositoryItemCheckedComboBoxEdit NewRepositoryItemCheckedComboBoxEdit(object[] values,RepositoryItem dataRepositoryItem) { | ||
var item = new RepositoryItemCheckedComboBoxEdit(); | ||
item.Items.Add(GetNullItem(dataRepositoryItem)); | ||
item.Items.AddRange(values.Select(o => new CheckedListBoxItem(o)).ToArray()); | ||
return item; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters