Huge push that fixes lot of the problems with headers and added a Slider

This commit is contained in:
Tobias Rundstrom 2006-02-20 00:43:42 -03:00
parent 76b9131d03
commit f36ba49ea9
21 changed files with 298 additions and 42 deletions

View file

@ -1,10 +1,14 @@
#include "MainWindow.h"
#include "Button.h"
#include "Display.h"
Button::Button (QWidget *parent, uint normal, uint pressed) : PixWidget (parent)
{
m_name_normal = normal;
m_name_pressed = pressed;
m_diffx = 0;
m_diffy = 0;
}
Button::~Button ()
@ -18,6 +22,13 @@ Button::setPixmaps(Skin *skin)
m_pixmap_pressed = skin->getItem (m_name_pressed);
m_pixmap = m_pixmap_normal;
if (!m_pixmap_normal || m_pixmap_normal.isNull()) {
qDebug ("OPPP! %d return NULL!", m_name_normal);
}
if (!m_pixmap_pressed || m_pixmap_pressed.isNull()) {
qDebug ("OPPP! %d return NULL!", m_name_pressed);
}
setMinimumSize (m_pixmap.size ());
setMaximumSize (m_pixmap.size ());
@ -27,19 +38,28 @@ Button::setPixmaps(Skin *skin)
void
Button::mousePressEvent (QMouseEvent *event)
{
((SkinDisplay *)parent ())->setNoDrag (true);
MainWindow *mw = dynamic_cast<MainWindow *>(window ());
mw->setNoDrag (true);
m_pixmap = m_pixmap_pressed;
m_diffx = event->pos().x();
m_diffy = event->pos().y();
m_nodrag = true;
update ();
}
void
Button::mouseReleaseEvent (QMouseEvent *event)
{
((SkinDisplay *)parent())->setNoDrag (false);
MainWindow *mw = dynamic_cast<MainWindow *>(window ());
mw->setNoDrag (false);
m_pixmap = m_pixmap_normal;
m_nodrag = false;
update();
emit clicked();
}
ToggleButton::ToggleButton (QWidget *parent, uint on_normal, uint on_pressed,

View file

@ -1,7 +1,6 @@
#ifndef __BUTTON_H__
#define __BUTTON_H__
#include <QWidget>
#include "PixWidget.h"
using namespace std;
@ -12,6 +11,7 @@ class Button : public PixWidget
public:
Button (QWidget *parent, uint btn1, uint btn2);
~Button ();
bool noDrag (void) { return m_nodrag; }
public slots:
void setPixmaps (Skin *skin);
@ -26,8 +26,13 @@ class Button : public PixWidget
uint m_name_normal;
uint m_name_pressed;
uint m_diffx;
uint m_diffy;
QPixmap m_pixmap_normal;
QPixmap m_pixmap_pressed;
bool m_nodrag;
};
class ToggleButton : public Button

View file

@ -33,13 +33,13 @@ SkinDisplay::mouseMoveEvent (QMouseEvent *event)
void
SkinDisplay::enterEvent (QEvent *event)
{
m_tbar->setActive(true);
dynamic_cast<TitleBar *>(m_tbar)->setActive(true);
}
void
SkinDisplay::leaveEvent (QEvent *event)
{
m_tbar->setActive(false);
dynamic_cast<TitleBar *>(m_tbar)->setActive(false);
}
void

View file

@ -10,7 +10,7 @@
#include <QMouseEvent>
#include <QPaintEvent>
#include "TitleBar.h"
#include "Skin.h"
using namespace std;
@ -35,7 +35,7 @@ class SkinDisplay : public QWidget
void SkinDisplay::leaveEvent (QEvent *event);
QWidget *m_mw;
TitleBar *m_tbar;
QWidget *m_tbar;
private:
bool m_noDrag;

View file

@ -35,6 +35,11 @@ MainDisplay::MainDisplay (QWidget *parent) : SkinDisplay(parent)
m_stereo->move (212, 41);
m_stereo->setStereoMono (0, 0);
m_slider = new Slider (this, Skin::POSBAR,
Skin::POSBAR_BTN_0,
Skin::POSBAR_BTN_1);
m_slider->move (16, 72);
}
void
@ -73,26 +78,28 @@ MainDisplay::SetupToggleButtons (void)
void
MainDisplay::SetupPushButtons (void)
{
MainWindow *mw = dynamic_cast<MainWindow *>(window ());
/* Normal buttons */
m_prev = new Button (this, Skin::BTN_PREV_0, Skin::BTN_PREV_1);
m_prev->move(16, 88);
connect (m_prev, SIGNAL(clicked()), m_mw->getHandler (), SLOT(prev()));
connect (m_prev, SIGNAL(clicked()), mw->getHandler (), SLOT(prev()));
m_play = new Button (this, Skin::BTN_PLAY_0, Skin::BTN_PLAY_1);
m_play->move(39, 88);
connect (m_play, SIGNAL(clicked()), m_mw->getHandler (), SLOT(play()));
connect (m_play, SIGNAL(clicked()), mw->getHandler (), SLOT(play()));
m_pause = new Button (this, Skin::BTN_PAUSE_0, Skin::BTN_PAUSE_1);
m_pause->move(62, 88);
connect (m_pause, SIGNAL(clicked()), m_mw->getHandler (), SLOT(pause()));
connect (m_pause, SIGNAL(clicked()), mw->getHandler (), SLOT(pause()));
m_stop = new Button (this, Skin::BTN_STOP_0, Skin::BTN_STOP_1);
m_stop->move(85, 88);
connect (m_stop, SIGNAL(clicked()), m_mw->getHandler (), SLOT(stop()));
connect (m_stop, SIGNAL(clicked()), mw->getHandler (), SLOT(stop()));
m_next = new Button (this, Skin::BTN_NEXT_0, Skin::BTN_NEXT_1);
m_next->move(108, 88);
connect (m_next, SIGNAL(clicked()), m_mw->getHandler (), SLOT(next()));
connect (m_next, SIGNAL(clicked()), mw->getHandler (), SLOT(next()));
m_eject = new Button (this, Skin::BTN_EJECT_0, Skin::BTN_EJECT_1);
m_eject->move(136, 89);

View file

@ -18,10 +18,10 @@ class MainDisplay;
#include "TitleBar.h"
#include "Button.h"
#include "TextBar.h"
#include "MainWindow.h"
#include "NumberDisplay.h"
#include "SmallNumberDisplay.h"
#include "StereoMono.h"
#include "Slider.h"
using namespace std;
@ -40,14 +40,13 @@ class MainDisplay : public SkinDisplay
SmallNumberDisplay *m_khz;
StereoMono *m_stereo;
Slider *m_slider;
public slots:
void setPixmaps(Skin *skin);
protected:
void SetupPushButtons (void);
void MainDisplay::SetupToggleButtons (void);
MainWindow *m_mw;
void SetupToggleButtons (void);
Button *m_prev;
Button *m_play;

View file

@ -1,7 +1,7 @@
#include <xmmsclient/xmmsclient++.h>
#include "MainWindow.h"
MainWindow::MainWindow ()
MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent)
{
setWindowFlags(Qt::FramelessWindowHint);
setGeometry(100, 100, 275, 116);
@ -13,7 +13,7 @@ MainWindow::MainWindow ()
setCentralWidget(m_display);
skin->setSkin("./Debian/");
skin->setSkin("./CleanAMP/");
m_display->show();
}
@ -23,6 +23,12 @@ MainWindow::~MainWindow ()
delete skin;
}
void
MainWindow::setNoDrag (bool b)
{
m_display->setNoDrag (b);
}
Skin *MainWindow::getSkin(void)
{
return skin;
@ -32,7 +38,7 @@ int main (int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow *mw = new MainWindow();
MainWindow *mw = new MainWindow (NULL);
mw->show();

View file

@ -23,11 +23,12 @@ class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(void);
MainWindow (QWidget *parent);
~MainWindow (void);
Skin *getSkin (void);
XMMSHandler *getHandler () { return m_handler; }
MainDisplay *getMD () { return m_display; }
void setNoDrag (bool b);
private:
Skin *skin;
XMMSHandler *m_handler;

View file

@ -1,12 +1,6 @@
#ifndef __NUMBERDISPLAY_H__
#define __NUMBERDISPLAY_H__
#include <iostream>
#include <QPixmap>
#include <QPainter>
#include <QWidget>
#include "PixWidget.h"
class NumberDisplay : public PixWidget

View file

@ -1,14 +1,13 @@
#include "MainWindow.h"
#include "PixWidget.h"
PixWidget::PixWidget (QWidget *parent) : QWidget (parent)
{
MainWindow *mw = (MainWindow *)((SkinDisplay *)parent)->getMW();
MainWindow *mw = dynamic_cast<MainWindow *>(window ());
if (!mw) {
qDebug ("******** DANGER! NO MAINWINDOW FOUND");
}
m_pixmap = QPixmap(0,0);
connect (mw->getSkin(), SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *)));
}

View file

@ -3,12 +3,12 @@
#include <iostream>
#include "Skin.h"
#include <QPixmap>
#include <QPainter>
#include <QWidget>
#include "Skin.h"
class PixWidget : public QWidget
{
Q_OBJECT
@ -16,10 +16,12 @@ class PixWidget : public QWidget
PixWidget(QWidget *parent = 0);
~PixWidget();
void paintEvent (QPaintEvent *event);
QWidget *getMW (void) { return m_mw; }
public slots:
virtual void setPixmaps(Skin *skin);
protected:
QPixmap m_pixmap;
QWidget *m_mw;
};
#endif

View file

@ -278,6 +278,13 @@ Skin::BuildSliders (void)
{
QPixmap *img;
img = getPixmap("posbar.bmp");
m_items->insert (POSBAR, img->copy (0, 0, 248, 10));
m_items->insert (POSBAR_BTN_0, img->copy (248, 0, 29, 10));
m_items->insert (POSBAR_BTN_1, img->copy (278, 0, 29, 10));
delete img;
img = getPixmap("volume.bmp");
for (int i = VOLUMEBAR_POS_MIN; i < VOLUMEBAR_POS_MAX; i++) {
m_volume_bar->insert(i, img->copy(0, i*15, 68, 13));

3
Skin.h
View file

@ -146,6 +146,9 @@ class Skin : public QWidget
PIC_PLAY,
PIC_PAUSE,
PIC_STOP,
POSBAR,
POSBAR_BTN_0,
POSBAR_BTN_1,
};
private:
QPixmap *Skin::getPixmap (string file);

135
Slider.cpp Normal file
View file

@ -0,0 +1,135 @@
#include "MainWindow.h"
#include "Slider.h"
#include <QWidget>
#include <QMouseEvent>
BarButton::BarButton (QWidget *parent, uint normal, uint pressed) : Button (parent, normal, pressed)
{
m_slider = dynamic_cast<Slider *>(parent);
setMinimumSize (29, 10);
setMaximumSize (29, 10);
}
void
BarButton::mouseMoveEvent (QMouseEvent *event)
{
QPoint p (event->pos ());
/** @todo this could be cleaned up */
if (m_slider->getVertical ()) {
int npos = pos().x() + p.x() - m_diffx;
if (npos >= 0 && npos + rect().width() <= m_slider->rect().width()) {
move (npos, 0);
} else if (npos < 0) {
move (0, 0);
} else if (npos + rect().width() > m_slider->rect().width()) {
move (m_slider->rect().width()-rect().width(), 0);
}
} else {
int npos = pos().y()+p.y()-m_diffy;
if (npos >= 0 && npos + rect().height() <= m_slider->rect().height()) {
move (npos, 0);
} else if (npos < 0) {
move (0, 0);
} else if (npos + rect().height() > m_slider->rect().height()) {
move (m_slider->rect().height()-rect().height(), 0);
}
}
}
Slider::Slider (QWidget *parent, uint bg, uint bnormal, uint bpressed, bool vertical) : PixWidget (parent)
{
MainWindow *mw = dynamic_cast<MainWindow *>(window ());
m_bg = bg;
m_vertical = vertical;
setMinimumSize (248, 10);
setMaximumSize (248, 10);
m_max = 0;
m_button = new BarButton (this, bnormal, bpressed);
m_button->move (0, 0);
connect (m_button, SIGNAL(clicked ()), mw->getHandler (), SLOT (setPlaytime ()));
if (m_vertical) {
m_pix = size().width()-m_button->size().width();
} else {
m_pix = size().height()-m_button->size().height();
}
m_pos = 0;
hideBar (true);
}
void
Slider::setSize (uint x, uint y)
{
setMinimumSize (x, y);
setMaximumSize (x, y);
if (m_vertical) {
m_pix = size().width()-m_button->size().width();
} else {
m_pix = size().height()-m_button->size().height();
}
}
uint
Slider::getPos (void)
{
if (m_vertical) {
return (uint)((float)m_button->pos().x()) / (float)(m_pix) * float(m_max);
} else {
return (uint)((float)m_button->pos().y())/((float)(m_pix*m_max));
}
}
void
Slider::hideBar (bool b)
{
if (b) {
m_button->hide ();
} else {
m_button->show ();
}
update();
}
void
Slider::setPos (uint p)
{
if (!m_max) {
return;
}
if (m_button->noDrag()) {
return;
}
uint x = m_pix * p / m_max;
if (x != m_pos) {
m_button->move (x , 0);
m_pos = x;
update ();
}
}
void
Slider::setPixmaps (Skin *skin)
{
m_pixmap = skin->getItem (m_bg);
}

51
Slider.h Normal file
View file

@ -0,0 +1,51 @@
#ifndef __SLIDER_H__
#define __SLIDER_H__
#include "PixWidget.h"
#include "Button.h"
class Slider;
class BarButton : public Button
{
public:
BarButton (QWidget *, uint, uint);
void mouseMoveEvent (QMouseEvent *);
private:
Slider *m_slider;
};
class Slider : public PixWidget
{
Q_OBJECT
public:
Slider (QWidget *parent, uint bg, uint bnormal, uint bpressed, bool vertical=true);
~Slider () { }
void setSize (uint, uint);
uint getPos (void);
void setPos (uint);
void setMax (uint max) { m_max = max; }
void hideBar (bool b);
bool getVertical () { return m_vertical; }
public slots:
void setPixmaps (Skin *skin);
private:
bool m_vertical;
int m_bg;
uint m_max;
uint m_pix;
uint m_pos;
BarButton *m_button;
};
#endif

View file

@ -1,3 +1,6 @@
#ifndef __STEREOMONO_H__
#define __STEREOMONO_H__
#include "PixWidget.h"
class StereoMono : public PixWidget
@ -25,3 +28,4 @@ class StereoMono : public PixWidget
QPixmap m_pixmap_stereo;
};
#endif

View file

@ -1,4 +1,3 @@
#include "MainWindow.h"
#include "TitleBar.h"
#include "Display.h"

View file

@ -1,7 +1,8 @@
#ifndef __TITLEBAR_H__
#define __TITLEBAR_H__
#include <QWidget>
class TitleBar;
#include "PixWidget.h"
using namespace std;

View file

@ -12,7 +12,7 @@ XMMSHandler::XMMSHandler (MainWindow *mw) : sigc::trackable ()
m_xmmsc = new XMMSClient ("promoe");
if (!m_xmmsc->connect (NULL)) {
if (!m_xmmsc->connect (getenv ("XMMS_PATH"))) {
QErrorMessage *err = new QErrorMessage ();
err->showMessage ("Couldn't connect to XMMS2, please try again.");
err->exec ();
@ -38,6 +38,9 @@ XMMSHandler::playback_playtime (XMMSResult *res)
m_mw->getMD ()->m_number->setNumber (min / 10, min % 10);
m_mw->getMD ()->m_number2->setNumber (sec / 10, sec % 10);
/* update slider */
m_mw->getMD ()->m_slider->setPos (i);
res->restart ();
}
@ -53,6 +56,15 @@ XMMSHandler::playback_current_id (XMMSResult *res)
r->connect (sigc::mem_fun (this, &XMMSHandler::medialib_info));
}
void
XMMSHandler::setPlaytime (void)
{
uint pos = m_mw->getMD ()->m_slider->getPos();
qDebug ("pos = %d", pos);
delete m_xmmsc->playback_seek_ms (pos);
}
void
XMMSHandler::medialib_info (XMMSResult *res)
{
@ -80,6 +92,13 @@ XMMSHandler::medialib_info (XMMSResult *res)
}
}
if (res->getDictValue ("duration", &b)) {
if (b > 0) {
m_mw->getMD ()->m_slider->setMax (b);
m_mw->getMD ()->m_slider->hideBar (false);
}
}
delete res;
}

View file

@ -22,6 +22,8 @@ class XMMSHandler : public QObject, public sigc::trackable {
const XMMSClient *getXMMS () { return m_xmmsc; }
public slots:
void setPlaytime ();
void play () { delete m_xmmsc->playback_start (); }
void stop () { delete m_xmmsc->playback_stop (); }
void pause () { delete m_xmmsc->playback_pause (); }

View file

@ -10,7 +10,8 @@ SOURCES += XmmsQT4.cpp \
NumberDisplay.cpp \
XMMSHandler.cpp \
SmallNumberDisplay.cpp \
StereoMono.cpp
StereoMono.cpp \
Slider.cpp
HEADERS += XmmsQT4.h \
PixWidget.h \
@ -24,7 +25,8 @@ HEADERS += XmmsQT4.h \
NumberDisplay.h \
XMMSHandler.h \
SmallNumberDisplay.h \
StereoMono.h
StereoMono.h \
Slider.h
CONFIG += link_pkgconfig
CONFIG += debug