OSDN Git Service

COUT切断機能を追加
[peercast-im/PeerCastIM.git] / c: / Git / PeerCast.root / PeerCast / ui / win32 / simple / gui.cpp
index 230354b..90504fb 100644 (file)
@@ -353,8 +353,11 @@ int ChannelData::drawChannel(Graphics *g, int x, int y){
        // \83X\83e\81[\83^\83X\95\\8e¦
        Gdiplus::Image *img = NULL;
        unsigned int nowTime = sys->getTime();
-       Channel *ch = chanMgr->findChannelByChannelID(this->channel_id);
-       switch(this->getStatus()){
+       if (this->type != Servent::T_COUT)
+       {
+               // COUT\88È\8aO
+               Channel *ch = chanMgr->findChannelByChannelID(this->channel_id);
+               switch(this->getStatus()){
                case Channel::S_IDLE:
                        img = img_idle;
                        break;
@@ -401,7 +404,13 @@ int ChannelData::drawChannel(Graphics *g, int x, int y){
                default:
                        img = img_idle;
                        break;
+               }
+       } else
+       {
+               // COUT\97p
+               img = img_broad_ok;
        }
+
        // \95`\89æ\8aî\93_
        PointF origin(xx, yy);
        // \83X\83e\81[\83^\83X\95\\8e¦\88Ê\92u
@@ -430,127 +439,146 @@ int ChannelData::drawChannel(Graphics *g, int x, int y){
                        strBrush = ::new SolidBrush(Color::Black);
                }
        }
-       // \83`\83\83\83\93\83l\83\8b\96¼\95\\8e¦
-       g->SetTextRenderingHint(TextRenderingHintAntiAlias);
-       _bstr_t bstr1(getName());
-       // \95\8e\9a\95`\89æ\94Í\88Í\8ew\92è
-       RectF r1(origin.X, origin.Y, 120.0f, 13.0f);
-       StringFormat format;
-       format.SetAlignment(StringAlignmentNear);
-       g->DrawString(bstr1, -1, &font, r1, &format, strBrush);
-       // \8e\9f\82Ì\8aî\93_
-       origin.X += r1.Width;
-
-       //// \8fã\97¬IP/\83\8a\83X\83i\81[\90\94/\83\8a\83\8c\81[\90\94\95\\8e¦
-       //// NOTE:
-       ////    \82Ò\82 \82©\82·\82Ì\93®\8dì\95×\8b­\97p\81B\83\8a\83\8a\81[\83X\83r\83\8b\83h\82Å\82Í\8c³\82Ì\83R\81[\83h\82ð\8eg\97p\82Ì\8e\96\81B
-       ////    \95\8e\9a\95\\8e¦\94Í\88Í\82Í\95\9d220\82®\82ç\82¢\82Å\82¨\82\8b
-       //char tmp[512]; // \95\\8e¦\97p\83o\83b\83t\83@
-       //char hostip[256]; // IP\83A\83h\83\8c\83X\83o\83b\83t\83@
-       //chDisp.uphost.toStr(hostip); // \8fã\97¬IP
-       //sprintf(tmp, "%d/%d - [%d/%d] - %s",
-       //      getTotalListeners(),
-       //      getTotalRelays(),
-       //      getLocalListeners(),
-       //      getLocalRelays(),
-       //      hostip
-       //      );
-
-       // \83\8a\83X\83i\81[\90\94/\83\8a\83\8c\81[\90\94\95\\8e¦
-       char tmp[256];
-       sprintf(tmp, "%d/%d - [%d/%d]", getTotalListeners(), getTotalRelays(), getLocalListeners(), getLocalRelays());
-       _bstr_t bstr2(tmp);
-       // \95\8e\9a\95\\8e¦\94Í\88Í\8ew\92è
-       RectF r2(origin.X, origin.Y, 100.0f, 13.0f);
-       format.SetAlignment(StringAlignmentCenter);
-       g->DrawString(bstr2, -1, &font, r2, &format, strBrush);
-       // \8e\9f\82Ì\8aî\93_
-       origin.X += r2.Width;
-
-       // bps\95\\8e¦
-       Font *f;
-       if (isStayConnected()){
-               f = ::new Font(L"Arial", 9.0f, FontStyleItalic|FontStyleBold, UnitPoint);
-       } else {
-               f = ::new Font(L"Arial", 9.0f);
-       }
-       sprintf(tmp, "%dkbps", getBitRate());
-       _bstr_t bstr3(tmp);
-       format.SetAlignment(StringAlignmentFar);
-       // \95\8e\9a\95\\8e¦\94Í\88Í\8ew\92è
-       RectF r3(origin.X, origin.Y, 80.0f, 13.0f);
-       g->DrawString(bstr3, -1, f, r3, &format, strBrush);
-       // \83t\83H\83\93\83g\8aJ\95ú
-       ::delete f;
-
-       // \8e\9f\82Ì\8aî\93_
-       origin.X += r3.Width;
-
-       // \83u\83\89\83V\8dí\8f\9c
-       ::delete strBrush;
 
-       
-       // Servent\95\\8e¦
-       if (!openFlg){
-               int count = getServentCount();
-               // Servent\95\\8e¦\95\94\82Ì\94w\8ci\82ð\94\92\82É\82·\82é
-               SolidBrush b(Color(160,255,255,255));
-               g->FillRectangle(&b, (INT)origin.X, (INT)origin.Y, 14*count, 14);
-
-               sd = serventDataTop;
-               int index = 0;
-               while(sd){
-                       SolidBrush *serventBrush;
-                       if (sd->getInfoFlg()){
-                               ChanHit *hit = sd->getChanHit();
-                               if (hit->firewalled){
-                                       SolidBrush bb(Color(180,255,0,0));
-                                       g->FillRectangle(&bb, (INT)origin.X + 14*index, (INT)origin.Y, 14, 14);
-                               }
-                               if (hit->relay){
-                                       // \83\8a\83\8c\81[\82n\82j
-                                       serventBrush = ::new SolidBrush(Color::Green);
-                               } else {
-                                       // \83\8a\83\8c\81[\95s\89Â
-                                       if (hit->numRelays){
-                                               // \83\8a\83\8c\81[\88ê\94t
-                                               serventBrush = ::new SolidBrush(Color::Blue);
+       if (this->type != Servent::T_COUT)
+       {
+               // COUT\88È\8aO
+
+               // \83`\83\83\83\93\83l\83\8b\96¼\95\\8e¦
+               g->SetTextRenderingHint(TextRenderingHintAntiAlias);
+               _bstr_t bstr1(getName());
+               // \95\8e\9a\95`\89æ\94Í\88Í\8ew\92è
+               RectF r1(origin.X, origin.Y, 120.0f, 13.0f);
+               StringFormat format;
+               format.SetAlignment(StringAlignmentNear);
+               g->DrawString(bstr1, -1, &font, r1, &format, strBrush);
+               // \8e\9f\82Ì\8aî\93_
+               origin.X += r1.Width;
+
+               //// \8fã\97¬IP/\83\8a\83X\83i\81[\90\94/\83\8a\83\8c\81[\90\94\95\\8e¦
+               //// NOTE:
+               ////    \82Ò\82 \82©\82·\82Ì\93®\8dì\95×\8b­\97p\81B\83\8a\83\8a\81[\83X\83r\83\8b\83h\82Å\82Í\8c³\82Ì\83R\81[\83h\82ð\8eg\97p\82Ì\8e\96\81B
+               ////    \95\8e\9a\95\\8e¦\94Í\88Í\82Í\95\9d220\82®\82ç\82¢\82Å\82¨\82\8b
+               //char tmp[512]; // \95\\8e¦\97p\83o\83b\83t\83@
+               //char hostip[256]; // IP\83A\83h\83\8c\83X\83o\83b\83t\83@
+               //chDisp.uphost.toStr(hostip); // \8fã\97¬IP
+               //sprintf(tmp, "%d/%d - [%d/%d] - %s",
+               //      getTotalListeners(),
+               //      getTotalRelays(),
+               //      getLocalListeners(),
+               //      getLocalRelays(),
+               //      hostip
+               //      );
+
+               // \83\8a\83X\83i\81[\90\94/\83\8a\83\8c\81[\90\94\95\\8e¦
+               char tmp[256];
+               sprintf(tmp, "%d/%d - [%d/%d]", getTotalListeners(), getTotalRelays(), getLocalListeners(), getLocalRelays());
+               _bstr_t bstr2(tmp);
+               // \95\8e\9a\95\\8e¦\94Í\88Í\8ew\92è
+               RectF r2(origin.X, origin.Y, 100.0f, 13.0f);
+               format.SetAlignment(StringAlignmentCenter);
+               g->DrawString(bstr2, -1, &font, r2, &format, strBrush);
+               // \8e\9f\82Ì\8aî\93_
+               origin.X += r2.Width;
+
+               // bps\95\\8e¦
+               Font *f;
+               if (isStayConnected()){
+                       f = ::new Font(L"Arial", 9.0f, FontStyleItalic|FontStyleBold, UnitPoint);
+               } else {
+                       f = ::new Font(L"Arial", 9.0f);
+               }
+               sprintf(tmp, "%dkbps", getBitRate());
+               _bstr_t bstr3(tmp);
+               format.SetAlignment(StringAlignmentFar);
+               // \95\8e\9a\95\\8e¦\94Í\88Í\8ew\92è
+               RectF r3(origin.X, origin.Y, 80.0f, 13.0f);
+               g->DrawString(bstr3, -1, f, r3, &format, strBrush);
+               // \83t\83H\83\93\83g\8aJ\95ú
+               ::delete f;
+
+               // \8e\9f\82Ì\8aî\93_
+               origin.X += r3.Width;
+
+               // \83u\83\89\83V\8dí\8f\9c
+               ::delete strBrush;
+
+
+               // Servent\95\\8e¦
+               if (!openFlg){
+                       int count = getServentCount();
+                       // Servent\95\\8e¦\95\94\82Ì\94w\8ci\82ð\94\92\82É\82·\82é
+                       SolidBrush b(Color(160,255,255,255));
+                       g->FillRectangle(&b, (INT)origin.X, (INT)origin.Y, 14*count, 14);
+
+                       sd = serventDataTop;
+                       int index = 0;
+                       while(sd){
+                               SolidBrush *serventBrush;
+                               if (sd->getInfoFlg()){
+                                       ChanHit *hit = sd->getChanHit();
+                                       if (hit->firewalled){
+                                               SolidBrush bb(Color(180,255,0,0));
+                                               g->FillRectangle(&bb, (INT)origin.X + 14*index, (INT)origin.Y, 14, 14);
+                                       }
+                                       if (hit->relay){
+                                               // \83\8a\83\8c\81[\82n\82j
+                                               serventBrush = ::new SolidBrush(Color::Green);
                                        } else {
-                                               // \83\8a\83\8c\81[\82È\82µ
-                                               serventBrush = ::new SolidBrush(Color::Purple);
+                                               // \83\8a\83\8c\81[\95s\89Â
+                                               if (hit->numRelays){
+                                                       // \83\8a\83\8c\81[\88ê\94t
+                                                       serventBrush = ::new SolidBrush(Color::Blue);
+                                               } else {
+                                                       // \83\8a\83\8c\81[\82È\82µ
+                                                       serventBrush = ::new SolidBrush(Color::Purple);
+                                               }
                                        }
+                               } else {
+                                       // \8fî\95ñ\82È\82µ
+                                       serventBrush = ::new SolidBrush(Color::Black);
                                }
-                       } else {
-                               // \8fî\95ñ\82È\82µ
-                               serventBrush = ::new SolidBrush(Color::Black);
-                       }
-                       // \8el\8ap\95`\89æ
-                       backGra->FillRectangle(serventBrush, (INT)origin.X + index*14 + 1, (INT)origin.Y + 1, 12, 12);
+                               // \8el\8ap\95`\89æ
+                               backGra->FillRectangle(serventBrush, (INT)origin.X + index*14 + 1, (INT)origin.Y + 1, 12, 12);
 
-                       ::delete serventBrush;
-                       sd = sd->getNextData();
-                       index++;
+                               ::delete serventBrush;
+                               sd = sd->getNextData();
+                               index++;
+                       }
                }
-       }
 
-       // \8e\9f\82Ì\8aî\93_
-       origin.Y += 15;
+               // \8e\9f\82Ì\8aî\93_
+               origin.Y += 15;
 
-       // \83T\83C\83Y\82ð\95Û\91
-       setWidth((int)origin.X - posX);
-       setHeight((int)origin.Y - posY);
+               // \83T\83C\83Y\82ð\95Û\91
+               setWidth((int)origin.X - posX);
+               setHeight((int)origin.Y - posY);
 
-       // ServentData\95\\8e¦
-       sd = serventDataTop;
-       while(sd){
-               if (openFlg || sd->getSelected()){
-                       sd->drawServent(g, (INT)x+12, (INT)origin.Y);
-                       // \8e\9f\82Ì\8aî\93_
-                       origin.Y += 15;
+               // ServentData\95\\8e¦
+               sd = serventDataTop;
+               while(sd){
+                       if (openFlg || sd->getSelected()){
+                               sd->drawServent(g, (INT)x+12, (INT)origin.Y);
+                               // \8e\9f\82Ì\8aî\93_
+                               origin.Y += 15;
+                       }
+                       sd = sd->getNextData();
                }
-               sd = sd->getNextData();
+       } else
+       {
+               // COUT
+               g->SetTextRenderingHint(TextRenderingHintAntiAlias);
+               RectF r1(origin.X, origin.Y, 120.0f+100.0f+80.0f, 13.0f);
+               origin.X += r1.Width;
+               StringFormat format;
+               format.SetAlignment(StringAlignmentNear);
+               _bstr_t bstr1("COUT");
+               g->DrawString(bstr1, -1, &font, r1, &format, strBrush);
+               ::delete strBrush;
+               origin.Y += 15;
+               setWidth((int)origin.X - posX);
+               setHeight((int)origin.Y - posY);
        }
-       
 
        return (int)(origin.Y);
 }
@@ -881,6 +909,90 @@ THREAD_PROC GUIDataUpdate(ThreadInfo *thread){
                        c = c->next;
                }
 
+#if 1
+               // COUT\82ð\8c\9f\8dõ
+               {
+                       bool foundFlg = false;
+                       bool foundFlg2 = false;
+                       Servent *s = servMgr->servents;
+                       while (s)
+                       {
+                               if (s->type == Servent::T_COUT && s->status == Servent::S_CONNECTED)
+                               {
+                                       foundFlg = true;
+
+                                       // ChannelData\96\96\94ö\82Ü\82Å\92T\8dõ
+                                       ChannelData *prev = NULL;
+                                       cd = channelDataTop;
+                                       while (cd)
+                                       {
+                                               if (cd->type == Servent::T_COUT && cd->servent_id == s->servent_id)
+                                               {
+                                                       foundFlg2 = true;
+                                                       cd->setEnableFlg(true);
+                                                       break;
+                                               }
+                                               prev = cd;
+                                               cd = cd->getNextData();
+                                       }
+                                       cd = prev;
+
+                                       if (foundFlg2)
+                                               break;
+
+                                       // \83m\81[\83h\92Ç\89Á
+                                       if (channelDataTop)
+                                       {
+                                               // channelData\82ª\8bó\82Å\82È\82¢\81Bcd\82Í\82±\82±\82Å\83\8a\83X\83g\96\96\94ö\82ð\8ew\82µ\82Ä\82é\81i\82Í\82¸\81j
+                                               cd->setNextData(::new ChannelData());
+                                               cd = cd->getNextData();
+                                               memset(cd, 0, sizeof(cd));
+                                               cd->setNextData(NULL);
+                                       } else
+                                       {
+                                               // channelData\82ª\8bó
+                                               channelDataTop = ::new ChannelData();
+                                               channelDataTop->setNextData(NULL);
+                                               cd = channelDataTop;
+                                       }
+
+                                       // \83f\81[\83^\90Ý\92è
+                                       cd->type = s->type;
+                                       cd->servent_id = s->servent_id;
+                                       cd->setEnableFlg(true);
+                               }
+
+                               s = s->next;
+                       }
+
+                       // COUT\82ª\90Ø\82ê\82Ä\82½\82ç\8dí\8f\9c
+                       if (!foundFlg)
+                       {
+                               cd = channelDataTop;
+                               ChannelData *prev = NULL;
+                               while (cd)
+                               {
+                                       // COUT\82Ì\8fî\95ñ\82ð\8dí\8f\9c
+                                       if (cd->type == Servent::T_COUT)
+                                       {
+                                               // \90æ\93ª
+                                               if (!prev)
+                                               {
+                                                       channelDataTop = cd->getNextData();
+                                               } else
+                                               {
+                                                       prev->setNextData(cd->getNextData());
+                                               }
+                                               //::delete cd;
+                                       }
+
+                                       prev = cd;
+                                       cd = cd->getNextData();
+                               }
+                       }
+               }
+#endif
+
                // \83`\83\83\83\93\83l\83\8b\82ª\82È\82­\82È\82Á\82Ä\82¢\82é\8fê\8d\87\82Ì\8f\88\97\9d
                cd = channelDataTop;
                ChannelData *prev = NULL; 
@@ -892,6 +1004,7 @@ THREAD_PROC GUIDataUpdate(ThreadInfo *thread){
                                next = cd->getNextData();
                                if (!prev){
                                        // \90æ\93ª\82Ì\83f\81[\83^\82ð\8dí\8f\9c
+                                       // \82±\82±\83\81\83\82\83\8a\83\8a\81[\83N\82µ\82»\82¤ by \82¦\82é\81[
                                        channelDataTop = next;
                                } else {
                                        // \93r\92\86\82Ì\83f\81[\83^\82ð\8dí\8f\9c
@@ -1192,6 +1305,11 @@ void PopupServentMenu(int servent_id){
        ServentData *sd = NULL;
        ChannelData *cd = channelDataTop;
        while(cd){
+               // COUT
+               if (cd->type == Servent::T_COUT
+                       && cd->servent_id == servent_id)
+                       break;
+
                sd = cd->findServentData(servent_id);
                if (sd){
                        break;
@@ -1199,7 +1317,9 @@ void PopupServentMenu(int servent_id){
                cd = cd->getNextData();
        }
 
-       if (cd == NULL || sd == NULL){
+       if (cd == NULL || sd == NULL
+               && cd->type != Servent::T_COUT) // COUT
+       {
                return;
        }
 
@@ -1216,6 +1336,11 @@ void PopupServentMenu(int servent_id){
 
        cd = channelDataTop;
        while(cd){
+               // COUT
+               if (cd->type == Servent::T_COUT
+                       && cd->servent_id == servent_id)
+                       break;
+
                sd = cd->findServentData(servent_id);
                if (sd){
                        break;
@@ -1223,7 +1348,9 @@ void PopupServentMenu(int servent_id){
                cd = cd->getNextData();
        }
 
-       if (cd == NULL || sd == NULL){
+       if (cd == NULL || sd == NULL
+               && cd->type != Servent::T_COUT) // COUT
+       {
                return;
        }
 
@@ -1236,6 +1363,11 @@ void PopupServentMenu(int servent_id){
        switch(dwID){
                case 1001:      // \90Ø\92f
                        s->thread.active = false;
+
+                       // COUT\90Ø\92f
+                       if (s->type == Servent::T_COUT)
+                               s->thread.finish = true;
+
                        break;
 
        }
@@ -1558,6 +1690,14 @@ void WmRButtonDownProc(HWND hwnd, LPARAM lParam){
                        cd->setSelected(TRUE);
                        channel_id = cd->getChannelId();
                        channel_selected = TRUE;
+
+                       // COUT\8e¯\95Ê
+                       if (cd->type == Servent::T_COUT)
+                       {
+                               channel_selected = FALSE;
+                               servent_selected = TRUE;
+                               servent_id = cd->servent_id;
+                       }
                } else {
                        if (cd->isSelected()){
                                changeFlg = TRUE;