diff options
author | Maia Kozheva <sikon@ubuntu.com> | 2009-11-20 18:22:19 +0600 |
---|---|---|
committer | Maia Kozheva <sikon@ubuntu.com> | 2009-11-20 18:22:19 +0600 |
commit | 263b32f108c15cd1c55a8f4eb4704fac6553f1ac (patch) | |
tree | 1c49e7848aa2d3d64a9d9b96b8852cb1884da2f7 /src/minigui.cpp |
Imported Upstream version 0.6.8
Diffstat (limited to 'src/minigui.cpp')
-rw-r--r-- | src/minigui.cpp | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/src/minigui.cpp b/src/minigui.cpp new file mode 100644 index 0000000..d35efe3 --- /dev/null +++ b/src/minigui.cpp @@ -0,0 +1,276 @@ +/* smplayer, GUI front-end for mplayer. + Copyright (C) 2006-2009 Ricardo Villalba <rvm@escomposlinux.org> + + 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 "minigui.h" +#include "widgetactions.h" +#include "floatingwidget.h" +#include "myaction.h" +#include "mplayerwindow.h" +#include "global.h" +#include "helper.h" +#include "toolbareditor.h" +#include "desktopinfo.h" + +#include <QToolBar> +#include <QStatusBar> + +using namespace Global; + +MiniGui::MiniGui( QWidget * parent, Qt::WindowFlags flags ) + : BaseGuiPlus( parent, flags ) +{ + createActions(); + createControlWidget(); + createFloatingControl(); + + connect( this, SIGNAL(cursorNearBottom(QPoint)), + this, SLOT(showFloatingControl(QPoint)) ); + + connect( this, SIGNAL(cursorFarEdges()), + this, SLOT(hideFloatingControl()) ); + + statusBar()->hide(); + + retranslateStrings(); + + loadConfig(); + + if (pref->compact_mode) { + controlwidget->hide(); + } +} + +MiniGui::~MiniGui() { + saveConfig(); +} + +void MiniGui::createActions() { + timeslider_action = createTimeSliderAction(this); + timeslider_action->disable(); + +#if USE_VOLUME_BAR + volumeslider_action = createVolumeSliderAction(this); + volumeslider_action->disable(); +#endif + + time_label_action = new TimeLabelAction(this); + time_label_action->setObjectName("timelabel_action"); + + connect( this, SIGNAL(timeChanged(QString)), + time_label_action, SLOT(setText(QString)) ); +} + + +void MiniGui::createControlWidget() { + controlwidget = new QToolBar( this ); + controlwidget->setObjectName("controlwidget"); + controlwidget->setMovable(true); + controlwidget->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea); + addToolBar(Qt::BottomToolBarArea, controlwidget); + +#if !USE_CONFIGURABLE_TOOLBARS + controlwidget->addAction(playOrPauseAct); + controlwidget->addAction(stopAct); + controlwidget->addSeparator(); + controlwidget->addAction(timeslider_action); + controlwidget->addSeparator(); + controlwidget->addAction(fullscreenAct); + controlwidget->addAction(muteAct); + +#if USE_VOLUME_BAR + controlwidget->addAction(volumeslider_action); +#endif + +#endif // USE_CONFIGURABLE_TOOLBARS +} + +void MiniGui::createFloatingControl() { + // Floating control + floating_control = new FloatingWidget(this); + +#if !USE_CONFIGURABLE_TOOLBARS + floating_control->toolbar()->addAction(playOrPauseAct); + floating_control->toolbar()->addAction(stopAct); + floating_control->toolbar()->addSeparator(); + floating_control->toolbar()->addAction(timeslider_action); + floating_control->toolbar()->addSeparator(); + floating_control->toolbar()->addAction(fullscreenAct); + floating_control->toolbar()->addAction(muteAct); +#if USE_VOLUME_BAR + floating_control->toolbar()->addAction(volumeslider_action); +#endif + + floating_control->adjustSize(); +#endif // USE_CONFIGURABLE_TOOLBARS +} + +void MiniGui::retranslateStrings() { + BaseGuiPlus::retranslateStrings(); + + controlwidget->setWindowTitle( tr("Control bar") ); +} + +#if AUTODISABLE_ACTIONS +void MiniGui::enableActionsOnPlaying() { + BaseGuiPlus::enableActionsOnPlaying(); + + timeslider_action->enable(); +#if USE_VOLUME_BAR + volumeslider_action->enable(); +#endif +} + +void MiniGui::disableActionsOnStop() { + BaseGuiPlus::disableActionsOnStop(); + + timeslider_action->disable(); +#if USE_VOLUME_BAR + volumeslider_action->disable(); +#endif +} +#endif // AUTODISABLE_ACTIONS + +void MiniGui::aboutToEnterFullscreen() { + BaseGuiPlus::aboutToEnterFullscreen(); + + if (!pref->compact_mode) { + controlwidget->hide(); + } +} + +void MiniGui::aboutToExitFullscreen() { + BaseGuiPlus::aboutToExitFullscreen(); + + floating_control->hide(); + + if (!pref->compact_mode) { + statusBar()->hide(); + controlwidget->show(); + } +} + +void MiniGui::aboutToEnterCompactMode() { + BaseGuiPlus::aboutToEnterCompactMode(); + + controlwidget->hide(); +} + +void MiniGui::aboutToExitCompactMode() { + BaseGuiPlus::aboutToExitCompactMode(); + + statusBar()->hide(); + + controlwidget->show(); +} + +void MiniGui::showFloatingControl(QPoint /*p*/) { +#ifndef Q_OS_WIN + floating_control->setBypassWindowManager(pref->bypass_window_manager); +#endif + floating_control->setAnimated( pref->floating_control_animated ); + floating_control->setMargin(pref->floating_control_margin); + floating_control->showOver(panel, + pref->floating_control_width, + FloatingWidget::Bottom); +} + +void MiniGui::hideFloatingControl() { + floating_control->hide(); +} + +#if USE_MINIMUMSIZE +QSize MiniGui::minimumSizeHint() const { + return QSize(controlwidget->sizeHint().width(), 0); +} +#endif + + +void MiniGui::saveConfig() { + QSettings * set = settings; + + set->beginGroup( "mini_gui"); + + if (pref->save_window_size_on_exit) { + qDebug("MiniGui::saveConfig: w: %d h: %d", width(), height()); + set->setValue( "pos", pos() ); + set->setValue( "size", size() ); + } + + set->setValue( "toolbars_state", saveState(Helper::qtVersion()) ); + +#if USE_CONFIGURABLE_TOOLBARS + set->beginGroup( "actions" ); + set->setValue("controlwidget", ToolbarEditor::save(controlwidget) ); + set->setValue("floating_control", ToolbarEditor::save(floating_control->toolbar()) ); + set->endGroup(); +#endif + + set->endGroup(); +} + +void MiniGui::loadConfig() { + QSettings * set = settings; + + set->beginGroup( "mini_gui"); + + if (pref->save_window_size_on_exit) { + QPoint p = set->value("pos", pos()).toPoint(); + QSize s = set->value("size", size()).toSize(); + + if ( (s.height() < 200) && (!pref->use_mplayer_window) ) { + s = pref->default_size; + } + + move(p); + resize(s); + + if (!DesktopInfo::isInsideScreen(this)) { + move(0,0); + qWarning("MiniGui::loadConfig: window is outside of the screen, moved to 0x0"); + } + } + +#if USE_CONFIGURABLE_TOOLBARS + QList<QAction *> actions_list = findChildren<QAction *>(); + QStringList controlwidget_actions; + controlwidget_actions << "play_or_pause" << "stop" << "separator" << "timeslider_action" << "separator" + << "fullscreen" << "mute" << "volumeslider_action"; + + QStringList floatingcontrol_actions; + floatingcontrol_actions << "play_or_pause" << "stop" << "separator" << "timeslider_action" << "separator" + << "fullscreen" << "mute"; +#if USE_VOLUME_BAR + floatingcontrol_actions << "volumeslider_action"; +#endif + + floatingcontrol_actions << "separator" << "timelabel_action"; + + set->beginGroup( "actions" ); + ToolbarEditor::load(controlwidget, set->value("controlwidget", controlwidget_actions).toStringList(), actions_list ); + ToolbarEditor::load(floating_control->toolbar(), set->value("floating_control", floatingcontrol_actions).toStringList(), actions_list ); + floating_control->adjustSize(); + set->endGroup(); +#endif + + restoreState( set->value( "toolbars_state" ).toByteArray(), Helper::qtVersion() ); + + set->endGroup(); +} + +#include "moc_minigui.cpp" + |