int CBEChannelSelectWidget::exec(CMenuTarget* parent, const std::string & actionKey) { //width = w_max (500, 0); //height = h_max (440, 50); int fw = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getWidth(); int fh = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); width = w_max (64 * fw, 20); height = h_max (20 * fh, 50); listmaxshow = (height-theight-0)/fheight; height = theight+0+listmaxshow*fheight; // recalc height x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2; y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - height) / 2; bouquetChannels = mode == CZapitClient::MODE_TV ? &(g_bouquetManager->Bouquets[bouquet]->tvChannels) : &(g_bouquetManager->Bouquets[bouquet]->radioChannels); Channels.clear(); if (mode == CZapitClient::MODE_RADIO) { for (tallchans_iterator it = allchans.begin(); it != allchans.end(); it++) if (it->second.getServiceType() == ST_DIGITAL_RADIO_SOUND_SERVICE) Channels.push_back(&(it->second)); } else { for (tallchans_iterator it = allchans.begin(); it != allchans.end(); it++) if (it->second.getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE) Channels.push_back(&(it->second)); } sort(Channels.begin(), Channels.end(), CmpChannelByChName()); return CListBox::exec(parent, actionKey); }
// construktor CSysInfoWidget::CSysInfoWidget(int m) { frameBuffer = CFrameBuffer::getInstance(); selected = 0; // windows size width = w_max ( (frameBuffer->getScreenWidth() / 20 * 17), (frameBuffer->getScreenWidth() / 20 )); height = h_max ( (frameBuffer->getScreenHeight() / 20 * 16), (frameBuffer->getScreenHeight() / 20)); //head height frameBuffer->getIconSize(NEUTRINO_ICON_SETTINGS, &icon_head_w, &icon_head_h); theight = std::max(g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight(), icon_head_h) + 6; //foot height frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_RED, &icon_foot_w, &icon_foot_h); ButtonHeight = std::max(g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(), icon_foot_h) + 6; // item height fheight = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight(); listmaxshow = (height - theight)/fheight; // recalculate height height = theight + listmaxshow*fheight; // recalc height // coordinate x = (((g_settings.screen_EndX- g_settings.screen_StartX)-width) / 2) + g_settings.screen_StartX; y = (((g_settings.screen_EndY- g_settings.screen_StartY)-height) / 2) + g_settings.screen_StartY; // liststart = 0; state = beDefault; mode = m; }
void CEpgData::start() { // dimension ox = w_max ( (frameBuffer->getScreenWidth() / 20 * 17), (frameBuffer->getScreenWidth() / 20 )); oy = h_max ( (frameBuffer->getScreenHeight() / 20 * 16), (frameBuffer->getScreenHeight() / 20)); sx = (((g_settings.screen_EndX - g_settings.screen_StartX) - ox) / 2) + g_settings.screen_StartX; //top topheight = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_TITLE]->getHeight(); topboxheight = topheight + 6; //bottom botheight = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->getHeight(); botboxheight = botheight + 6; //epg text fenster medlineheight = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]->getHeight(); medlinecount = (oy - topboxheight - botboxheight)/medlineheight; // this is the text box height - and the height of the scroll bar sb = medlinecount * medlineheight; oy = botboxheight + medlinecount*medlineheight; // recalculate //FIXME // int icon_w; int icon_h; frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_RED, &icon_w, &icon_h); int fheight = std::max(icon_h, g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()) + 6; sy = (((g_settings.screen_EndY - g_settings.screen_StartY) - (oy - topboxheight + fheight) ) / 2) + g_settings.screen_StartY; //30:buttonbar toph = topboxheight; }
void CEpgData::start() { ox = w_max (768, 70); oy = h_max (576, 50 + 30); // 30 for the bottom button box. sx = (((g_settings.screen_EndX - g_settings.screen_StartX) -ox) / 2) + g_settings.screen_StartX; //top topheight = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_TITLE]->getHeight(); topboxheight = topheight + 6; if(topboxheight < PIC_H) topboxheight = PIC_H; //bottom botheight = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->getHeight(); botboxheight = botheight + 6; //epg text fenster medlineheight = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]->getHeight(); //medlinecount = (oy - botboxheight)/medlineheight; medlinecount = (oy - topboxheight - botboxheight)/medlineheight; //sb = oy - topboxheight - botboxheight; /* this is the text box height - and the height of the scroll bar */ sb = medlinecount * medlineheight; oy = botboxheight + medlinecount*medlineheight; // recalculate //FIXME sy = (((g_settings.screen_EndY-g_settings.screen_StartY)-(oy- topboxheight) ) / 2) + g_settings.screen_StartY; toph = topboxheight; }
CStreamInfo::CStreamInfo() { frameBuffer = CFrameBuffer::getInstance(); hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); width = w_max (400, 50); height = h_max (hheight + 14 * mheight + 10, 0); x = getScreenStartX (width); y = getScreenStartY (height); }
//------------------------------------------------------------------------ int CPictureViewerGui::exec(CMenuTarget* parent, const std::string & /*actionKey*/) { selected = 0; width = w_max (710, 0); height = h_max (570, 0); sheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); buttonHeight = std::min(25, sheight); theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); listmaxshow = (height-theight-2*buttonHeight)/(fheight); height = theight+2*buttonHeight+listmaxshow*fheight; // recalc height x=getScreenStartX( width ); y=getScreenStartY( height ); m_viewer->SetScaling((CPictureViewer::ScalingMode)g_settings.picviewer_scaling); m_viewer->SetVisible(g_settings.screen_StartX, g_settings.screen_EndX, g_settings.screen_StartY, g_settings.screen_EndY); if (g_settings.video_Format == 3) m_viewer->SetAspectRatio(16.0/9); else m_viewer->SetAspectRatio(4.0/3); if (parent) parent->hide(); // tell neutrino we're in pic_mode CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , NeutrinoMessages::mode_pic ); // remember last mode m_LastMode=(CNeutrinoApp::getInstance()->getLastMode() | NeutrinoMessages::norezap); g_Sectionsd->setPauseScanning(true); show(); // free picviewer mem m_viewer->Cleanup(); // Start Sectionsd g_Sectionsd->setPauseScanning(false); // Restore last mode CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , m_LastMode ); // always exit all return menu_return::RETURN_REPAINT; }
CListBox::CListBox(const char * const Caption) { frameBuffer = CFrameBuffer::getInstance(); caption = Caption; liststart = 0; selected = 0; width = w_max (400, 100); height = h_max (445, 0); ButtonHeight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight() + 6; modified = false; theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); fheight = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight(); listmaxshow = (height - theight - ButtonHeight - 0) / fheight; height = theight + ButtonHeight + 0 + listmaxshow * fheight; // recalc height x = getScreenStartX (width); y = getScreenStartY (height); }
CBEChannelSelectWidget::CBEChannelSelectWidget(const std::string & Caption, unsigned int Bouquet, CZapitClient::channelsMode Mode) { frameBuffer = CFrameBuffer::getInstance(); // liststart = 0; selected = 0; caption = Caption; modified = false; // bouquet = Bouquet; mode = Mode; // Title cFrameTitle.iHeight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight() + 6; // Foot footIcon.setIcon(NEUTRINO_ICON_BUTTON_OKAY); cFrameFoot.iHeight = std::max(g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(), footIcon.iHeight) + 6; // Item itemIcon1.setIcon(NEUTRINO_ICON_HD); itemIcon2.setIcon(NEUTRINO_ICON_SCRAMBLED); cFrameItem.iHeight = std::max(g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight(), itemIcon1.iHeight) + 2; cFrameItem.iHeight = std::max(g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight(), itemIcon2.iHeight) + 2; // FootInfo cFrameFootInfo.iHeight = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->getHeight() + 20; cFrameBox.iWidth = w_max ( (frameBuffer->getScreenWidth() / 20 * 17), (frameBuffer->getScreenWidth() / 20 )); cFrameBox.iHeight = h_max ( (frameBuffer->getScreenHeight() / 20 * 16), (frameBuffer->getScreenHeight() / 20)); listmaxshow = (cFrameBox.iHeight - cFrameTitle.iHeight - cFrameFoot.iHeight - cFrameFootInfo.iHeight)/cFrameItem.iHeight; // recalculate height cFrameBox.iHeight = cFrameTitle.iHeight + listmaxshow*cFrameItem.iHeight + cFrameFoot.iHeight + cFrameFootInfo.iHeight; cFrameBox.iX = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - (cFrameBox.iWidth + ConnectLineBox_Width)) / 2 + ConnectLineBox_Width; cFrameBox.iY = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - cFrameBox.iHeight) / 2; }
CBEBouquetWidget::CBEBouquetWidget() { frameBuffer = CFrameBuffer::getInstance(); selected = 0; // width = 500; // height = 440; // ButtonHeight = 25; width = w_max (550, 0); height = h_max (440, 50); ButtonHeight = 25; theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); fheight = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight(); listmaxshow = (height-theight-0)/fheight; height = theight+0+listmaxshow*fheight; // recalc height x=(((g_settings.screen_EndX- g_settings.screen_StartX)-width) / 2) + g_settings.screen_StartX; y=(((g_settings.screen_EndY- g_settings.screen_StartY)-height) / 2) + g_settings.screen_StartY; liststart = 0; state = beDefault; blueFunction = beRename; }
void CEpgData::start() { ox = w_max (MAX_W * (bigFonts ? BIG_FONT_FAKTOR : 1), 0); oy = h_max (MAX_H * (bigFonts ? BIG_FONT_FAKTOR : 1), 0); sx = (((g_settings.screen_EndX-g_settings.screen_StartX) -ox) / 2) + g_settings.screen_StartX; topheight = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_TITLE]->getHeight(); topboxheight = topheight + 6; if(topboxheight < PIC_H) topboxheight = PIC_H; botheight = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_DATE]->getHeight(); botboxheight = botheight + 6; medlineheight = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]->getHeight(); medlinecount = (oy- botboxheight)/medlineheight; sb = medlinecount* medlineheight; oy = botboxheight+medlinecount*medlineheight; // recalculate //FIXME sy = (((g_settings.screen_EndY-g_settings.screen_StartY)-(oy- topboxheight) ) / 2) + g_settings.screen_StartY; toph = topboxheight; }
//------------------------------------------------------------------------ int CPictureViewerGui::exec(CMenuTarget* parent, const std::string & /*actionKey*/) { selected = 0; width = w_max (710, 30); height = h_max (570, 0); sheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); buttonHeight = std::max(25, sheight); frameBuffer->getIconSize(NEUTRINO_ICON_MP3, &ticonwidth, &ticonheight); theight = std::max(ticonheight, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight()); fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); listmaxshow = (height-theight-2*buttonHeight)/(fheight); height = theight+2*buttonHeight+listmaxshow*fheight; // recalc height x = getScreenStartX (width); y = getScreenStartY (height); m_viewer->SetScaling((CPictureViewer::ScalingMode)g_settings.picviewer_scaling); m_viewer->SetVisible(g_settings.screen_StartX, g_settings.screen_EndX, g_settings.screen_StartY, g_settings.screen_EndY); if(g_settings.video_Format == CControldClient::VIDEOFORMAT_16_9) m_viewer->SetAspectRatio(16.0/9); else if(g_settings.video_Format == CControldClient::VIDEOFORMAT_AUTO) { g_Controld->setVideoFormat(CControldClient::VIDEOFORMAT_4_3); m_viewer->SetAspectRatio(4.0/3); } else m_viewer->SetAspectRatio(4.0/3); if(parent) { parent->hide(); } puts("[pictureviewer.cpp] executing " PICTUREVIEWER_START_SCRIPT "."); if (my_system(PICTUREVIEWER_START_SCRIPT) != 0) perror(PICTUREVIEWER_START_SCRIPT " failed"); // tell neutrino we're in pic_mode CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , NeutrinoMessages::mode_pic ); // remember last mode CZapitClient::responseGetLastChannel firstchannel; g_Zapit->getLastChannel(firstchannel.channelNumber, firstchannel.mode); if ((firstchannel.mode == 'r') ? (CNeutrinoApp::getInstance()->zapto_radio_on_init_done) : (CNeutrinoApp::getInstance()->zapto_tv_on_init_done)) m_LastMode=(CNeutrinoApp::getInstance()->getLastMode() | NeutrinoMessages::norezap); else m_LastMode=(CNeutrinoApp::getInstance()->getLastMode()); g_Sectionsd->setPauseScanning(true); show(); // free picviewer mem m_viewer->Cleanup(); puts("[pictureviewer.cpp] executing " PICTUREVIEWER_END_SCRIPT "."); if (my_system(PICTUREVIEWER_END_SCRIPT) != 0) perror(PICTUREVIEWER_END_SCRIPT " failed"); // Start Sectionsd g_Sectionsd->setPauseScanning(false); // Restore last mode CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , m_LastMode ); g_RCInput->postMsg( NeutrinoMessages::SHOW_INFOBAR, 0 ); // always exit all return menu_return::RETURN_EXIT_ALL; }
//------------------------------------------------------------------------ int CPictureViewerGui::exec(CMenuTarget* parent, const std::string & /*actionKey*/) { #ifdef EVOLUX CNeutrinoApp::getInstance()->chPSISetup->blankScreen(); #endif selected = 0; width = w_max (710, 0); height = h_max (570, 0); sheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); int icol_w, icol_h; theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); frameBuffer->getIconSize(NEUTRINO_ICON_MP3, &icol_w, &icol_h); theight = std::max(theight, icol_h); frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_HELP, &icol_w, &icol_h); theight = std::max(theight, icol_h); frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MENU, &icol_w, &icol_h); theight = std::max(theight, icol_h); frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_RED, &icol_w, &icol_h); buttonHeight = 8 + std::max(icol_h+2, sheight); //TODO get value from buttonbar fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); listmaxshow = (height-theight-2*buttonHeight)/(fheight); height = theight+2*buttonHeight+listmaxshow*fheight; // recalc height x=getScreenStartX( width ); y=getScreenStartY( height ); m_viewer->SetScaling((CPictureViewer::ScalingMode)g_settings.picviewer_scaling); m_viewer->SetVisible(g_settings.screen_StartX, g_settings.screen_EndX, g_settings.screen_StartY, g_settings.screen_EndY); if (g_settings.video_Format == 3) m_viewer->SetAspectRatio(16.0/9); else m_viewer->SetAspectRatio(4.0/3); if (parent) parent->hide(); // tell neutrino we're in pic_mode CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , NeutrinoMessages::mode_pic ); // remember last mode m_LastMode=(CNeutrinoApp::getInstance()->getLastMode() | NeutrinoMessages::norezap); //g_Zapit->setStandby(true); g_Zapit->lockPlayBack(); // blank background screen videoDecoder->setBlank(true); // Stop Sectionsd g_Sectionsd->setPauseScanning(true); // Save and Clear background bool usedBackground = frameBuffer->getuseBackground(); if (usedBackground) { frameBuffer->saveBackgroundImage(); frameBuffer->Clear(); } show(); // free picviewer mem m_viewer->Cleanup(); //g_Zapit->setStandby(false); g_Zapit->unlockPlayBack(); // Start Sectionsd g_Sectionsd->setPauseScanning(false); // Restore previous background if (usedBackground) { frameBuffer->restoreBackgroundImage(); frameBuffer->useBackground(true); frameBuffer->paintBackground(); } // Restore last mode CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , m_LastMode ); // always exit all #ifdef EVOLUX CNeutrinoApp::getInstance()->chPSISetup->blankScreen(false); #endif return menu_return::RETURN_REPAINT; }
/* bShowChannelList default to true, returns new bouquet or -1/-2 */ int CBouquetList::show(bool bShowChannelList) { neutrino_msg_t msg; neutrino_msg_data_t data; int res = -1; //if(Bouquets.size()==0) // return res; CVFD::getInstance()->setMode(CVFD::MODE_MENU_UTF8, ""); width = w_max (500, 0); height = h_max (440, 40); buttonHeight = 7 + std::min(16, g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()); theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); fheight = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight(); listmaxshow = (height - theight - buttonHeight)/fheight; height = theight + buttonHeight + listmaxshow * fheight; // recalc height x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2; y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - height) / 2; int maxpos= 1; int i= Bouquets.size(); while ((i= i/10)!=0) maxpos++; paintHead(); paint(); int oldselected = selected; int firstselected = selected+ 1; int zapOnExit = false; unsigned int chn= 0; int pos= maxpos; unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); bool loop=true; while (loop) { g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); if ( msg <= CRCInput::RC_MaxRC ) timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); if ((msg == CRCInput::RC_timeout ) || (msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) { selected = oldselected; loop=false; } else if(msg == CRCInput::RC_red || msg == CRCInput::RC_favorites) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_FAV); hide(); return -3; } else if(msg == CRCInput::RC_green) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_PROV); hide(); return -3; } else if(msg == CRCInput::RC_yellow || msg == CRCInput::RC_sat) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_SAT); hide(); return -3; } else if(msg == CRCInput::RC_blue) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_ALL); hide(); return -3; } else if(Bouquets.size() == 0) continue; //FIXME msgs not forwarded to neutrino !! else if ( msg == CRCInput::RC_setup) { int ret = doMenu(); if(ret) { res = -4; loop = false; } else paint(); } else if ( msg == (neutrino_msg_t) g_settings.key_list_start ) { selected=0; liststart = (selected/listmaxshow)*listmaxshow; paint(); } else if ( msg == (neutrino_msg_t) g_settings.key_list_end ) { selected=Bouquets.size()-1; liststart = (selected/listmaxshow)*listmaxshow; paint(); } else if (msg == CRCInput::RC_up || (int) msg == g_settings.key_channelList_pageup) { int step = 0; int prev_selected = selected; step = ((int) msg == g_settings.key_channelList_pageup) ? listmaxshow : 1; // browse or step 1 selected -= step; if((prev_selected-step) < 0) // because of uint selected = Bouquets.size()-1; paintItem(prev_selected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) paint(); else paintItem(selected - liststart); } else if (msg == CRCInput::RC_down || (int) msg == g_settings.key_channelList_pagedown) { unsigned int step = 0; int prev_selected = selected; step = ((int) msg == g_settings.key_channelList_pagedown) ? listmaxshow : 1; // browse or step 1 selected += step; if(selected >= Bouquets.size()) { if (((Bouquets.size() / listmaxshow) + 1) * listmaxshow == Bouquets.size() + listmaxshow) // last page has full entries selected = 0; else selected = ((step == listmaxshow) && (selected < (((Bouquets.size() / listmaxshow) + 1) * listmaxshow))) ? (Bouquets.size() - 1) : 0; } paintItem(prev_selected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) paint(); else paintItem(selected - liststart); } else if ( msg == CRCInput::RC_ok ) { if(!bShowChannelList || Bouquets[selected]->channelList->getSize() > 0) { zapOnExit = true; loop=false; } } else if (CRCInput::isNumeric(msg)) { if (pos == maxpos) { if (msg == CRCInput::RC_0) { chn = firstselected; pos = maxpos; } else { chn = CRCInput::getNumericValue(msg); pos = 1; } } else { chn = chn * 10 + CRCInput::getNumericValue(msg); pos++; } if (chn > Bouquets.size()) { chn = firstselected; pos = maxpos; } int prevselected=selected; selected = (chn - 1) % Bouquets.size(); // is % necessary (i.e. can firstselected be > Bouquets.size()) ? paintItem(prevselected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) { paint(); } else { paintItem(selected - liststart); } } else { if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { loop = false; res = -2; } }; } hide(); CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); if(zapOnExit) { return (selected); } else { return (res); } }
int CBEBouquetWidget::exec(CMenuTarget* parent, const std::string & /*actionKey*/) { neutrino_msg_t msg; neutrino_msg_data_t data; int res = menu_return::RETURN_REPAINT; if (parent) parent->hide(); width = w_max (500, 0); height = h_max (440, 50); listmaxshow = (height-theight-0)/fheight; height = theight+0+listmaxshow*fheight; // recalc height x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2; y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - height) / 2; Bouquets = &g_bouquetManager->Bouquets; paintHead(); paint(); paintFoot(); bouquetsChanged = false; uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]); bool loop=true; while (loop) { g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); if ( msg <= CRCInput::RC_MaxRC ) timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]); if ((msg == CRCInput::RC_timeout) || (msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) { if (state == beDefault) { if (bouquetsChanged) { int result = ShowLocalizedMessage(LOCALE_BOUQUETEDITOR_NAME, LOCALE_BOUQUETEDITOR_SAVECHANGES, CMessageBox::mbrYes, CMessageBox::mbAll); switch( result ) { case CMessageBox::mbrYes : loop=false; saveChanges(); break; case CMessageBox::mbrNo : loop=false; discardChanges(); break; case CMessageBox::mbrCancel : paintHead(); paint(); paintFoot(); break; } } else { loop = false; } } else if (state == beMoving) { cancelMoveBouquet(); } } // // -- For more convenience: include browsing of list (paging) (rasc, 2002-04-02) // -- The keys should be configurable. Problem is: red/green key, which is the // -- default in neutrino is used as a function key here... so use left/right // else if (msg==CRCInput::RC_up || msg==(neutrino_msg_t)g_settings.key_channelList_pageup) { if (!(Bouquets->empty())) { int step = 0; int prev_selected = selected; step = (msg == (neutrino_msg_t)g_settings.key_channelList_pageup) ? listmaxshow : 1; // browse or step 1 selected -= step; if((prev_selected-step) < 0) // because of uint { selected = Bouquets->size()-1; } if (state == beDefault) { paintItem(prev_selected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) { paint(); } else { paintItem(selected - liststart); } } else if (state == beMoving) { internalMoveBouquet(prev_selected, selected); } } } else if (msg==CRCInput::RC_down || msg==(neutrino_msg_t)g_settings.key_channelList_pagedown) { unsigned int step = 0; int prev_selected = selected; step = (msg == (neutrino_msg_t)g_settings.key_channelList_pagedown) ? listmaxshow : 1; // browse or step 1 selected += step; if(selected >= Bouquets->size()) { if (((Bouquets->size() / listmaxshow) + 1) * listmaxshow == Bouquets->size() + listmaxshow) // last page has full entries selected = 0; else selected = ((step == listmaxshow) && (selected < (((Bouquets->size() / listmaxshow) + 1) * listmaxshow))) ? (Bouquets->size() - 1) : 0; } if (state == beDefault) { paintItem(prev_selected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) { paint(); } else { paintItem(selected - liststart); } } else if (state == beMoving) { internalMoveBouquet(prev_selected, selected); } } else if(msg==CRCInput::RC_red) { if (state == beDefault) deleteBouquet(); } else if(msg==CRCInput::RC_green) { if (state == beDefault) addBouquet(); } else if(msg==CRCInput::RC_yellow) { if (selected < Bouquets->size()) /* Bouquets->size() might be 0 */ { liststart = (selected/listmaxshow)*listmaxshow; if (state == beDefault) beginMoveBouquet(); paintItem(selected - liststart); } } else if(msg==CRCInput::RC_blue) { if (selected < Bouquets->size()) /* Bouquets->size() might be 0 */ { if (state == beDefault) switch (blueFunction) { case beRename: renameBouquet(); break; case beHide: switchHideBouquet(); break; case beLock: switchLockBouquet(); break; } } } else if(msg==CRCInput::RC_setup) { if (state == beDefault) switch (blueFunction) { case beRename: blueFunction = beHide; break; case beHide: blueFunction = beLock; break; case beLock: blueFunction = beRename; break; } paintFoot(); } else if(msg==CRCInput::RC_ok) { if (state == beDefault) { if (selected < Bouquets->size()) /* Bouquets->size() might be 0 */ { //CBEChannelWidget* channelWidget = new CBEChannelWidget((*Bouquets)[selected]->Name, selected); CBEChannelWidget* channelWidget = new CBEChannelWidget((*Bouquets)[selected]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : (*Bouquets)[selected]->Name, selected); channelWidget->exec( this, ""); if (channelWidget->hasChanged()) bouquetsChanged = true; delete channelWidget; paintHead(); paint(); paintFoot(); } } else if (state == beMoving) { finishMoveBouquet(); } } else if( CRCInput::isNumeric(msg) ) { if (state == beDefault) { //kein pushback - wenn man versehentlich wo draufkommt is die edit-arbeit umsonst //selected = oldselected; //g_RCInput->postMsg( msg, data ); //loop=false; } else if (state == beMoving) { cancelMoveBouquet(); } } else { CNeutrinoApp::getInstance()->handleMsg( msg, data ); // kein canceling... } } hide(); return res; }
int CUpnpBrowserGui::exec(CMenuTarget* parent, const std::string & /*actionKey*/) { CAudioPlayer::getInstance()->init(); if(parent) { parent->hide(); } if(g_settings.video_Format != CControldClient::VIDEOFORMAT_4_3) g_Controld->setVideoFormat(CControldClient::VIDEOFORMAT_4_3); #ifdef HAVE_DBOX_HARDWARE // If Audiomode is OST then save setting and switch to AVS-Mode if(g_settings.audio_avs_Control == CControld::TYPE_OST) { m_vol_ost = true; g_settings.audio_avs_Control = CControld::TYPE_AVS; } else #endif m_vol_ost = false; // tell neutrino we're in audio mode CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , NeutrinoMessages::mode_audio ); // remember last mode CZapitClient::responseGetLastChannel firstchannel; g_Zapit->getLastChannel(firstchannel.channelNumber, firstchannel.mode); if ((firstchannel.mode == 'r') ? (CNeutrinoApp::getInstance()->zapto_radio_on_init_done) : (CNeutrinoApp::getInstance()->zapto_tv_on_init_done)) m_LastMode=(CNeutrinoApp::getInstance()->getLastMode() | NeutrinoMessages::norezap); else m_LastMode=(CNeutrinoApp::getInstance()->getLastMode()); // set zapit in standby mode g_Zapit->setStandby(true); m_width = w_max(710, ConnectLineBox_Width); m_height = h_max(570, 0); m_sheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); m_buttonHeight = std::min(25, m_sheight); m_frameBuffer->getIconSize(NEUTRINO_ICON_UPNP, &m_ticonwidth, &m_ticonheight); m_theight = std::max(m_ticonheight, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight()); m_mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); m_fheight = g_Font[SNeutrinoSettings::FONT_TYPE_FILEBROWSER_ITEM]->getHeight(); m_title_height = m_mheight*2 + 20 + m_sheight + 4; m_info_height = m_mheight*2; m_listmaxshow = (m_height - m_info_height - m_title_height - m_theight - 2*m_buttonHeight) / (m_fheight); m_height = m_theight + m_info_height + m_title_height + 2*m_buttonHeight + m_listmaxshow * m_fheight; // recalc height m_x = getScreenStartX(m_width + ConnectLineBox_Width) + ConnectLineBox_Width; m_y = getScreenStartY(m_height); // Stop sectionsd g_Sectionsd->setPauseScanning(true); #ifdef HAVE_DBOX_HARDWARE // disable iec aka digi out g_Zapit->IecOff(); #endif m_indexdevice=0; m_selecteddevice=0; selectDevice(); if(CAudioPlayer::getInstance()->getState() != CBaseDec::STOP) CAudioPlayer::getInstance()->stop(); g_Zapit->setStandby(false); #ifdef HAVE_DBOX_HARDWARE if(m_vol_ost) { g_Controld->setVolume(100, CControld::TYPE_AVS); g_settings.audio_avs_Control = CControld::TYPE_OST; } #endif // Start Sectionsd g_Sectionsd->setPauseScanning(false); #ifdef HAVE_DBOX_HARDWARE // enable iec aka digi out g_Zapit->IecOn(); #endif CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , m_LastMode ); g_RCInput->postMsg( NeutrinoMessages::SHOW_INFOBAR, 0 ); return menu_return::RETURN_EXIT_ALL; }
const CBookmark * CBookmarkManager::getBookmark(CMenuTarget* parent) { if(parent) { parent->hide(); } frameBuffer = CFrameBuffer::getInstance(); visible = false; selected = 0; width = w_max (720, 30); int iconw = 0, iconh = 0; frameBuffer->getIconSize(NEUTRINO_ICON_BOOKMARKMANAGER, &ticonwidth, &ticonheight); theight = std::max(ticonheight, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight()); fheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_OKAY, &iconw, &iconh); footHeight = std::max(iconh, g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()); liststart = 0; height = h_max(576, 50); listmaxshow = (height-theight-footHeight-0)/(fheight*2); height = theight+footHeight+0+listmaxshow*fheight*2; // recalc height if(bookmarks.size() < listmaxshow) { listmaxshow=bookmarks.size(); height = theight+footHeight+0+listmaxshow*fheight*2; // recalc height } if (!bookmarks.empty() && selected==bookmarks.size()) { selected=bookmarks.size()-1; liststart = (selected/listmaxshow)*listmaxshow; } x = getScreenStartX (width); y = getScreenStartY (height); int res = -1; unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU]); neutrino_msg_t msg; neutrino_msg_data_t data; bool loop=true; bool update=true; while(loop) { if(update) { hide(); update=false; paint(); } g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); neutrino_msg_t msg_repeatok = msg & ~CRCInput::RC_Repeat; if( msg <= CRCInput::RC_MaxRC ) timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU]); if( ( msg == CRCInput::RC_timeout ) || ( msg == CRCInput::RC_home) ) { //Exit after timeout or cancel key res = -1; loop=false; } else if ((msg_repeatok == CRCInput::RC_up || msg_repeatok == g_settings.key_channelList_pageup) && !(bookmarks.empty())) { int step = (msg_repeatok == g_settings.key_channelList_pageup) ? listmaxshow : 1; // browse or step 1 int new_selected = selected - step; if (new_selected < 0) new_selected = bookmarks.size() - 1; updateSelection(new_selected); } else if ((msg_repeatok == CRCInput::RC_down || msg_repeatok == g_settings.key_channelList_pagedown) && !(bookmarks.empty())) { unsigned int step = (msg_repeatok == g_settings.key_channelList_pagedown) ? listmaxshow : 1; // browse or step 1 unsigned int new_selected = selected + step; unsigned int b_size = bookmarks.size(); if (new_selected >= b_size) { if ((b_size / listmaxshow + 1) * listmaxshow == b_size + listmaxshow) // last page has full entries new_selected = 0; else new_selected = ((step == listmaxshow) && (new_selected < ((b_size / listmaxshow + 1) * listmaxshow))) ? (b_size - 1) : 0; } updateSelection(new_selected); } else if ((msg == CRCInput::RC_ok) && !(bookmarks.empty())) { res = selected; loop=false; } else if((msg == CRCInput::RC_red) && !(bookmarks.empty())) { removeBookmark(selected); update=true; } else if((msg==CRCInput::RC_yellow) && !(bookmarks.empty())) { renameBookmark(selected); update=true; } else if((msg==CRCInput::RC_blue)||(msg==CRCInput::RC_green)|| (CRCInput::isNumeric(msg)) ) { //Ignore } else if(msg==CRCInput::RC_setup) { res=-1; loop=false; } else if( msg == CRCInput::RC_help ) { // TODO Add Help } else { if( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { loop = false; res = -1; } } } hide(); if ((res >=0) && (((unsigned int)res) < bookmarks.size())) return &bookmarks[res]; else return NULL; }
int CWebTV::Show() { int res = -1; neutrino_msg_t msg; neutrino_msg_data_t data; if(channels.empty()) loadChannels(); // display channame in vfd CVFD::getInstance()->setMode(CVFD::MODE_IPTV); // windows size width = w_max ( (frameBuffer->getScreenWidth() / 20 * 17), (frameBuffer->getScreenWidth() / 20 )); height = h_max ( (frameBuffer->getScreenHeight() / 20 * 16), (frameBuffer->getScreenHeight() / 20)); // head height frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_HELP, &icon_hd_w, &icon_hd_h); theight = std::max(icon_hd_h, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight()) + 6; // buttonheight frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_RED, &icon_bf_w, &icon_bf_h); buttonHeight = std::max(icon_bf_h, g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()) + 6; // listbox/items iheight = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight() + 2; listmaxshow = (height - theight - buttonHeight)/iheight; height = theight + buttonHeight + listmaxshow * iheight; // info height info_height = 5 + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight() + 5 + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->getHeight() + 5; // x/y x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - (width + ConnectLineBox_Width)) / 2 + ConnectLineBox_Width; y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - (height + info_height)) / 2; showList: // head paintHead(); // foot paintFoot(); // paint all paint(); frameBuffer->blit(); oldselected = selected; int zapOnExit = false; // loop control unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); bool loop = true; while (loop) { g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd ); if ( msg <= CRCInput::RC_MaxRC ) timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); if ( ( msg == CRCInput::RC_timeout ) || ( msg == (neutrino_msg_t)g_settings.key_channelList_cancel) ) { selected = oldselected; loop = false; res = -1; } else if ( msg == CRCInput::RC_up || (int) msg == g_settings.key_channelList_pageup || msg == CRCInput::RC_yellow) { int step = 0; int prev_selected = selected; step = ((int) msg == g_settings.key_channelList_pageup || (int) msg == CRCInput::RC_yellow) ? listmaxshow : 1; // browse or step 1 selected -= step; if((prev_selected-step) < 0) // because of uint selected = channels.size() - 1; paintItem(prev_selected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) paint(); else paintItem(selected - liststart); } else if ( msg == CRCInput::RC_down || (int) msg == g_settings.key_channelList_pagedown || msg == CRCInput::RC_green) { unsigned int step = 0; int prev_selected = selected; step = ((int) msg == g_settings.key_channelList_pagedown || (int)msg == CRCInput::RC_green) ? listmaxshow : 1; // browse or step 1 selected += step; if(selected >= channels.size()) { if (((channels.size() / listmaxshow) + 1) * listmaxshow == channels.size() + listmaxshow) // last page has full entries selected = 0; else selected = ((step == listmaxshow) && (selected < (((channels.size() / listmaxshow)+1) * listmaxshow))) ? (channels.size() - 1) : 0; } paintItem(prev_selected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart != liststart) paint(); else paintItem(selected - liststart); } else if ( msg == CRCInput::RC_ok || msg == (neutrino_msg_t) g_settings.mpkey_play) { zapOnExit = true; loop = false; } else if (msg == CRCInput::RC_info) { showFileInfoWebTV(selected); res = -1; goto showList; } else if (msg == CRCInput::RC_red) { addUserBouquet(); res = -1; goto showList; } else if(msg == CRCInput::RC_blue || msg == CRCInput::RC_favorites) { showUserBouquet(); res = -1; goto showList; } else if( msg == (neutrino_msg_t) g_settings.key_timeshift) // pause playing { if(playstate == PAUSE) continuePlayBack(); else if(playstate == PLAY) pausePlayBack(); res = -1; loop = false; } else if( msg == CRCInput::RC_stop) // pause playing { if(playstate == PLAY || playstate == PAUSE) stopPlayBack(); res = -1; loop = false; } else if(msg == (neutrino_msg_t)g_settings.mpkey_play) { if(playstate == PAUSE) continuePlayBack(); res = -1; loop = false; } else { if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { loop = false; res = - 1; } } frameBuffer->blit(); } hide(); //CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); if(zapOnExit) res = selected; printf("CWebTV::show res %d\n", res); return (res); }
/* bShowChannelList default to true, returns new bouquet or -1/-2 */ int CBouquetList::show(bool bShowChannelList) { neutrino_msg_t msg; neutrino_msg_data_t data; int res = CHANLIST_CANCEL; int icol_w, icol_h; int w_max_text = 0; int w_max_icon = 0; int h_max_icon = 0; favonly = !bShowChannelList; for(unsigned int count = 0; count < sizeof(CBouquetListButtons)/sizeof(CBouquetListButtons[0]);count++){ int w_text = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getRenderWidth(g_Locale->getText(CBouquetListButtons[count].locale)); w_max_text = std::max(w_max_text, w_text); frameBuffer->getIconSize(CBouquetListButtons[count].button, &icol_w, &icol_h); w_max_icon = std::max(w_max_icon, icol_w); h_max_icon = std::max(h_max_icon, icol_h); } int need_width = sizeof(CBouquetListButtons)/sizeof(CBouquetListButtons[0])*(w_max_icon + w_max_text + 20); CVFD::getInstance()->setMode(CVFD::MODE_MENU_UTF8, ""); fheight = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]->getHeight(); width = w_max (need_width, 20); height = h_max (16 * fheight, 40); footerHeight = std::max(h_max_icon+8, g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()+8); theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); listmaxshow = (height - theight - footerHeight)/fheight; height = theight + footerHeight + listmaxshow * fheight; // recalc height x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2; y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - height) / 2; int lmaxpos= 1; int i= Bouquets.size(); while ((i= i/10)!=0) lmaxpos++; COSDFader fader(g_settings.theme.menu_Content_alpha); fader.StartFadeIn(); paintHead(); paint(); frameBuffer->blit(); int oldselected = selected; int firstselected = selected+ 1; int zapOnExit = false; unsigned int chn= 0; int pos= lmaxpos; uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); bool loop=true; while (loop) { g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); if ( msg <= CRCInput::RC_MaxRC ) timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); if((msg == NeutrinoMessages::EVT_TIMER) && (data == fader.GetFadeTimer())) { if(fader.FadeDone()) loop = false; } else if ((msg == CRCInput::RC_timeout ) || (msg == (neutrino_msg_t)g_settings.key_channelList_cancel) || ((msg == CRCInput::RC_favorites) && (CNeutrinoApp::getInstance()->GetChannelMode() == LIST_MODE_FAV))) { selected = oldselected; if(fader.StartFadeOut()) { timeoutEnd = CRCInput::calcTimeoutEnd( 1 ); msg = 0; } else loop=false; } else if(msg == CRCInput::RC_red || msg == CRCInput::RC_favorites) { if (!favonly && CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_FAV) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_FAV); hide(); return CHANLIST_CHANGE_MODE; } } else if(msg == CRCInput::RC_green) { if (!favonly && CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_PROV) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_PROV); hide(); return CHANLIST_CHANGE_MODE; } } else if(msg == CRCInput::RC_yellow || msg == CRCInput::RC_sat) { if(!favonly && bShowChannelList && CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_SAT) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_SAT); hide(); return CHANLIST_CHANGE_MODE; } } else if(msg == CRCInput::RC_blue) { if(!favonly && bShowChannelList && CNeutrinoApp::getInstance()->GetChannelMode() != LIST_MODE_ALL) { CNeutrinoApp::getInstance()->SetChannelMode(LIST_MODE_ALL); hide(); return CHANLIST_CHANGE_MODE; } } else if ( msg == CRCInput::RC_setup) { if (!favonly && !Bouquets.empty()) { int ret = doMenu(); if(ret > 0) { res = CHANLIST_NO_RESTORE; loop = false; } else if(ret < 0) { paintHead(); paint(); } } } else if ( msg == (neutrino_msg_t) g_settings.key_list_start ) { if (!Bouquets.empty()) updateSelection(0); } else if ( msg == (neutrino_msg_t) g_settings.key_list_end ) { if (!Bouquets.empty()) updateSelection(Bouquets.size()-1); } else if (msg == CRCInput::RC_up || (int) msg == g_settings.key_pageup || msg == CRCInput::RC_down || (int) msg == g_settings.key_pagedown) { int new_selected = UpDownKey(Bouquets, msg, listmaxshow, selected); updateSelection(new_selected); } else if(msg == (neutrino_msg_t)g_settings.key_bouquet_up || msg == (neutrino_msg_t)g_settings.key_bouquet_down) { if(bShowChannelList) { int mode = CNeutrinoApp::getInstance()->GetChannelMode(); mode += (msg == (neutrino_msg_t)g_settings.key_bouquet_down) ? -1 : 1; if(mode < 0) mode = LIST_MODE_LAST - 1; else if(mode >= LIST_MODE_LAST) mode = 0; CNeutrinoApp::getInstance()->SetChannelMode(mode); hide(); return CHANLIST_CHANGE_MODE; } } else if ( msg == CRCInput::RC_ok ) { if(!Bouquets.empty() /* && (!bShowChannelList || !Bouquets[selected]->channelList->isEmpty())*/) { zapOnExit = true; loop=false; } } else if (CRCInput::isNumeric(msg)) { if (!Bouquets.empty()) { if (pos == lmaxpos) { if (msg == CRCInput::RC_0) { chn = firstselected; pos = lmaxpos; } else { chn = CRCInput::getNumericValue(msg); pos = 1; } } else { chn = chn * 10 + CRCInput::getNumericValue(msg); pos++; } if (chn > Bouquets.size()) { chn = firstselected; pos = lmaxpos; } int new_selected = (chn - 1) % Bouquets.size(); // is % necessary (i.e. can firstselected be > Bouquets.size()) ? updateSelection(new_selected); } } else if (msg == NeutrinoMessages::EVT_SERVICESCHANGED || msg == NeutrinoMessages::EVT_BOUQUETSCHANGED) { g_RCInput->postMsg(msg, data); loop = false; res = CHANLIST_CANCEL_ALL; } else if (msg > CRCInput::RC_MaxRC) { if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { loop = false; res = CHANLIST_CANCEL_ALL; } } frameBuffer->blit(); } hide(); fader.StopFade(); CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); if (save_bouquets) { save_bouquets = false; #if 0 if (CNeutrinoApp::getInstance()->GetChannelMode() == LIST_MODE_FAV) g_bouquetManager->saveUBouquets(); else g_bouquetManager->saveBouquets(); #endif if (g_settings.epg_scan == CEpgScan::SCAN_SEL) CEpgScan::getInstance()->Start(); } if(zapOnExit) return (selected); return (res); }
void CDBoxInfoWidget::paint() { const int headSize = 5; const char *head[headSize] = {"Filesystem", "Size", "Used", "Available", "Use%"}; int fontWidth = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getWidth(); int sizeOffset = fontWidth * 7;//9999.99M int percOffset = fontWidth * 3 ;//100% int nameOffset = fontWidth * 9;//WWWwwwwwww int offsetw = nameOffset+ (sizeOffset+10)*3 +10+percOffset+10; offsetw += 20; width = offsetw + 10 + 120; height = hheight + 6 * mheight; struct statfs s; FILE * mountFile; struct mntent * mnt; /* this is lame, as it duplicates code. OTOH, it is small and fast enough... The algorithm is exactly the same as below in the display routine */ if ((mountFile = setmntent("/proc/mounts", "r")) == NULL) { perror("/proc/mounts"); } else { while ((mnt = getmntent(mountFile)) != NULL) { if (::statfs(mnt->mnt_dir, &s) == 0) { switch (s.f_type) /* f_type is long */ { case 0xEF53L: /*EXT2 & EXT3*/ case 0x6969L: /*NFS*/ case 0xFF534D42L: /*CIFS*/ case 0x517BL: /*SMB*/ case 0x52654973L: /*REISERFS*/ case 0x65735546L: /*fuse for ntfs*/ case 0x58465342L: /*xfs*/ case 0x4d44L: /*msdos*/ break; case 0x72b6L: /*jffs2*/ if (strcmp(mnt->mnt_fsname, "rootfs") == 0) continue; height += mheight; break; default: continue; } height += mheight; } } endmntent(mountFile); } width = w_max(width, 0); height = h_max(height, 0); x = getScreenStartX(width); y = getScreenStartY(height); fprintf(stderr, "CDBoxInfoWidget::CDBoxInfoWidget() x = %d, y = %d, width = %d height = %d\n", x, y, width, height); int ypos=y; int i = 0; frameBuffer->paintBoxRel(x, ypos, width, hheight, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP); frameBuffer->paintBoxRel(x, ypos+ hheight, width, height- hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); ypos+= hheight + (mheight >>1); FILE* fd = fopen("/proc/cpuinfo", "rt"); if (fd==NULL) { printf("error while opening proc-cpuinfo\n" ); } else { char *buffer=NULL; size_t len = 0; ssize_t read; while ((read = getline(&buffer, &len, fd)) != -1) { if (!(strncmp(const_cast<char *>("Hardware"),buffer,8))) { char *t=rindex(buffer,'\n'); if (t) *t='\0'; std::string hw; char *p=rindex(buffer,':'); if (p) hw=++p; hw+=" Info"; g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10, y + hheight+1, width - 10, hw.c_str(), COL_MENUHEAD, 0, true); // UTF-8 break; } i++; if (i > 2) continue; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width - 10, buffer, COL_MENUCONTENT); ypos+= mheight; } fclose(fd); if (buffer) free(buffer); } char *ubuf=NULL, *sbuf=NULL; int buf_size=256; ubuf = new char[buf_size]; sbuf = new char[buf_size]; if (sbuf != NULL && ubuf != NULL) { int updays, uphours, upminutes; struct sysinfo info; struct tm *current_time; time_t current_secs; memset(sbuf, 0, 256); time(¤t_secs); current_time = localtime(¤t_secs); sysinfo(&info); snprintf( ubuf,buf_size, "%2d:%02d%s up ", current_time->tm_hour%12 ? current_time->tm_hour%12 : 12, current_time->tm_min, current_time->tm_hour > 11 ? "pm" : "am"); strcat(sbuf, ubuf); updays = (int) info.uptime / (60*60*24); if (updays) { snprintf(ubuf,buf_size, "%d day%s, ", updays, (updays != 1) ? "s" : ""); strcat(sbuf, ubuf); } upminutes = (int) info.uptime / 60; uphours = (upminutes / 60) % 24; upminutes %= 60; if (uphours) snprintf(ubuf,buf_size,"%2d:%02d, ", uphours, upminutes); else snprintf(ubuf,buf_size,"%d min, ", upminutes); strcat(sbuf, ubuf); snprintf(ubuf,buf_size, "load: %ld.%02ld, %ld.%02ld, %ld.%02ld\n", LOAD_INT(info.loads[0]), LOAD_FRAC(info.loads[0]), LOAD_INT(info.loads[1]), LOAD_FRAC(info.loads[1]), LOAD_INT(info.loads[2]), LOAD_FRAC(info.loads[2])); strcat(sbuf, ubuf); ypos+= mheight/2; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width - 10, sbuf, COL_MENUCONTENT); ypos+= mheight; snprintf(ubuf,buf_size, "memory total %dKb, free %dKb", (int) info.totalram/1024, (int) info.freeram/1024); ypos+= mheight/2; g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ 10, ypos+ mheight, width - 10, ubuf, COL_MENUCONTENT); ypos+= mheight; int headOffset=0; int mpOffset=0; bool rec_mp=false; if ((mountFile = setmntent("/proc/mounts", "r")) == 0 ) { perror("/proc/mounts"); } else { float gb=0; char c=' '; while ((mnt = getmntent(mountFile)) != 0) { if (::statfs(mnt->mnt_dir, &s) == 0) { switch (s.f_type) { case (int) 0xEF53: /*EXT2 & EXT3*/ case (int) 0x6969: /*NFS*/ case (int) 0xFF534D42: /*CIFS*/ case (int) 0x517B: /*SMB*/ case (int) 0x52654973: /*REISERFS*/ case (int) 0x65735546: /*fuse for ntfs*/ case (int) 0x58465342: /*xfs*/ case (int) 0x4d44: /*msdos*/ gb = 1024.0*1024.0; c = 'G'; break; case (int) 0x72b6: /*jffs2*/ if (strcmp(mnt->mnt_fsname, "rootfs") == 0) continue; // paint mount head for (int j = 0; j < headSize; j++) { switch (j) { case 0: headOffset = 10; break; case 1: headOffset = nameOffset + 20; break; case 2: headOffset = nameOffset + sizeOffset+10 +20; break; case 3: headOffset = nameOffset + (sizeOffset+10)*2+15; break; case 4: headOffset = nameOffset + (sizeOffset+10)*3+15; break; } g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ headOffset, ypos+ mheight, width - 10, head[j], COL_MENUCONTENTINACTIVE); } ypos+= mheight; gb = 1024.0; c = 'M'; break; default: continue; } if ( s.f_blocks > 0 ) { long blocks_used; long blocks_percent_used; blocks_used = s.f_blocks - s.f_bfree; blocks_percent_used = (long)(blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); //paint mountpoints for (int j = 0; j < headSize; j++) { switch (j) { case 0: { if (s.f_type != 0x72b6) { char *p1=NULL, *p2=NULL; p1=strchr(g_settings.network_nfs_recordingdir+1,'/') ; p2=strchr(mnt->mnt_dir+1,'/') ; if (p2) { if (strstr(p1,p2)) { rec_mp = true; } } else { if (strstr(g_settings.network_nfs_recordingdir,mnt->mnt_dir)) { rec_mp = true; } } } mpOffset = 10; snprintf(ubuf,buf_size,"%-10.10s",basename(mnt->mnt_fsname)); } break; case 1: mpOffset = nameOffset + 10; snprintf(ubuf,buf_size,"%7.2f%c", (s.f_blocks * (s.f_bsize / 1024.0)) / gb, c); break; case 2: mpOffset = nameOffset+ (sizeOffset+10)*1+10; snprintf(ubuf,buf_size,"%7.2f%c", ((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)) / gb, c); break; case 3: mpOffset = nameOffset+ (sizeOffset+10)*2+10; snprintf(ubuf,buf_size,"%7.2f%c", s.f_bavail * (s.f_bsize / 1024.0) / gb, c); break; case 4: mpOffset = nameOffset+ (sizeOffset+10)*3+10; snprintf(ubuf,buf_size,"%4ld%c", blocks_percent_used,'%'); break; } g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x + mpOffset, ypos+ mheight, width - 10, ubuf, rec_mp ? COL_MENUHEAD+2:COL_MENUCONTENT); rec_mp = false; } int pbw = width - offsetw - 10; //fprintf(stderr, "width: %d offsetw: %d pbw: %d\n", width, offsetw, pbw); if (pbw > 8) /* smaller progressbar is not useful ;) */ { CProgressBar pb(true, -1, -1, 30, 100, 70, true); pb.paintProgressBarDefault(x+offsetw, ypos+3, pbw, mheight-10, blocks_percent_used, 100); } ypos+= mheight; } i++; } if (ypos > y + height - mheight) /* the screen is not high enough */ break; /* todo: scrolling? */ } endmntent(mountFile); } } if (sbuf) delete[] sbuf; if (ubuf) delete[] ubuf; }
void CDBoxInfoWidget::paint() { const int head_info_lines = 3; const char *head_info[head_info_lines] = {"Uptime", "Load average", "Current load"}; height = hheight; height += mheight/2; // space int cpuload_y0 = height; int head_info_ypos = height; height += mheight*head_info_lines; // head info lines int cpuload_y1 = height; height += mheight/2; // space int icon_w = 0, icon_h = 0; frameBuffer->getIconSize(NEUTRINO_ICON_REC, &icon_w, &icon_h); #define MEMINFO_TOTAL 0 #define MEMINFO_USED 1 #define MEMINFO_FREE 2 #define MEMINFO_COLUMNS 3 #define MEMINFO_RAM 0 #define MEMINFO_SWAP 1 #define MEMINFO_ROWS 2 unsigned long memstat[MEMINFO_ROWS][MEMINFO_COLUMNS] = { { 0, 0, 0 }, { 0, 0, 0 } }; // total, used, free const char *memtype[MEMINFO_ROWS] = { "RAM", "Swap" }; FILE *procmeminfo = fopen("/proc/meminfo", "r"); if (procmeminfo) { char buf[80], a[80]; unsigned long v; while (fgets(buf, sizeof(buf), procmeminfo)) { if (2 == sscanf(buf, "%[^:]: %lu", a, &v)) { if (!strcasecmp(a, "MemTotal")) memstat[MEMINFO_RAM][MEMINFO_TOTAL] += v; else if (!strcasecmp(a, "MemFree")) memstat[MEMINFO_RAM][MEMINFO_FREE] += v; else if (!strcasecmp(a, "Inactive")) memstat[MEMINFO_RAM][MEMINFO_FREE] += v; else if (!strcasecmp(a, "SwapTotal")) memstat[MEMINFO_SWAP][MEMINFO_TOTAL] = v; else if (!strcasecmp(a, "SwapFree")) memstat[MEMINFO_SWAP][MEMINFO_FREE] += v; } } fclose(procmeminfo); } bool have_swap = memstat[MEMINFO_SWAP][MEMINFO_TOTAL]; height += mheight; // header height += mheight; // ram height += have_swap * mheight; // swap height += mheight/2; // space std::ifstream in; std::map<std::string,bool> mounts; in.open("/proc/mounts"); if (in.is_open()) { struct stat rec_st; struct statfs s; if (stat(g_settings.network_nfs_recordingdir.c_str(), &rec_st) || (!::statfs(g_settings.network_nfs_recordingdir.c_str(), &s) && ((s.f_type == 0x72b6) || (s.f_type == 0x5941ff53)))) memset(&rec_st, 0, sizeof(rec_st)); std::map<dev_t,std::string> seen; std::string line; while (getline(in, line)) { size_t firstslash = line.find_first_of('/'); size_t firstspace = line.find_first_of(' '); if ( (firstspace != string::npos && firstslash != string::npos && firstslash < firstspace) || (line.find("rootfs") == 0) ) { firstspace++; size_t nextspace = line.find_first_of(' ', firstspace); if (nextspace == string::npos || line.find("nodev", nextspace + 1) != string::npos) continue; std::string mountpoint = line.substr(firstspace, nextspace - firstspace); struct stat st; if (stat(mountpoint.c_str(), &st) || (seen.find(st.st_dev) != seen.end())) continue; seen[st.st_dev] = mountpoint; bool is_rec = (st.st_dev == rec_st.st_dev); mounts[mountpoint] = is_rec; int icon_space = is_rec ? 10 + icon_w : 0; const char *mnt = mountpoint.c_str(); nameWidth = std::max(nameWidth, g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(basename((char *)mnt), true) + icon_space + 10); } } in.close(); } height += mheight; // header height += mounts.size() * mheight; // file systems height += mheight/2; // space int offsetw = nameWidth+ (sizeWidth+10)*3 +10+percWidth+10; width = offsetw + 10 + 120; int diff = frameBuffer->getScreenWidth() - width; if (diff < 0) { width += diff; offsetw += diff; nameWidth += diff; } height = h_max(height, 0); x = getScreenStartX(width); y = getScreenStartY(height); // fprintf(stderr, "CDBoxInfoWidget::CDBoxInfoWidget() x = %d, y = %d, width = %d height = %d\n", x, y, width, height); int ypos=y; //paint head std::string title(g_Locale->getText(LOCALE_EXTRA_DBOXINFO)); std::map<std::string,std::string> cpuinfo; in.open("/proc/cpuinfo"); if (in.is_open()) { std::string line; while (getline(in, line)) { size_t colon = line.find_first_of(':'); if (colon != string::npos && colon > 1) { std::string key = line.substr(0, colon - 1); std::string val = line.substr(colon + 1); cpuinfo[trim(key)] = trim(val); } } in.close(); } if (!cpuinfo["Hardware"].empty()) { title += ": "; title += cpuinfo["Hardware"]; } else if (!cpuinfo["machine"].empty()) { title += ": "; title + cpuinfo["machine"]; } CComponentsHeader header(x, ypos, width, hheight, title, NEUTRINO_ICON_SHELL); header.paint(CC_SAVE_SCREEN_NO); //paint body frameBuffer->paintBoxRel(x, ypos+ hheight, width, height- hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); ypos += hheight + mheight/2; int head_info_rw = 0; for (int line = 0; line < head_info_lines; line++) { head_info_rw = std::max(head_info_rw, g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(head_info[line], true)); } int dw = offsetw - 3*10 - head_info_rw; int buf_size=256; char ubuf[buf_size]; char sbuf[buf_size]; memset(sbuf, 0, 256); struct sysinfo info; sysinfo(&info); //get uptime #if 0 struct tm *current_time; time_t current_secs; time(¤t_secs); current_time = localtime(¤t_secs); snprintf( ubuf,buf_size, "%02d:%02d%s up ", current_time->tm_hour%12 ? current_time->tm_hour%12 : 12, current_time->tm_min, current_time->tm_hour > 11 ? "pm" : "am"); strcat(sbuf, ubuf); #endif int updays, uphours, upminutes; updays = (int) info.uptime / (60*60*24); upminutes = (int) info.uptime / 60; uphours = (upminutes / 60) % 24; upminutes %= 60; if (updays) { snprintf(ubuf,buf_size, "%d day%s, ", updays, (updays != 1) ? "s" : ""); strcat(sbuf, ubuf); } if (uphours) { snprintf(ubuf,buf_size,"%d hour%s, ", uphours, (uphours != 1) ? "s" : ""); strcat(sbuf, ubuf); } snprintf(ubuf,buf_size,"%d minute%s", upminutes, (upminutes != 1) ? "s" : ""); strcat(sbuf, ubuf); //paint uptime g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x + 2*10 + head_info_rw, ypos+ mheight, dw, sbuf, COL_MENUCONTENT_TEXT); ypos += mheight; //get load avg snprintf(ubuf,buf_size, "%ld.%02ld, %ld.%02ld, %ld.%02ld", LOAD_INT(info.loads[0]), LOAD_FRAC(info.loads[0]), LOAD_INT(info.loads[1]), LOAD_FRAC(info.loads[1]), LOAD_INT(info.loads[2]), LOAD_FRAC(info.loads[2])); //paint load avg g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x + 2*10 + head_info_rw, ypos+ mheight, dw, ubuf, COL_MENUCONTENT_TEXT); ypos += mheight; //get current load cSysLoad *sysload = cSysLoad::getInstance(); int data_last = sysload->data_last; //paint current load if (data_last > -1) { snprintf(ubuf, sizeof(ubuf), "%d%s%d%%", data_last/10, g_Locale->getText(LOCALE_UNIT_DECIMAL), data_last%10); g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x + 2*10 + head_info_rw, ypos+ mheight, dw, ubuf, COL_MENUCONTENT_TEXT); } ypos += mheight; int pbw = width - offsetw - 10; if (pbw > 8) /* smaller progressbar is not useful ;) */ { unsigned int h = cpuload_y1 - cpuload_y0; cpuload_y0 += y; cpuload_y1 += y; frameBuffer->paintBoxRel(x + offsetw, cpuload_y0, pbw, h, COL_MENUCONTENT_PLUS_2); int off = std::max(0, (int)sysload->data_avail - pbw); for (unsigned int i = 0; i < sysload->data_avail - off; i++) { if (sysload->data[i + off] > -1) frameBuffer->paintVLine(x+offsetw + i, cpuload_y1 - sysload->data[i + off] * h / 1000, cpuload_y1, COL_MENUCONTENT_PLUS_7); } } ypos += mheight/2; int headOffset=0; int mpOffset=0; int offsets[] = { 10, nameWidth + 10, nameWidth + 10 + (sizeWidth+10)*1, nameWidth + 10 + (sizeWidth+10)*2, nameWidth + 10 + (sizeWidth+10)*3, }; int widths[] = { 0, sizeWidth, sizeWidth, sizeWidth, percWidth }; const int headSize = 5; int maxWidth[headSize]; memset(maxWidth, 0, headSize * sizeof(int)); int ypos_mem_head = ypos; ypos += mheight; for (int row = 0; row < 1 + have_swap; row++) { std::string tmp; memstat[row][MEMINFO_USED] = memstat[row][MEMINFO_TOTAL] - memstat[row][MEMINFO_FREE]; for (int column = 0; column < headSize; column++) { switch (column) { case 0: tmp = memtype[row]; break; case 1: tmp = bytes2string(memstat[row][MEMINFO_TOTAL] << 10); break; case 2: tmp = bytes2string(memstat[row][MEMINFO_USED] << 10); break; case 3: tmp = bytes2string(memstat[row][MEMINFO_FREE] << 10); break; case 4: tmp = to_string(memstat[row][MEMINFO_TOTAL] ? (memstat[row][MEMINFO_USED] * 100) / memstat[row][MEMINFO_TOTAL] : 0) + "%"; break; } mpOffset = offsets[column]; int space = 0; int rw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(tmp, true); if (column > 0) { space = widths[column] - rw; } maxWidth[column] = std::max(maxWidth[column], rw)+6; if ((mpOffset + space + maxWidth[column]) > width) maxWidth[column] = width - (mpOffset + space); g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x + mpOffset + space, ypos+ mheight, maxWidth[column], tmp, COL_MENUCONTENT_TEXT); } if (pbw > 8) /* smaller progressbar is not useful ;) */ { CProgressBar pb(x+offsetw, ypos+3, pbw, mheight-10); pb.setBlink(); pb.setInvert(); pb.setValues(memstat[row][MEMINFO_TOTAL] ? (memstat[row][MEMINFO_USED] * 100) / memstat[row][MEMINFO_TOTAL] : 0, 100); pb.paint(false); } ypos += mheight; } ypos += mheight/2; int ypos_mnt_head = ypos; ypos += mheight; int width_i = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("i", true); for (std::map<std::string, bool>::iterator it = mounts.begin(); it != mounts.end(); ++it) { struct statfs s; if (::statfs((*it).first.c_str(), &s) == 0) { if (s.f_blocks > 0) { uint64_t bytes_total = s.f_blocks * s.f_bsize; uint64_t bytes_free = s.f_bfree * s.f_bsize; uint64_t bytes_used = bytes_total - bytes_free; int percent_used = (bytes_used * 200 + bytes_total) / 2 / bytes_total; //paint mountpoints for (int column = 0; column < headSize; column++) { std::string tmp; const char *mnt; mpOffset = offsets[column]; int _w = maxWidth[column]; switch (column) { case 0: tmp = (*it).first; if (tmp == "/") tmp = "rootfs"; mnt = tmp.c_str(); tmp = basename((char *)mnt); _w = nameWidth - mpOffset; if ((*it).second) _w -= icon_w + 10; _w += width_i/2; break; case 1: tmp = bytes2string(bytes_total, false); break; case 2: tmp = bytes2string(bytes_used, false); break; case 3: tmp = bytes2string(bytes_free, false); break; case 4: tmp = to_string(percent_used) + "%"; break; } int space = 0; if (column > 0) { int rw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(tmp, true); maxWidth[column] = std::max(maxWidth[column], rw); space = widths[column] - rw; _w = rw; } if ((mpOffset + space + _w) > width) _w = width - (mpOffset + space); g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x + mpOffset + space, ypos+ mheight, _w, tmp, COL_MENUCONTENT_TEXT); if ((*it).second && icon_w>0 && icon_h>0) frameBuffer->paintIcon(NEUTRINO_ICON_REC, x + nameWidth - icon_w + width_i/2, ypos + (mheight/2 - icon_h/2)); } if (pbw > 8) /* smaller progressbar is not useful ;) */ { CProgressBar pb(x+offsetw, ypos+3, pbw, mheight-10); pb.setBlink(); pb.setInvert(); pb.setValues(percent_used, 100); pb.paint(false); } ypos += mheight; } } if (ypos > y + height - mheight) /* the screen is not high enough */ break; /* todo: scrolling? */ } // paint info heads head_info_ypos += y; for (int line = 0; line < head_info_lines; line++) { g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x + 10, head_info_ypos + mheight*(line+1), head_info_rw, head_info[line], COL_MENUCONTENTINACTIVE_TEXT); } // paint mem head const char *head_mem[headSize] = {"Memory", "Size", "Used", "Available", "Use"}; for (int column = 0; column < headSize; column++) { headOffset = offsets[column]; int space = 0; int rw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(head_mem[column], true); int _w = rw; if (column > 0) { if (rw > maxWidth[column]) space = widths[column] - rw; else space = widths[column] - maxWidth[column] + (maxWidth[column] - rw)/2; } g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ headOffset + space, ypos_mem_head + mheight, _w, head_mem[column], COL_MENUCONTENTINACTIVE_TEXT); } // paint mount head const char *head_mnt[headSize] = {"Filesystem", "Size", "Used", "Available", "Use"}; for (int column = 0; column < headSize; column++) { headOffset = offsets[column]; int space = 0; int rw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(head_mnt[column], true); int _w = rw; if (column > 0) { if (rw > maxWidth[column]) space = widths[column] - rw; else space = widths[column] - maxWidth[column] + (maxWidth[column] - rw)/2; } g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+ headOffset + space, ypos_mnt_head + mheight, _w, head_mnt[column], COL_MENUCONTENTINACTIVE_TEXT); } }
int EventList::exec(const t_channel_id channel_id, const std::string& channelname) // UTF-8 { neutrino_msg_t msg; neutrino_msg_data_t data; bool in_search = 0; // windows size width = w_max ( (frameBuffer->getScreenWidth() / 20 * 17), (frameBuffer->getScreenWidth() / 20 )); height = h_max ( (frameBuffer->getScreenHeight() / 20 * 16), (frameBuffer->getScreenHeight() / 20)); //iheight = 30; // FIXME: info bar height (see below, hard coded at this time) int icon_w; int icon_h; frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_RED, &icon_w, &icon_h); iheight = std::max(icon_h, g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()) + 6;; // theight = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->getHeight(); fheight1 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_ITEMLARGE]->getHeight(); { int h1 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_ITEMSMALL]->getHeight(); int h2 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_DATETIME]->getHeight(); fheight2 = (h1 > h2) ? h1 : h2; } fheight = fheight1 + fheight2 + 2; fwidth1 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_DATETIME]->getRenderWidth("DDD, 00:00, "); fwidth2 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_ITEMSMALL]->getRenderWidth("[999 min] "); listmaxshow = (height - theight - iheight)/fheight; // recalculate height height = theight + iheight + listmaxshow*fheight; // recalc height x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2; y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - height) / 2; int res = menu_return::RETURN_REPAINT; if(m_search_list == SEARCH_LIST_NONE) // init globals once only { m_search_epg_item = SEARCH_EPG_TITLE; m_search_list = SEARCH_LIST_CHANNEL; m_search_bouquet_id= bouquetList->getActiveBouquetNumber(); } m_search_channel_id = channel_id; m_showChannel = false; // do not show the channel in normal mode, we just need it in search mode name = channelname; sort_mode = SORT_DESCRIPTION; paintHead(channel_id); readEvents(channel_id); paint(channel_id); showFunctionBar(true); // blit frameBuffer->blit(); int oldselected = selected; unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); bool loop = true; while (loop) { g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd); if ( msg <= CRCInput::RC_MaxRC ) timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); if (msg == CRCInput::RC_up || (int) msg == g_settings.key_channelList_pageup) { int step = 0; int prev_selected = selected; step = ((int) msg == g_settings.key_channelList_pageup) ? listmaxshow : 1; // browse or step 1 selected -= step; if((prev_selected-step) < 0) // because of uint selected = evtlist.size() - 1; paintItem(prev_selected - liststart, channel_id); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) paint(channel_id); else paintItem(selected - liststart, channel_id); } else if (msg == CRCInput::RC_down || (int) msg == g_settings.key_channelList_pagedown) { unsigned int step = 0; int prev_selected = selected; step = ((int) msg == g_settings.key_channelList_pagedown) ? listmaxshow : 1; // browse or step 1 selected += step; if(selected >= evtlist.size()) { if (((evtlist.size() / listmaxshow) + 1) * listmaxshow == evtlist.size() + listmaxshow) // last page has full entries selected = 0; else selected = ((step == listmaxshow) && (selected < (((evtlist.size() / listmaxshow) + 1) * listmaxshow))) ? (evtlist.size() - 1) : 0; } paintItem(prev_selected - liststart, channel_id); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) paint(channel_id); else paintItem(selected - liststart, channel_id); } // sort else if (msg == (neutrino_msg_t)g_settings.key_channelList_sort) { unsigned long long selected_id = evtlist[selected].eventID; if(sort_mode == SORT_DESCRIPTION) // by description { sort_mode++; sort(evtlist.begin(), evtlist.end(), sortByDescription); } else// datetime { sort_mode = SORT_DESCRIPTION; sort(evtlist.begin(), evtlist.end(), sortByDateTime); } // find selected for ( selected = 0 ; selected < evtlist.size(); selected++ ) { if ( evtlist[selected].eventID == selected_id ) break; } oldselected = selected; if(selected <=listmaxshow) liststart=0; else liststart=(selected/listmaxshow)*listmaxshow; hide(); paintHead(channel_id); paint(channel_id); showFunctionBar(true); } // epg reload else if (msg == (neutrino_msg_t)g_settings.key_channelList_reload) { sort_mode = SORT_DESCRIPTION; hide(); paintHead(channel_id); readEvents(channel_id); paint(channel_id); showFunctionBar(true); } // add record else if ( msg == (neutrino_msg_t)g_settings.key_channelList_addrecord ) { if (recDir != NULL) { int tID = -1; CTimerd::CTimerEventTypes etype = isScheduled(channel_id, &evtlist[selected], &tID); if(etype == CTimerd::TIMER_RECORD) { g_Timerd->removeTimerEvent(tID); timerlist.clear(); g_Timerd->getTimerList(timerlist); paint(channel_id); continue; } if (recDir != NULL) { if (g_Timerd->addRecordTimerEvent(channel_id, evtlist[selected].startTime, evtlist[selected].startTime + evtlist[selected].duration, evtlist[selected].eventID, evtlist[selected].startTime, evtlist[selected].startTime - (ANNOUNCETIME + 120), TIMERD_APIDS_CONF, true, recDir,false) == -1) { if(askUserOnTimerConflict(evtlist[selected].startTime - (ANNOUNCETIME + 120), evtlist[selected].startTime + evtlist[selected].duration)) { g_Timerd->addRecordTimerEvent(channel_id, evtlist[selected].startTime, evtlist[selected].startTime + evtlist[selected].duration, evtlist[selected].eventID, evtlist[selected].startTime, evtlist[selected].startTime - (ANNOUNCETIME + 120), TIMERD_APIDS_CONF, true, recDir,true); MessageBox(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); } } else { MessageBox(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); } } timerlist.clear(); g_Timerd->getTimerList(timerlist); paint(channel_id); } } // add remind else if ( msg == (neutrino_msg_t) g_settings.key_channelList_addremind ) { int tID = -1; CTimerd::CTimerEventTypes etype = isScheduled(channel_id, &evtlist[selected], &tID); if(etype == CTimerd::TIMER_ZAPTO) { g_Timerd->removeTimerEvent(tID); timerlist.clear(); g_Timerd->getTimerList (timerlist); paint(channel_id); continue; } g_Timerd->addZaptoTimerEvent(channel_id, evtlist[selected].startTime, evtlist[selected].startTime - ANNOUNCETIME, 0, evtlist[selected].eventID, evtlist[selected].startTime, 0); MessageBox(LOCALE_TIMER_EVENTTIMED_TITLE, LOCALE_TIMER_EVENTTIMED_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); timerlist.clear(); g_Timerd->getTimerList (timerlist); paint(channel_id); } else if (msg == CRCInput::RC_timeout) { selected = oldselected; loop = false; } else if (msg == (neutrino_msg_t)g_settings.key_channelList_cancel) { if(in_search) { in_search = false; name = channelname; paintHead(channel_id); readEvents(channel_id); paint(channel_id); showFunctionBar(true); } else { selected = oldselected; loop = false; } } else if (msg == CRCInput::RC_epg) { hide(); CEPGplusHandler eplus; eplus.exec(NULL, ""); paintHead(channel_id); readEvents(channel_id); paint(channel_id); showFunctionBar(true); } else if ( msg==CRCInput::RC_left ) { loop = false; } else if ( msg == CRCInput::RC_right || msg == CRCInput::RC_ok || msg == CRCInput::RC_info) { if ( evtlist[selected].eventID != 0 ) { hide(); res = g_EpgData->show(channel_id, evtlist[selected].eventID, &evtlist[selected].startTime); if ( res == menu_return::RETURN_EXIT_ALL ) { loop = false; } else { g_RCInput->getMsg( &msg, &data, 0 ); if ( ( msg != CRCInput::RC_red ) && ( msg != CRCInput::RC_timeout ) ) { // RC_red schlucken g_RCInput->postMsg( msg, data ); } timerlist.clear(); g_Timerd->getTimerList (timerlist); paintHead(channel_id); paint(channel_id); showFunctionBar(true); } } } else if ( msg == CRCInput::RC_green ) { in_search = findEvents(); timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); } else if (msg == CRCInput::RC_sat || msg == CRCInput::RC_favorites) { g_RCInput->postMsg (msg, 0); res = menu_return::RETURN_EXIT_ALL; loop = false; } else { if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { loop = false; res = menu_return::RETURN_EXIT_ALL; } } // blit frameBuffer->blit(); } hide(); return res; }
int CBEChannelWidget::exec(CMenuTarget* parent, const std::string &/*actionKey*/) { neutrino_msg_t msg; neutrino_msg_data_t data; int res = menu_return::RETURN_REPAINT; if (parent) parent->hide(); width = w_max ( (frameBuffer->getScreenWidth() / 20 * 17), (frameBuffer->getScreenWidth() / 20 )); height = h_max ( (frameBuffer->getScreenHeight() / 20 * 16), (frameBuffer->getScreenHeight() / 20)); listmaxshow = (height - theight)/fheight; height = theight + listmaxshow*fheight; // recalc height // info height info_height = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->getHeight() + 10; // coordinate x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - (width + ConnectLineBox_Width)) / 2 + ConnectLineBox_Width; y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - height -ButtonHeight - 2 - info_height) / 2; Channels = mode == CZapitClient::MODE_TV ? &(g_bouquetManager->Bouquets[bouquet]->tvChannels) : &(g_bouquetManager->Bouquets[bouquet]->radioChannels); paintHead(); paint(); paintFoot(); frameBuffer->blit(); channelsChanged = false; unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]); bool loop = true; while (loop) { g_RCInput->getMsgAbsoluteTimeout( &msg, &data, &timeoutEnd ); if ( msg <= CRCInput::RC_MaxRC ) timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]); if ((msg == CRCInput::RC_timeout) || (msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) { if (state == beDefault) { loop = false; } else if (state == beMoving) { cancelMoveChannel(); } } else if (msg==CRCInput::RC_up || msg==(neutrino_msg_t)g_settings.key_channelList_pageup) { if (!(Channels->empty())) { int step = 0; int prev_selected = selected; step = (msg == (neutrino_msg_t)g_settings.key_channelList_pageup) ? listmaxshow : 1; // browse or step 1 selected -= step; if((prev_selected-step) < 0) // because of uint { selected = Channels->size() - 1; } if (state == beDefault) { paintItem(prev_selected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) { paint(); } else { paintItem(selected - liststart); } } else if (state == beMoving) { internalMoveChannel(prev_selected, selected); } } } else if (msg == CRCInput::RC_down || msg == (neutrino_msg_t)g_settings.key_channelList_pagedown) { unsigned int step = 0; int prev_selected = selected; step = (msg == (neutrino_msg_t)g_settings.key_channelList_pagedown) ? listmaxshow : 1; // browse or step 1 selected += step; if(selected >= Channels->size()) { if (((Channels->size() / listmaxshow) + 1)*listmaxshow == Channels->size() + listmaxshow) // last page has full entries selected = 0; else selected = ((step == listmaxshow) && (selected < (((Channels->size() / listmaxshow) + 1)*listmaxshow))) ? (Channels->size() - 1) : 0; } if (state == beDefault) { paintItem(prev_selected - liststart); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) { paint(); } else { paintItem(selected - liststart); } } else if (state == beMoving) { internalMoveChannel(prev_selected, selected); } } else if(msg == CRCInput::RC_red) { if (state == beDefault) deleteChannel(); } else if(msg == CRCInput::RC_green) { if (state == beDefault) addChannel(); } else if(msg == CRCInput::RC_blue) { if (state == beDefault) { if (mode == CZapitClient::MODE_TV) mode = CZapitClient::MODE_RADIO; else mode = CZapitClient::MODE_TV; Channels = mode == CZapitClient::MODE_TV ? &(g_bouquetManager->Bouquets[bouquet]->tvChannels) : &(g_bouquetManager->Bouquets[bouquet]->radioChannels); selected = 0; paint(); } } else if(msg == CRCInput::RC_yellow) { liststart = (selected/listmaxshow)*listmaxshow; if (state == beDefault) beginMoveChannel(); paintItem(selected - liststart); } else if(msg == CRCInput::RC_ok) { if (state == beDefault) { if (selected < Channels->size()) /* Channels.size() might be 0 */ g_Zapit->zapTo_serviceID((*Channels)[selected]->channel_id); } else if (state == beMoving) { finishMoveChannel(); } } else if( CRCInput::isNumeric(msg) ) { if (state == beDefault) { //kein pushback - wenn man versehentlich wo draufkommt is die edit-arbeit umsonst //selected = oldselected; //g_RCInput->postMsg( msg, data ); //loop=false; } else if (state == beMoving) { cancelMoveChannel(); } } else { CNeutrinoApp::getInstance()->handleMsg( msg, data ); } frameBuffer->blit(); } hide(); return res; }
void CTestMenu::testCListBoxDetailsTitleInfo() { CListBox * listBox = new CListBox("listBoxDetailsTitleInfo", w_max ( (CFrameBuffer::getInstance()->getScreenWidth() / 20 * 17), (CFrameBuffer::getInstance()->getScreenWidth() / 20 )), h_max ( (CFrameBuffer::getInstance()->getScreenHeight() / 20 * 16), (CFrameBuffer::getInstance()->getScreenHeight() / 20)), true, true, true); listBox->exec(NULL, ""); delete listBox; }