Veto window closure during scanner discovery in the background.
This commit is contained in:
@@ -422,10 +422,9 @@ void XInsaneWidget::Setup(wxConfig * config, TimeredStatusBar * sb)
|
|||||||
btnScan->Enable(false);
|
btnScan->Enable(false);
|
||||||
btnScan->Bind ( wxEVT_RIGHT_UP, &XInsaneWidget::OnBtnScanRightClick, this );
|
btnScan->Bind ( wxEVT_RIGHT_UP, &XInsaneWidget::OnBtnScanRightClick, this );
|
||||||
btnScan->Bind ( wxEVT_LEFT_UP, &XInsaneWidget::OnBtnScanClick, this );
|
btnScan->Bind ( wxEVT_LEFT_UP, &XInsaneWidget::OnBtnScanClick, this );
|
||||||
m_backgroundScannerDiscoveryEvh = std::make_unique<BackgroundScannerDiscoveryEVH>(this);
|
m_backgroundDiscovery = new BackgroundScannerDiscovery ( m_scannerWidget.get(),
|
||||||
BackgroundScannerDiscovery * backgroundDiscovery = new BackgroundScannerDiscovery ( m_scannerWidget.get(),
|
new BackgroundScannerDiscoveryEVH(this)); // Takes ownership.
|
||||||
m_backgroundScannerDiscoveryEvh.get());
|
m_backgroundDiscovery->Run();
|
||||||
backgroundDiscovery->Run();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -581,5 +580,14 @@ void XInsaneWidget::CancelScanning()
|
|||||||
|
|
||||||
void XInsaneWidget::EnableScanButton(bool enable)
|
void XInsaneWidget::EnableScanButton(bool enable)
|
||||||
{
|
{
|
||||||
|
// Called from BackgroundScannerDiscoveryEVH::Done() only;
|
||||||
btnScan->Enable(enable);
|
btnScan->Enable(enable);
|
||||||
|
m_backgroundDiscovery = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool XInsaneWidget::IsScannerDiscoveryRunning()
|
||||||
|
{
|
||||||
|
if (!m_backgroundDiscovery)
|
||||||
|
return false;
|
||||||
|
return m_backgroundDiscovery->IsRunning();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class BackgroundScannerDiscoveryEVH;
|
class BackgroundScannerDiscovery; // Is a wxThread.
|
||||||
class ScanProjectHandler; // An event handler extending InsaneWorkerEvent.
|
class ScanProjectHandler; // An event handler extending InsaneWorkerEvent.
|
||||||
class XStampWidget;
|
class XStampWidget;
|
||||||
struct StampDescriptor;
|
struct StampDescriptor;
|
||||||
@@ -66,6 +66,7 @@ public:
|
|||||||
void CancelScanning();
|
void CancelScanning();
|
||||||
void EnableScanButton(bool enable); // For CallAfter.
|
void EnableScanButton(bool enable); // For CallAfter.
|
||||||
void Setup(wxConfig * config, TimeredStatusBar * sb);
|
void Setup(wxConfig * config, TimeredStatusBar * sb);
|
||||||
|
bool IsScannerDiscoveryRunning();
|
||||||
private:
|
private:
|
||||||
wxConfig * m_config;
|
wxConfig * m_config;
|
||||||
wxWeakRef<TimeredStatusBar> m_sb;
|
wxWeakRef<TimeredStatusBar> m_sb;
|
||||||
@@ -81,7 +82,7 @@ private:
|
|||||||
// Available devices and minimal options.
|
// Available devices and minimal options.
|
||||||
std::unique_ptr<XScannerWidget> m_scannerWidget;
|
std::unique_ptr<XScannerWidget> m_scannerWidget;
|
||||||
std::unique_ptr<InsaneWorker> m_insaneWorker;
|
std::unique_ptr<InsaneWorker> m_insaneWorker;
|
||||||
std::unique_ptr<BackgroundScannerDiscoveryEVH> m_backgroundScannerDiscoveryEvh;
|
BackgroundScannerDiscovery * m_backgroundDiscovery;
|
||||||
std::unique_ptr<ScanProjectHandler> m_scanProject;
|
std::unique_ptr<ScanProjectHandler> m_scanProject;
|
||||||
|
|
||||||
bool m_doubleSided = false;
|
bool m_doubleSided = false;
|
||||||
|
|||||||
@@ -311,7 +311,10 @@ wxThread::ExitCode BackgroundScannerDiscovery::Entry()
|
|||||||
evt.SetShow ( true );
|
evt.SetShow ( true );
|
||||||
m_owner->OnActivated ( evt );
|
m_owner->OnActivated ( evt );
|
||||||
if (m_evh)
|
if (m_evh)
|
||||||
|
{
|
||||||
m_evh->OnDone();
|
m_evh->OnDone();
|
||||||
|
wxDELETE(m_evh);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ( wxThread::ExitCode ) 0;
|
return ( wxThread::ExitCode ) 0;
|
||||||
}
|
}
|
||||||
@@ -321,3 +324,5 @@ wxThread::ExitCode BackgroundScannerDiscovery::Entry()
|
|||||||
void BackgroundScannerDiscoveryEvent::OnDone()
|
void BackgroundScannerDiscoveryEvent::OnDone()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
BackgroundScannerDiscoveryEvent::~BackgroundScannerDiscoveryEvent() = default;
|
||||||
|
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ public:
|
|||||||
BackgroundScannerDiscovery ( XScannerWidget * owner, BackgroundScannerDiscoveryEvent * evh )
|
BackgroundScannerDiscovery ( XScannerWidget * owner, BackgroundScannerDiscoveryEvent * evh )
|
||||||
{
|
{
|
||||||
m_owner = owner;
|
m_owner = owner;
|
||||||
m_evh = evh;
|
m_evh = evh; // Owned here.
|
||||||
}
|
}
|
||||||
virtual ~BackgroundScannerDiscovery() {};
|
virtual ~BackgroundScannerDiscovery() {};
|
||||||
virtual ExitCode Entry();
|
virtual ExitCode Entry();
|
||||||
@@ -112,6 +112,7 @@ class BackgroundScannerDiscoveryEvent
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void OnDone();
|
virtual void OnDone();
|
||||||
|
virtual ~BackgroundScannerDiscoveryEvent();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
23
XS7.cpp
23
XS7.cpp
@@ -49,6 +49,8 @@ void XS7::Setup(wxConfig * config)
|
|||||||
wxString fixedTip = _("'Shift + left' click to generate a new destination file name.");
|
wxString fixedTip = _("'Shift + left' click to generate a new destination file name.");
|
||||||
fixedTip += _T("\n") + m_insaneWidget->lblNewDoc->GetToolTipText();
|
fixedTip += _T("\n") + m_insaneWidget->lblNewDoc->GetToolTipText();
|
||||||
m_insaneWidget->lblNewDoc->SetToolTip(fixedTip);
|
m_insaneWidget->lblNewDoc->SetToolTip(fixedTip);
|
||||||
|
|
||||||
|
Bind(wxEVT_CLOSE_WINDOW, &XS7::OnClose, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
XS7::~XS7()
|
XS7::~XS7()
|
||||||
@@ -57,6 +59,27 @@ XS7::~XS7()
|
|||||||
MiscTools::SaveSizePos(m_config, this, wxString("/") + _APPNAME_);
|
MiscTools::SaveSizePos(m_config, this, wxString("/") + _APPNAME_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XS7::OnClose(wxCloseEvent& evt)
|
||||||
|
{
|
||||||
|
if (!m_insaneWidget)
|
||||||
|
{
|
||||||
|
evt.Skip();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (m_insaneWidget->IsScannerDiscoveryRunning())
|
||||||
|
{
|
||||||
|
evt.Veto();
|
||||||
|
TimeredStatusBar * sb = static_cast<TimeredStatusBar*> (GetStatusBar());
|
||||||
|
if (sb)
|
||||||
|
sb->SetTransientText(_("Veto: scanner discovery is running."));
|
||||||
|
evt.Skip(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
evt.Skip();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void XS7::OnDpkRepositoryChange ( wxFileDirPickerEvent& evt )
|
void XS7::OnDpkRepositoryChange ( wxFileDirPickerEvent& evt )
|
||||||
{
|
{
|
||||||
m_config->Write ( _T ( "/DocRoot" ), dpkDestination->GetPath() );
|
m_config->Write ( _T ( "/DocRoot" ), dpkDestination->GetPath() );
|
||||||
|
|||||||
1
XS7.h
1
XS7.h
@@ -33,6 +33,7 @@ private:
|
|||||||
void OnDpkDoubleClick ( wxMouseEvent& evt );
|
void OnDpkDoubleClick ( wxMouseEvent& evt );
|
||||||
void OnAppKeyPressed(wxKeyEvent& evt);
|
void OnAppKeyPressed(wxKeyEvent& evt);
|
||||||
void OnNewDocLeftClick ( wxMouseEvent& evt ); // wxStaticText in m_insaneWidget.
|
void OnNewDocLeftClick ( wxMouseEvent& evt ); // wxStaticText in m_insaneWidget.
|
||||||
|
void OnClose(wxCloseEvent& evt);
|
||||||
void OnAbout(wxMouseEvent& evt);
|
void OnAbout(wxMouseEvent& evt);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user