2019-07-05 05:04:14 +12:00
|
|
|
|
using System;
|
|
|
|
|
using Timer = System.Windows.Forms.Timer;
|
|
|
|
|
|
2020-03-09 01:21:15 +13:00
|
|
|
|
namespace SystemTrayMenu.Handler
|
2019-07-05 05:04:14 +12:00
|
|
|
|
{
|
2020-03-24 00:32:47 +13:00
|
|
|
|
internal class WaitMenuOpen : IDisposable
|
2019-07-05 05:04:14 +12:00
|
|
|
|
{
|
|
|
|
|
public event EventHandler DoOpen;
|
|
|
|
|
|
2020-03-24 00:35:10 +13:00
|
|
|
|
private readonly Timer waitOpen = new Timer();
|
2020-03-24 00:32:47 +13:00
|
|
|
|
private bool waitedDone = false;
|
|
|
|
|
private bool clicked = false;
|
|
|
|
|
private bool menuLoaded = false;
|
2019-07-05 05:04:14 +12:00
|
|
|
|
|
|
|
|
|
public WaitMenuOpen()
|
|
|
|
|
{
|
|
|
|
|
waitOpen.Interval = MenuDefines.WaitMenuOpen;
|
|
|
|
|
waitOpen.Tick += WaitOpen_Tick;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void WaitOpen_Tick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
waitOpen.Stop();
|
|
|
|
|
waitedDone = true;
|
|
|
|
|
CheckConditionsToOpenMenu();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CheckConditionsToOpenMenu()
|
|
|
|
|
{
|
|
|
|
|
if ((waitedDone || clicked) &&
|
|
|
|
|
menuLoaded)
|
|
|
|
|
{
|
|
|
|
|
Stop();
|
|
|
|
|
DoOpen?.Invoke();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// When mouse on menu, wait x ms until open it
|
|
|
|
|
// meanwhile load content, click opens when loaded
|
|
|
|
|
// (to not interrupt user when he moves into a submenu)
|
|
|
|
|
public void Start()
|
|
|
|
|
{
|
|
|
|
|
if (!waitedDone)
|
|
|
|
|
{
|
|
|
|
|
waitOpen.Start();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Stop()
|
|
|
|
|
{
|
|
|
|
|
clicked = false;
|
|
|
|
|
waitedDone = false;
|
|
|
|
|
menuLoaded = false;
|
|
|
|
|
waitOpen.Stop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Click()
|
|
|
|
|
{
|
|
|
|
|
clicked = true;
|
|
|
|
|
CheckConditionsToOpenMenu();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void MenuLoaded()
|
|
|
|
|
{
|
|
|
|
|
menuLoaded = true;
|
|
|
|
|
CheckConditionsToOpenMenu();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
Stop();
|
|
|
|
|
waitOpen.Dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|