📄 osxapp.cpp
字号:
} break; } return eventNotHandledErr;}//------------------------------------------------------------------------void OSXPeercastApp::initAPP(){ mTabControl.updateSettings();// showStationStats();}//------------------------------------------------------------------------void OSXPeercastApp::notifyMessage( ServMgr::NOTIFY_TYPE type, const char *message ){ switch( type ) { case ServMgr::NT_UPGRADE: { enableNewVersionButton(true); } break; case ServMgr::NT_PEERCAST: break; }}//------------------------------------------------------------------------void OSXPeercastApp::channelStart(ChanInfo *pChanInfo){ if( Channel *pChannel = chanMgr->findChannelByID( pChanInfo->id ) ) { CEvent peercastEvent( kEventClassPeercast, kEventStartChannel ); TChanStatusPtr chanStatus( new ChanStatus( *pChannel ) ); if( chanStatus.get() != NULL ) { chanStatus->update( *pChannel ); TChanXferPkt xferPkt( chanStatus.release() ); peercastEvent.setParameter( kEventParamChanStatus, typeChanStatus, sizeof(TChanXferPkt), &xferPkt ); peercastEvent.postToQueue( GetMainEventQueue(), kEventPriorityHigh ); } }}//------------------------------------------------------------------------void OSXPeercastApp::channelUpdate(ChanInfo *pChanInfo ){ if( Channel *pChannel = chanMgr->findChannelByID( pChanInfo->id ) ) { CEvent peercastEvent( kEventClassPeercast, kEventUpdateChannel ); TChanStatusPtr chanStatus( new ChanStatus( *pChannel ) ); //if( chanStatus.valid() ) if( chanStatus.get() != NULL ) { chanStatus->update( *pChannel ); TChanXferPkt xferPkt( chanStatus.release() ); peercastEvent.setParameter( kEventParamChanStatus, typeChanStatus, sizeof(TChanXferPkt), &xferPkt ); peercastEvent.postToQueue( GetMainEventQueue(), kEventPriorityHigh ); } }}//------------------------------------------------------------------------void OSXPeercastApp::channelStop(ChanInfo *pChanInfo){ if( Channel *pChannel = chanMgr->findChannelByID( pChanInfo->id ) ) { CEvent peercastEvent( kEventClassPeercast, kEventStopChannel ); peercastEvent.setParameter( kEventParamChanStatus, typeChanStatus, sizeof(GnuID), &pChanInfo->id ); peercastEvent.postToQueue( GetMainEventQueue(), kEventPriorityHigh ); }}//------------------------------------------------------------------------OSStatus setItemDataText( DataBrowserItemDataRef itemData, const char* text ){ if( CFStringRef controlText = CFStringCreateWithFormat( NULL, NULL, CFSTR("%s"), text ) ) { OSStatus err = SetDataBrowserItemDataText( itemData, controlText ); CFRelease( controlText ); return err; } return noErr;}//------------------------------------------------------------------------OSStatus setItemDataInteger( DataBrowserItemDataRef itemData, const int value ){ if( CFStringRef controlText = CFStringCreateWithFormat( NULL, NULL, CFSTR("%d"), value ) ) { OSStatus err = SetDataBrowserItemDataText( itemData, controlText ); CFRelease( controlText ); return err; } return noErr;}//------------------------------------------------------------------------OSStatus OSXPeercastApp::itemDataCallback( ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue ){ char workBuffer[64]; OSStatus status = noErr; if( !changeValue ) { ChanStatus *pChanStatus = reinterpret_cast<ChanStatus *>(itemID); switch( property ) { case kChannelColumn: return setItemDataText( itemData, pChanStatus->getName().c_str() ); case kBitRateColumn: return setItemDataInteger( itemData, pChanStatus->getBitrate() ); case kStreamColumn: return setItemDataText( itemData, pChanStatus->getStreamType().c_str() ); case kRelayColumn: { sprintf( workBuffer, "%d / %d", pChanStatus->totalListeners(), pChanStatus->totalRelays() ); return setItemDataText( itemData, workBuffer ); } case kListenersColumn: { sprintf( workBuffer, "%d / %d", pChanStatus->localListeners(), pChanStatus->localRelays() ); return setItemDataText( itemData, workBuffer ); } case kStatusColumn: return setItemDataText( itemData, pChanStatus->getStatus().c_str() ); case kKeepColumn: return SetDataBrowserItemDataButtonValue( itemData, pChanStatus->stayConnected() ? kThemeButtonOn : kThemeButtonOff ); } } else { ChanStatus *pChanStatus = reinterpret_cast<ChanStatus *>(itemID); switch( property ) { case kKeepColumn: { ThemeButtonValue buttonValue; status = GetDataBrowserItemDataButtonValue( itemData, &buttonValue ); if( status == noErr ) { pChanStatus->stayConnected() = (buttonValue==kThemeButtonOn); Channel *pChannel = chanMgr->findChannelByID( pChanStatus->getId() ); if( pChannel ) { pChannel->stayConnected = pChanStatus->stayConnected(); } } return SetDataBrowserItemDataButtonValue( itemData, buttonValue ); } break; } } return errDataBrowserPropertyNotSupported;}OSStatus OSXPeercastApp::redisplayInfo(){ showStationStats(); return noErr;}void OSXPeercastApp::showStationStats(){ if( !servMgr || !chanMgr ) return; char workBuffer[256]; String upTimeString; upTimeString.setFromStopwatch(servMgr->getUptime()); mUpTime.setText( mWindowRef, upTimeString.cstr() ); mDirectConnections.setIntValue( mWindowRef, servMgr->numStreams( Servent::T_DIRECT, true ) ); mRelayConnections.setIntValue( mWindowRef, servMgr->numStreams( Servent::T_RELAY, true ) ); sprintf( workBuffer, "%d / %d", servMgr->numConnected(Servent::T_CIN), servMgr->numConnected(Servent::T_COUT) ); mCinCoutConnections.setText( mWindowRef, workBuffer ); mPGNUConnections.setIntValue( mWindowRef, servMgr->numConnected(Servent::T_PGNU) ); mIncomingConnections.setIntValue( mWindowRef, servMgr->numActive(Servent::T_INCOMING));}void OSXPeercastApp::handleButtonEvent( TButtonCallback fButtonCallback ){ if( Handle selectedItems = NewHandle(0) ) { OSStatus err = mRelayBrowser.getItems( kDataBrowserNoItem, false, kDataBrowserItemIsSelected, selectedItems ); if( err == noErr ) { const UInt32 numSelectedItems = GetHandleSize(selectedItems) / sizeof(DataBrowserItemID); if( numSelectedItems > 0 ) { (*this.*fButtonCallback)( selectedItems, numSelectedItems ); } } DisposeHandle( selectedItems ); }}void OSXPeercastApp::commentClicked( const Handle selectedItems, const UInt32 numSelectedItems ){ char strId[128]; char urlBuf[256]; const DataBrowserItemID *pItemIDList = reinterpret_cast<const DataBrowserItemID *>(selectedItems[0]); for(int chIndex=0; chIndex<numSelectedItems; ++chIndex) { ChanStatus *pChannel = reinterpret_cast<ChanStatus*>(static_cast<DataBrowserItemID>(pItemIDList[chIndex])); if( pChannel ) { String channelName; channelName.set( pChannel->getName().c_str(), String::T_ASCII ); channelName.convertTo( String::T_ESC ); pChannel->getId().toStr( strId ); sprintf( urlBuf, "%schat.php?cid=%s&cn=%s", skYPString, strId, channelName.cstr() ); sys->getURL( urlBuf ); } }}void OSXPeercastApp::bumpClicked( const Handle selectedItems, const UInt32 numSelectedItems ){ const DataBrowserItemID *pItemIDList = reinterpret_cast<const DataBrowserItemID *>(selectedItems[0]); for(int chIndex=0; chIndex<numSelectedItems; ++chIndex) { ChanStatus *pChanStatus = reinterpret_cast<ChanStatus*>(static_cast<DataBrowserItemID>(pItemIDList[chIndex])); if( pChanStatus ) { mLock.on(); Channel *pChannel = chanMgr->findChannelByID( pChanStatus->getId() ); if( pChannel ) { pChannel->bump = true; } mLock.off(); } }}void OSXPeercastApp::itemNotificationCallback( ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message ){ OSStatus status = noErr; WindowRef window = GetControlOwner( browser ); switch( message ) { case kDataBrowserItemSelected: { ControlRef bumpButton; ControlRef commentButton; GetControlByID( window, &skBumpButtonID, &bumpButton ); GetControlByID( window, &skCommentButtonID, &commentButton ); if( bumpButton ) { EnableControl( bumpButton ); } if( commentButton ) { EnableControl( commentButton ); } } break; case kDataBrowserItemDeselected: { UInt32 numSelected; GetDataBrowserItemCount( browser, kDataBrowserNoItem, false, kDataBrowserItemIsSelected, &numSelected ); if( numSelected == 0 ) { ControlRef bumpButton; ControlRef commentButton; GetControlByID( window, &skBumpButtonID, &bumpButton ); GetControlByID( window, &skCommentButtonID, &commentButton ); if( bumpButton ) { DisableControl( bumpButton ); } if( commentButton ) { DisableControl( commentButton ); } } } break; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -