/* * Copyright (C) 2005, 2006 Liu Di * * Copyright (C) 2007 Wei Lian * * 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 "header.h" #include "mainwindow.h" #include "menubar.h" #include "channel.h" #include "pageplay.h" #include "tabwidget.h" #include "playfork.h" #include "sopfork.h" #include "utils.h" #include "mystatusbar.h" PagePlay::PagePlay (QWidget * parent, const char *name): MyVBox (parent, name), tabwidget (static_cast < TabWidget * >(parent)) { ////row QHBox *hbox = new QHBox (this); QToolButton *buttonlaunch = new QToolButton (hbox); buttonlaunch->setTextLabel (tr ("Launch")); buttonlaunch->setAutoRaise (true); buttonlaunch->setUsesTextLabel (true); // buttonlaunch->setMaximumSize(buttonplayer->sizeHint()); connect (buttonlaunch, SIGNAL (clicked ()), this, SLOT (onButtonLaunchClicked ())); buttonplayer = new QToolButton (hbox); buttonplayer->setTextLabel (tr ("Player")); buttonplayer->setAutoRaise (true); buttonplayer->setUsesTextLabel (true); buttonplayer->setToggleButton (TRUE); // buttonplayer->setMaximumSize(buttonplayer->sizeHint()); connect (buttonplayer, SIGNAL (toggled (bool)), this, SLOT (onButtonPlayerToggled (bool))); buttonstop = new QToolButton (hbox); buttonstop->setTextLabel (tr ("Stop")); buttonstop->setAutoRaise (true); buttonstop->setUsesTextLabel (true); // buttonstop->setMaximumSize(buttonstop->sizeHint()); connect (buttonstop, SIGNAL (clicked ()), this, SLOT (onButtonStopClicked ())); QToolButton *but = new QToolButton (hbox); but->setTextLabel (tr ("x")); but->setAutoRaise (true); but->setUsesTextLabel (true); but->setMaximumSize (but->sizeHint ()); connect (but, SIGNAL (clicked ()), this, SLOT (removeTab ())); playfork = new PlayFork (this); ///initialize flagMenu flagMenu = false; } PagePlay::~PagePlay () { ///make sure playfork is deleted before executing detachSop buttonplayer->setOn (false); ///killPlayer // playfork->killPlayer(); ///WARNING: here tabwidget should not be substituted by parentWidget() ///because parentWidget() will lose infor during destruction tabwidget->detachSop (&sopfork, this); } void PagePlay::onButtonStopClicked () { playfork->killPlayer (); tabwidget->detachSop (&sopfork, this); ///assign channel name to tab label tabwidget->setTabLabel (this, tr ("play")); ///clean statusbar static_cast < MainWindow * >(qApp->mainWidget ()) ->statusbar->showMessage (""); } void PagePlay::onButtonPlayerToggled (bool t) { if (t) { if (sopfork && sopfork->snstatus && !playfork->player->isRunning ()) { if (playfork->forkPlayer () == TRUE) buttonplayer->setPaletteForegroundColor (Qt::blue); else fprintf (stderr, "failed to launch player!\n"); } } else playfork->killPlayer (); } void PagePlay::removeTab () { ///only one tab remained if (tabwidget->count () == 1) return; tabwidget->removePage (this); delete this; } void PagePlay::onButtonLaunchClicked () { if (!flagMenu) { ///test channel validity QListViewItem *item = static_cast < MainWindow * >(qApp->mainWidget ()) ->channel->currentItem (); if (!item || item->depth () != 1) { return; } channelurl = item->text (URL_COLUMN); channelname = item->text (NAME_COLUMN); channeltype = item->text (STREAM_COLUMN); } /////stop previous channel playfork->killPlayer (); tabwidget->detachSop (&sopfork, this); ////start new channel if (tabwidget-> attachSop (&sopfork, this, channelurl, channelname, channeltype) == TRUE) { ///start player if (buttonplayer->isOn ()) onButtonPlayerToggled (true); ///assign channel name to tab label tabwidget->setTabLabel (this, reduceLabelLength (channelname)); ///show message on statusbar static_cast < MainWindow * >(qApp->mainWidget ()) ->statusbar->showMessage (tr ("Connecting...")); ///add to history static_cast < MainWindow * >(qApp->mainWidget ()) ->menubar->addToPopupMenu (static_cast < MainWindow * > (qApp->mainWidget ())-> menubar->history, channelurl, channelname, channeltype); } else fprintf (stderr, "failed to launch sp-sc!\n"); }