source: smplayer/trunk/src/minigui.cpp@ 162

Last change on this file since 162 was 156, checked in by Silvan Scherrer, 11 years ago

SMPlayer: update trunk to 0.8.6

  • Property svn:eol-style set to LF
File size: 8.4 KB
Line 
1/* smplayer, GUI front-end for mplayer.
2 Copyright (C) 2006-2013 Ricardo Villalba <rvm@users.sourceforge.net>
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17*/
18
19#include "minigui.h"
20#include "widgetactions.h"
21#include "floatingwidget.h"
22#include "myaction.h"
23#include "mplayerwindow.h"
24#include "global.h"
25#include "helper.h"
26#include "desktopinfo.h"
27#include "editabletoolbar.h"
28#include <QStatusBar>
29#include <QMenu>
30
31using namespace Global;
32
33MiniGui::MiniGui( QWidget * parent, Qt::WindowFlags flags )
34 : BaseGuiPlus( parent, flags )
35{
36 createActions();
37 createControlWidget();
38 createFloatingControl();
39
40#if USE_CONFIGURABLE_TOOLBARS
41 connect( editControlAct, SIGNAL(triggered()),
42 controlwidget, SLOT(edit()) );
43 floating_control->toolbar()->takeAvailableActionsFrom(this);
44 connect( editFloatingControlAct, SIGNAL(triggered()),
45 floating_control->toolbar(), SLOT(edit()) );
46#endif
47
48 connect( this, SIGNAL(cursorNearBottom(QPoint)),
49 this, SLOT(showFloatingControl(QPoint)) );
50
51 connect( this, SIGNAL(cursorFarEdges()),
52 this, SLOT(hideFloatingControl()) );
53
54 statusBar()->hide();
55
56 retranslateStrings();
57
58 loadConfig();
59
60 if (pref->compact_mode) {
61 controlwidget->hide();
62 }
63}
64
65MiniGui::~MiniGui() {
66 saveConfig();
67}
68
69#if USE_CONFIGURABLE_TOOLBARS
70QMenu * MiniGui::createPopupMenu() {
71 QMenu * m = new QMenu(this);
72 m->addAction(editControlAct);
73 m->addAction(editFloatingControlAct);
74 return m;
75}
76#endif
77
78void MiniGui::createActions() {
79 timeslider_action = createTimeSliderAction(this);
80 timeslider_action->disable();
81
82#if USE_VOLUME_BAR
83 volumeslider_action = createVolumeSliderAction(this);
84 volumeslider_action->disable();
85#endif
86
87 time_label_action = new TimeLabelAction(this);
88 time_label_action->setObjectName("timelabel_action");
89
90 connect( this, SIGNAL(timeChanged(QString)),
91 time_label_action, SLOT(setText(QString)) );
92
93#if USE_CONFIGURABLE_TOOLBARS
94 editControlAct = new MyAction( this, "edit_control_minigui" );
95 editFloatingControlAct = new MyAction( this, "edit_floating_control_minigui" );
96#endif
97}
98
99
100void MiniGui::createControlWidget() {
101 controlwidget = new EditableToolbar( this );
102 controlwidget->setObjectName("controlwidget");
103 controlwidget->setLayoutDirection(Qt::LeftToRight);
104 controlwidget->setMovable(true);
105 controlwidget->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
106 addToolBar(Qt::BottomToolBarArea, controlwidget);
107
108#if USE_CONFIGURABLE_TOOLBARS
109 QStringList controlwidget_actions;
110 controlwidget_actions << "play_or_pause" << "stop" << "separator" << "timeslider_action" << "separator"
111 << "fullscreen" << "mute" << "volumeslider_action";
112 controlwidget->setDefaultActions(controlwidget_actions);
113#else
114 controlwidget->addAction(playOrPauseAct);
115 controlwidget->addAction(stopAct);
116 controlwidget->addSeparator();
117 controlwidget->addAction(timeslider_action);
118 controlwidget->addSeparator();
119 controlwidget->addAction(fullscreenAct);
120 controlwidget->addAction(muteAct);
121 #if USE_VOLUME_BAR
122 controlwidget->addAction(volumeslider_action);
123 #endif
124#endif // USE_CONFIGURABLE_TOOLBARS
125}
126
127void MiniGui::createFloatingControl() {
128 // Floating control
129 floating_control = new FloatingWidget(this);
130 floating_control->setLayoutDirection(Qt::LeftToRight);
131
132#if USE_CONFIGURABLE_TOOLBARS
133 QStringList floatingcontrol_actions;
134 floatingcontrol_actions << "play_or_pause" << "stop" << "separator" << "timeslider_action" << "separator"
135 << "fullscreen" << "mute";
136 #if USE_VOLUME_BAR
137 floatingcontrol_actions << "volumeslider_action";
138 #endif
139 floatingcontrol_actions << "separator" << "timelabel_action";
140 floating_control->toolbar()->setDefaultActions(floatingcontrol_actions);
141#else
142 floating_control->toolbar()->addAction(playOrPauseAct);
143 floating_control->toolbar()->addAction(stopAct);
144 floating_control->toolbar()->addSeparator();
145 floating_control->toolbar()->addAction(timeslider_action);
146 floating_control->toolbar()->addSeparator();
147 floating_control->toolbar()->addAction(fullscreenAct);
148 floating_control->toolbar()->addAction(muteAct);
149 #if USE_VOLUME_BAR
150 floating_control->toolbar()->addAction(volumeslider_action);
151 #endif
152 floating_control->adjustSize();
153#endif // USE_CONFIGURABLE_TOOLBARS
154}
155
156void MiniGui::retranslateStrings() {
157 BaseGuiPlus::retranslateStrings();
158
159 controlwidget->setWindowTitle( tr("Control bar") );
160
161#if USE_CONFIGURABLE_TOOLBARS
162 editControlAct->change( tr("Edit &control bar") );
163 editFloatingControlAct->change( tr("Edit &floating control") );
164#endif
165}
166
167#if AUTODISABLE_ACTIONS
168void MiniGui::enableActionsOnPlaying() {
169 BaseGuiPlus::enableActionsOnPlaying();
170
171 timeslider_action->enable();
172#if USE_VOLUME_BAR
173 volumeslider_action->enable();
174#endif
175}
176
177void MiniGui::disableActionsOnStop() {
178 BaseGuiPlus::disableActionsOnStop();
179
180 timeslider_action->disable();
181#if USE_VOLUME_BAR
182 volumeslider_action->disable();
183#endif
184}
185#endif // AUTODISABLE_ACTIONS
186
187void MiniGui::aboutToEnterFullscreen() {
188 BaseGuiPlus::aboutToEnterFullscreen();
189
190 if (!pref->compact_mode) {
191 controlwidget->hide();
192 }
193}
194
195void MiniGui::aboutToExitFullscreen() {
196 BaseGuiPlus::aboutToExitFullscreen();
197
198 floating_control->hide();
199
200 if (!pref->compact_mode) {
201 statusBar()->hide();
202 controlwidget->show();
203 }
204}
205
206void MiniGui::aboutToEnterCompactMode() {
207 BaseGuiPlus::aboutToEnterCompactMode();
208
209 controlwidget->hide();
210}
211
212void MiniGui::aboutToExitCompactMode() {
213 BaseGuiPlus::aboutToExitCompactMode();
214
215 statusBar()->hide();
216
217 controlwidget->show();
218}
219
220void MiniGui::showFloatingControl(QPoint /*p*/) {
221#ifndef Q_OS_WIN
222 floating_control->setBypassWindowManager(pref->bypass_window_manager);
223#endif
224 floating_control->setAnimated( pref->floating_control_animated );
225 floating_control->setMargin(pref->floating_control_margin);
226 floating_control->showOver(panel,
227 pref->floating_control_width,
228 FloatingWidget::Bottom);
229}
230
231void MiniGui::hideFloatingControl() {
232 floating_control->hide();
233}
234
235#if USE_MINIMUMSIZE
236QSize MiniGui::minimumSizeHint() const {
237 return QSize(controlwidget->sizeHint().width(), 0);
238}
239#endif
240
241
242void MiniGui::saveConfig() {
243 QSettings * set = settings;
244
245 set->beginGroup( "mini_gui");
246
247 if (pref->save_window_size_on_exit) {
248 qDebug("MiniGui::saveConfig: w: %d h: %d", width(), height());
249 set->setValue( "pos", pos() );
250 set->setValue( "size", size() );
251 set->setValue( "state", (int) windowState() );
252 }
253
254 set->setValue( "toolbars_state", saveState(Helper::qtVersion()) );
255
256#if USE_CONFIGURABLE_TOOLBARS
257 set->beginGroup( "actions" );
258 set->setValue("controlwidget", controlwidget->actionsToStringList() );
259 set->setValue("floating_control", floating_control->toolbar()->actionsToStringList() );
260 set->endGroup();
261#endif
262
263 set->endGroup();
264}
265
266void MiniGui::loadConfig() {
267 QSettings * set = settings;
268
269 set->beginGroup( "mini_gui");
270
271 if (pref->save_window_size_on_exit) {
272 QPoint p = set->value("pos", pos()).toPoint();
273 QSize s = set->value("size", size()).toSize();
274
275 if ( (s.height() < 200) && (!pref->use_mplayer_window) ) {
276 s = pref->default_size;
277 }
278
279 move(p);
280 resize(s);
281
282 setWindowState( (Qt::WindowStates) set->value("state", 0).toInt() );
283
284 if (!DesktopInfo::isInsideScreen(this)) {
285 move(0,0);
286 qWarning("MiniGui::loadConfig: window is outside of the screen, moved to 0x0");
287 }
288 }
289
290#if USE_CONFIGURABLE_TOOLBARS
291 set->beginGroup( "actions" );
292 controlwidget->setActionsFromStringList( set->value("controlwidget", controlwidget->defaultActions()).toStringList() );
293 floating_control->toolbar()->setActionsFromStringList( set->value("floating_control", floating_control->toolbar()->defaultActions()).toStringList() );
294 floating_control->adjustSize();
295 set->endGroup();
296#endif
297
298 restoreState( set->value( "toolbars_state" ).toByteArray(), Helper::qtVersion() );
299
300 set->endGroup();
301}
302
303#include "moc_minigui.cpp"
304
Note: See TracBrowser for help on using the repository browser.