Skip to content

Commit

Permalink
終了時の状態保存の実装 #3
Browse files Browse the repository at this point in the history
  • Loading branch information
Mr-Ojii committed Jan 7, 2022
1 parent 310df54 commit b7d4eec
Show file tree
Hide file tree
Showing 4 changed files with 134 additions and 3 deletions.
2 changes: 1 addition & 1 deletion LoopMusicPlayer/LoopMusicPlayer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<Version>0.6.0.3</Version>
<Version>0.6.1.0</Version>
<Authors>Mr-Ojii</Authors>
<ApplicationIcon>icon.ico</ApplicationIcon>
<RepositoryType>git</RepositoryType>
Expand Down
71 changes: 69 additions & 2 deletions LoopMusicPlayer/MainWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ internal class MainWindow : Window
private bool IsEnded = false;

private CancellationTokenSource cts = null;
private Setting setting = null;

public MainWindow() : this(new Builder("MainWindow.glade")) { }

Expand Down Expand Up @@ -113,8 +114,6 @@ private MainWindow(Builder builder) : base(builder.GetRawOwnedObject("MainWindow
DragDataReceived += TreeViewDragDataReceived;
this.AddEvents((int)(Gdk.EventMask.ButtonPressMask | Gdk.EventMask.ButtonReleaseMask));

_labelseektimemenu.Toggle();
_singlerepeat.Toggle();
UpdateLoopCountLabel();
_aboutmenu.Activated += ShowAbout;
_deviceinfomenu.Activated += ShowDeviceInfo;
Expand Down Expand Up @@ -145,6 +144,40 @@ private MainWindow(Builder builder) : base(builder.GetRawOwnedObject("MainWindow
_randomplay.Toggled += LoopMethodToggled;
this.Destroyed += OnWindowDestroyed;

{
setting = new Setting();
_showgridlinemenu.Active = setting.SettingStruct.IsShowGridLine;
switch (setting.SettingStruct.TimePositionShowMethod)
{
case Setting.ETimePositionShowMethod.ElapsedTime:
_labelelpsedtimemenu.Active = true;
break;
case Setting.ETimePositionShowMethod.SeekTime:
_labelseektimemenu.Active = true;
break;
case Setting.ETimePositionShowMethod.RemainingTime:
_labelremainingtimemenu.Active = true;
break;
}
_windowkeepabovemenu.Active = setting.SettingStruct.IsWindowKeepAbove;
switch (setting.SettingStruct.RepeatMethod)
{
case Setting.ERepeatMethod.SinglePlay:
_singleplay.Active = true;
break;
case Setting.ERepeatMethod.SingleRepeat:
_singlerepeat.Active = true;
break;
case Setting.ERepeatMethod.AllRepeat:
_allrepeat.Active = true;
break;
case Setting.ERepeatMethod.RandomPlay:
_randomplay.Active = true;
break;
}
_volumebutton.Value = setting.SettingStruct.Volume;
}

cts = new CancellationTokenSource();
Task.Factory.StartNew(JudgeEndLoop);
}
Expand All @@ -159,6 +192,40 @@ private void JudgeEndLoop()

public void OnWindowDestroyed(object o, EventArgs args) {
cts.Cancel();

{
setting.SettingStruct.IsShowGridLine = _showgridlinemenu.Active;

if (_labelelpsedtimemenu.Active)
{
setting.SettingStruct.TimePositionShowMethod = Setting.ETimePositionShowMethod.ElapsedTime;
} else if (_labelseektimemenu.Active)
{
setting.SettingStruct.TimePositionShowMethod = Setting.ETimePositionShowMethod.SeekTime;
} else if (_labelremainingtimemenu.Active)
{
setting.SettingStruct.TimePositionShowMethod = Setting.ETimePositionShowMethod.RemainingTime;
}

setting.SettingStruct.IsWindowKeepAbove = _windowkeepabovemenu.Active;

if(_singleplay.Active)
{
setting.SettingStruct.RepeatMethod = Setting.ERepeatMethod.SinglePlay;
} else if(_singlerepeat.Active)
{
setting.SettingStruct.RepeatMethod = Setting.ERepeatMethod.SingleRepeat;
} else if(_allrepeat.Active)
{
setting.SettingStruct.RepeatMethod = Setting.ERepeatMethod.AllRepeat;
} else if(_randomplay.Active)
{
setting.SettingStruct.RepeatMethod = Setting.ERepeatMethod.RandomPlay;
}
setting.SettingStruct.Volume = _volumebutton.Value;
}

setting.SaveJson();
}

private void EjectClicked(object o, EventArgs args)
Expand Down
63 changes: 63 additions & 0 deletions LoopMusicPlayer/Setting.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.Json;

namespace LoopMusicPlayer
{
internal class Setting
{
public static string SettingFilePath = AppContext.BaseDirectory + "LoopMusicPlayer.json";

public StSetting SettingStruct;

public Setting()
{
SettingStruct = new StSetting();
if (File.Exists(SettingFilePath))
{
using (var JsonFileStream = File.OpenText(SettingFilePath))
{
SettingStruct = JsonSerializer.Deserialize<StSetting>(JsonFileStream.ReadToEnd());
}
}
}

public void SaveJson()
{
using (var JsonFileStream = File.CreateText(SettingFilePath))
{
JsonSerializerOptions options = new JsonSerializerOptions();
options.WriteIndented = true;
JsonFileStream.Write(JsonSerializer.Serialize(SettingStruct, options));
}
}

public class StSetting{
public bool IsShowGridLine { get; set; } = false;
public ETimePositionShowMethod TimePositionShowMethod { get; set; } = ETimePositionShowMethod.SeekTime;
public bool IsWindowKeepAbove { get; set; } = false;
public ERepeatMethod RepeatMethod { get; set; } = ERepeatMethod.SingleRepeat;
public double Volume { get; set; } = 1;
}

//Enum
public enum ETimePositionShowMethod
{
ElapsedTime,
SeekTime,
RemainingTime,
}

public enum ERepeatMethod
{
SinglePlay,
SingleRepeat,
AllRepeat,
RandomPlay,
}
}
}
1 change: 1 addition & 0 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ Editor
|Ver.0.6.0.1|2022-01-01|「常に最前面に表示」を有効中にバージョン情報を表示した際、操作不能になる問題の修正 |
|Ver.0.6.0.2|2022-01-07|ループ時のサンプル数計算の修正(処理落ち時に次の曲に移行してしまう問題の修正) |
|Ver.0.6.0.3|2022-01-08|頒布ファイルサイズの削減 |
|Ver.0.6.1.0|2022-01-08|終了時の状態保存の実装 |

## 謝辞
各依存パッケージを作成していただいてる方々に感謝を申し上げます。
Expand Down

0 comments on commit b7d4eec

Please sign in to comment.