summaryrefslogtreecommitdiff
path: root/library/backend/rohfeedback.cpp
blob: ff76a36589221298b555430a29811fd2363496c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <rohfeedback.h>


#include <stdio.h>
#include <qpeapplication.h>
#include <qevent.h>
#include <resource.h>
#include <qpixmap.h>
#include <qbitmap.h>

#define SPEED 600
#define DELAY 500

namespace Opie {
namespace Internal {
/*

    RightOnHold feedback

*/

QPixmap * RoHFeedback::Imgs[NOOFICONS] = { 0, 0, 0, 0, 0 };
QBitmap * RoHFeedback::Masks[NOOFICONS];
int RoHFeedback::IconWidth;
int RoHFeedback::IconHeight;

RoHFeedback::RoHFeedback() :
                        QLabel( 0, 0, Qt::WType_Popup ), Timer() {

    Receiver = 0l;
    connect( &Timer, SIGNAL( timeout() ), this, SLOT( iconShow() ) );

    if( Imgs[0] == 0 ) {
      QString S;


      for( int i = 0; i < NOOFICONS ; i ++ ) {
        Imgs[i] =  new QPixmap( Resource::loadPixmap("RoH/star/"+
						     QString::number(i+1) +
						     ".png" ));
        Masks[i] = new QBitmap();
        (*Masks[i]) = Resource::loadPixmap("RoH/star/"+QString::number(i+1) +
                                        ".png" );
      }
    }

    IconWidth = Imgs[0]->size().width();
    IconHeight = Imgs[0]->size().height();

    resize( IconWidth, IconHeight );
}

int RoHFeedback::delay( void ) {
    return DELAY+SPEED+50;
}

RoHFeedback::~RoHFeedback() {
    for ( int i = 0; i < NOOFICONS; ++i ) {
        delete Imgs [i];
        delete Masks[i];
    }
}

void RoHFeedback::init( const QPoint & P, QWidget* wid ) {
    if( ! IconWidth )
      return;

    Receiver =  wid;
    IconNr = -1;
    move( P.x()-IconWidth/2, P.y() - IconHeight/2 );
    // to initialize
    Timer.start( DELAY - SPEED/NOOFICONS );
}

void RoHFeedback::stop( void ) {
    IconNr = -2; // stop
    hide();
    Timer.stop();
}

bool RoHFeedback::event( QEvent * E ) {

    if( E->type() >= QEvent::MouseButtonPress &&
        E->type() <= QEvent::MouseMove ) {
      // pass the event to the receiver with translated coord
      QMouseEvent QME( ((QMouseEvent *)E)->type(),
                       Receiver->mapFromGlobal(
                          ((QMouseEvent *)E)->globalPos() ),
                       ((QMouseEvent *)E)->globalPos(),
                       ((QMouseEvent *)E)->button(),
                       ((QMouseEvent *)E)->state()
                   );
      return QPEApplication::sendEvent( Receiver, &QME );
    }

    // first let the label treat the event
    return QLabel::event( E );
}

void RoHFeedback::iconShow( void ) {
    switch( IconNr ) {
      case FeedbackTimerStart:
        IconNr = 0;
        Timer.start( SPEED/NOOFICONS );
        break;
      case FeedbackStopped:
        // stopped
        IconNr = FeedbackTimerStart;
        hide();
        break;
      case FeedbackShow: // first
        show();
        // FT
      default :
        // show

        setPixmap( *(Imgs[IconNr]) );
        setMask( *(Masks[IconNr]) );
        IconNr = (IconNr+1)%NOOFICONS; // rotate
        break;
    }
}

}
}