29
29
PsiTabBar::PsiTabBar(PsiTabWidget *parent)
31
, dragsEnabled_(true) {
32
//setAcceptDrops(true);
38
PsiTabBar::~PsiTabBar()
38
PsiTabBar::~PsiTabBar() {
44
42
* Returns the parent PsiTabWidget.
46
PsiTabWidget* PsiTabBar::psiTabWidget()
44
PsiTabWidget* PsiTabBar::psiTabWidget() {
48
45
return dynamic_cast<PsiTabWidget*> (parent());
52
49
* Overriding this allows us to emit signals for double clicks
54
void PsiTabBar::mouseDoubleClickEvent( QMouseEvent* event )
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);
63
60
* Returns the index of the tab at a position, or -1 if out of bounds.
65
int PsiTabBar::findTabUnder( const QPoint& pos )
67
for (int i = 0; i < count(); i++)
69
if ( tabRect(i).contains(pos) )
62
int PsiTabBar::findTabUnder(const QPoint &pos) {
63
for (int i = 0; i < count(); i++) {
64
if (tabRect(i).contains(pos)) {
75
void PsiTabBar::mousePressEvent(QMouseEvent *event)
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();
81
if (tabno != -1) setCurrentIndex( tabno );
77
setCurrentIndex(tabno);
87
84
* Used for starting drags of tabs
89
void PsiTabBar::mouseMoveEvent(QMouseEvent *event)
91
if (!(event->buttons() & Qt::LeftButton))
93
if ( (event->pos() - dragStartPosition_).manhattanLength()
94
< QApplication::startDragDistance() )
86
void PsiTabBar::mouseMoveEvent(QMouseEvent *event) {
90
if (!(event->buttons() & Qt::LeftButton)) {
93
if ((event->pos() - dragStartPosition_).manhattanLength()
94
< QApplication::startDragDistance()) {
97
98
if (dragTab_ != -1) {
99
99
QDrag *drag = new QDrag(this);
100
100
QMimeData *mimeData = new QMimeData;
104
104
data.setNum(dragTab_);
106
mimeData->setData("psiTabDrag",data);
106
mimeData->setData(PSITABDRAGMIMETYPE, data);
107
107
drag->setMimeData(mimeData);
108
108
drag->setPixmap(icon);
110
110
Qt::DropAction dropAction = drag->start(Qt::MoveAction);
111
111
Q_UNUSED(dropAction);
117
void PsiTabBar::contextMenuEvent ( QContextMenuEvent * event )
117
void PsiTabBar::contextMenuEvent(QContextMenuEvent *event) {
120
119
emit contextMenu(event, findTabUnder(event->pos()));
123
void PsiTabBar::wheelEvent(QWheelEvent *event)
122
void PsiTabBar::wheelEvent(QWheelEvent *event) {
125
123
int numDegrees = event->delta() / 8;
126
124
int numSteps = numDegrees / 15;
128
126
int newIndex = currentIndex() - numSteps;
130
while (newIndex < 0) newIndex += count();
128
while (newIndex < 0) {
131
131
newIndex = newIndex % count();
133
133
setCurrentIndex(newIndex);