You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmplayer/src/kmplayercontrolpanel.cpp

704 lines
23 KiB

/**
* Copyright (C) 2005 by Koos Vriezen <koos ! vriezen ? gmail ! com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License version 2 as published by the Free Software Foundation.
*
* 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
* Boston, MA 02110-1301, USA.
**/
#include <tqlayout.h>
#include <tqpixmap.h>
#include <tqslider.h>
#include <tqlabel.h>
#include <tqtooltip.h>
#include <tqpainter.h>
#include <tqstringlist.h>
#include <kiconloader.h>
#include <klocale.h>
#include <kdebug.h>
#include "kmplayerview.h"
#include "kmplayercontrolpanel.h"
#include "kmplayersource.h"
static const int button_height_with_slider = 15;
static const int button_height_only_buttons = 11;
extern const char * normal_window_xpm[];
extern const char * playlist_xpm[];
#include "kmplayerview.h"
#include "kmplayercontrolpanel.h"
using namespace KMPlayer;
static char xpm_fg_color [32] = ". c #000000";
static const char * stop_xpm[] = {
"5 7 2 1",
" c None",
xpm_fg_color,
" ",
".....",
".....",
".....",
".....",
".....",
" "};
static const char * play_xpm[] = {
"5 9 2 1",
" c None",
xpm_fg_color,
". ",
".. ",
"... ",
".... ",
".....",
".... ",
"... ",
".. ",
". "};
static const char * pause_xpm[] = {
"7 9 2 1",
" c None",
xpm_fg_color,
" ",
".. ..",
".. ..",
".. ..",
".. ..",
".. ..",
".. ..",
".. ..",
" "};
static const char * forward_xpm[] = {
"11 9 2 1",
" c None",
xpm_fg_color,
". . ",
".. .. ",
"... ... ",
".... .... ",
"..... .....",
".... .... ",
"... ... ",
".. .. ",
". . "};
static const char * back_xpm[] = {
"11 9 2 1",
" c None",
xpm_fg_color,
" . .",
" .. ..",
" ... ...",
" .... ....",
"..... .....",
" .... ....",
" ... ...",
" .. ..",
" . ."};
static const char * config_xpm[] = {
"11 8 2 1",
" c None",
xpm_fg_color,
" ",
" ",
"...........",
" ......... ",
" ....... ",
" ..... ",
" ... ",
" . "};
const char * playlist_xpm[] = {
"8 9 2 1",
" c None",
xpm_fg_color,
" ",
" ",
"........",
"........",
" ",
" ",
"........",
"........",
" "};
const char * normal_window_xpm[] = {
"7 9 2 1",
" c None",
xpm_fg_color,
" ",
".......",
".......",
". .",
". .",
". .",
". .",
".......",
" "};
static const char * record_xpm[] = {
"7 7 3 1",
" c None",
xpm_fg_color,
"+ c #FF0000",
" ",
".......",
".+++++.",
".+++++.",
".+++++.",
".......",
" "};
static const char * broadcast_xpm[] = {
"21 9 2 1",
" c None",
xpm_fg_color,
" ",
" .. .. .. .. ",
".. .. ... .. ..",
".. .. ..... .. ..",
".. .. ..... .. ..",
".. .. ..... .. ..",
".. .. ... .. ..",
" .. .. .. .. ",
" "};
static const char * language_xpm [] = {
"12 9 2 1",
" c None",
xpm_fg_color,
" ",
" ",
" ",
" ",
" ",
".... ......",
".... ......",
".... ......",
" "};
static const char * red_xpm[] = {
"7 9 3 1",
" c None",
xpm_fg_color,
"+ c #FF0000",
" ",
".......",
".+++++.",
".+++++.",
".+++++.",
".+++++.",
".+++++.",
".......",
" "};
static const char * green_xpm[] = {
"7 9 3 1",
" c None",
xpm_fg_color,
"+ c #00FF00",
" ",
".......",
".+++++.",
".+++++.",
".+++++.",
".+++++.",
".+++++.",
".......",
" "};
static const char * yellow_xpm[] = {
"7 9 3 1",
" c None",
xpm_fg_color,
"+ c #FFFF00",
" ",
".......",
".+++++.",
".+++++.",
".+++++.",
".+++++.",
".+++++.",
".......",
" "};
static const char * blue_xpm[] = {
"7 9 3 1",
" c None",
xpm_fg_color,
"+ c #0080FF00",
" ",
".......",
".+++++.",
".+++++.",
".+++++.",
".+++++.",
".+++++.",
".......",
" "};
//-----------------------------------------------------------------------------
static TQPushButton * ctrlButton (TQWidget * w, TQBoxLayout * l, const char ** p, int key = 0) {
TQPushButton * b = new TQPushButton (TQIconSet (TQPixmap(p)), TQString (), w);
b->setFocusPolicy (TQ_NoFocus);
b->setFlat (true);
if (key)
b->setAccel (TQKeySequence (key));
l->addWidget (b);
return b;
}
KDE_NO_CDTOR_EXPORT
KMPlayerMenuButton::KMPlayerMenuButton (TQWidget * parent, TQBoxLayout * l, const char ** p, int key)
: TQPushButton (TQIconSet (TQPixmap(p)), TQString (), parent, "kde_kmplayer_control_button") {
setFocusPolicy (TQ_NoFocus);
setFlat (true);
if (key)
setAccel (TQKeySequence (key));
l->addWidget (this);
}
KDE_NO_EXPORT void KMPlayerMenuButton::enterEvent (TQEvent *) {
emit mouseEntered ();
}
//-----------------------------------------------------------------------------
KDE_NO_CDTOR_EXPORT KMPlayerPopupMenu::KMPlayerPopupMenu (TQWidget * parent)
: KPopupMenu (parent, "kde_kmplayer_popupmenu") {}
KDE_NO_EXPORT void KMPlayerPopupMenu::leaveEvent (TQEvent *) {
emit mouseLeft ();
}
//-----------------------------------------------------------------------------
KDE_NO_CDTOR_EXPORT VolumeBar::VolumeBar (TQWidget * parent, View * view)
: TQWidget (parent), m_view (view), m_value (100) {
setSizePolicy( TQSizePolicy (TQSizePolicy::Minimum, TQSizePolicy::Fixed));
setMinimumSize (TQSize (51, button_height_only_buttons + 2));
TQToolTip::add (this, i18n ("Volume is %1").arg (m_value));
}
KDE_NO_CDTOR_EXPORT VolumeBar::~VolumeBar () {
}
void VolumeBar::setValue (int v) {
m_value = v;
if (m_value < 0) m_value = 0;
if (m_value > 100) m_value = 100;
TQToolTip::remove (this);
TQToolTip::add (this, i18n ("Volume is %1").arg (m_value));
tqrepaint (true);
emit volumeChanged (m_value);
}
void VolumeBar::wheelEvent (TQWheelEvent * e) {
setValue (m_value + (e->delta () > 0 ? 2 : -2));
e->accept ();
}
void VolumeBar::paintEvent (TQPaintEvent * e) {
TQWidget::paintEvent (e);
TQPainter p;
p.begin (this);
TQColor color = paletteForegroundColor ();
p.setPen (color);
int w = width () - 6;
int vx = m_value * w / 100;
p.fillRect (3, 3, vx, 7, color);
p.drawRect (vx + 3, 3, w - vx, 7);
p.end ();
//kdDebug () << "w=" << w << " vx=" << vx << endl;
}
void VolumeBar::mousePressEvent (TQMouseEvent * e) {
setValue (100 * (e->x () - 3) / (width () - 6));
e->accept ();
}
void VolumeBar::mouseMoveEvent (TQMouseEvent * e) {
setValue (100 * (e->x () - 3) / (width () - 6));
e->accept ();
}
//-----------------------------------------------------------------------------
KDE_NO_CDTOR_EXPORT ControlPanel::ControlPanel(TQWidget * parent, View * view)
: TQWidget (parent),
m_progress_mode (progress_playing),
m_progress_length (0),
m_popup_timer (0),
m_popdown_timer (0),
m_view (view),
m_auto_controls (true),
m_popup_clicked (false) {
m_buttonbox = new TQHBoxLayout (this, 5, 4);
TQColor c = paletteForegroundColor ();
strncpy (xpm_fg_color, TQString(TQString().sprintf(". c #%02x%02x%02x", c.red(), c.green(),c.blue())).ascii(), 31);
xpm_fg_color[31] = 0;
m_buttons[button_config] = new KMPlayerMenuButton (this, m_buttonbox, config_xpm);
m_buttons[button_playlist] = ctrlButton (this, m_buttonbox, playlist_xpm);
m_buttons[button_back] = ctrlButton (this, m_buttonbox, back_xpm);
m_buttons[button_play] = ctrlButton(this, m_buttonbox, play_xpm, TQt::Key_R);
m_buttons[button_forward] = ctrlButton (this, m_buttonbox, forward_xpm);
m_buttons[button_stop] = ctrlButton(this, m_buttonbox, stop_xpm, TQt::Key_S);
m_buttons[button_pause]=ctrlButton(this, m_buttonbox, pause_xpm, TQt::Key_P);
m_buttons[button_record] = ctrlButton (this, m_buttonbox, record_xpm);
m_buttons[button_broadcast] = ctrlButton (this, m_buttonbox, broadcast_xpm);
m_buttons[button_language] = new KMPlayerMenuButton (this, m_buttonbox, language_xpm);
m_buttons[button_red] = ctrlButton (this, m_buttonbox, red_xpm);
m_buttons[button_green] = ctrlButton (this, m_buttonbox, green_xpm);
m_buttons[button_yellow] = ctrlButton (this, m_buttonbox, yellow_xpm);
m_buttons[button_blue] = ctrlButton (this, m_buttonbox, blue_xpm);
m_buttons[button_play]->setToggleButton (true);
m_buttons[button_stop]->setToggleButton (true);
m_buttons[button_record]->setToggleButton (true);
m_buttons[button_broadcast]->setToggleButton (true);
m_posSlider = new TQSlider (0, 100, 1, 0, Qt::Horizontal, this);
m_posSlider->setEnabled (false);
m_buttonbox->addWidget (m_posSlider);
setupPositionSlider (true);
m_volume = new VolumeBar (this, m_view);
m_buttonbox->addWidget (m_volume);
m_popupMenu = new KMPlayerPopupMenu (this);
m_playerMenu = new KMPlayerPopupMenu (this);
m_popupMenu->insertItem (i18n ("&Play with"), m_playerMenu, menu_player);
m_bookmarkMenu = new KMPlayerPopupMenu (this);
m_popupMenu->insertItem (i18n("&Bookmarks"), m_bookmarkMenu, menu_bookmark);
m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (TQString ("konsole"), KIcon::Small, 0, true), i18n ("Con&sole"), menu_video);
m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (TQString ("player_playlist"), KIcon::Small, 0, true), i18n ("Play&list"), menu_playlist);
m_zoomMenu = new KMPlayerPopupMenu (this);
m_zoomMenu->insertItem (i18n ("50%"), menu_zoom50);
m_zoomMenu->insertItem (i18n ("100%"), menu_zoom100);
m_zoomMenu->insertItem (i18n ("150%"), menu_zoom150);
m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (TQString ("viewmag"), KIcon::Small, 0, false), i18n ("&Zoom"), m_zoomMenu, menu_zoom);
m_popupMenu->insertItem (KGlobal::iconLoader()->loadIconSet (TQString ("window_fullscreen"), KIcon::Small, 0, true), i18n ("&Full Screen"), menu_fullscreen);
m_popupMenu->setAccel (TQKeySequence (TQt::Key_F), menu_fullscreen);
m_popupMenu->insertSeparator ();
m_colorMenu = new KMPlayerPopupMenu (this);
m_languageMenu = new KMPlayerPopupMenu (this);
m_audioMenu = new KMPlayerPopupMenu (this);
m_subtitleMenu = new KMPlayerPopupMenu (this);
m_languageMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (TQString ("mime-sound"), KIcon::Small, 0, true), i18n ("&Audio languages"), m_audioMenu);
m_languageMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (TQString ("view_text"), KIcon::Small, 0, true), i18n ("&Subtitles"), m_subtitleMenu);
TQLabel * label = new TQLabel (i18n ("Contrast:"), m_colorMenu);
m_colorMenu->insertItem (label);
m_contrastSlider = new TQSlider (-100, 100, 10, 0, Qt::Horizontal, m_colorMenu);
m_colorMenu->insertItem (m_contrastSlider);
label = new TQLabel (i18n ("Brightness:"), m_colorMenu);
m_colorMenu->insertItem (label);
m_brightnessSlider = new TQSlider (-100, 100, 10, 0, Qt::Horizontal, m_colorMenu);
m_colorMenu->insertItem (m_brightnessSlider);
label = new TQLabel (i18n ("Hue:"), m_colorMenu);
m_colorMenu->insertItem (label);
m_hueSlider = new TQSlider (-100, 100, 10, 0, Qt::Horizontal, m_colorMenu);
m_colorMenu->insertItem (m_hueSlider);
label = new TQLabel (i18n ("Saturation:"), m_colorMenu);
m_colorMenu->insertItem (label);
m_saturationSlider = new TQSlider (-100, 100, 10, 0, Qt::Horizontal, m_colorMenu);
m_colorMenu->insertItem (m_saturationSlider);
m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (TQString ("colorize"), KIcon::Small, 0, true), i18n ("Co&lors"), m_colorMenu);
m_popupMenu->insertSeparator ();
m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (TQString ("configure"), KIcon::Small, 0, true), i18n ("&Configure KMPlayer..."), menu_config);
setAutoControls (true);
connect (m_buttons [button_config], TQT_SIGNAL (clicked ()),
this, TQT_SLOT (buttonClicked ()));
connect (m_buttons [button_language], TQT_SIGNAL (clicked ()),
this, TQT_SLOT (buttonClicked ()));
connect (m_buttons [button_config], TQT_SIGNAL (mouseEntered ()),
this, TQT_SLOT (buttonMouseEntered ()));
connect (m_buttons [button_language], TQT_SIGNAL (mouseEntered ()),
this, TQT_SLOT (buttonMouseEntered ()));
connect (m_popupMenu, TQT_SIGNAL (mouseLeft ()), this, TQT_SLOT (menuMouseLeft ()));
connect (m_playerMenu, TQT_SIGNAL (mouseLeft ()), this, TQT_SLOT(menuMouseLeft ()));
connect (m_zoomMenu, TQT_SIGNAL (mouseLeft ()), this, TQT_SLOT (menuMouseLeft ()));
connect (m_colorMenu, TQT_SIGNAL (mouseLeft ()), this, TQT_SLOT (menuMouseLeft ()));
connect (m_languageMenu, TQT_SIGNAL(mouseLeft ()), this, TQT_SLOT(menuMouseLeft()));
connect (m_subtitleMenu, TQT_SIGNAL(mouseLeft ()), this, TQT_SLOT(menuMouseLeft()));
connect (m_audioMenu, TQT_SIGNAL (mouseLeft ()), this, TQT_SLOT (menuMouseLeft ()));
}
KDE_NO_EXPORT void ControlPanel::setPalette (const TQPalette & pal) {
TQWidget::setPalette (pal);
TQColor c = paletteForegroundColor ();
strncpy (xpm_fg_color, TQString(TQString().sprintf(". c #%02x%02x%02x", c.red(), c.green(),c.blue())).ascii(), 31);
xpm_fg_color[31] = 0;
m_buttons[button_config]->setIconSet (TQIconSet (TQPixmap (config_xpm)));
m_buttons[button_playlist]->setIconSet (TQIconSet (TQPixmap (playlist_xpm)));
m_buttons[button_back]->setIconSet (TQIconSet (TQPixmap (back_xpm)));
m_buttons[button_play]->setIconSet (TQIconSet (TQPixmap (play_xpm)));
m_buttons[button_forward]->setIconSet (TQIconSet (TQPixmap (forward_xpm)));
m_buttons[button_stop]->setIconSet (TQIconSet (TQPixmap (stop_xpm)));
m_buttons[button_pause]->setIconSet (TQIconSet (TQPixmap (pause_xpm)));
m_buttons[button_record]->setIconSet (TQIconSet (TQPixmap (record_xpm)));
m_buttons[button_broadcast]->setIconSet (TQIconSet (TQPixmap (broadcast_xpm)));
m_buttons[button_language]->setIconSet (TQIconSet (TQPixmap (language_xpm)));
m_buttons[button_red]->setIconSet (TQIconSet (TQPixmap (red_xpm)));
m_buttons[button_green]->setIconSet (TQIconSet (TQPixmap (green_xpm)));
m_buttons[button_yellow]->setIconSet (TQIconSet (TQPixmap (yellow_xpm)));
m_buttons[button_blue]->setIconSet (TQIconSet (TQPixmap (blue_xpm)));
}
KDE_NO_EXPORT void ControlPanel::timerEvent (TQTimerEvent * e) {
if (e->timerId () == m_popup_timer) {
m_popup_timer = 0;
if (m_button_monitored == button_config) {
if (m_buttons [button_config]->hasMouse() &&
!m_popupMenu->isVisible ())
showPopupMenu ();
} else if (m_buttons [button_language]->hasMouse() &&
!m_languageMenu->isVisible ()) {
showLanguageMenu ();
}
} else if (e->timerId () == m_popdown_timer) {
m_popdown_timer = 0;
if (m_popupMenu->isVisible () &&
!m_popupMenu->hasMouse () &&
!m_playerMenu->hasMouse () &&
!m_zoomMenu->hasMouse () &&
!m_colorMenu->hasMouse () &&
!m_bookmarkMenu->hasMouse ()) {
if (!(m_bookmarkMenu->isVisible () &&
static_cast <TQWidget *> (m_bookmarkMenu) != TQWidget::keyboardGrabber ())) {
// not if user entered the bookmark sub menu or if I forgot one
m_popupMenu->hide ();
if (m_buttons [button_config]->isOn ())
m_buttons [button_config]->toggle ();
}
} else if (m_languageMenu->isVisible () &&
!m_languageMenu->hasMouse () &&
!m_audioMenu->hasMouse () &&
!m_subtitleMenu->hasMouse ()) {
m_languageMenu->hide ();
if (m_buttons [button_language]->isOn ())
m_buttons [button_language]->toggle ();
}
}
killTimer (e->timerId ());
}
void ControlPanel::setAutoControls (bool b) {
m_auto_controls = b;
if (m_auto_controls) {
for (int i = 0; i < (int) button_broadcast; i++)
m_buttons [i]->show ();
for (int i = button_broadcast; i < (int) button_last; i++)
m_buttons [i]->hide ();
showPositionSlider (false);
m_volume->show ();
if (m_buttons [button_broadcast]->isOn ()) // still broadcasting
m_buttons [button_broadcast]->show ();
} else { // hide everything
for (int i = 0; i < (int) button_last; i++)
m_buttons [i]->hide ();
m_posSlider->hide ();
m_volume->hide ();
}
m_view->updateLayout ();
}
KDE_NO_EXPORT void ControlPanel::showPopupMenu () {
m_view->updateVolume ();
m_popupMenu->exec (m_buttons [button_config]->mapToGlobal (TQPoint (0, maximumSize ().height ())));
}
KDE_NO_EXPORT void ControlPanel::showLanguageMenu () {
m_languageMenu->exec (m_buttons [button_language]->mapToGlobal (TQPoint (0, maximumSize ().height ())));
}
void ControlPanel::showPositionSlider (bool show) {
if (!m_auto_controls || show == m_posSlider->isShown ())
return;
setupPositionSlider (show);
if (isVisible ())
m_view->updateLayout ();
}
KDE_NO_EXPORT void ControlPanel::setupPositionSlider (bool show) {
int h = show ? button_height_with_slider : button_height_only_buttons;
m_posSlider->setEnabled (false);
m_posSlider->setValue (0);
if (show) {
m_posSlider->show ();
m_buttonbox->setMargin (4);
m_buttonbox->setSpacing (4);
setEraseColor (m_view->topLevelWidget ()->paletteBackgroundColor ());
} else {
m_posSlider->hide ();
m_buttonbox->setMargin (1);
m_buttonbox->setSpacing (1);
setEraseColor (TQColor (0, 0, 0));
}
for (int i = 0; i < (int) button_last; i++) {
m_buttons[i]->setMinimumSize (15, h-1);
m_buttons[i]->setMaximumSize (750, h);
}
setMaximumSize (2500, h + (show ? 8 : 2 ));
}
KDE_NO_EXPORT int ControlPanel::preferedHeight () {
return m_posSlider->isVisible () ?
button_height_with_slider + 8 : button_height_only_buttons + 2;
}
void ControlPanel::enableSeekButtons (bool enable) {
if (!m_auto_controls) return;
if (enable) {
m_buttons[button_back]->show ();
m_buttons[button_forward]->show ();
} else {
m_buttons[button_back]->hide ();
m_buttons[button_forward]->hide ();
}
}
void ControlPanel::enableRecordButtons (bool enable) {
if (!m_auto_controls) return;
if (enable)
m_buttons[button_record]->show ();
else
m_buttons[button_record]->hide ();
}
void ControlPanel::setPlaying (bool play) {
if (play != m_buttons[button_play]->isOn ())
m_buttons[button_play]->toggle ();
m_posSlider->setEnabled (false);
m_posSlider->setValue (0);
if (!play) {
showPositionSlider (false);
enableSeekButtons (true);
}
}
KDE_NO_EXPORT void ControlPanel::setRecording (bool record) {
if (record != m_buttons[button_record]->isOn ())
m_buttons[button_record]->toggle ();
}
KDE_NO_EXPORT void ControlPanel::setPlayingProgress (int pos, int len) {
m_posSlider->setEnabled (false);
m_progress_length = len;
showPositionSlider (len > 0);
if (m_progress_mode != progress_playing) {
m_posSlider->setMaxValue (m_progress_length);
m_progress_mode = progress_playing;
}
if (pos < len && len > 0 && len != m_posSlider->maxValue ())
m_posSlider->setMaxValue (m_progress_length);
else if (m_progress_length <= 0 && pos > 7 * m_posSlider->maxValue ()/8)
m_posSlider->setMaxValue (m_posSlider->maxValue() * 2);
else if (m_posSlider->maxValue() < pos)
m_posSlider->setMaxValue (int (1.4 * m_posSlider->maxValue()));
m_posSlider->setValue (pos);
m_posSlider->setEnabled (true);
}
KDE_NO_EXPORT void ControlPanel::setLoadingProgress (int pos) {
if (pos > 0 && pos < 100 && !m_posSlider->isVisible ())
showPositionSlider (true);
m_posSlider->setEnabled (false);
if (m_progress_mode != progress_loading) {
m_posSlider->setMaxValue (100);
m_progress_mode = progress_loading;
}
m_posSlider->setValue (pos);
}
KDE_NO_EXPORT void ControlPanel::buttonClicked () {
if (m_popup_timer) {
killTimer (m_popup_timer);
m_popup_timer = 0;
}
m_popup_clicked = true;
if (sender () == m_buttons [button_language])
showLanguageMenu ();
else
showPopupMenu ();
}
KDE_NO_EXPORT void ControlPanel::buttonMouseEntered () {
if (!m_popup_timer) {
if (sender () == m_buttons [button_config]) {
if (!m_popupMenu->isVisible ()) {
m_button_monitored = button_config;
m_popup_clicked = false;
m_popup_timer = startTimer (400);
}
} else if (!m_languageMenu->isVisible ()) {
m_button_monitored = button_language;
m_popup_clicked = false;
m_popup_timer = startTimer (400);
}
}
}
KDE_NO_EXPORT void ControlPanel::menuMouseLeft () {
if (!m_popdown_timer && !m_popup_clicked)
m_popdown_timer = startTimer (400);
}
KDE_NO_EXPORT void ControlPanel::setLanguages (const TQStringList & alang, const TQStringList & slang) {
int sz = (int) alang.size ();
bool showbutton = (sz > 0);
m_audioMenu->clear ();
for (int i = 0; i < sz; i++)
m_audioMenu->insertItem (alang [i], i);
sz = (int) slang.size ();
showbutton |= (sz > 0);
m_subtitleMenu->clear ();
for (int i = 0; i < sz; i++)
m_subtitleMenu->insertItem (slang [i], i);
if (showbutton)
m_buttons [button_language]->show ();
else
m_buttons [button_language]->hide ();
}
KDE_NO_EXPORT void ControlPanel::selectSubtitle (int id) {
if (m_subtitleMenu->isItemChecked (id))
return;
int size = m_subtitleMenu->count ();
for (int i = 0; i < size; i++)
if (m_subtitleMenu->isItemChecked (i)) {
m_subtitleMenu->setItemChecked (i, false);
break;
}
m_subtitleMenu->setItemChecked (id, true);
}
KDE_NO_EXPORT void ControlPanel::selectAudioLanguage (int id) {
kdDebug () << "ControlPanel::selectAudioLanguage " << id << endl;
if (m_audioMenu->isItemChecked (id))
return;
int sz = m_audioMenu->count ();
for (int i = 0; i < sz; i++)
if (m_audioMenu->isItemChecked (i)) {
m_audioMenu->setItemChecked (i, false);
break;
}
m_audioMenu->setItemChecked (id, true);
}
//-----------------------------------------------------------------------------
#include "kmplayercontrolpanel.moc"