00001 /*************************************************************************** 00002 * Copyright (C) 2001 by Rick L. Vinyard, Jr. * 00003 * rvinyard@cs.nmsu.edu * 00004 * * 00005 * This file is part of the conexus library. * 00006 * * 00007 * The conexus library is free software; you can redistribute it and/or * 00008 * modify it under the terms of the GNU General Public License * 00009 * version 3 as published by the Free Software Foundation. * 00010 * * 00011 * The conexus library is distributed in the hope that it will be * 00012 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * 00013 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00014 * General Public License for more details. * 00015 * * 00016 * You should have received a copy of the GNU General Public License * 00017 * along with this software. If not see <http://www.gnu.org/licenses/>. * 00018 ***************************************************************************/ 00019 #ifndef CONEXUSGTKDATAPROGRESSWATCHER_H 00020 #define CONEXUSGTKDATAPROGRESSWATCHER_H 00021 00022 #include <set> 00023 #include <map> 00024 00025 #include <conexus/endpoint.h> 00026 00027 namespace Conexus 00028 { 00029 namespace Gtk 00030 { 00031 00035 class DataProgressWatcher 00036 { 00037 public: 00038 DataProgressWatcher(); 00039 00040 virtual ~DataProgressWatcher(); 00041 00042 void add_endpoint ( Conexus::Endpoint::pointer endpoint, bool watch_read=true, bool watch_write=true ); 00043 00044 void remove_endpoint ( Conexus::Endpoint::pointer endpoint ); 00045 00046 protected: 00047 unsigned m_data_count; 00048 00049 typedef std::set<Conexus::Endpoint::pointer> Endpoints; 00050 typedef std::map<Conexus::Endpoint::pointer, sigc::connection> ConnectionMap; 00051 00052 Endpoints m_endpoints; 00053 00054 ConnectionMap m_read_connections; 00055 ConnectionMap m_write_connections; 00056 00057 virtual void on_read_data ( size_t n ) = 0; 00058 00059 virtual void on_write_data ( size_t n ) = 0; 00060 00061 private: 00062 virtual void on_read_data_proxy ( size_t n ); 00063 00064 virtual void on_write_data_proxy ( size_t n ); 00065 00066 00067 }; 00068 00069 } 00070 00071 } 00072 00073 #endif