⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwindow.cxx

📁 这是一个开源码的sip用户代理 写的都很清楚是用C++语言开发的 对于研究sip协议的朋友绝对是有很好的参考价值
💻 CXX
📖 第 1 页 / 共 2 页
字号:
		if( command.getOp() == SipCommandString::remote_presence_update){		MRef<ContactEntry*> ce = contactDb->lookUp(command.getParam());		if (ce){			string state = command.getParam2();			cerr << "State is: "<< state << endl;			if (state =="online"){				cerr << "Changed status to online "<< endl;				ce->setOnlineStatus(CONTACT_STATUS_ONLINE);			}else if (state=="offline")				ce->setOnlineStatus(CONTACT_STATUS_OFFLINE);			else				ce->setOnlineStatus(CONTACT_STATUS_UNKNOWN);			ce->setOnlineStatusDesc(command.getParam3());			phoneBookTreeView->queue_draw();					}else{			cerr << "MainWindow::gotCommand: WARNING: did not find uri <"<< command.getParam()<< "> to change presence info"<< endl;		}		return;	}		if( command.getOp() == SipCommandString::register_sent 			|| command.getOp() == SipCommandString::register_ok ){		//ignore these commands		return;	}	merr << "MainWindow::gotCommand: Warning: did not handle command: "<< command.getOp()<< end;}	void MainWindow::gotPacket( int32_t /*i*/ ){}void MainWindow::displayErrorMessage( string s ){	handleCommand( CommandString( "", "error_message", s ) );}void MainWindow::doDisplayErrorMessage( string s ){	Gtk::MessageDialog dialog( s, Gtk::MESSAGE_ERROR );	dialog.run();}void MainWindow::setSipSoftPhoneConfiguration( 		MRef<SipSoftPhoneConfiguration *> config ){		this->config = config;	handleCommand( CommandString( "", "config_updated" ) );}void MainWindow::updateConfig(){		settingsDialog->setConfig( config );	certificateDialog->setCertChain( config->securityConfig.cert );	certificateDialog->setRootCa( config->securityConfig.cert_db );	const Glib::RefPtr<PhoneBookModel> modelPtr( phoneBookModel );	list< MRef<PhoneBook *> > phonebooks = config->phonebooks;	list< MRef<PhoneBook *> >::iterator i;	for( i = phonebooks.begin(); i != phonebooks.end(); i++ ){        	phoneBookModel->setPhoneBook( *i );        }		Gtk::CellRendererText * renderer = new Gtk::CellRendererText();	phoneBookTreeView->set_model( modelPtr );	if( phonebooks.size() > 0 ){//		  phoneBookTreeView->append_column( "Contact", phoneBookTree->name );		  phoneBookTreeView->insert_column_with_data_func( 0, 			"Contact", *renderer,			SLOT( *phoneBookModel, &PhoneBookModel::setFont )			);	}//	Gtk::TreeViewColumn * column = phoneBookTreeView->get_column( 0 );	phoneBookTreeView->expand_all();}void MainWindow::setContactDb( MRef<ContactDb *> contactDb ){	this->contactDb = contactDb;	logWidget->setContactDb( contactDb );}	bool MainWindow::configDialog( MRef<SipSoftPhoneConfiguration *> conf ){	int ret;	settingsDialog->setConfig( conf );	ret = settingsDialog->run();	return ( ret == Gtk::RESPONSE_OK );}void MainWindow::log( int /*type*/, string /*msg*/ ){}void MainWindow::addCall( string callId, string remoteUri, bool incoming,		          string securityStatus ){	ContactEntry * entry;	Gtk::Image * icon;	Gtk::Label * label = new Gtk::Label;	Gtk::HBox * hbox = new Gtk::HBox;	Glib::ustring tabLabelText;	CallWidget * callWidget = new CallWidget( callId, remoteUri, this, incoming, securityStatus );	callWidgets.push_back( callWidget );	entry = contactDb->lookUp( remoteUri );	if( entry != NULL ){		tabLabelText = Glib::locale_to_utf8( entry->getName() );	}	else{		tabLabelText = "Call";	}	label->set_text( tabLabelText );		if( incoming ){		icon = new Gtk::Image( Gtk::Stock::GO_BACK, Gtk::ICON_SIZE_SMALL_TOOLBAR );	}	else{		icon = new Gtk::Image( Gtk::Stock::GO_FORWARD, Gtk::ICON_SIZE_SMALL_TOOLBAR );	}	hbox->add( *icon );	hbox->add( *label );	hbox->show_all();		mainTabWidget->append_page( *callWidget, *hbox ) ;	callWidget->show();	mainTabWidget->set_current_page( mainTabWidget->get_n_pages() - 1 );	}void MainWindow::removeCall( string callId ){	for( list<CallWidget *>::iterator i = callWidgets.begin();			i != callWidgets.end(); i++ ){		if( (*i)->getCallId() == callId ){			mainTabWidget->remove_page( *(*i) );			callWidgets.erase( i );			return;		}	}}void MainWindow::addIm( string uri ){	string from = config->inherited.sipIdentity->sipUsername + "@" + config->inherited.sipIdentity->sipDomain;	ImWidget * imWidget = new ImWidget( this, uri, from );	imWidgets.push_back( imWidget );	mainTabWidget->append_page( *imWidget, "Im" ) ;	imWidget->show();	mainTabWidget->set_current_page( mainTabWidget->get_n_pages() - 1 );}void MainWindow::removeIm( string uri ){	for( list<ImWidget *>::iterator i = imWidgets.begin();			i != imWidgets.end(); i++ ){		if( (*i)->getToUri() == uri ){			mainTabWidget->remove_page( *(*i) );			imWidgets.erase( i );			return;		}	}}void MainWindow::inviteFromTreeview( const Gtk::TreeModel::Path&,		                     Gtk::TreeViewColumn * ){	invite();}void MainWindow::invite(){	string uri;	uri = uriEntry->get_text();	if( uri.length() > 0 ){		string id = callback->guicb_doInvite( uri );		if( id == "malformed" ){			Gtk::MessageDialog dialog( "The SIP address you specified is not valid", Gtk::MESSAGE_WARNING );			dialog.show();		}				addCall( id, uri, false );	}}void MainWindow::im(){	string uri;	uri = uriEntry->get_text();	if( uri.length() > 0 ){		for( list<ImWidget *>::iterator i = imWidgets.begin();				i != imWidgets.end(); i++ ){			if( (*i)->getToUri() == uri ){				mainTabWidget->set_current_page( 					mainTabWidget->page_num( **i ) );				return;			}		}		addIm( uri );	}}	bool MainWindow::phoneSelect( const Glib::RefPtr<Gtk::TreeModel>& model,                  const Gtk::TreeModel::Path& path, bool ){		const Gtk::TreeModel::iterator iter = model->get_iter( path );	/* Only the leaves can be selected */	return iter->children().empty();}void MainWindow::phoneSelected(){	Glib::RefPtr<Gtk::TreeSelection> treeSelection2 = 		phoneBookTreeView->get_selection();		Gtk::TreeModel::iterator iter = treeSelection2->get_selected();	if( iter ){		if( uriEntry ){			uriEntry->set_text( (*iter)[phoneBookModel->tree->uri] );		}	}}void MainWindow::phoneTreeClicked( GdkEventButton * event ){/*	if( event->type==GDK_2BUTTON_PRESS || event->type==GDK_3BUTTON_PRESS ){		phoneSelected();		invite();		return;	}*/		if( event->button == 3 ){		Glib::RefPtr<Gtk::TreeSelection> treeSelection2 = 			phoneBookTreeView->get_selection();		bool noSelect = (treeSelection2->count_selected_rows() == 0 );		phoneAddAddressMenu->set_sensitive( !noSelect );		phoneRemoveMenu->set_sensitive( !noSelect );		phoneEditMenu->set_sensitive( !noSelect );		phoneMenu->popup( event->button, gtk_get_current_event_time() );	}}void MainWindow::handle( MRef<LogEntry *> logEntry ){	logEntriesLock.lock();	logEntries.push_front( logEntry );	logEntriesLock.unlock();	logDispatcher.emit();}void MainWindow::gotLogEntry(){	list<CallWidget *>::iterator i;	logEntriesLock.lock();	MRef< LogEntry * >  logEntry = logEntries.pop_back();	logEntriesLock.unlock();	logWidget->addLogEntry( logEntry );}	void MainWindow::viewCallListToggle(){	if( logWidget->is_visible() ){		logWidget->hide();	}	else{		logWidget->show();	}}void MainWindow::setCallback( GuiCallback * callback ){	handleCommand( CommandString( "", "sip_ready" ) );	Gui::setCallback( callback );}void MainWindow::runCertificateSettings(){	certificateDialog->run();	config->save();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -