From 2ae3f3bf7e85f6178605d4b7d6c0e12c3935ea93 Mon Sep 17 00:00:00 2001 From: Tobias Rundstrom Date: Sat, 4 Mar 2006 21:23:15 -0300 Subject: [PATCH] The beginning of a settings window. Only application settings for now --- SettingsWindow.cpp | 142 +++++++++++++++++++++++++++++++++++++++++++++ SettingsWindow.h | 46 +++++++++++++++ TextBar.cpp | 70 +++++++++++++++++----- TextBar.h | 8 ++- TitleBar.cpp | 9 +++ TitleBar.h | 1 + XMMSHandler.h | 3 + promoe.pro | 8 ++- 8 files changed, 265 insertions(+), 22 deletions(-) create mode 100644 SettingsWindow.cpp create mode 100644 SettingsWindow.h diff --git a/SettingsWindow.cpp b/SettingsWindow.cpp new file mode 100644 index 0000000..1920b50 --- /dev/null +++ b/SettingsWindow.cpp @@ -0,0 +1,142 @@ +#include "MainWindow.h" +#include "SettingsWindow.h" + +#include +#include + +SettingsWindow::SettingsWindow (QWidget *parent) : QMainWindow (parent) +{ +#ifndef _WIN32 + setWindowIcon (QIcon (":icon.png")); +#endif + + resize (400, 300); + + QWidget *dummy = new QWidget (this); + setCentralWidget (dummy); + + QVBoxLayout *vbox = new QVBoxLayout (dummy); + + QTabWidget *tab = new QTabWidget (dummy); + vbox->addWidget (tab); + + QWidget *dummy2 = new QWidget (dummy); + QHBoxLayout *hbox = new QHBoxLayout (dummy2); + vbox->addWidget (dummy2); + + QPushButton *cancel = new QPushButton (tr ("Cancel")); + cancel->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); + QPushButton *ok = new QPushButton (tr ("OK")); + ok->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); + connect (ok, SIGNAL (clicked ()), this, SLOT (okButton ())); + + hbox->addWidget (new QWidget (dummy2), 1); + hbox->addWidget (cancel); + hbox->addWidget (ok); + + m_mainwindow = new SettingsTabMain (tab); + m_playlistwin = new QWidget (tab); + m_medialib = new QWidget (tab); + + tab->addTab (m_mainwindow, tr ("Main Window")); + tab->addTab (m_playlistwin, tr ("Playlist Window")); + tab->addTab (m_medialib, tr ("Medialib")); +} + +void +SettingsWindow::okButton (void) +{ + XMMSHandler *xmmsh = XMMSHandler::getInstance (); + m_mainwindow->saveSettings (); + + close (); + xmmsh->updateSettings (); +} + +SettingsTabMain::SettingsTabMain (QWidget *parent) : QWidget (parent) +{ + QSettings s; + + QVBoxLayout *vbox = new QVBoxLayout (this); + QWidget *c = new QWidget (this); + QHBoxLayout *h = new QHBoxLayout (c); + + vbox->addWidget (c); + + s.beginGroup ("maindisplay"); + m_scrolltbar = new QCheckBox (tr ("Scroll titlebar"), this); + + if (s.value("scrollbar").toBool ()) + m_scrolltbar->setCheckState (Qt::Checked); + else + m_scrolltbar->setCheckState (Qt::Unchecked); + + h->addWidget (m_scrolltbar); + + m_fontsize = new QSpinBox (this); + m_fontsize->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); + m_fontsize->setMinimum (6); + m_fontsize->setMaximum (20); + m_fontsize->setValue (s.value("fontsize").toInt ()); + h->addWidget (m_fontsize); + + QLabel *l = new QLabel (tr ("Titlebar fontsize"), this); + l->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed)); + h->addWidget (l); + + QFrame *f = new QFrame (this); + f->setFrameStyle (QFrame::HLine | QFrame::Raised); + vbox->addWidget (f, 1); + + c = new QWidget (this); + h = new QHBoxLayout (c); + + vbox->addWidget (c); + + m_mainttf = new QCheckBox (tr ("Draw main title with TrueType fonts"), this); + m_mainttf->setCheckState (s.value ("mainttf").toBool () ? Qt::Checked : Qt::Unchecked); + h->addWidget (m_mainttf); + + /* + c = new QWidget (this); + h = new QHBoxLayout (c); + + vbox->addWidget (c); + + m_shadettf = new QCheckBox (tr ("Draw shaded title with TrueType fonts"), this); + m_shadettf->setCheckState (s.value ("shadettf").toBool () ? Qt::Checked : Qt::Unchecked); + h->addWidget (m_shadettf); + */ + + f = new QFrame (this); + f->setFrameStyle (QFrame::HLine | QFrame::Raised); + vbox->addWidget (f, 1); + + c = new QWidget (this); + h = new QHBoxLayout (c); + + vbox->addWidget (c); + + m_quitonclose = new QCheckBox (tr ("Quit XMMS2D when closing Promoe")); + if (s.contains ("quitonclose")) + s.setValue ("quitonclose", false); + m_quitonclose->setCheckState (s.value ("quitonclose").toBool () ? Qt::Checked : Qt::Unchecked); + h->addWidget (m_quitonclose); + + + s.endGroup (); + +} + +void +SettingsTabMain::saveSettings (void) +{ + QSettings s; + + s.beginGroup ("maindisplay"); + s.setValue ("scrollbar", m_scrolltbar->checkState () == Qt::Checked); + s.setValue ("fontsize", m_fontsize->value ()); + s.setValue ("quitonclose", m_quitonclose->checkState () == Qt::Checked); + s.setValue ("mainttf", m_mainttf->checkState () == Qt::Checked); + s.endGroup (); +} diff --git a/SettingsWindow.h b/SettingsWindow.h new file mode 100644 index 0000000..f2f6ad5 --- /dev/null +++ b/SettingsWindow.h @@ -0,0 +1,46 @@ +#ifndef __SETTINGSWINDOW_H__ +#define __SETTINGSWINDOW_H__ + +#include +#include +#include +#include +#include +#include +#include +#include + +class SettingsTabMain : public QWidget { + Q_OBJECT + public: + SettingsTabMain (QWidget *parent); + ~SettingsTabMain () {} + void saveSettings (void); + + + private: + QCheckBox *m_scrolltbar; + QSpinBox *m_fontsize; + QCheckBox *m_quitonclose; + QCheckBox *m_mainttf; + QCheckBox *m_shadettf; +}; + +class SettingsWindow : public QMainWindow { + Q_OBJECT + public: + SettingsWindow (QWidget *parent); + ~SettingsWindow () {} + + public slots: + void okButton (void); + + private: + SettingsTabMain *m_mainwindow; + QWidget *m_playlistwin; + QWidget *m_medialib; + +}; + + +#endif diff --git a/TextBar.cpp b/TextBar.cpp index 57e1259..d0fbff2 100644 --- a/TextBar.cpp +++ b/TextBar.cpp @@ -4,21 +4,37 @@ TextScroller::TextScroller (QWidget *parent, uint w, uint h) : QWidget (parent) { + XMMSHandler *xmmsh = XMMSHandler::getInstance (); Skin *skin = Skin::getInstance (); connect (skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); + QSettings s; + + s.beginGroup ("maindisplay"); + + if (!s.contains("scrollbar")) + s.setValue("scrollbar", true); + + if (!s.contains("fontsize")) + s.setValue("fontsize", 8); + + if (!s.contains("mainttf")) + s.setValue("mainttf", true); + + if (!s.contains("shadettf")) + s.setValue("shadettf", true); + m_h = h; m_w = w; m_x_off = 0; m_x2_off = 0; -#ifdef Q_OS_MACX - m_fontsize = 9; -#else - m_fontsize = 8; /* default */ -#endif - m_ttf = true; + m_fontsize = s.value ("fontsize").toInt (); + m_ttf = s.value ("mainttf").toBool (); + m_text = "Promoe 0.1"; + + s.endGroup (); setMinimumSize(m_w + 2, m_h); setMaximumSize(m_w + 2, m_h); @@ -31,7 +47,20 @@ TextScroller::TextScroller (QWidget *parent, uint w, uint h) : QWidget (parent) m_timer = new QTimer (this); connect (m_timer, SIGNAL (timeout()), this, SLOT (addOffset ())); + connect (xmmsh, SIGNAL (settingsSaved ()), this, SLOT (settingsSaved ())); +} +void +TextScroller::settingsSaved (void) +{ + QSettings s; + s.beginGroup ("maindisplay"); + m_fontsize = s.value ("fontsize").toInt (); + m_ttf = s.value ("mainttf").toBool (); + s.endGroup (); + + setText (m_text); + update (); } void @@ -43,7 +72,7 @@ TextScroller::setPixmaps (Skin *skin) pal.setBrush (QPalette::Window, b); setPalette (pal); - setText (QString::fromUtf8 ("Promoe 0.1")); + setText (m_text); update(); } void @@ -63,8 +92,10 @@ TextScroller::addOffset () } void -TextScroller::setText (const QString &text) +TextScroller::setText (QString text) { + m_text = text; + if (m_ttf) { drawQtFont (text); } else { @@ -76,12 +107,12 @@ TextScroller::setText (const QString &text) } void -TextScroller::drawBitmapFont (const QString &text) +TextScroller::drawBitmapFont (QString text) { Skin *skin = Skin::getInstance (); int width = text.length() * 6; - QString (temp) = text.toLower (); + QString temp = text.toLower (); if (width > m_w) { temp += QString::fromAscii (" -- "); @@ -91,29 +122,36 @@ TextScroller::drawBitmapFont (const QString &text) } else { m_pixmap = QPixmap (m_w, m_h); } - const char *t = temp.toLatin1(); + QByteArray temp2 = temp.toLatin1(); + const char *t = temp2.data(); QPainter (paint); paint.begin (&m_pixmap); - paint.fillRect (m_pixmap.rect(), Qt::white); + + paint.drawPixmap (m_pixmap.rect (), + skin->getItem (Skin::TEXTBG), + skin->getItem (Skin::TEXTBG).rect ()); + for (uint i = 0; i < strlen (t); i++) { QPixmap p = skin->getLetter (t[i]); - if (!p) { + if (p.isNull ()) { p = skin->getLetter(' '); + if (p.isNull ()) { + qDebug ("abort ffs!"); + } } - paint.drawPixmap (QRect (i * 6, m_y, 4, 6), + paint.drawPixmap (QRect ((i * 6), m_y, 4, 6), p, p.rect()); } paint.end(); - m_pixmap.setMask (m_pixmap.createHeuristicMask ()); } void -TextScroller::drawQtFont (const QString &text) +TextScroller::drawQtFont (QString text) { Skin *skin = Skin::getInstance (); diff --git a/TextBar.h b/TextBar.h index 4937879..7d7d31d 100644 --- a/TextBar.h +++ b/TextBar.h @@ -22,13 +22,14 @@ class TextScroller : public QWidget TextScroller (QWidget *parent, uint, uint); ~TextScroller (); - void setText(const QString &text); + void setText(QString text); void setFontSize (int i) { m_fontsize = i; } void setTTF (bool b) { m_ttf = b; } public slots: void addOffset (); void setPixmaps(Skin *skin); + void settingsSaved (void); protected: QPixmap m_pixmap; @@ -44,9 +45,10 @@ class TextScroller : public QWidget bool m_ttf; QTimer *m_timer; + QString m_text; - void drawBitmapFont (const QString &text); - void drawQtFont (const QString &text); + void drawBitmapFont (QString text); + void drawQtFont (QString text); }; #endif diff --git a/TitleBar.cpp b/TitleBar.cpp index bda9335..1b581a3 100644 --- a/TitleBar.cpp +++ b/TitleBar.cpp @@ -3,6 +3,7 @@ #include "Display.h" #include "SkinChooser.h" #include "Medialib.h" +#include "SettingsWindow.h" #include @@ -50,6 +51,7 @@ TitleBar::showMenu (void) qm.addAction (a); a = new QAction (tr ("Application settings"), this); a->setShortcut (tr ("Alt+A")); + connect (a, SIGNAL (triggered ()), this, SLOT (showSettings ())); qm.addAction (a); a = new QAction (tr ("Server settings"), this); a->setShortcut (tr ("Alt+S")); @@ -71,6 +73,13 @@ TitleBar::showMlib () mw->show (); } +void +TitleBar::showSettings () +{ + SettingsWindow *sw = new SettingsWindow (window ()); + sw->show (); +} + void TitleBar::showTheme () { diff --git a/TitleBar.h b/TitleBar.h index be24767..9c3fa6e 100644 --- a/TitleBar.h +++ b/TitleBar.h @@ -21,6 +21,7 @@ class TitleBar : public PixWidget void showMenu (void); void showTheme (void); void showMlib (void); + void showSettings (void); protected: void mouseDoubleClickEvent (QMouseEvent *event); diff --git a/XMMSHandler.h b/XMMSHandler.h index f97193c..a8d8363 100644 --- a/XMMSHandler.h +++ b/XMMSHandler.h @@ -36,6 +36,8 @@ class XMMSHandler : public QObject, public sigc::trackable { const XMMSClient *getXMMS () { return m_xmmsc; } + void updateSettings (void) { emit settingsSaved (); } + public slots: void setPlaytime (); void fileOpen (void); @@ -53,6 +55,7 @@ class XMMSHandler : public QObject, public sigc::trackable { } signals: + void settingsSaved (void); void playbackStatusChanged (uint status); void playtimeChanged (uint time); void mediainfoChanged (uint, QHash); diff --git a/promoe.pro b/promoe.pro index 7b7b4d3..9e5ab46 100644 --- a/promoe.pro +++ b/promoe.pro @@ -19,7 +19,8 @@ SOURCES += XmmsQT4.cpp \ SkinChooser.cpp \ PlaylistShade.cpp \ Medialib.cpp \ - qtmd5.cpp + qtmd5.cpp \ + SettingsWindow.cpp HEADERS += XmmsQT4.h \ PixWidget.h \ @@ -42,7 +43,8 @@ HEADERS += XmmsQT4.h \ SkinChooser.h \ PlaylistShade.h \ Medialib.h \ - qtmd5.h + qtmd5.h \ + SettingsWindow.h RESOURCES = promoe.qrc @@ -53,7 +55,7 @@ macx:QTPLUGIN += qjpeg QMAKE_LFLAGS += -L$$[QT_INSTALL_PLUGINS]/imageformats CONFIG += link_pkgconfig -CXXFLAGS += -g +QMAKE_CXXFLAGS += -g ;CONFIG += debug warn_on QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter PKGCONFIG += xmms2-client xmms2-client-cpp sigc++-2.0