blob: 298d77356a7a481e8284b917052e8f3acf3f04a6 [file] [log] [blame]
/**
* projectM-qt -- Qt4 based projectM GUI
* Copyright (C)2003-2004 projectM Team
*
* This library 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.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* See 'LICENSE.txt' included within this release
*
*/
#ifndef QPROJECTM_MAINWINDOW_H
#define QPROJECTM_MAINWINDOW_H
#define CONFIG_FILE "/share/projectM/config.inp"
#include <QMainWindow>
#include <QCloseEvent>
#include <cassert>
#include <QGLWidget>
#include <QHash>
#include <QtDebug>
#include <QMutex>
#include "projectM.hpp"
#include <QModelIndexList>
class QHeaderView;
class QAction;
class QMenu;
class QPresetFileDialog;
class QPlaylistFileDialog;
class QPlaylistModel;
class QModelIndex;
class QProjectMConfigDialog;
class QPresetEditorDialog;
class QProjectM;
class QProjectMWidget;
template <class T>
class Nullable;
namespace Ui {
class QProjectM_MainWindow;
}
#include <iostream>
class QProjectM_MainWindow:public QMainWindow
{
Q_OBJECT
signals:
void shuttingDown();
public:
projectM * GetProjectM();
typedef struct PlaylistItemMetaData {
PlaylistItemMetaData() {}
PlaylistItemMetaData(const QString & _url, const QString & _name, int _rating, int _breed, long _id):
url(_url), name(_name), rating(_rating), breedability(_breed), id(_id) {}
QString url;
QString name;
int rating;
int breedability;
long id;
inline bool operator==(const PlaylistItemMetaData & data) {
return data.id == id;
}
inline bool operator==(long rhs_id) {
return rhs_id == id;
}
} PlaylistItemMetaData;
void addPCM(float * buffer, unsigned int bufferSize);
typedef QVector<long> PlaylistItemVector;
QProjectM_MainWindow(const std::string & config_file, QMutex * audioMutex);
virtual ~QProjectM_MainWindow();
void registerSettingsAction(QAction * action);
void unregisterSettingsAction(QAction * action);
void setMenuVisible(bool visible);
void setMenuAndStatusBarsVisible(bool visible);
void keyReleaseEvent ( QKeyEvent * e );
QProjectM * qprojectM();
void refreshPlaylist();
QProjectMWidget * qprojectMWidget() { return m_QProjectMWidget; }
void registerAction(const QAction &);
public slots:
protected:
void closeEvent(QCloseEvent *event);
private slots:
void dockLocationChanged(Qt::DockWidgetArea area);
void presetRatingChanged(unsigned int, int, PresetRatingType);
void presetHardCut();
void presetSoftCut();
void insertPresetsDialog() ;
void removeSelectedPlaylistItems();
void openPresetEditorDialogForSelectedPreset();
void popupPlaylistContextMenu(QMouseEvent *, const QModelIndexList & items);
void hotkeyReference();
void selectPlaylistItem ( int rowIndex);
void clearPlaylistModel();
void openPresetEditorDialog(int rowIndex);
void aboutQt();
void clearPlaylist();
void addPresetsDialog();
void addPresetsDialog(const QModelIndex & index);
void openPlaylistDialog();
void savePlaylistButtonClick();
void savePlaylistAsDialog();
void about();
void postProjectM_Initialize();
void updatePlaylistSelection(bool hardCut, unsigned int index);
void selectPlaylistItem(const QModelIndex & index);
void changePresetAttribute(const QModelIndex & index);
void openSettingsDialog();
void updateFilteredPlaylist(const QString & text);
void refreshHeaders(QResizeEvent * event = 0);
void removePlaylistItems(const QModelIndexList & items);
void dragAndDropPlaylistItems(const QModelIndexList &, const QModelIndex &);
private:
void readPlaylistSettings();
bool warnIfPlaylistModified();
void insertPlaylistItem(const PlaylistItemMetaData & data, int targetIndex);
void savePlaylist();
void updatePlaylistUrl(const QString & url);
unsigned long playlistItemCounter;
QSize _oldPlaylistSize;
void readConfig(const std::string & configFile);
void writeConfig();
void copyPlaylist();
QPresetEditorDialog * m_QPresetEditorDialog;
QHeaderView * hHeader;
QHeaderView * vHeader;
QString m_currentPlaylistUrl;
QModelIndexList selectedPlaylistIndexes;
QPlaylistModel * playlistModel;
Ui::QProjectM_MainWindow * ui;
QProjectMConfigDialog * configDialog;
QHash<long, PlaylistItemMetaData> playlistItemMetaDataHash;
QHash<QString, PlaylistItemVector*> historyHash;
Nullable<long> * activePresetIndex;
bool _menuVisible;
bool _menuAndStatusBarsVisible;
QTimer * m_timer;
void createActions();
void createMenus();
void createToolBars();
void createStatusBar();
void readSettings();
void writeSettings();
void loadFile(const QString &fileName, int rating , int breed, const Nullable<int> & row);
QString strippedName(const QString &fullFileName);
QProjectMWidget * m_QProjectMWidget;
QMenu *playlistContextMenu;
QToolBar *fileToolBar;
QAction *openAct;;
QAction *exitAct;
QAction *aboutAct;
QAction *aboutQtAct;
QString previousFilter;
Qt::DockWidgetArea dockWidgetArea;
QPresetFileDialog * m_QPresetFileDialog;
QPlaylistFileDialog * m_QPlaylistFileDialog;
};
#endif