int CPictureViewerGui::show() { neutrino_msg_t msg; neutrino_msg_data_t data; int res = -1; CVFD::getInstance()->setMode(CVFD::MODE_MENU_UTF8, g_Locale->getText(LOCALE_PICTUREVIEWER_HEAD)); m_state=MENU; int timeout; bool loop=true; bool update=true; while (loop) { if (update) { hide(); update=false; paint(); frameBuffer->blit(); } if (m_state!=SLIDESHOW) timeout=50; // egal else { timeout=(m_time+atoi(g_settings.picviewer_slide_time)-(long)time(NULL))*10; if (timeout <0 ) timeout=1; } g_RCInput->getMsg( &msg, &data, timeout ); if ( msg == CRCInput::RC_home) { //Exit after cancel key if (m_state!=MENU) { endView(); update=true; } else loop=false; } else if (msg == CRCInput::RC_timeout) { if (m_state == SLIDESHOW) { m_time=(long)time(NULL); unsigned int next = selected + 1; if (next >= playlist.size()) next = 0; view(next); } } else if (msg == CRCInput::RC_left) { if (!playlist.empty()) { if (m_state == MENU) { if (selected < listmaxshow) selected=playlist.size()-1; else selected -= listmaxshow; liststart = (selected/listmaxshow)*listmaxshow; paint(); } else { view((selected == 0) ? (playlist.size() - 1) : (selected - 1)); } } } else if (msg == CRCInput::RC_right) { if (!playlist.empty()) { if (m_state == MENU) { selected += listmaxshow; if (selected >= playlist.size()) { if (((playlist.size() / listmaxshow) + 1) * listmaxshow == playlist.size() + listmaxshow) selected=0; else selected = selected < (((playlist.size() / listmaxshow) + 1) * listmaxshow) ? (playlist.size() - 1) : 0; } liststart = (selected/listmaxshow)*listmaxshow; paint(); } else { unsigned int next = selected + 1; if (next >= playlist.size()) next = 0; view(next); } } } else if (msg == CRCInput::RC_up) { if ((m_state == MENU) && (!playlist.empty())) { int prevselected=selected; if (selected==0) { selected = playlist.size()-1; } else selected--; paintItem(prevselected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if (oldliststart!=liststart) { update=true; } else { paintItem(selected - liststart); } } } else if (msg == CRCInput::RC_down) { if ((m_state == MENU) && (!playlist.empty())) { int prevselected=selected; selected = (selected+1)%playlist.size(); paintItem(prevselected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if (oldliststart!=liststart) { update=true; } else { paintItem(selected - liststart); } } } else if (msg == CRCInput::RC_spkr) { if (!playlist.empty()) { if (m_state == MENU) { deletePicFile(selected, false); update = true; } else{ deletePicFile(selected, true); } } } else if (msg == CRCInput::RC_ok) { if (!playlist.empty()) view(selected); } else if (msg == CRCInput::RC_red) { if (m_state == MENU) { if (!playlist.empty()) { CViewList::iterator p = playlist.begin()+selected; playlist.erase(p); if (selected >= playlist.size()) selected = playlist.size()-1; update = true; } } } else if (msg==CRCInput::RC_green) { if (m_state == MENU) { CFileBrowser filebrowser((g_settings.filebrowser_denydirectoryleave) ? g_settings.network_nfs_picturedir : ""); filebrowser.Multi_Select = true; filebrowser.Dirs_Selectable = true; filebrowser.Filter = &picture_filter; hide(); if (filebrowser.exec(Path.c_str())) { Path = filebrowser.getCurrentDir(); CFileList::const_iterator files = filebrowser.getSelectedFiles().begin(); for (; files != filebrowser.getSelectedFiles().end(); files++) { if (files->getType() == CFile::FILE_PICTURE) { CPicture pic; pic.Filename = files->Name; std::string tmp = files->Name.substr(files->Name.rfind('/')+1); pic.Name = tmp.substr(0,tmp.rfind('.')); pic.Type = tmp.substr(tmp.rfind('.')+1); struct stat statbuf; if (stat(pic.Filename.c_str(),&statbuf) != 0) printf("stat error"); pic.Date = statbuf.st_mtime; playlist.push_back(pic); } else printf("Wrong Filetype %s:%d\n",files->Name.c_str(), files->getType()); } if (m_sort == FILENAME) std::sort(playlist.begin(), playlist.end(), comparePictureByFilename); else if (m_sort == DATE) std::sort(playlist.begin(), playlist.end(), comparePictureByDate); } update=true; } } else if (msg==CRCInput::RC_yellow) { if (m_state == MENU && !playlist.empty()) { playlist.clear(); selected=0; update=true; } } else if (msg==CRCInput::RC_blue) { if ((m_state == MENU) && (!playlist.empty())) { m_time=(long)time(NULL); view(selected); m_state=SLIDESHOW; } else { if (m_state == SLIDESHOW) m_state = VIEW; else m_state = SLIDESHOW; } } #ifdef EVOLUX else if (msg==g_settings.key_help) #else else if (msg==CRCInput::RC_help) #endif { if (m_state == MENU) { showHelp(); paint(); } } else if ( msg == CRCInput::RC_1 ) { if (m_state != MENU && !playlist.empty()) { m_viewer->Zoom(2.0/3); } } else if ( msg == CRCInput::RC_2 ) { if (m_state != MENU && !playlist.empty()) { m_viewer->Move(0,-50); } } else if ( msg == CRCInput::RC_3 ) { if (m_state != MENU && !playlist.empty()) { m_viewer->Zoom(1.5); } } else if ( msg == CRCInput::RC_4 ) { if (m_state != MENU && !playlist.empty()) { m_viewer->Move(-50,0); } } else if ( msg == CRCInput::RC_5 ) { if (m_state==MENU) { if (!playlist.empty()) { if (m_sort==FILENAME) { m_sort=DATE; std::sort(playlist.begin(),playlist.end(),comparePictureByDate); } else if (m_sort==DATE) { m_sort=FILENAME; std::sort(playlist.begin(),playlist.end(),comparePictureByFilename); } update=true; } } } else if ( msg == CRCInput::RC_6 ) { if (m_state != MENU && !playlist.empty()) { m_viewer->Move(50,0); } } else if ( msg == CRCInput::RC_8 ) { if (m_state != MENU && !playlist.empty()) { m_viewer->Move(0,50); } } else if (msg==CRCInput::RC_0) { if (!playlist.empty()) view(selected, true); } else if (msg==CRCInput::RC_setup) { if (m_state==MENU) { CNFSSmallMenu nfsMenu; nfsMenu.exec(this, ""); update=true; CVFD::getInstance()->setMode(CVFD::MODE_MENU_UTF8, g_Locale->getText(LOCALE_PICTUREVIEWER_HEAD)); } } else if (msg == NeutrinoMessages::CHANGEMODE) { if ((data & NeutrinoMessages::mode_mask) !=NeutrinoMessages::mode_pic) { loop = false; m_LastMode=data; } } else if (msg == NeutrinoMessages::RECORD_START || msg == NeutrinoMessages::ZAPTO || msg == NeutrinoMessages::STANDBY_ON || msg == NeutrinoMessages::SHUTDOWN || msg == NeutrinoMessages::SLEEPTIMER) { // Exit for Record/Zapto Timers if (m_state != MENU) endView(); loop = false; g_RCInput->postMsg(msg, data); } else if ((msg == CRCInput::RC_sat) || (msg == CRCInput::RC_favorites)) { } else { if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { loop = false; } } frameBuffer->blit(); } hide(); return(res); }
void Gif::draw(sf::RenderTarget* window){ initView(&_view, sf::Vector2i(W_WIDTH, W_HEIGHT),window); window->draw(_sprite); endView(window); }