📄 mainwindow.cxx
字号:
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 + -