diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 18:37:05 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 18:37:05 +0000 |
commit | 145364a8af6a1fec06556221e66d4b724a62fc9a (patch) | |
tree | 53bd71a544008c518034f208d64c932dc2883f50 /src/gui/widgets/ScrollBox.cpp | |
download | rosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.tar.gz rosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.zip |
Added old abandoned KDE3 version of the RoseGarden MIDI tool
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/rosegarden@1097595 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/gui/widgets/ScrollBox.cpp')
-rw-r--r-- | src/gui/widgets/ScrollBox.cpp | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/src/gui/widgets/ScrollBox.cpp b/src/gui/widgets/ScrollBox.cpp new file mode 100644 index 0000000..b409209 --- /dev/null +++ b/src/gui/widgets/ScrollBox.cpp @@ -0,0 +1,159 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Rosegarden + A MIDI and audio sequencer and musical notation editor. + + This program is Copyright 2000-2008 + Guillaume Laurent <[email protected]>, + Chris Cannam <[email protected]>, + Richard Bown <[email protected]> + + The moral rights of Guillaume Laurent, Chris Cannam, and Richard + Bown to claim authorship of this work have been asserted. + + This file is based on code from KGhostView, Copyright 1997-2002 + Markkhu Hihnala <[email protected]> + and the KGhostView authors. + + Other copyrights also apply to some parts of this work. Please + see the AUTHORS file and individual file headers for details. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + + +#include "ScrollBox.h" + +#include <qapplication.h> +#include <qframe.h> +#include <qimage.h> +#include <qpainter.h> +#include <qpixmap.h> +#include <qpoint.h> +#include <qrect.h> +#include <qsize.h> +#include <qwidget.h> + + +namespace Rosegarden +{ + +ScrollBox::ScrollBox(QWidget* parent, SizeMode sizeMode, const char* name) : + QFrame(parent, name), + m_sizeMode(sizeMode) +{ + setFrameStyle(Panel | Sunken); +} + +void ScrollBox::mousePressEvent(QMouseEvent* e) +{ + m_mouse = e->pos(); + if (e->button() == RightButton) + emit button3Pressed(); + if (e->button() == MidButton) + emit button2Pressed(); +} + +void ScrollBox::mouseMoveEvent(QMouseEvent* e) +{ + if (e->state() != LeftButton) + return ; + + int dx = (e->pos().x() - m_mouse.x()) * m_pagesize.width() / width(); + int dy = (e->pos().y() - m_mouse.y()) * m_pagesize.height() / height(); + + emit valueChanged(QPoint(m_viewpos.x() + dx, m_viewpos.y() + dy)); + emit valueChangedRelative(dx, dy); + + m_mouse = e->pos(); +} + +void ScrollBox::drawContents(QPainter* paint) +{ + if (m_pagesize.isEmpty()) + return ; + + QRect c(contentsRect()); + + paint->setPen(Qt::red); + + int len = m_pagesize.width(); + int x = c.x() + c.width() * m_viewpos.x() / len; + int w = c.width() * m_viewsize.width() / len ; + if (w > c.width()) + w = c.width(); + + len = m_pagesize.height(); + int y = c.y() + c.height() * m_viewpos.y() / len; + int h = c.height() * m_viewsize.height() / len; + if (h > c.height()) + h = c.height(); + + paint->drawRect(x, y, w, h); +} + +void ScrollBox::setPageSize(const QSize& s) +{ + m_pagesize = s; + + setFixedWidth(100); + setFixedHeight(100); + + int maxWidth = int(QApplication::desktop()->width() * 0.75); + int maxHeight = int(QApplication::desktop()->height() * 0.75); + + if (m_sizeMode == FixWidth) { + int height = s.height() * width() / s.width(); + if (height > maxHeight) { + setFixedWidth(width() * maxHeight / height); + height = maxHeight; + } + setFixedHeight(height); + } else { + int width = s.width() * height() / s.height(); + if (width > maxWidth) { + setFixedHeight(height() * maxWidth / width); + width = maxWidth; + } + setFixedWidth(width); + } + + repaint(); +} + +void ScrollBox::setViewSize(const QSize& s) +{ + m_viewsize = s; + repaint(); +} + +void ScrollBox::setViewPos(const QPoint& pos) +{ + m_viewpos = pos; + repaint(); +} + +void ScrollBox::setViewX(int x) +{ + m_viewpos = QPoint(x, m_viewpos.y()); + repaint(); +} + +void ScrollBox::setViewY(int y) +{ + m_viewpos = QPoint(m_viewpos.x(), y); + repaint(); +} + +void ScrollBox::setThumbnail(QPixmap img) +{ + setPaletteBackgroundPixmap(img.convertToImage().smoothScale(size())); +} + +} +#include "ScrollBox.moc" |