Skip to content

Commit 2cf83b2

Browse files
committed
feat: 「アーカイバーを選択」メニューに現在アーカイバーのチェックマークを表示 (#1739)
1 parent bfbe0d2 commit 2cf83b2

6 files changed

Lines changed: 44 additions & 11 deletions

File tree

NeeView/Archiver/Archive.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,16 @@ public Archive(string path, ArchiveEntry? source, ArchiveHint archiveHint)
157157
/// </summary>
158158
public bool Encrypted { get; protected set; }
159159

160+
/// <summary>
161+
/// アーカイバ識別子
162+
/// </summary>
163+
public ArchiverIdentifier ArchiverIdentifier => new ArchiverIdentifier(ArchiveManager.GetArchiveType(this), GetPluginName());
164+
165+
166+
public virtual string? GetPluginName()
167+
{
168+
return null;
169+
}
160170

161171
protected virtual void OnCreated(FileSystemEventArgs e)
162172
{

NeeView/Archiver/SusieArchive.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ public override bool IsSupported()
4545
return _susiePlugin;
4646
}
4747

48+
// プラグイン名取得
49+
public override string? GetPluginName()
50+
{
51+
return _susiePlugin?.Plugin.Name;
52+
}
53+
4854
// アーカイブヒントで指定されたプラグイン名を取得
4955
private string? GetPluginNameHint()
5056
{

NeeView/Book/BookSource.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ public BookSource(ArchiveEntryCollection archiveEntryCollection, BookPageCollect
2323
public event EventHandler? DirtyBook;
2424

2525

26-
public BookMemoryService BookMemoryService { get; private set; }
26+
public BookMemoryService BookMemoryService { get; private set; }
2727

2828
// この本のアーカイバ
2929
public ArchiveEntryCollection ArchiveEntryCollection { get; private set; }
3030

31+
// この本のアーカイバ識別子
32+
public ArchiverIdentifier ArchiverIdentifier => ArchiveEntryCollection.Archive?.ArchiverIdentifier ?? ArchiverIdentifier.None;
33+
3134
// この本の場所
3235
public string Path => this.ArchiveEntryCollection.Path;
3336

NeeView/Command/BookCommandTools.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@ public static void UpdateSelectArchiverMenu(ItemCollection items)
1111
items.Clear();
1212
foreach (var archiver in SelectableArchiverList.Current.GetLatestArchivers())
1313
{
14-
items.Add(new MenuItem() { Header = archiver.ToDisplayString(), Command = ReloadWithCommand.Command, CommandParameter = archiver });
14+
items.Add(new MenuItem()
15+
{
16+
Header = archiver.ArchiverIdentifier.ToDisplayString(),
17+
IsChecked = archiver.IsChecked,
18+
Command = ReloadWithCommand.Command,
19+
CommandParameter = archiver.ArchiverIdentifier
20+
});
1521
}
1622
}
1723

NeeView/MainWindow/MainWindow.xaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,10 @@
5959

6060
<!-- MenuItem SelectArchiver -->
6161
<Style x:Key="SelectArchiverMenuItemContainerStyle" TargetType="MenuItem" BasedOn="{StaticResource NVMenuItem}">
62-
<Setter Property="Header" Value="{Binding .}" />
62+
<Setter Property="Header" Value="{Binding ArchiverIdentifier}" />
63+
<Setter Property="IsChecked" Value="{Binding IsChecked}" />
6364
<Setter Property="Command" Value="{x:Static local:ReloadWithCommand.Command}" />
64-
<Setter Property="CommandParameter" Value="{Binding .}" />
65+
<Setter Property="CommandParameter" Value="{Binding ArchiverIdentifier}" />
6566
<Setter Property="InputGestureText" Value="" />
6667
</Style>
6768

NeeView/Menu/SelectableArchiverList.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using NeeLaboratory.ComponentModel;
22
using System.Collections.Generic;
3+
using System.Diagnostics;
4+
using System.Linq;
35

46
namespace NeeView
57
{
@@ -9,7 +11,7 @@ public class SelectableArchiverList : BindableBase
911
public static SelectableArchiverList Current { get; }
1012

1113

12-
private List<ArchiverIdentifier> _archivers = new();
14+
private List<SelectableArchiverItem> _archivers = new();
1315
private bool _isDirty = true;
1416

1517

@@ -20,7 +22,7 @@ public SelectableArchiverList()
2022
}
2123

2224

23-
public List<ArchiverIdentifier> Archivers
25+
public List<SelectableArchiverItem> Archivers
2426
{
2527
get { return _archivers; }
2628
set
@@ -38,7 +40,7 @@ public bool IsEnabled
3840
}
3941

4042

41-
public List<ArchiverIdentifier> GetLatestArchivers()
43+
public List<SelectableArchiverItem> GetLatestArchivers()
4244
{
4345
Update();
4446
return Archivers;
@@ -47,17 +49,22 @@ public List<ArchiverIdentifier> GetLatestArchivers()
4749
public void Update()
4850
{
4951
if (!_isDirty) return;
50-
_isDirty = true;
52+
_isDirty = false;
5153

52-
var address = BookHub.Current.Address;
53-
if (address is not null)
54+
var book = BookOperation.Current.Book;
55+
if (book is not null)
5456
{
55-
Archivers = ArchiveManager.Current.GetSupportedArchiverList(address);
57+
var bookArchiveIdentifider = book.Source.ArchiverIdentifier;
58+
Archivers = ArchiveManager.Current.GetSupportedArchiverList(book.Path)
59+
.Select(e => new SelectableArchiverItem(e, e == bookArchiveIdentifider))
60+
.ToList();
5661
}
5762
else
5863
{
5964
Archivers = new();
6065
}
6166
}
6267
}
68+
69+
public record SelectableArchiverItem(ArchiverIdentifier ArchiverIdentifier, bool IsChecked);
6370
}

0 commit comments

Comments
 (0)