/**************************************************************************** Copyright (C) 2002 Charles Samuels this file is on the BSD license, sans advertisement clause *****************************************************************************/ #include #include #include #include #include #include #include #include "globalvideo.h" // sorry :) TQPtrList VideoFrame::frames; VideoFrame *VideoFrame::whose=0; struct VideoFrame::Private { }; VideoFrame::VideoFrame(KXMLGUIClient *clientParent, TQWidget *parent, const char*name, WFlags f) : KVideoWidget(clientParent, parent, name, f) { d = new Private; connect(napp->player(), TQ_SIGNAL(newSong()), TQ_SLOT(changed())); connect(napp->player(), TQ_SIGNAL(stopped()), TQ_SLOT(stopped())); frames.append(this); } VideoFrame::VideoFrame(TQWidget *parent, const char *name, WFlags f) : KVideoWidget(parent, name, f) { d = new Private; connect(napp->player(), TQ_SIGNAL(newSong()), TQ_SLOT(changed())); connect(napp->player(), TQ_SIGNAL(stopped()), TQ_SLOT(stopped())); frames.append(this); } VideoFrame::~VideoFrame() { if (whose == this) { embed(Arts::VideoPlayObject::null()); whose=0; } frames.removeRef(this); VideoFrame *l = frames.last(); if (l) l->give(); else whose=0; delete d; } VideoFrame *VideoFrame::playing() { return whose; } TQPopupMenu *VideoFrame::popupMenu(TQWidget *parent) { TQPopupMenu *view = new TQPopupMenu(parent); action( "half_size" )->plug( view ); action( "normal_size" )->plug( view ); action( "double_size" )->plug( view ); view->insertSeparator(); action( "fullscreen_mode" )->plug( view ); return view; } void VideoFrame::give() { VideoFrame *old=whose; whose = this; if (whose != old && old != 0) { old->embed(Arts::VideoPlayObject::null()); emit old->lost(); } Arts::PlayObject po = napp->player()->engine()->playObject(); if (po.isNull()) return; Arts::VideoPlayObject vpo = Arts::DynamicCast(po); if (!vpo.isNull()) { embed(vpo); emit acquired(); } } void VideoFrame::changed() { if (whose==this) give(); } void VideoFrame::stopped() { if (whose==this) { embed(Arts::VideoPlayObject::null()); emit lost(); } } #include GlobalVideo::GlobalVideo() : TQWidget( 0, 0, WType_TopLevel | WStyle_Customize | WStyle_DialogBorder | WStyle_Title ) { setCaption(i18n("Video - Noatun")); (new TQVBoxLayout(this))->setAutoAdd(true); video = new VideoFrame(this); menu = video->popupMenu(this); // FIXME: How to obtain minimum size for top-level widgets? // video->setMinimumSize(minimumSizeHint()); // video->setMinimumSize(101,35); video->setMinimumSize(128,96); connect(video, TQ_SIGNAL(acquired()), TQ_SLOT(appear())); connect(video, TQ_SIGNAL(lost()), TQ_SLOT(hide())); connect(video, TQ_SIGNAL(adaptSize(int,int)), this, TQ_SLOT(slotAdaptSize(int,int))); video->setNormalSize(); video->give(); } void GlobalVideo::slotAdaptSize(int w, int h) { resize(w, h); } void GlobalVideo::appear() { TQWidget::show(); } void GlobalVideo::hide() { TQWidget::hide(); } void GlobalVideo::mouseReleaseEvent(TQMouseEvent *e) { if (e->button() == TQt::RightButton) { menu->exec(mapToGlobal(e->pos())); } } #include "globalvideo.moc" #include "video.moc"