void NavigatorView::nodeReparented(const ModelNode &node, const NodeAbstractProperty & /*newPropertyParent*/, const NodeAbstractProperty & /*oldPropertyParent*/, AbstractView::PropertyChangeFlags /*propertyChange*/) { bool blocked = blockSelectionChangedSignal(true); if (m_treeModel->isInTree(node)) m_treeModel->removeSubTree(node); if (node.isInHierarchy()) m_treeModel->addSubTree(node); // make sure selection is in sync again updateItemSelection(); blockSelectionChangedSignal(blocked); }
void NavigatorView::nodeReparented(const ModelNode &node, const NodeAbstractProperty & newPropertyParent, const NodeAbstractProperty & /*oldPropertyParent*/, AbstractView::PropertyChangeFlags /*propertyChange*/) { bool blocked = blockSelectionChangedSignal(true); m_treeModel->removeSubTree(node); if (node.isInHierarchy()) m_treeModel->addSubTree(node); // make sure selection is in sync again updateItemSelection(); if (newPropertyParent.parentModelNode().isValid()) { QModelIndex index = m_treeModel->indexForNode(newPropertyParent.parentModelNode()); treeWidget()->expand(index); } blockSelectionChangedSignal(blocked); }
bool CUpnpBrowserGui::selectItem(std::string id) { bool loop = true; bool endall = false; bool refresh = true; neutrino_msg_t msg; neutrino_msg_data_t data; std::vector<UPnPEntry> *entries = NULL; unsigned int liststart = 0; unsigned int selected = 0; unsigned int total = 0; printf("selectItem: [%s]\n", id.c_str()); if (!getItems(id, liststart, entries, total)) return endall; while (loop) { updateTimes(); if (refresh) { printf("selectItem: refresh, timeout = %d\n", (int) timeout); if (!timeout) paintItems(entries, selected - liststart, total - liststart, liststart); refresh=false; } g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display neutrino_msg_t msg_repeatok = msg & ~CRCInput::RC_Repeat; if (msg == CRCInput::RC_timeout) { // nothing } else if (msg == CRCInput::RC_home) { loop=false; endall=true; } else if (!timeout && (msg == CRCInput::RC_left)) { loop=false; } else if (!timeout && (msg_repeatok == (neutrino_msg_t) g_settings.key_list_start)) { updateItemSelection(id, entries, 0, selected, liststart); } else if (!timeout && (msg_repeatok == (neutrino_msg_t) g_settings.key_list_end)) { updateItemSelection(id, entries, total-1, selected, liststart); } else if (!timeout && (msg_repeatok == CRCInput::RC_up || (int) msg == g_settings.key_pageup)) { int step = ((int) msg == g_settings.key_pageup) ? m_listmaxshow : 1; // browse or step 1 int new_selected = selected - step; if (new_selected < 0) { if (selected != 0 && step != 1) new_selected = 0; else new_selected = total - 1; } updateItemSelection(id, entries, new_selected, selected, liststart); } else if (!timeout && (msg_repeatok == CRCInput::RC_down || (int) msg == g_settings.key_pagedown)) { int step = ((int) msg == g_settings.key_pagedown) ? m_listmaxshow : 1; // browse or step 1 int new_selected = selected + step; if (new_selected >= (int) total) { if ((total - m_listmaxshow -1 < selected) && (selected != (total - 1)) && (step != 1)) new_selected = total - 1; else if (((total / m_listmaxshow) + 1) * m_listmaxshow == total + m_listmaxshow) // last page has full entries new_selected = 0; else new_selected = ((step == (int) m_listmaxshow) && (new_selected < (int) (((total / m_listmaxshow)+1) * m_listmaxshow))) ? (total - 1) : 0; } updateItemSelection(id, entries, new_selected, selected, liststart); } else if (!timeout && (msg == CRCInput::RC_ok || msg == CRCInput::RC_right)) { if ((selected - liststart) >= (*entries).size()) continue; if ((*entries)[selected - liststart].isdir) { endall=selectItem((*entries)[selected - liststart].id); if (endall) loop=false; refresh=true; } else { m_folderplay = false; int preferred=(*entries)[selected - liststart].preferred; if (preferred != -1) { std::string &mime = (*entries)[selected - liststart].mime; if (mime.substr(0,6) == "audio/") { m_playing_entry = (*entries)[selected - liststart]; m_playing_entry_is_shown = false; playAudio((*entries)[selected - liststart].resources[preferred].url, (*entries)[selected - liststart].type); } else if (mime.substr(0,6) == "video/") { m_frameBuffer->Clear(); playVideo((*entries)[selected - liststart].title, (*entries)[selected - liststart].resources[preferred].url); m_frameBuffer->showFrame("mp3.jpg"); refresh = true; } else if (mime.substr(0,6) == "image/") { videoDecoder->setBlank(true); showPicture((*entries)[selected - liststart].resources[preferred].url); m_playid = selected; while (true) { g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout if (msg == CRCInput::RC_home || msg == CRCInput::RC_ok) break; else if (msg == CRCInput::RC_right || msg == CRCInput::RC_down) { m_playfolder = id; m_playid = (m_playid + 1)%total; playnext(); } else if (msg == CRCInput::RC_left || msg == CRCInput::RC_up) { m_playfolder = id; m_playid--; if (m_playid < 0) m_playid = total - 1; playnext(); } else CNeutrinoApp::getInstance()->handleMsg(msg, data); } m_frameBuffer->Clear(); videoDecoder->setBlank(false); refresh = true; } } } } else if (msg == CRCInput::RC_play) { if ((selected - liststart) >= (*entries).size()) continue; m_folderplay = true; m_playfolder = (*entries)[selected - liststart].id; m_playid = 0; playnext(); m_playid++; } else if (msg == CRCInput::RC_yellow) { if (CAudioPlayer::getInstance()->getState() != CBaseDec::STOP) CAudioPlayer::getInstance()->stop(); m_folderplay = false; } else if (m_folderplay && msg == (neutrino_msg_t) CRCInput::RC_stop) { timeout = 0; m_folderplay = false; m_frameBuffer->Clear(); refresh = true; } else if (m_folderplay && msg == (neutrino_msg_t) CRCInput::RC_prev) { timeout = 0; m_playid -= 2; if (m_playid < 0) m_playid = 0; } else if (m_folderplay && msg == (neutrino_msg_t) CRCInput::RC_next) { timeout = 0; if (CAudioPlayer::getInstance()->getState() != CBaseDec::STOP) CAudioPlayer::getInstance()->stop(); } else if (msg == NeutrinoMessages::RECORD_START || msg == NeutrinoMessages::ZAPTO || msg == NeutrinoMessages::STANDBY_ON || msg == NeutrinoMessages::SHUTDOWN || msg == NeutrinoMessages::SLEEPTIMER) { loop = false; g_RCInput->postMsg(msg, data); } #if 0 else if (msg == NeutrinoMessages::EVT_TIMER) { CNeutrinoApp::getInstance()->handleMsg(msg, data); } else if (msg > CRCInput::RC_MaxRC) #endif else { if (CNeutrinoApp::getInstance()->handleMsg(msg, data) & messages_return::cancel_all) loop = false; //refresh=true; } if (m_folderplay && ((!timeout || (timeout <= time(NULL))) && (CAudioPlayer::getInstance()->getState() == CBaseDec::STOP))) { playnext(); m_playid++; } } delete entries; timeout = 0; m_frameBuffer->Clear(); return endall; }