Skip to content

Commit f82b042

Browse files
committed
予約管理プラグインの名前リストを任意の順に並び替えられるようにした
1 parent bac062d commit f82b042

File tree

2 files changed

+129
-19
lines changed

2 files changed

+129
-19
lines changed

YoyakuPlugin/SettingsView.xaml

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,21 @@
5858
</TabItem>
5959
<TabItem Header="一覧">
6060
<ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#F0F0F0" VerticalScrollBarVisibility="Visible">
61-
<DataGrid
62-
AutoGenerateColumns="False"
63-
CanUserAddRows="False"
64-
CanUserDeleteRows="False"
65-
CanUserReorderColumns="False"
66-
CanUserResizeRows="False"
67-
SelectionMode="Extended"
68-
SelectedValue="{Binding SelectedUser}"
69-
ItemsSource="{Binding RegisteredUsers, IsAsync=True}">
61+
<DataGrid x:Name="RegisteredUserDataGrid"
62+
AutoGenerateColumns="False"
63+
CanUserAddRows="False"
64+
CanUserDeleteRows="False"
65+
CanUserReorderColumns="False"
66+
CanUserResizeRows="False"
67+
SelectionMode="Single"
68+
SelectionUnit="FullRow"
69+
SelectedValue="{Binding SelectedUser}"
70+
AllowDrop="True"
71+
Drop="DataGrid_Drop"
72+
PreviewMouseLeftButtonDown="DataGrid_PreviewMouseLeftButtonDown"
73+
MouseMove="PositionsGrid_MouseMove"
74+
MouseLeftButtonUp="PositionsGrid_MouseLeftButtonUp"
75+
ItemsSource="{Binding RegisteredUsers, IsAsync=True}">
7076
<DataGrid.Columns>
7177
<DataGridTemplateColumn Header="登録日時">
7278
<DataGridTemplateColumn.CellTemplate>
@@ -89,8 +95,13 @@
8995
</DataTemplate>
9096
</DataGridTemplateColumn.CellTemplate>
9197
</DataGridTemplateColumn>
92-
<DataGridCheckBoxColumn Header="呼出済" Binding="{Binding HadCalled, Mode=TwoWay}">
93-
</DataGridCheckBoxColumn>
98+
<DataGridTemplateColumn Header="呼出済">
99+
<DataGridTemplateColumn.CellTemplate>
100+
<DataTemplate>
101+
<CheckBox IsChecked="{Binding HadCalled, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
102+
</DataTemplate>
103+
</DataGridTemplateColumn.CellTemplate>
104+
</DataGridTemplateColumn>
94105
</DataGrid.Columns>
95106
</DataGrid>
96107
</ScrollViewer>

YoyakuPlugin/SettingsView.xaml.cs

Lines changed: 107 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Text;
5-
using System.Threading.Tasks;
2+
using System.Collections;
63
using System.Windows;
74
using System.Windows.Controls;
8-
using System.Windows.Data;
9-
using System.Windows.Documents;
105
using System.Windows.Input;
116
using System.Windows.Media;
12-
using System.Windows.Media.Imaging;
13-
using System.Windows.Shapes;
147

158
namespace OpenrecYoyakuPlugin
169
{
@@ -23,5 +16,111 @@ public SettingsView()
2316
{
2417
InitializeComponent();
2518
}
19+
20+
private bool IsTheMouseOnTargetRow(Visual target, GetDragDropPosition pos)
21+
{
22+
try
23+
{
24+
var posBounds = VisualTreeHelper.GetDescendantBounds(target);
25+
var theMousePos = pos((IInputElement)target);
26+
return posBounds.Contains(theMousePos);
27+
}
28+
catch (Exception)
29+
{
30+
return false;
31+
}
32+
}
33+
34+
private DataGridRow GetDataGridRowItem(int index)
35+
{
36+
if (RegisteredUserDataGrid.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
37+
return null;
38+
39+
return RegisteredUserDataGrid.ItemContainerGenerator.ContainerFromIndex(index) as DataGridRow;
40+
}
41+
42+
private int GetDataGridItemCurrentRowIndex(GetDragDropPosition pos)
43+
{
44+
int curIndex = -1;
45+
for (int i = 0; i < RegisteredUserDataGrid.Items.Count; i++)
46+
{
47+
var item = GetDataGridRowItem(i);
48+
if (IsTheMouseOnTargetRow(item, pos))
49+
{
50+
curIndex = i;
51+
break;
52+
}
53+
}
54+
return curIndex;
55+
}
56+
delegate Point GetDragDropPosition(IInputElement pos);
57+
private int _prevRowIndex = -1;
58+
bool _isClick = false;
59+
private void DataGrid_Drop(object sender, DragEventArgs e)
60+
{
61+
if (_prevRowIndex < 0)
62+
return;
63+
64+
int index = this.GetDataGridItemCurrentRowIndex(e.GetPosition);
65+
66+
if (index < 0)
67+
return;
68+
69+
if (index == _prevRowIndex)
70+
return;
71+
72+
var item = RegisteredUserDataGrid.ItemContainerGenerator.Items[_prevRowIndex];
73+
74+
if (RegisteredUserDataGrid.ItemsSource is IList collection)
75+
{
76+
//ItemsSourceのコレクションの要素を移動させる。
77+
collection.RemoveAt(_prevRowIndex);
78+
collection.Insert(index, item);
79+
}
80+
}
81+
82+
private void DataGrid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
83+
{
84+
_prevRowIndex = GetDataGridItemCurrentRowIndex(e.GetPosition);
85+
86+
if (_prevRowIndex < 0)
87+
return;
88+
89+
RegisteredUserDataGrid.SelectedIndex = _prevRowIndex;
90+
91+
//var selected_positionInfo = PositionsGrid.Items[_prevRowIndex];
92+
93+
//if (selected_positionInfo == null)
94+
// return;
95+
96+
_isClick = true;
97+
}
98+
99+
private void PositionsGrid_MouseMove(object sender, MouseEventArgs e)
100+
{
101+
if (_isClick)
102+
{
103+
var item = RegisteredUserDataGrid.Items[_prevRowIndex];
104+
105+
if (item == null)
106+
return;
107+
108+
var dragdropeffects = DragDropEffects.Move;
109+
110+
if (DragDrop.DoDragDrop(RegisteredUserDataGrid, item, dragdropeffects) != DragDropEffects.None)
111+
{
112+
RegisteredUserDataGrid.SelectedItem = item;
113+
_isClick = false;
114+
}
115+
}
116+
}
117+
118+
private void PositionsGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
119+
{
120+
if (_isClick)
121+
{
122+
_isClick = false;
123+
}
124+
}
26125
}
27126
}

0 commit comments

Comments
 (0)