Changeset 81402324f4abc1a14b70b14781657362fbea5269

Show
Ignore:
Timestamp:
01/06/07 23:40:49 (6 years ago)
Author:
Philipp Kern <phil@…>
Parents:
b09b4b0883e0286cc03cc927822c658879604fc4
Children:
9c8b8080dc4d007fd27de778666221b86fe62b54
git-committer:
Philipp Kern <phil@0x539.de> / 2007-01-06T22:40:49Z+0000
Message:

[project @ Progress dialogs]

Original author: Armin Burgmeier <armin@…>
Date: 2005-07-19 20:02:03+00:00

Files:
6 added
4 modified

Legend:

Unmodified
Added
Removed
  • Makefile.am

    rae85f6e r8140232  
    3333noinst_HEADERS += inc/hostdialog.hpp 
    3434noinst_HEADERS += inc/joindialog.hpp 
     35noinst_HEADERS += inc/progressdialog.hpp 
     36noinst_HEADERS += inc/joinprogressdialog.hpp 
     37noinst_HEADERS += inc/hostprogressdialog.hpp 
    3538noinst_HEADERS += inc/entrydialog.hpp 
    3639noinst_HEADERS += inc/window.hpp  
     
    7578gobby_SOURCES += src/hostdialog.cpp 
    7679gobby_SOURCES += src/joindialog.cpp 
     80gobby_SOURCES += src/progressdialog.cpp 
     81gobby_SOURCES += src/joinprogressdialog.cpp 
     82gobby_SOURCES += src/hostprogressdialog.cpp 
    7783gobby_SOURCES += src/entrydialog.cpp 
    7884gobby_SOURCES += src/window.cpp 
  • inc/window.hpp

    r37d1c6c r8140232  
    4848        // Gtk::Window overrides 
    4949        virtual void on_realize(); 
     50 
     51        // Start/End obby session 
     52        void obby_start(); 
     53        void obby_end(); 
    5054 
    5155        // UI handler 
     
    113117 
    114118        // obby 
    115         obby::local_buffer* m_buffer; 
     119        std::auto_ptr<obby::local_buffer> m_buffer; 
    116120#ifdef WITH_HOWL 
    117121        obby::zeroconf* m_zeroconf; 
  • po/POTFILES.in

    r8343ef5 r8140232  
    1010src/buffer_wrapper.cpp 
    1111src/document.cpp 
     12src/progressdialog.cpp 
     13src/hostprogressdialog.cpp 
     14src/joinprogressdialog.cpp 
  • src/window.cpp

    r37d1c6c r8140232  
    3232 
    3333#include "common.hpp" 
    34 #include "buffer_wrapper.hpp" 
    3534#include "docwindow.hpp" 
     35#include "joindialog.hpp" 
    3636#include "hostdialog.hpp" 
    37 #include "joindialog.hpp" 
     37#include "joinprogressdialog.hpp" 
     38#include "hostprogressdialog.hpp" 
    3839#include "entrydialog.hpp" 
    3940#include "window.hpp" 
     
    4950   m_running(false), m_header(m_folder), m_statusbar(m_folder) 
    5051{ 
     52        // Connect UI signals 
    5153        m_header.session_create_event().connect( 
    5254                sigc::mem_fun(*this, &Window::on_session_create) ); 
     
    8284                sigc::mem_fun(*this, &Window::on_quit) ); 
    8385 
     86        // Build UI 
    8487        add_accel_group(m_header.get_accel_group() ); 
    8588 
     
    114117Gobby::Window::~Window() 
    115118{ 
    116         on_session_quit(); 
     119        obby_end(); 
    117120} 
    118121 
     
    132135} 
    133136 
    134 void Gobby::Window::on_session_create() try 
    135 { 
     137void Gobby::Window::obby_start() 
     138{ 
     139        // Connect to obby events 
     140        m_buffer->user_join_event().connect( 
     141                sigc::mem_fun(*this, &Window::on_obby_user_join) ); 
     142        m_buffer->user_part_event().connect( 
     143                sigc::mem_fun(*this, &Window::on_obby_user_part) ); 
     144        m_buffer->document_insert_event().connect( 
     145                sigc::mem_fun(*this, &Window::on_obby_document_insert)); 
     146        m_buffer->document_remove_event().connect( 
     147                sigc::mem_fun(*this, &Window::on_obby_document_remove)); 
     148 
     149        m_buffer->message_event().connect( 
     150                sigc::mem_fun(*this, &Window::on_obby_chat) ); 
     151        m_buffer->server_message_event().connect( 
     152                sigc::mem_fun(*this, &Window::on_obby_server_chat) ); 
     153 
     154        // Delegate start of obby session 
     155        m_header.obby_start(*m_buffer); 
     156        m_folder.obby_start(*m_buffer); 
     157        m_userlist.obby_start(*m_buffer); 
     158        m_chat.obby_start(*m_buffer); 
     159        m_statusbar.obby_start(*m_buffer); 
     160 
     161        // Forward user joins for users that are connected  
     162        const obby::user_table& user_table = m_buffer->get_user_table(); 
     163        for(obby::user_table::user_iterator<obby::user::CONNECTED> iter = 
     164                user_table.user_begin<obby::user::CONNECTED>(); 
     165            iter != user_table.user_end<obby::user::CONNECTED>(); 
     166            ++ iter) 
     167        { 
     168                on_obby_user_join(*iter); 
     169        } 
     170 
     171        // Send documents to components 
     172        obby::buffer::document_iterator iter = m_buffer->document_begin(); 
     173        for(; iter != m_buffer->document_end(); ++ iter) 
     174                on_obby_document_insert(*iter); 
     175 
     176        // Set last page as active one because it is currently shown anyway. 
     177        if(m_buffer->document_count() > 0) 
     178                m_folder.set_current_page(m_buffer->document_count() - 1); 
     179} 
     180 
     181void Gobby::Window::obby_end() 
     182{ 
     183        // Nothing to do if no buffer is open 
     184        if(!m_buffer.get() ) return; 
     185 
     186        // Tell GUI components that the session ended 
     187        m_header.obby_end(); 
     188        m_folder.obby_end(); 
     189        m_userlist.obby_end(); 
     190        m_chat.obby_end(); 
     191        m_statusbar.obby_end(); 
     192 
     193        // Delete buffer and zeroconf 
     194        m_buffer.reset(); 
     195#ifdef WITH_HOWL 
     196        delete m_zeroconf; 
     197        m_zeroconf = NULL; 
     198#endif 
     199} 
     200 
     201void Gobby::Window::on_session_create() 
     202{ 
     203        // Show up host dialog 
    136204        HostDialog dlg(*this, m_config); 
    137205        if(dlg.run() == Gtk::RESPONSE_OK) 
    138206        { 
     207                dlg.hide(); 
     208 
     209                // Read setting 
    139210                unsigned int port = dlg.get_port(); 
    140211                Glib::ustring name = dlg.get_name(); 
     
    142213                Glib::ustring password = dlg.get_password(); 
    143214 
    144                 unsigned int red = color.get_red() * 255 / 65535; 
    145                 unsigned int green = color.get_green() * 255 / 65535; 
    146                 unsigned int blue = color.get_blue() * 255 / 65535; 
    147  
    148                 // Create new buffer 
    149                 obby::host_buffer* buffer = 
    150                         new HostBuffer(*this, port, name, red, green, blue); 
    151  
     215                // Set up host with hostprogressdialog 
     216                HostProgressDialog prgdlg(*this, m_config, port, name, color); 
     217                if(prgdlg.run() == Gtk::RESPONSE_OK) 
     218                { 
     219                        prgdlg.hide(); 
     220 
     221                        // Get buffer 
     222                        std::auto_ptr<obby::host_buffer> buffer = 
     223                                prgdlg.get_buffer(); 
     224 
     225                        // Set password 
     226                        buffer->set_global_password(password); 
    152227#ifdef WITH_HOWL 
    153                 m_zeroconf = new obby::zeroconf(); 
    154                 // Publish the newly created session via ZeroConf 
    155                 m_zeroconf->publish(name, port); 
     228                        // Publish the newly created session via ZeroConf 
     229                        m_zeroconf = new obby::zeroconf(); 
     230                        m_zeroconf->publish(name, port); 
    156231#endif 
    157232 
    158                 buffer->set_global_password(password); 
    159  
    160                 // Delete existing buffer, take new one 
    161                 delete m_buffer; 
    162                 m_buffer = buffer; 
    163  
    164                 m_buffer->user_join_event().connect( 
    165                         sigc::mem_fun(*this, &Window::on_obby_user_join) ); 
    166                 m_buffer->user_part_event().connect( 
    167                         sigc::mem_fun(*this, &Window::on_obby_user_part) ); 
    168                 m_buffer->document_insert_event().connect( 
    169                         sigc::mem_fun(*this, &Window::on_obby_document_insert)); 
    170                 m_buffer->document_remove_event().connect( 
    171                         sigc::mem_fun(*this, &Window::on_obby_document_remove)); 
    172  
    173                 m_buffer->message_event().connect( 
    174                         sigc::mem_fun(*this, &Window::on_obby_chat) ); 
    175                 m_buffer->server_message_event().connect( 
    176                         sigc::mem_fun(*this, &Window::on_obby_server_chat) ); 
    177  
    178                 // Running 
    179                 m_running = true; 
    180                  
    181                 // Delegate start of obby session 
    182                 m_header.obby_start(*m_buffer); 
    183                 m_folder.obby_start(*m_buffer); 
    184                 m_userlist.obby_start(*m_buffer); 
    185                 m_chat.obby_start(*m_buffer); 
    186                 m_statusbar.obby_start(*m_buffer); 
    187  
    188                 // Let the local user join 
    189                 on_obby_user_join(buffer->get_self() ); 
    190         } 
    191         else 
    192         { 
    193                 // Delete existing buffer, if any 
    194                 delete m_buffer; 
    195                 m_buffer = NULL; 
    196         } 
    197 } 
    198 catch(Glib::Exception& e) 
    199 { 
    200         display_error(e.what() ); 
    201         on_session_create(); 
    202 } 
    203 catch(std::exception& e) 
    204 { 
    205         display_error(e.what() ); 
    206         on_session_create(); 
    207 } 
    208  
    209 void Gobby::Window::on_session_join() try 
     233                        // Start session 
     234                        m_buffer = buffer; 
     235                        obby_start(); 
     236                } 
     237        } 
     238} 
     239 
     240void Gobby::Window::on_session_join() 
    210241{ 
    211242        JoinDialog dlg(*this, m_config); 
    212243        if(dlg.run() == Gtk::RESPONSE_OK) 
    213244        { 
     245                dlg.hide(); 
     246 
     247                // Read settings 
    214248                Glib::ustring host = dlg.get_host(); 
    215249                unsigned int port = dlg.get_port(); 
     
    217251                Gdk::Color color = dlg.get_color(); 
    218252 
    219                 unsigned int red = color.get_red() * 255 / 65535; 
    220                 unsigned int green = color.get_green() * 255 / 65535; 
    221                 unsigned int blue = color.get_blue() * 255 / 65535; 
    222  
    223                 // TODO: Keep existing connection if host and port did not 
    224                 // change 
    225                 obby::client_buffer* buffer = 
    226                         new ClientBuffer(*this, host, port); 
    227  
    228                 delete m_buffer; 
    229                 m_buffer = buffer; 
    230  
    231                 buffer->login_failed_event().connect( 
    232                         sigc::mem_fun(*this, &Window::on_obby_login_failed) ); 
    233                 buffer->global_password_event().connect( 
    234                         sigc::mem_fun(*this, &Window::on_obby_global_password)); 
    235                 buffer->user_password_event().connect( 
    236                         sigc::mem_fun(*this, &Window::on_obby_user_password) ); 
    237                 buffer->close_event().connect( 
    238                         sigc::mem_fun(*this, &Window::on_obby_close) ); 
    239                 buffer->sync_event().connect( 
    240                         sigc::mem_fun(*this, &Window::on_obby_sync) ); 
    241  
    242                 /* TODO: Add password entry widget in join dialog */ 
    243                 /* TODO: Add password entry widget in host dialog */ 
    244  
    245                 m_buffer->user_join_event().connect( 
    246                         sigc::mem_fun(*this, &Window::on_obby_user_join) ); 
    247                 m_buffer->user_part_event().connect( 
    248                         sigc::mem_fun(*this, &Window::on_obby_user_part) ); 
    249                 m_buffer->document_insert_event().connect( 
    250                         sigc::mem_fun(*this, &Window::on_obby_document_insert)); 
    251                 m_buffer->document_remove_event().connect( 
    252                         sigc::mem_fun(*this, &Window::on_obby_document_remove)); 
    253  
    254                 m_buffer->message_event().connect( 
    255                         sigc::mem_fun(*this, &Window::on_obby_chat) ); 
    256                 m_buffer->server_message_event().connect( 
    257                         sigc::mem_fun(*this, &Window::on_obby_server_chat) ); 
    258  
    259                 buffer->login(name, red, green, blue); 
    260         } 
    261         else 
    262         { 
    263                 delete m_buffer; 
    264                 m_buffer = NULL; 
    265         } 
    266 } 
    267 catch(Glib::Exception& e) 
    268 { 
    269         display_error(e.what()); 
    270         on_session_join(); 
    271 } 
    272 catch(std::exception& e) 
    273 { 
    274         display_error(e.what()); 
    275         on_session_join(); 
     253                JoinProgressDialog prgdlg( 
     254                        *this, m_config, host, port, name, color); 
     255                if(prgdlg.run() == Gtk::RESPONSE_OK) 
     256                { 
     257                        prgdlg.hide(); 
     258 
     259                        // Get buffer 
     260                        std::auto_ptr<obby::client_buffer> buffer = 
     261                                prgdlg.get_buffer(); 
     262 
     263                        buffer->close_event().connect( 
     264                                sigc::mem_fun(*this, &Window::on_obby_close) ); 
     265 
     266                        // Start session 
     267                        m_buffer = buffer; 
     268                        obby_start(); 
     269                } 
     270        } 
    276271} 
    277272 
    278273void Gobby::Window::on_session_quit() 
    279274{ 
    280         if(m_buffer) 
    281         { 
    282                 if(m_running) 
    283                 { 
    284                         m_header.obby_end(); 
    285                         m_folder.obby_end(); 
    286                         m_userlist.obby_end(); 
    287                         m_chat.obby_end(); 
    288                         m_statusbar.obby_end(); 
    289  
    290                         m_running = false; 
    291                 } 
    292  
    293                 delete m_buffer; 
    294                 m_buffer = NULL; 
    295         } 
    296  
    297 #ifdef WITH_HOWL 
    298         if(m_zeroconf) 
    299         { 
    300                 delete m_zeroconf; 
    301                 m_zeroconf = NULL; 
    302         } 
    303 #endif 
     275        obby_end(); 
    304276} 
    305277 
     
    399371void Gobby::Window::on_document_close() 
    400372{ 
    401         if(m_buffer) 
     373        if(m_buffer.get() != NULL) 
    402374        { 
    403375                // Get current page 
     
    444416        if(dlg.run() == Gtk::RESPONSE_OK) 
    445417        { 
    446                 dynamic_cast<obby::client_buffer*>(m_buffer)->set_password( 
     418                dynamic_cast<obby::client_buffer*>(m_buffer.get() )->set_password( 
    447419                        dlg.get_text() ); 
    448420        } 
     
    496468} 
    497469 
    498 void Gobby::Window::on_chat(const Glib::ustring& message) { 
    499         if (m_running) 
    500                 m_buffer->send_message(message); 
    501         else 
    502                 throw std::runtime_error("tried to send chat message while not connected"); 
    503 } 
    504  
    505 /*void Gobby::Window::on_document_update(Document& document) 
    506 { 
    507         // Update statusbar 
    508         m_statusbar.update(document); 
    509 }*/ 
     470void Gobby::Window::on_chat(const Glib::ustring& message) 
     471{ 
     472        m_buffer->send_message(message); 
     473} 
    510474 
    511475void Gobby::Window::on_obby_login_failed(obby::login::error error) 
     
    598562void Gobby::Window::on_obby_user_join(obby::user& user) 
    599563{ 
    600         // Send obby start to GUI components if this is a join command for the 
    601         // local user. The host does not emit such a signal (well it does, but 
    602         // in its constructor - no signal handler could have been connected), 
    603         // so it is only done for the client upon successful login 
    604         if(&m_buffer->get_self() == &user) 
    605         { 
    606                 m_header.obby_start(*m_buffer); 
    607                 m_folder.obby_start(*m_buffer); 
    608                 m_userlist.obby_start(*m_buffer); 
    609                 m_chat.obby_start(*m_buffer); 
    610                 m_statusbar.obby_start(*m_buffer); 
    611  
    612                 m_running = true; 
    613         } 
    614  
    615564        // Tell user join to components 
    616565        m_header.obby_user_join(user);