/*************************************************************************** * Copyright (C) 2008 by Ilya Kotov * * forkotov02@hotmail.ru * * * * 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. * * * * This program 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 General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include #include "general.h" #include "generalfactory.h" #include "commandlinemanager.h" #include "generalhandler.h" GeneralHandler *GeneralHandler::m_instance = 0; GeneralHandler::GeneralHandler(QObject *parent) : QObject(parent) { m_instance = this; m_toolsMenu = 0; m_playlistMenu = 0; GeneralFactory* factory; foreach(factory, *General::generalFactories()) { if (General::isEnabled(factory)) { General *general = factory->create(parent); connect (general, SIGNAL(toggleVisibilityCalled()), SIGNAL(toggleVisibilityCalled())); connect (general, SIGNAL(exitCalled()), SIGNAL(exitCalled())); m_generals.insert(factory, general); } } m_commandLineManager = new CommandLineManager(this); m_generals.insert(0, m_commandLineManager); } GeneralHandler::~GeneralHandler() {} void GeneralHandler::setEnabled(GeneralFactory* factory, bool enable) { if (enable == m_generals.keys().contains(factory)) return; if (enable) { General *general = factory->create(parent()); connect (general, SIGNAL(toggleVisibilityCalled()), SIGNAL(toggleVisibilityCalled())); connect (general, SIGNAL(exitCalled()), SIGNAL(exitCalled())); m_generals.insert(factory, general); } else { delete m_generals.value(factory); m_generals.remove(factory); } General::setEnabled(factory, enable); } void GeneralHandler::showSettings(GeneralFactory* factory, QWidget* parentWidget) { QDialog *dialog = factory->createConfigDialog(parentWidget); if (!dialog) return; if (dialog->exec() == QDialog::Accepted && m_generals.keys().contains(factory)) { delete m_generals.value(factory); General *general = factory->create(parent()); connect (general, SIGNAL(toggleVisibilityCalled()), SIGNAL(toggleVisibilityCalled())); connect (general, SIGNAL(exitCalled()), SIGNAL(exitCalled())); m_generals[factory] = general; } dialog->deleteLater(); } bool GeneralHandler::visibilityControl() { GeneralFactory* factory; foreach(factory, *General::generalFactories()) { if (General::isEnabled(factory) && factory->properties().visibilityControl) return TRUE; } return FALSE; } void GeneralHandler::executeCommand(const QString &opt_str) { if (CommandLineManager::hasOption(opt_str)) m_commandLineManager->executeCommand(opt_str); } void GeneralHandler::addAction(QAction *action, MenuType type) { connect(action, SIGNAL(destroyed (QObject *)), SLOT(removeAction(QObject*))); switch ((int) type) { case TOOLS_MENU: if (!m_toolsActions.contains(action)) m_toolsActions.append(action); if (m_toolsMenu && !m_toolsMenu->actions ().contains(action)) m_toolsMenu->addAction(action); break; case PLAYLIST_MENU: if (!m_playlistActions.contains(action)) m_playlistActions.append(action); if (m_playlistMenu && !m_playlistMenu->actions ().contains(action)) m_playlistMenu->addAction(action); } } void GeneralHandler::removeAction(QAction *action) { m_toolsActions.removeAll(action); if (m_toolsMenu) m_toolsMenu->removeAction(action); m_playlistActions.removeAll(action); if (m_playlistMenu) m_playlistMenu->removeAction(action); } QList GeneralHandler::actions(MenuType type) { if (type == TOOLS_MENU) return m_toolsActions; else return m_playlistActions; } QMenu *GeneralHandler::createMenu(MenuType type, const QString &title, QWidget *parent) { switch ((int) type) { case TOOLS_MENU: if (!m_toolsMenu) { m_toolsMenu = new QMenu(title, parent); m_toolsMenu->addActions(m_toolsActions); } else m_toolsMenu->setTitle(title); return m_toolsMenu; case PLAYLIST_MENU: if (!m_playlistMenu) { m_playlistMenu = new QMenu(title, parent); m_playlistMenu->addActions(m_playlistActions); } else m_playlistMenu->setTitle(title); return m_playlistMenu; } return 0; } GeneralHandler* GeneralHandler::instance() { return m_instance; } void GeneralHandler::removeAction(QObject *action) { removeAction((QAction *) action); }