/* A NCURSES/CDK TUI (Text User Interface) for MuSE * Copyright (C) 2002 Luca 'rubik' Profico * * This source code is free software; you can redistribute it and/or * modify it under the terms of the GNU Public License as published * by the Free Software Foundation; either version 2 of the License, * or (at your option) any later version. * * This source code is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * Please refer to the GNU Public License for more details. * * You should have received a copy of the GNU Public License along with * this source code; if not, write to: * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: connectbox.cpp,v 1.5 2004/07/28 15:52:38 rubik Exp $ * */ #include "connectbox.h" #include "muse_console.h" ConnectBox::ConnectBox (Stream_mixer *m) { // int i; mixer = m ; func ("ConnectBox::ConnectBox"); ybase = (LINES-CONNBOX_HEIGHT)/2; xbase = (COLS-CONNBOX_WIDTH)/2; subwin = newwin (CONNBOX_HEIGHT, CONNBOX_WIDTH, ybase, xbase); warning ("ConnBox pars: %d, %d, %d, %d",xbase, ybase,CONNBOX_WIDTH, CONNBOX_HEIGHT); cdkscreen = initCDKScreen (subwin); box (subwin, ACS_VLINE, ACS_HLINE); wrefresh (subwin); /* labels */ bottom.setscreen (cdkscreen); enc = (encdata *) malloc (sizeof (encdata)); enc->numchan=0; warning ("mixer = %p", mixer); encsetbox.setmixer (mixer, enc); encsetbox.setscreen (cdkscreen); streamsetbox.setmixer (mixer, enc); streamsetbox.setscreen (cdkscreen); warning ("mixer = %p", mixer); /* load default profiles */ /* nuova api mixer->ice.load_profile("last_active"); mixer->lame.load_profile("last_active"); */ } void ConnectBox::setparm (void) { bottom.box=TRUE; bottom.setparm (xbase +3 , ybase + CONNBOX_HEIGHT,CONNBOX_WIDTH -6 ,1); bottom.llhook (ACS_BTEE); bottom.lrhook (ACS_BTEE); bottom.setvalue ("Connbox"); encsetbox.setparm(xbase, ybase); streamsetbox.setparm(xbase, ybase); //showcurrval(); enc->lameid = mixer->create_enc(MP3); enc->oggid = mixer->create_enc(OGG); //lame enc->outchan=mixer->get_enc (enc->lameid); enc->iceid[enc->numchan]=enc->outchan->create_ice(); enc->coreice=enc->outchan->get_ice(enc->iceid[enc->numchan]); enc->outchan->start(); //ogg enc->outchan=mixer->get_enc (enc->oggid); enc->iceid[enc->numchan]=enc->outchan->create_ice(); enc->coreice=enc->outchan->get_ice(enc->iceid[enc->numchan]); enc->outchan->start(); } void ConnectBox::draw (void) { bottom.draw(); refresh(); } void ConnectBox::refresh (void) { func ("ConnectBox::refresh()"); refreshCDKScreen (cdkscreen); } void ConnectBox::erase (void) { bottom.destroy(); //encsetbox.cleanup(); } void ConnectBox::activate (void) { int quit=0, c, k; Shouter *ice; while (!quit) { k = 1; //bottom.setvalue ("Use fields' shortcuts, set icecast, set lame, or exit"); bottom.setvalueNR ("Set Lame/OGG, edit servers or exit"); refresh(); c=getch(); switch (c) { case 'x': quit=1; break; case 'm': case 'M': encsetbox.reg(); encsetbox.showcurrval(enc->lameid); while (k<999) { bottom.setvalue ("Save/Load profiles, Apply or Cancel"); refresh(); k = getch(); switch (k) { case 'S': break; case 'L': break; case 'A': k=999; encsetbox.setval(enc->lameid); break; case 'C': k=999; break; default: bottom.setvalue ("Edit values using TAB. Enter to confirm"); encsetbox.tabentry(k); break; } } encsetbox.unreg(); bottom.erase(); break; case 'o': case 'O': encsetbox.reg(); encsetbox.showcurrval(enc->oggid); while (k<999) { bottom.setvalue ("Save/Load profiles, Apply or Cancel"); refresh(); k = getch(); switch (k) { case 'S': break; case 'L': break; case 'A': k=999; encsetbox.setval(enc->oggid); break; case 'C': k=999; break; default: bottom.setvalue ("Edit values using TAB. Enter to confirm"); encsetbox.tabentry(k); break; } } encsetbox.unreg(); bottom.erase(); break; case 's': case 'S': bottom.setvalue ("+LameSRV +OggSRV edit:[lame|Ogg]SRV back"); c = getch(); switch (c) { case 'l': case 'L': streamsetbox.setdefaultval(); if ((enc->numchan) == (MAX_CHANNELS - 1)) { bottom.setvalue ("Too many channels configured"); k = 999; getch(); } while (k<999){ bottom.erase(); bottom.setvalue ("Apply or Cancel"); streamsetbox.draw(); k=getch(); switch (k) { case 'A': enc->outchan=mixer->get_enc (enc->lameid); // enc->iceid[enc->numchan]=enc->outchan->create_ice(); // enc->coreice=enc->outchan->get_ice(enc->iceid[enc->numchan]); // enc->outchan->start(); streamsetbox.setval(enc->numchan); ice = enc->outchan->get_ice(enc->iceid[enc->numchan]); enc->outchan->apply_ice(enc->iceid[enc->numchan]); mixer->apply_enc(enc->lameid); enc->outchan->connect_ice(enc->iceid[enc->numchan], true); enc->numchan++; k=999; break; default: bottom.setvalue ("Edit values using TAB. Enter to confirm"); streamsetbox.tabentry(k); break; case 'C': k=999; break; } } streamsetbox.unreg(); break; case 'o': case 'O': streamsetbox.setdefaultval(); if ((enc->numchan) == (MAX_CHANNELS - 1)) { bottom.setvalue ("Too many channels configured"); k = 999; getch(); } while (k<999){ bottom.erase(); bottom.setvalue ("Apply or Cancel"); streamsetbox.draw(); k=getch(); switch (k) { case 'A': enc->outchan=mixer->get_enc (enc->oggid); // enc->iceid[enc->numchan]=enc->outchan->create_ice(); // enc->coreice=enc->outchan->get_ice(enc->iceid[enc->numchan]); // enc->outchan->start(); streamsetbox.setval(enc->numchan); ice = enc->outchan->get_ice(enc->iceid[enc->numchan]); enc->outchan->apply_ice(enc->iceid[enc->numchan]); mixer->apply_enc(enc->oggid); enc->outchan->connect_ice(enc->iceid[enc->numchan], true); enc->numchan++; k=999; break; default: bottom.setvalue ("Edit values using TAB. Enter to confirm"); streamsetbox.tabentry(k); break; case 'C': k=999; break; } } streamsetbox.unreg(); break; case 'a': case 'A': break; case 'g': case 'G': break; case 'b': case 'B': break; } bottom.erase(); break; default: //quit=tabentry(c); break; } } } ConnectBox::~ConnectBox () { warning ("ConnectBox::~ConnectBox objcnt = %d [BEGIN]", cdkscreen->objectCount); //bottom.destroy(); encsetbox.cleanup(); warning ("ConnectBox::~ConnectBox objcnt = %d ", cdkscreen->objectCount); if (cdkscreen) { destroyCDKScreen(cdkscreen); cdkscreen=NULL; } warning ("ConnectBox::~ConnectBox objcnt [END]"); }