-rw-r--r-- | libopie/odevice.cpp | 82 | ||||
-rw-r--r-- | libopie/odevice.h | 24 |
2 files changed, 92 insertions, 14 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp index c5a916b..c5342e1 100644 --- a/libopie/odevice.cpp +++ b/libopie/odevice.cpp @@ -77,2 +77,3 @@ public: QStrList *m_cpu_frequencies; + }; @@ -142,4 +143,4 @@ public: - virtual bool hasHingeSensor() const; - virtual OHingeStatus readHingeSensor(); + bool hasHingeSensor() const; + OHingeStatus readHingeSensor(); @@ -149,4 +150,4 @@ public: virtual bool suspend ( ); - virtual Transformation rotation ( ) const; - virtual ODirection direction ( ) const; + Transformation rotation ( ) const; + ODirection direction ( ) const; @@ -157,2 +158,3 @@ protected: bool m_embedix; + void virtual_hook( int id, void *data ); }; @@ -730,3 +732,6 @@ Transformation ODevice::rotation ( ) const { - return d-> m_rotation; + VirtRotation rot; + ODevice* that =(ODevice* )this; + that->virtual_hook( VIRTUAL_ROTATION, &rot ); + return rot.trans; } @@ -738,3 +743,6 @@ ODirection ODevice::direction ( ) const { - return d-> m_direction; + VirtDirection dir; + ODevice* that =(ODevice* )this; + that->virtual_hook( VIRTUAL_DIRECTION, &dir ); + return dir.direct; } @@ -848,3 +856,6 @@ bool ODevice::hasHingeSensor ( ) const { - return false; + VirtHasHinge hing; + ODevice* that =(ODevice* )this; + that->virtual_hook( VIRTUAL_HAS_HINGE, &hing ); + return hing.hasHinge; } @@ -856,3 +867,5 @@ OHingeStatus ODevice::readHingeSensor ( ) { - return CASE_UNKNOWN; + VirtHingeStatus hing; + virtual_hook( VIRTUAL_HINGE, &hing ); + return hing.hingeStat; } @@ -1005,4 +1018,25 @@ void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) } -void ODevice::virtual_hook(int, void* ){ - +void ODevice::virtual_hook(int id, void* data){ + switch( id ) { + case VIRTUAL_ROTATION:{ + VirtRotation* rot = reinterpret_cast<VirtRotation*>( data ); + rot->trans = d->m_rotation; + break; + } + case VIRTUAL_DIRECTION:{ + VirtDirection *dir = reinterpret_cast<VirtDirection*>( data ); + dir->direct = d->m_direction; + break; + } + case VIRTUAL_HAS_HINGE:{ + VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data ); + hin->hasHinge = false; + break; + } + case VIRTUAL_HINGE:{ + VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data ); + hin->hingeStat = CASE_UNKNOWN; + break; + } + } } @@ -2155,2 +2189,30 @@ OHingeStatus Zaurus::readHingeSensor() +void Zaurus::virtual_hook( int id, void *data ) { + switch( id ) { + case VIRTUAL_ROTATION:{ + VirtRotation* rot = reinterpret_cast<VirtRotation*>( data ); + rot->trans = rotation(); + break; + } + case VIRTUAL_DIRECTION:{ + VirtDirection *dir = reinterpret_cast<VirtDirection*>( data ); + dir->direct = direction(); + break; + } + case VIRTUAL_HAS_HINGE:{ + VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data ); + hin->hasHinge = hasHingeSensor(); + break; + } + case VIRTUAL_HINGE:{ + VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data ); + hin->hingeStat = readHingeSensor(); + break; + } + default: + ODevice::virtual_hook( id, data ); + break; + } +} + /************************************************** diff --git a/libopie/odevice.h b/libopie/odevice.h index 791d358..fc41079 100644 --- a/libopie/odevice.h +++ b/libopie/odevice.h @@ -196,4 +196,4 @@ public: - virtual Transformation rotation ( ) const; - virtual ODirection direction ( ) const; + /*virtual*/ Transformation rotation ( ) const; + /*virtual*/ ODirection direction ( ) const; @@ -231,4 +231,4 @@ public: - virtual bool hasHingeSensor ( ) const; - virtual OHingeStatus readHingeSensor ( ); + /*virtual*/ bool hasHingeSensor ( ) const; + /*virtual*/ OHingeStatus readHingeSensor ( ); @@ -280,2 +280,18 @@ protected: virtual void virtual_hook( int id, void* data ); + +protected: + enum { VIRTUAL_ROTATION = 0x200, VIRTUAL_DIRECTION, + VIRTUAL_HAS_HINGE, VIRTUAL_HINGE }; + struct VirtRotation { + Transformation trans; + }; + struct VirtDirection { + ODirection direct; + }; + struct VirtHasHinge { + bool hasHinge; + }; + struct VirtHingeStatus { + OHingeStatus hingeStat; + }; }; |