From kde-commits Sun Sep 03 21:51:04 2006 From: Koos Vriezen Date: Sun, 03 Sep 2006 21:51:04 +0000 To: kde-commits Subject: extragear/multimedia/kmplayer/src Message-Id: <1157320264.362727.9821.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=115732027832694 SVN commit 580560 by vriezen: Code dup to make root items open on clicked() signal and not on executed(), to work as espected in icons double click mode More control on whether active nodes should be opened and/or selected, no use change only a hack removal M +8 -8 kmplayerapp.cpp M +29 -7 kmplayerpartbase.cpp M +2 -1 kmplayerpartbase.h M +2 -2 kmplayertvsource.cpp M +10 -11 playlistview.cpp M +4 -3 playlistview.h --- trunk/extragear/multimedia/kmplayer/src/kmplayerapp.cpp #580559:580560 @@ -686,7 +686,7 @@ if (count > 50) more->removeChild (more->lastChild ()); } - m_view->playList ()->updateTree (recents_id, recents, 0); + m_view->playList ()->updateTree (recents_id, recents, 0, false, false); } } @@ -966,7 +966,7 @@ QString txt = m_view->infoPanel ()->text (); QTextStream ts (txt, IO_ReadOnly); KMPlayer::readXML (si->node, ts, QString (), false); - m_view->playList ()->updateTree (edit_tree_id, si->node->document(), si->node); + m_view->playList ()->updateTree (edit_tree_id, si->node->document(), si->node, true, false); } } else m_player->openURL (m_player->source ()->url ()); @@ -1264,7 +1264,7 @@ if (recents) { // small window this check fails and thus ClearHistory fails recents->defer (); // make sure it's loaded recents->clear (); - m_view->playList ()->updateTree (recents_id, recents, 0); + m_view->playList ()->updateTree (recents_id, recents, 0, false, false); } } @@ -1433,7 +1433,7 @@ else n->parentNode ()->insertBefore (pi, n->nextSibling ()); } - m_view->playList()->updateTree (playlist_id, playlist, pi); + m_view->playList()->updateTree (playlist_id, playlist, pi, true, false); } KDE_NO_EXPORT void KMPlayerApp::menuDropInGroup () { @@ -1455,7 +1455,7 @@ pi = new PlaylistItem (playlist,this,m_drop_list[i].url ()); g->appendChild (pi); } - m_view->playList()->updateTree (playlist_id, playlist, pi); + m_view->playList()->updateTree (playlist_id, playlist, pi, true, false); } KDE_NO_EXPORT void KMPlayerApp::menuCopyDrop () { @@ -1466,7 +1466,7 @@ n->insertBefore (pi, n->firstChild ()); else n->parentNode ()->insertBefore (pi, n->nextSibling ()); - m_view->playList()->updateTree (playlist_id, playlist, pi); + m_view->playList()->updateTree (playlist_id, playlist, pi, true, false); } } @@ -1476,7 +1476,7 @@ n = playlist_node->previousSibling() ? playlist_node->previousSibling() : playlist_node->parentNode (); playlist_node->parentNode ()->removeChild (playlist_node); } - m_view->playList()->updateTree (playlist_id, playlist, n); + m_view->playList()->updateTree (playlist_id, playlist, n, true, false); } KDE_NO_EXPORT void KMPlayerApp::playListItemMoved () { @@ -1487,7 +1487,7 @@ KMPlayer::NodePtr p = si->node->parentNode (); if (p) { p->removeChild (si->node); - m_view->playList()->updateTree (playlist_id, playlist, 0L); + m_view->playList()->updateTree(playlist_id,playlist,0L,false,false); } } } --- trunk/extragear/multimedia/kmplayer/src/kmplayerpartbase.cpp #580559:580560 @@ -225,8 +225,10 @@ this, SLOT (playListItemExecuted (QListViewItem *))); connect (playlist, SIGNAL (selectionChanged (QListViewItem *)), this, SLOT (playListItemSelected (QListViewItem *))); - connect (this, SIGNAL (treeChanged (int, NodePtr, NodePtr)), - playlist, SLOT (updateTree (int, NodePtr, NodePtr))); + connect (playlist, SIGNAL (clicked (QListViewItem *)), + this, SLOT (playListItemClicked (QListViewItem *))); + connect (this, SIGNAL (treeChanged (int, NodePtr, NodePtr, bool, bool)), + playlist, SLOT (updateTree (int, NodePtr, NodePtr, bool, bool))); connect (this, SIGNAL (treeUpdated ()), playlist, SLOT (triggerUpdate ())); } @@ -578,7 +580,7 @@ m_source->forward (); } -void PartBase::playListItemSelected (QListViewItem * item) { +KDE_NO_EXPORT void PartBase::playListItemSelected (QListViewItem * item) { if (m_in_update_tree) return; PlayListItem * vi = static_cast (item); if (vi->node) { @@ -588,11 +590,31 @@ updateTree (); // items already deleted } -void PartBase::playListItemExecuted (QListViewItem * item) { +KDE_NO_EXPORT void PartBase::playListItemClicked (QListViewItem * item) { + if (!item) + return; + PlayListItem * vi = static_cast (item); + RootPlayListItem * ri = vi->playListView ()->rootItem (item); + if (ri == item && vi->node) { + QString src = ri->source; + kdDebug() << "playListItemClicked " << src << " " << vi->node->nodeName() << endl; + Source * source = src.isEmpty() ? m_source : m_sources[src.ascii()]; + if (vi->node->isPlayable ()) { + source->jump (vi->node); //may become !isPlayable by lazy loading + if (!vi->node->isPlayable ()) + emit treeChanged (ri->id, vi->node, 0, false, true); + } else if (vi->firstChild ()) + vi->listView ()->setOpen (vi, !vi->isOpen ()); + } +} + +KDE_NO_EXPORT void PartBase::playListItemExecuted (QListViewItem * item) { if (m_in_update_tree) return; if (m_view->editMode ()) return; PlayListItem * vi = static_cast (item); RootPlayListItem * ri = vi->playListView ()->rootItem (item); + if (ri == item) + return; // both null or handled by playListItemClicked if (vi->node) { QString src = ri->source; kdDebug() << "playListItemExecuted " << src << " " << vi->node->nodeName() << endl; @@ -600,7 +622,7 @@ if (vi->node->isPlayable ()) { source->jump (vi->node); //may become !isPlayable by lazy loading if (!vi->node->isPlayable ()) - emit treeChanged (-1, vi->node, 0); + emit treeChanged (ri->id, vi->node, 0, false, true); } else if (vi->firstChild ()) vi->listView ()->setOpen (vi, !vi->isOpen ()); } else if (vi->m_attr) { @@ -625,7 +647,7 @@ } } } else - emit treeChanged (ri->id, ri->node, 0L); + emit treeChanged (ri->id, ri->node, 0L, false, false); if (m_view) m_view->viewArea ()->setFocus (); } @@ -635,7 +657,7 @@ m_in_update_tree = true; if (m_update_tree_full) { if (m_source) - emit treeChanged (0, m_source->root (), m_source->current ()); + emit treeChanged (0, m_source->root (), m_source->current (), true, false); } else emit treeUpdated (); m_in_update_tree = false; --- trunk/extragear/multimedia/kmplayer/src/kmplayerpartbase.h #580559:580560 @@ -192,7 +192,7 @@ void urlAdded (const QString & url); void urlChanged (const QString & url); void processChanged (const char *); - void treeChanged (int id, NodePtr root, NodePtr); + void treeChanged (int id, NodePtr root, NodePtr, bool select, bool open); void treeUpdated (); void infoUpdated (const QString & msg); void statusUpdated (const QString & msg); @@ -214,6 +214,7 @@ void sourceHasChangedAspects (); void fullScreen (); void playListItemSelected (QListViewItem *); + void playListItemClicked (QListViewItem *); void playListItemExecuted (QListViewItem *); virtual void playingStarted (); virtual void playingStopped (); --- trunk/extragear/multimedia/kmplayer/src/kmplayertvsource.cpp #580559:580560 @@ -436,7 +436,7 @@ return; m_cur_tvinput = input; m_cur_tvdevice = input->parentNode (); - static_cast (m_player->view ())->playList ()->updateTree (0, m_cur_tvinput, m_current); + static_cast (m_player->view ())->playList ()->updateTree (0, m_cur_tvinput, m_current, true, false); if (m_cur_tvdevice->id != id_node_tv_device) { return; } @@ -524,7 +524,7 @@ kdDebug () << "KMPlayerTVSource::readXML" << endl; static_cast (m_document.ptr ())->readFromFile (locateLocal ("data", "kmplayer/tv.xml")); - static_cast (m_player->view ())->playList ()->updateTree (tree_id, m_document, 0); + static_cast (m_player->view ())->playList ()->updateTree (tree_id, m_document, 0, false, false); buildMenu (); sync (false); } --- trunk/extragear/multimedia/kmplayer/src/playlistview.cpp #580559:580560 @@ -153,7 +153,7 @@ ritem->setPixmap (0, !ritem->icon.isEmpty () ? KGlobal::iconLoader ()->loadIcon (ritem->icon, KIcon::Small) : url_pix); - updateTree (ritem, 0L); + updateTree (ritem, 0L, false); return last_id; } @@ -210,13 +210,13 @@ return item; } -void PlayListView::updateTree (int id, NodePtr root, NodePtr active) { +void PlayListView::updateTree (int id, NodePtr root, NodePtr active, + bool select, bool open) { // TODO, if root is same as rootitems->node and treeversion is the same // and show all nodes is unchanged then only update the cells QWidget * w = focusWidget (); if (w && w != this) w->clearFocus (); - bool set_open = false; //setSelected (firstChild (), true); RootPlayListItem * ritem = static_cast (firstChild ()); RootPlayListItem * before = 0L; @@ -231,7 +231,6 @@ } if (root == ritem->node) { id = ritem->id; - set_open = true; break; // found based on matching (ancestor) node } } @@ -249,20 +248,20 @@ ritem->node = root; m_find_next->setEnabled (!!m_current_find_elm); bool need_timer = !tree_update; - tree_update = new TreeUpdate (ritem, active, set_open, tree_update); + tree_update = new TreeUpdate (ritem, active, select, open, tree_update); if (need_timer) QTimer::singleShot (0, this, SLOT (updateTrees ())); } KDE_NO_EXPORT void PlayListView::updateTrees () { for (; tree_update; tree_update = tree_update->next) { - updateTree (tree_update->root_item, tree_update->node); + updateTree (tree_update->root_item, tree_update->node, tree_update->select); if (tree_update->open) // FIXME for non-root nodes lazy loading setOpen (tree_update->root_item, true); } } -KDE_NO_EXPORT void PlayListView::updateTree (RootPlayListItem * ritem, NodePtr active) { +KDE_NO_EXPORT void PlayListView::updateTree (RootPlayListItem * ritem, NodePtr active, bool select) { bool set_open = ritem->id == 0 || (ritem ? ritem->isOpen () : false); m_ignore_expanded = true; PlayListItem * curitem = 0L; @@ -271,7 +270,7 @@ populate (ritem->node, active, ritem, 0L, &curitem); if (set_open && ritem->firstChild () && !ritem->isOpen ()) setOpen (ritem, true); - if (curitem) { + if (curitem && select) { setSelected (curitem, true); ensureItemVisible (curitem); } @@ -406,7 +405,7 @@ if (ri && ri->show_all_nodes != show) { PlayListItem * cur_item = currentPlayListItem (); ri->show_all_nodes = show; - updateTree (ri->id, ri->node, cur_item->node); + updateTree (ri->id, ri->node, cur_item->node, true, false); if (m_current_find_elm && ri->node->document() == m_current_find_elm->document() && !ri->show_all_nodes) { @@ -460,7 +459,7 @@ NodePtr cn; if (citem) cn = citem->node; - updateTree (ritem, cn); + updateTree (ritem, cn, true); } } else m_view->dropEvent (de); @@ -473,7 +472,7 @@ if (!ri->show_all_nodes && item->node->isEditable ()) item->node->setNodeName (item->text (0)); else // restore damage .. - updateTree (ri, item->node); + updateTree (ri, item->node, true); } else if (item->m_attr) { QString txt = item->text (0); int pos = txt.find (QChar ('=')); --- trunk/extragear/multimedia/kmplayer/src/playlistview.h #580559:580560 @@ -105,7 +105,7 @@ public slots: void editCurrent (); void rename (QListViewItem * item, int c); - void updateTree (int id, NodePtr root, NodePtr active); + void updateTree (int id, NodePtr root, NodePtr active, bool sel, bool open); private slots: void contextMenuItem (QListViewItem *, const QPoint &, int); void itemExpanded (QListViewItem *); @@ -119,13 +119,14 @@ void slotFindOk (); void slotFindNext (); private: - void updateTree (RootPlayListItem * ritem, NodePtr active); + void updateTree (RootPlayListItem * ritem, NodePtr active, bool select); PlayListItem * populate (NodePtr e, NodePtr focus, RootPlayListItem *root, PlayListItem * item, PlayListItem ** curitem); struct KMPLAYER_NO_EXPORT TreeUpdate { - KDE_NO_CDTOR_EXPORT TreeUpdate (RootPlayListItem *ri, NodePtr n, bool o, SharedPtr &nx) : root_item (ri), node (n), open (o), next (nx) {} + KDE_NO_CDTOR_EXPORT TreeUpdate (RootPlayListItem *ri, NodePtr n, bool s, bool o, SharedPtr &nx) : root_item (ri), node (n), select (s), open (o), next (nx) {} KDE_NO_CDTOR_EXPORT ~TreeUpdate () {} RootPlayListItem * root_item; NodePtrW node; + bool select; bool open; SharedPtr next; };