static int gasHelp(char *target, int maxLength, OSCcontainer c) { int sublength, length; const char *myName; /* printf("*** gasHelp %s %d %p %s\n", target, maxLength, c, c->name); */ if (c == OSCTopLevelContainer) { target[0] = '/'; target[1] = '\0'; return 1; } myName = ContainerName(c); sublength = gasHelp(target, maxLength, c->parent); length = sublength + strlen(myName) + 1; /* +1 is for trailing slash */ if (length > maxLength) { return length; } strcpy(target+sublength, myName); target[length-1] = '/'; target[length] = '\0'; return length; }
static void PrintHelp(OSCcontainer c) { char addr[BIG_ADDRESS]; char aliasNames[1000]; int i, j, numAliases; if (OSCGetAddressString(addr, BIG_ADDRESS, c) == FALSE) { printf(" /.../%s", ContainerName(c)); } else { printf(" %s", addr); } numAliases = ContainerAliases(c, aliasNames); if (numAliases > 0) { printf(" (%d aliases:%s)", numAliases, aliasNames); } printf("\n"); for (i = 0; i < c->numMethods; ++i) { printf(" %s%s: %s\n", addr, c->methodNames[i], c->methods[i]->QueryResponseInfo.description); } /* Forgive this quadratic kludge: */ for (i = 0; i < c->numChildren; ++i) { for (j = 0; j < i; ++j) { if (c->children[j] == c->children[i]) { /* c->children[i] is just an alias to c->children[j], which we already printed, so ignore it. */ goto SkipAlias; } } PrintHelp(c->children[i]); SkipAlias: } }
void CMenus::RenderSettingsIdentPlayer(CUIRect MainView, int Page) { CIdentity::CIdentEntry *pEntry = m_pClient->m_pIdentity->GetIdent(Page); if(!m_pClient->m_pIdentity->NumIdents() || !pEntry) return; CUIRect Button, Label; // skin info const CSkins::CSkin *pOwnSkin = m_pClient->m_pSkins->Get(m_pClient->m_pSkins->Find(pEntry->m_aSkin)); CTeeRenderInfo OwnSkinInfo; if(pEntry->m_UseCustomColor) { OwnSkinInfo.m_Texture = pOwnSkin->m_ColorTexture; OwnSkinInfo.m_ColorBody = m_pClient->m_pSkins->GetColorV4(pEntry->m_ColorBody); OwnSkinInfo.m_ColorFeet = m_pClient->m_pSkins->GetColorV4(pEntry->m_ColorFeet); } else { OwnSkinInfo.m_Texture = pOwnSkin->m_OrgTexture; OwnSkinInfo.m_ColorBody = vec4(1.0f, 1.0f, 1.0f, 1.0f); OwnSkinInfo.m_ColorFeet = vec4(1.0f, 1.0f, 1.0f, 1.0f); } OwnSkinInfo.m_Size = 50.0f*UI()->Scale(); char aBuf[128]; MainView.Margin(10.0f, &MainView); MainView.HSplitTop(50.0f, &Label, &MainView); RenderTools()->DrawUIRect(&Label, vec4(1,1,1,0.2f), CUI::CORNER_ALL, 25.0f); Label.VSplitLeft(15.0f, 0, &Label); Label.HSplitTop(3.0f, 0, &Label); const bool IsMain = m_pClient->m_pIdentity->UsingIdent(Page, false); const bool IsDummy = m_pClient->m_pIdentity->UsingIdent(Page, true); str_format(aBuf, sizeof(aBuf), "%s", IsMain && !IsDummy ? Localize("Main Identity: ") : !IsMain && IsDummy ? Localize("Dummy's Identity: ") : IsMain && IsDummy ? Localize("Both's Identity: ") : ""); if(str_length(pEntry->m_aTitle) > 0) str_append(aBuf, pEntry->m_aTitle, sizeof(aBuf)); else str_append(aBuf, pEntry->m_aName, sizeof(aBuf)); UI()->DoLabelScaled(&Label, aBuf, 35.0f, -1, (int)Label.w); MainView.HSplitTop(10.0f, 0, &MainView); // skin view MainView.HSplitTop(50.0f, &Label, 0); Label.VSplitMid(0, &Label); RenderTools()->DrawUIRect(&Label, vec4(1.0f, 1.0f, 1.0f, 0.25f), CUI::CORNER_ALL, 10.0f); RenderTools()->RenderTee(CAnimState::GetIdle(), &OwnSkinInfo, 0, vec2(1, 0), vec2(Label.x+30.0f, Label.y+28.0f)); Label.HSplitTop(15.0f, 0, &Label); Label.VSplitLeft(70.0f, 0, &Label); UI()->DoLabelScaled(&Label, pEntry->m_aSkin, 14.0f, -1, 150); // ident title MainView.HSplitTop(20.0f, &Button, &MainView); Button.VSplitLeft(80.0f, &Label, &Button); Button.VSplitLeft(150.0f, &Button, 0); str_format(aBuf, sizeof(aBuf), "%s:", Localize("Title")); UI()->DoLabelScaled(&Label, aBuf, 14.0, -1); static float s_OffsetTitle[512] = {0.0f}; CPointerContainer ContainerTitle(&s_OffsetTitle[Page]); if(DoEditBox(&ContainerTitle, &Button, pEntry->m_aTitle, sizeof(pEntry->m_aTitle), 14.0f, &s_OffsetTitle[Page], false, CUI::CORNER_ALL, "", 0, Localize("a custom title to display this identity"))) m_NeedSendinfo = true; // player name MainView.HSplitTop(3.0f, 0, &MainView); MainView.HSplitTop(20.0f, &Button, &MainView); Button.VSplitLeft(80.0f, &Label, &Button); Button.VSplitLeft(150.0f, &Button, 0); str_format(aBuf, sizeof(aBuf), "%s:", Localize("Name")); UI()->DoLabelScaled(&Label, aBuf, 14.0, -1); static float s_OffsetName[512] = {0.0f}; CPointerContainer ContainerName(&s_OffsetName[Page]); if(DoEditBox(&ContainerName, &Button, pEntry->m_aName, sizeof(g_Config.m_PlayerName), 14.0f, &s_OffsetName[Page])) m_NeedSendinfo = true; // player clan MainView.HSplitTop(3.0f, 0, &MainView); MainView.HSplitTop(20.0f, &Button, &MainView); Button.VSplitLeft(80.0f, &Label, &Button); Button.VSplitLeft(150.0f, &Button, 0); str_format(aBuf, sizeof(aBuf), "%s:", Localize("Clan")); UI()->DoLabelScaled(&Label, aBuf, 14.0, -1); static float s_OffsetClan[512] = {0.0f}; CPointerContainer ContainerClan(&s_OffsetClan[Page]); if(DoEditBox(&ContainerClan, &Button, pEntry->m_aClan, sizeof(g_Config.m_PlayerClan), 14.0f, &s_OffsetClan[Page])) m_NeedSendinfo = true; // apply identity MainView.HSplitTop(3.0f, 0, &MainView); MainView.HSplitTop(20.0f, &Button, &MainView); Button.VSplitLeft(80.0f, &Label, &Button); Button.VSplitLeft(150.0f, &Button, 0); str_format(aBuf, sizeof(aBuf), "%s:", Localize("Apply as")); UI()->DoLabelScaled(&Label, aBuf, 14.0, -1); Button.VSplitMid(&Button, &Label); static CButtonContainer s_ApplyButtonMain[512], s_ApplyButtonDummy[512]; if(!IsMain) { if(DoButton_Menu(&s_ApplyButtonMain[Page], Localize("Main"), 0, &Button, "", CUI::CORNER_L|CUI::CORNER_R*IsDummy, vec4(0.7f, 0.7f, 0.2f, 1.0f))) GameClient()->m_pIdentity->ApplyIdent(Page, false); } if(!IsDummy) { if(DoButton_Menu(&s_ApplyButtonDummy[Page], Localize("Dummy"), 0, &Label, "", CUI::CORNER_R|CUI::CORNER_L*IsMain, vec4(0.2f, 0.7f, 0.7f, 1.0f))) GameClient()->m_pIdentity->ApplyIdent(Page, true); } // country flag selector int *Country = &pEntry->m_Country; MainView.HSplitTop(20.0f, 0, &MainView); static float s_ScrollValue = 0.0f; int OldSelected = -1; static CButtonContainer s_Listbox; UiDoListboxStart(&s_Listbox, &MainView, 50.0f, Localize("Country"), "", m_pClient->m_pCountryFlags->Num(), 6, OldSelected, s_ScrollValue); for(int i = 0; i < m_pClient->m_pCountryFlags->Num(); ++i) { const CCountryFlags::CCountryFlag *pFlag = m_pClient->m_pCountryFlags->GetByIndex(i); if(pFlag->m_CountryCode == *Country) OldSelected = i; CPointerContainer Container(&pFlag->m_CountryCode); CListboxItem Item = UiDoListboxNextItem(&Container, OldSelected == i); if(Item.m_Visible) { CUIRect FlagLabel; Item.m_Rect.Margin(5.0f, &Item.m_Rect); Item.m_Rect.HSplitBottom(10.0f, &Item.m_Rect, &FlagLabel); float OldWidth = Item.m_Rect.w; Item.m_Rect.w = Item.m_Rect.h*2; Item.m_Rect.x += (OldWidth-Item.m_Rect.w)/ 2.0f; vec4 Color(1.0f, 1.0f, 1.0f, 1.0f); m_pClient->m_pCountryFlags->Render(pFlag->m_CountryCode, &Color, Item.m_Rect.x, Item.m_Rect.y, Item.m_Rect.w, Item.m_Rect.h); if(pFlag->m_Texture != -1) UI()->DoLabel(&FlagLabel, pFlag->m_aCountryCodeString, 10.0f, 0); } } const int NewSelected = UiDoListboxEnd(&s_ScrollValue, 0); if(OldSelected != NewSelected) { *Country = m_pClient->m_pCountryFlags->GetByIndex(NewSelected)->m_CountryCode; if(m_Dummy) m_NeedSendDummyinfo = true; else m_NeedSendinfo = true; } }