twain3/huagao/huagaods.hpp

125 lines
6.1 KiB
C++
Raw Normal View History

#ifndef SIMPLEDS_HPP
#define SIMPLEDS_HPP
#include <twpp.hpp>
#include <unordered_map>
#include <vector>
#include <functional>
#include <queue>
#include "json.hpp"
#include <qmessagebox.h>
#include "common.h"
namespace std {
template<>
struct hash<Twpp::CapType> {
size_t operator()(Twpp::CapType cap) const{
return hash<Twpp::UInt16>()(static_cast<Twpp::UInt16>(cap));
}
};
}
class GScanCap;
using json = nlohmann::json;
class HuagaoDs : public Twpp::SourceFromThis<HuagaoDs> {
public:
HuagaoDs();
virtual ~HuagaoDs();
static const Twpp::Identity& defaultIdentity() noexcept;
// SourceFromThis interface
protected:
typedef Twpp::SourceFromThis<HuagaoDs> Base;
virtual Twpp::Result capabilityGet(const Twpp::Identity& origin, Twpp::Capability& data) override;
virtual Twpp::Result capabilityGetCurrent(const Twpp::Identity& origin, Twpp::Capability& data) override;
virtual Twpp::Result capabilityGetDefault(const Twpp::Identity& origin, Twpp::Capability& data) override;
virtual Twpp::Result capabilityQuerySupport(const Twpp::Identity& origin, Twpp::Capability& data) override;
virtual Twpp::Result capabilityReset(const Twpp::Identity& origin, Twpp::Capability& data) override;
virtual Twpp::Result capabilityResetAll(const Twpp::Identity& origin) override;
virtual Twpp::Result capabilitySet(const Twpp::Identity& origin, Twpp::Capability& data) override;
virtual Twpp::Result eventProcess(const Twpp::Identity& origin, Twpp::Event& data) override;
virtual Twpp::Result deviceEventGet(const Twpp::Identity& origin, Twpp::DeviceEvent& data) override;
virtual Twpp::Result identityOpenDs(const Twpp::Identity& origin) override;
virtual Twpp::Result identityCloseDs(const Twpp::Identity& origin) override;
virtual Twpp::Result pendingXfersGet(const Twpp::Identity& origin, Twpp::PendingXfers& data) override;
virtual Twpp::Result pendingXfersEnd(const Twpp::Identity& origin, Twpp::PendingXfers& data) override;
virtual Twpp::Result pendingXfersReset(const Twpp::Identity& origin, Twpp::PendingXfers& data) override;
virtual Twpp::Result setupMemXferGet(const Twpp::Identity& origin, Twpp::SetupMemXfer& data) override;
virtual Twpp::Result userInterfaceDisable(const Twpp::Identity& origin, Twpp::UserInterface& data) override;
virtual Twpp::Result userInterfaceEnable(const Twpp::Identity& origin, Twpp::UserInterface& data) override;
virtual Twpp::Result userInterfaceEnableUiOnly(const Twpp::Identity& origin, Twpp::UserInterface& data) override;
virtual Twpp::Result imageInfoGet(const Twpp::Identity& origin, Twpp::ImageInfo& data) override;
virtual Twpp::Result imageLayoutGet(const Twpp::Identity& origin, Twpp::ImageLayout& data) override;
virtual Twpp::Result imageLayoutGetDefault(const Twpp::Identity& origin, Twpp::ImageLayout& data) override;
virtual Twpp::Result imageLayoutSet(const Twpp::Identity& origin, Twpp::ImageLayout& data) override;
virtual Twpp::Result imageLayoutReset(const Twpp::Identity& origin, Twpp::ImageLayout& data) override;
virtual Twpp::Result imageMemXferGet(const Twpp::Identity& origin, Twpp::ImageMemXfer& data) override;
virtual Twpp::Result imageNativeXferGet(const Twpp::Identity& origin, Twpp::ImageNativeXfer& data) override;
virtual Twpp::Result pendingXfersStopFeeder(const Twpp::Identity& origin, Twpp::PendingXfers& data) override;
virtual Twpp::Result imageFileXferGet(const Twpp::Identity& origin) override;
virtual Twpp::Result setupFileXferGet(const Twpp::Identity& origin, Twpp::SetupFileXfer& data) override;
virtual Twpp::Result setupFileXferGetDefault(const Twpp::Identity& origin, Twpp::SetupFileXfer& data) override;
virtual Twpp::Result setupFileXferSet(const Twpp::Identity& origin, Twpp::SetupFileXfer& data) override;
virtual Twpp::Result setupFileXferReset(const Twpp::Identity& origin, Twpp::SetupFileXfer& data) override;
virtual Twpp::Result call(const Twpp::Identity& origin, Twpp::DataGroup dg, Twpp::Dat dat, Twpp::Msg msg, void* data) override;
/// Get custom data TWAIN call.
/// Always called in correct state.
/// Default implementation does nothing.
/// \param origin Identity of the caller.
/// \param data Custom data.
virtual Twpp::Result customDataGet(const Twpp::Identity& origin, Twpp::CustomData& data) override;
/// Set custom data TWAIN call.
/// Always called in correct state.
/// Default implementation does nothing.
/// \param origin Identity of the caller.
/// \param data Custom data.
virtual Twpp::Result customDataSet(const Twpp::Identity& origin, Twpp::CustomData& data) override;
private://method
Twpp::Result showTwainUI(Twpp::UserInterface& data, bool bUiOnly = false);
Twpp::Result startScan(const GScanCap& param);
const BITMAPINFOHEADER* header() const noexcept;
Twpp::UInt32 bytesPerLine() const noexcept;
Twpp::UInt32 bmpSize() const noexcept;
const char* bmpBegin() const noexcept;
const char* bmpEnd() const noexcept;
Twpp::Result capCommon(const Twpp::Identity& origin, Twpp::Msg msg, Twpp::Capability& data);
std::unordered_map<Twpp::CapType, std::function<Twpp::Result(Twpp::Msg msg, Twpp::Capability& data)>> m_caps;
std::unordered_map<Twpp::CapType, Twpp::MsgSupport> m_query;
std::queue<Twpp::DeviceEvent> devEvent;
Twpp::UInt32 m_memXferYOff = 0;
Twpp::UInt16 m_pendingXfers = 0;
Twpp::SetupFileXfer m_fileXfer;
Twpp::Fix32 m_brightness = 0.0f;
Twpp::XferMech m_capXferMech = Twpp::XferMech::Native;
Twpp::PixelType m_capPixelType = Twpp::PixelType::Rgb;
bool m_bIndicator = true;
bool m_bFeederEnabled = true;
bool m_bAutoFeed = true;
Twpp::UInt16 m_autosize = 0;
Twpp::Bool m_autoscan = true;
Twpp::Bool m_autoboarderdetcet = false;
UINT16 m_iBitdepth;
unsigned short m_jpegQuality = 80;
Twpp::Compression m_compression = Twpp::Compression::None;
Twpp::ImageFileFormat m_capImageFileFormat = Twpp::ImageFileFormat::Bmp;
std::unique_ptr <std::vector<unsigned char>> bmpData;
std::string Model = "G100";
int model = 0;
json m_params;
std::shared_ptr<GScanCap> m_gcap;
};
#endif // SIMPLEDS_HPP