/* * 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 "tabwidget.h" #include "record.h" #include "pageplay.h" #include "tabbar.h" #include "sopfork.h" #include "mainwindow.h" #include "mystatusbar.h" TabWidget::TabWidget (QWidget * parent, const char *name): QTabWidget (parent, name) { ///use custom tabbar tabbar = new TabBar (this); setTabBar (tabbar); ///topleft corner widget QToolButton *but = new QToolButton (this); but->setTextLabel ("p"); but->setAutoRaise (true); but->setUsesTextLabel (true); setCornerWidget (but, Qt::TopLeft); connect (but, SIGNAL (clicked ()), this, SLOT (insertPlayTab ())); ///topright corner widget but = new QToolButton (this); but->setTextLabel ("r"); but->setAutoRaise (true); but->setUsesTextLabel (true); setCornerWidget (but, Qt::TopRight); connect (but, SIGNAL (clicked ()), this, SLOT (insertRecordTab ())); ///tab play PagePlay *pageplay = new PagePlay (this); addTab (pageplay, tr ("play")); showPage (pageplay); setMaximumHeight (sizeHint ().height ()); ///page change signal connect (this, SIGNAL (currentChanged (QWidget *)), this, SLOT (onCurrentChanged (QWidget *))); ///autodelete the item // listsopfork.setAutoDelete( TRUE ); //failed, why? } TabWidget::~TabWidget () { } void TabWidget::addPlayTab () { PagePlay *pageplay = new PagePlay (this); addTab (pageplay, tr ("play")); showPage (pageplay); } void TabWidget::insertPlayTab () { PagePlay *pageplay = new PagePlay (this); insertTab (pageplay, tr ("play"), currentPageIndex () + 1); showPage (pageplay); } void TabWidget::addRecordTab () { Record *record = new Record (this); addTab (record, tr ("record")); showPage (record); } void TabWidget::insertRecordTab () { Record *record = new Record (this); insertTab (record, tr ("record"), currentPageIndex () + 1); showPage (record); } void TabWidget::mouseDoubleClickEvent (QMouseEvent * e) { QPoint p (e->pos ()); QRect pr (rect ()); pr.setHeight (tabbar->height ()); //mouse stay outside of tabbar area if (!pr.contains (p)) return; if (e->button () == QMouseEvent::LeftButton) addPlayTab (); else if (e->button () == QMouseEvent::RightButton) addRecordTab (); } void TabWidget::onCurrentChanged (QWidget * current) { SopFork *sopfork; sopfork = static_cast < MyVBox * >(current)->sopfork; if (!sopfork) static_cast < MainWindow * >(qApp->mainWidget ()) ->statusbar->showMessage (""); else if (sopfork->message != "data") static_cast < MainWindow * >(qApp->mainWidget ()) ->statusbar->showMessage (sopfork->message); else static_cast < MainWindow * >(qApp->mainWidget ()) ->statusbar->showMessage (sopfork->arraymessage); } ///attach Sop bool TabWidget::attachSop (SopFork ** sopfork, QWidget * widget, QString url, QString name, QString type) { bool found = false; ///if found a sop with the same url, just register it for (SopFork * sf = listsopfork.first (); sf; sf = listsopfork.next ()) if (sf->channelurl == url) { ///assign value to pointer *sopfork = sf; (*sopfork)->listpage.append (widget); /// found = true; break; } ///if not found, fork new sop if (found == false) { ///widget is added to sopfork's listpage list while initializing sopfork listsopfork.append (new SopFork (widget, url, name, type, this)); ///assign value to pointer *sopfork = listsopfork.current (); // (*sopfork)->listpage.append (widget); } // printf ("sopfork count=%d\n", listsopfork.count ()); // printf ("pageplay count=%d\n", (*sopfork)->listpage.count ()); return true; } ///detach Sop void TabWidget::detachSop (SopFork ** sopfork, QWidget * widget) { if (*sopfork == NULL) return; bool found = false; ///list refers to a list of Page for (QWidget * wd = (*sopfork)->listpage.first (); wd; wd = (*sopfork)->listpage.next ()) if (wd == widget) { (*sopfork)->listpage.remove (wd); ///if sop's pageplay list is empty if ((*sopfork)->listpage.isEmpty ()) { ///remove item from list listsopfork.remove (*sopfork); ///delete item delete *sopfork; } *sopfork = NULL; found = true; break; } if (found == false) perror ("not found"); }