~ubuntu-branches/ubuntu/jaunty/psi/jaunty

« back to all changes in this revision

Viewing changes to src/widgets/psitabbar.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jan Niehusmann
  • Date: 2008-08-28 18:46:52 UTC
  • mfrom: (1.2.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20080828184652-iiik12dl91nq7cdi
Tags: 0.12-2
Uploading to unstable (Closes: Bug#494352)

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
 * Constructor
28
28
 */
29
29
PsiTabBar::PsiTabBar(PsiTabWidget *parent)
30
 
        : QTabBar(parent)
31
 
{
32
 
        //acceptDrops();
 
30
                : QTabBar(parent)
 
31
                , dragsEnabled_(true) {
 
32
        //setAcceptDrops(true);
33
33
}
34
34
 
35
35
/**
36
36
 * Destructor
37
37
 */
38
 
PsiTabBar::~PsiTabBar()
39
 
{
40
 
        
 
38
PsiTabBar::~PsiTabBar() {
41
39
}
42
40
 
43
41
/**
44
42
 * Returns the parent PsiTabWidget.
45
43
 */
46
 
PsiTabWidget* PsiTabBar::psiTabWidget()
47
 
{
 
44
PsiTabWidget* PsiTabBar::psiTabWidget() {
48
45
        return dynamic_cast<PsiTabWidget*> (parent());
49
46
}
50
47
 
51
48
/**
52
49
 * Overriding this allows us to emit signals for double clicks
53
50
 */
54
 
void PsiTabBar::mouseDoubleClickEvent( QMouseEvent* event )
55
 
{
 
51
void PsiTabBar::mouseDoubleClickEvent(QMouseEvent *event) {
56
52
        const QPoint pos = event->pos();
57
 
        int tab = findTabUnder( pos );
58
 
        if ( tab >=0 && tab < count() )
 
53
        int tab = findTabUnder(pos);
 
54
        if (tab >= 0 && tab < count()) {
59
55
                emit mouseDoubleClickTab(tab);
 
56
        }
60
57
}
61
58
 
62
59
/*
63
60
 * Returns the index of the tab at a position, or -1 if out of bounds.
64
61
 */
65
 
int PsiTabBar::findTabUnder( const QPoint& pos )
66
 
{
67
 
        for (int i = 0; i < count(); i++)
68
 
        {
69
 
                if ( tabRect(i).contains(pos) )
70
 
                                return i;
 
62
int PsiTabBar::findTabUnder(const QPoint &pos) {
 
63
        for (int i = 0; i < count(); i++) {
 
64
                if (tabRect(i).contains(pos)) {
 
65
                        return i;
 
66
                }
71
67
        }
72
68
        return -1;
73
69
74
70
 
75
 
void PsiTabBar::mousePressEvent(QMouseEvent *event)
76
 
{
77
 
    if (event->button() == Qt::LeftButton) {
78
 
                int tabno = findTabUnder( event->pos() );
79
 
        dragStartPosition_ = event->pos();
 
71
void PsiTabBar::mousePressEvent(QMouseEvent *event) {
 
72
        if (event->button() == Qt::LeftButton) {
 
73
                int tabno = findTabUnder(event->pos());
 
74
                dragStartPosition_ = event->pos();
80
75
                dragTab_ = tabno;
81
 
                if (tabno != -1) setCurrentIndex( tabno );
82
 
        }
 
76
                if (tabno != -1) {
 
77
                        setCurrentIndex(tabno);
 
78
                }
 
79
        }
83
80
        event->accept();
84
81
}
85
82
 
86
83
/*
87
84
 * Used for starting drags of tabs
88
 
 */ 
89
 
void PsiTabBar::mouseMoveEvent(QMouseEvent *event)
90
 
 {
91
 
        if (!(event->buttons() & Qt::LeftButton))
92
 
                return;
93
 
        if ( (event->pos() - dragStartPosition_).manhattanLength() 
94
 
                < QApplication::startDragDistance() )
95
 
                return;
 
85
 */
 
86
void PsiTabBar::mouseMoveEvent(QMouseEvent *event) {
 
87
        if (!dragsEnabled_) {
 
88
                return;
 
89
        }
 
90
        if (!(event->buttons() & Qt::LeftButton)) {
 
91
                return;
 
92
        }
 
93
        if ((event->pos() - dragStartPosition_).manhattanLength()
 
94
                < QApplication::startDragDistance()) {
 
95
                return;
 
96
        }
96
97
 
97
98
        if (dragTab_ != -1) {
98
 
 
99
99
                QDrag *drag = new QDrag(this);
100
100
                QMimeData *mimeData = new QMimeData;
101
101
                QByteArray data;
102
102
                QPixmap icon;
103
 
        
 
103
 
104
104
                data.setNum(dragTab_);
105
 
        
106
 
                mimeData->setData("psiTabDrag",data);
 
105
 
 
106
                mimeData->setData(PSITABDRAGMIMETYPE, data);
107
107
                drag->setMimeData(mimeData);
108
108
                drag->setPixmap(icon);
109
 
                        
 
109
 
110
110
                Qt::DropAction dropAction = drag->start(Qt::MoveAction);
111
111
                Q_UNUSED(dropAction);
112
112
        }
113
113
 
114
114
        event->accept();
115
 
 }
 
115
}
116
116
 
117
 
void PsiTabBar::contextMenuEvent ( QContextMenuEvent * event )
118
 
{
 
117
void PsiTabBar::contextMenuEvent(QContextMenuEvent *event) {
119
118
        event->accept();
120
119
        emit contextMenu(event, findTabUnder(event->pos()));
121
120
}
122
121
 
123
 
void PsiTabBar::wheelEvent(QWheelEvent *event)
124
 
{
 
122
void PsiTabBar::wheelEvent(QWheelEvent *event) {
125
123
        int numDegrees = event->delta() / 8;
126
124
        int numSteps = numDegrees / 15;
127
 
        
 
125
 
128
126
        int newIndex = currentIndex() - numSteps;
129
127
 
130
 
        while (newIndex < 0) newIndex += count();
 
128
        while (newIndex < 0) {
 
129
                newIndex += count();
 
130
        }
131
131
        newIndex = newIndex % count();
132
132
 
133
133
        setCurrentIndex(newIndex);
135
135
        event->accept();        
136
136
}
137
137
 
138
 
 
 
138
/*
 
139
 * Enable/disable dragging of tabs
 
140
 */
 
141
void PsiTabBar::setDragsEnabled(bool enabled) {
 
142
        dragsEnabled_ = enabled;
 
143
}