/* ================ idRestoreGame::ReadRenderEntity ================ */ void idRestoreGame::ReadRenderEntity( renderEntity_t& renderEntity ) { int i; int index; ReadModel( renderEntity.hModel ); ReadInt( renderEntity.entityNum ); ReadInt( renderEntity.bodyId ); ReadBounds( renderEntity.bounds ); // callback is set by class's Restore function renderEntity.callback = NULL; renderEntity.callbackData = NULL; ReadInt( renderEntity.suppressSurfaceInViewID ); ReadInt( renderEntity.suppressShadowInViewID ); ReadInt( renderEntity.suppressShadowInLightID ); ReadInt( renderEntity.allowSurfaceInViewID ); ReadVec3( renderEntity.origin ); ReadMat3( renderEntity.axis ); ReadMaterial( renderEntity.customShader ); ReadMaterial( renderEntity.referenceShader ); ReadSkin( renderEntity.customSkin ); ReadInt( index ); renderEntity.referenceSound = gameSoundWorld->EmitterForIndex( index ); for( i = 0; i < MAX_ENTITY_SHADER_PARMS; i++ ) { ReadFloat( renderEntity.shaderParms[ i ] ); } for( i = 0; i < MAX_RENDERENTITY_GUI; i++ ) { ReadUserInterface( renderEntity.gui[ i ] ); } // idEntity will restore "cameraTarget", which will be used in idEntity::Present to restore the remoteRenderView renderEntity.remoteRenderView = NULL; renderEntity.joints = NULL; renderEntity.numJoints = 0; ReadFloat( renderEntity.modelDepthHack ); ReadBool( renderEntity.noSelfShadow ); ReadBool( renderEntity.noShadow ); ReadBool( renderEntity.noDynamicInteractions ); ReadBool( renderEntity.weaponDepthHack ); ReadInt( renderEntity.forceUpdate ); ReadInt( renderEntity.timeGroup ); ReadInt( renderEntity.xrayIndex ); }
/* ** Updates metadata and settings when changed. ** */ void CDialogManage::CTabSkins::Update(CMeterWindow* meterWindow, bool deleted) { if (meterWindow) { if (!deleted && m_IgnoreUpdate) { // Changed setting from dialog, no need to update m_IgnoreUpdate = false; } else if (m_SkinWindow && m_SkinWindow == meterWindow) { // Update from currently open skin m_HandleCommands = false; if (deleted) { DisableControls(); m_SkinWindow = NULL; } else { SetControls(); } m_HandleCommands = true; } else if (wcscmp(meterWindow->GetFolderPath().c_str(), m_SkinFolderPath.c_str()) == 0 && wcscmp(meterWindow->GetFileName().c_str(), m_SkinFileName.c_str()) == 0) { ReadSkin(); } } else { // Populate tree HWND item = GetDlgItem(m_Window, IDC_MANAGESKINS_SKINS_TREEVIEW); TreeView_DeleteAllItems(item); TVINSERTSTRUCT tvi = {0}; tvi.hInsertAfter = TVI_LAST; tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvi.item.iImage = tvi.item.iSelectedImage = 0; if (!Rainmeter->m_SkinFolders.empty()) { PopulateTree(item, tvi); } } }
INT_PTR CDialogManage::CTabSkins::OnNotify(WPARAM wParam, LPARAM lParam) { LPNMHDR nm = (LPNMHDR)lParam; switch (nm->code) { case NM_CLICK: if (nm->idFrom == IDC_MANAGESKINS_ADDMETADATA_LINK) { std::wstring file = Rainmeter->GetSkinPath() + m_SkinFolderPath; file += L'\\'; file += m_SkinFileName; WritePrivateProfileString(L"Rainmeter", L"\r\n[Metadata]\r\nName=\r\nInformation=\r\nLicense=\r\nVersion", L"", file.c_str()); SendMessage(m_Window, WM_COMMAND, MAKEWPARAM(IDC_MANAGESKINS_EDIT_BUTTON, 0), 0); ShowWindow(nm->hwndFrom, SW_HIDE); } break; case NM_DBLCLK: if (nm->idFrom == IDC_MANAGESKINS_SKINS_TREEVIEW && !m_SkinFileName.empty()) { OnCommand(MAKEWPARAM(IDC_MANAGESKINS_LOAD_BUTTON, 0), 0); } break; case NM_RCLICK: if (nm->idFrom == IDC_MANAGESKINS_SKINS_TREEVIEW) { POINT pt; GetCursorPos(&pt); TVHITTESTINFO ht; ht.pt = pt; ScreenToClient(nm->hwndFrom, &ht.pt); if (TreeView_HitTest(nm->hwndFrom, &ht) && !(ht.flags & TVHT_NOWHERE)) { TreeView_SelectItem(nm->hwndFrom, ht.hItem); TVITEM tvi = {0}; tvi.hItem = TreeView_GetSelection(nm->hwndFrom); tvi.mask = TVIF_STATE; HMENU menu = LoadMenu(Rainmeter->GetResourceInstance(), MAKEINTRESOURCE(IDR_MANAGESKINS_MENU)); if (menu && TreeView_GetItem(nm->hwndFrom, &tvi)) { HMENU subMenu; MENUITEMINFO mii = {0}; mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_STRING; if (m_SkinFileName.empty()) { // It's a folder subMenu = GetSubMenu(menu, 0); SetMenuDefaultItem(subMenu, IDM_MANAGESKINSMENU_EXPAND, MF_BYCOMMAND); if (tvi.state & TVIS_EXPANDED) { mii.dwTypeData = GetString(ID_STR_COLLAPSE); SetMenuItemInfo(subMenu, IDM_MANAGESKINSMENU_EXPAND, MF_BYCOMMAND, &mii); } } else { // It's a skin subMenu = GetSubMenu(menu, 1); SetMenuDefaultItem(subMenu, IDM_MANAGESKINSMENU_LOAD, MF_BYCOMMAND); if (m_SkinWindow) { mii.dwTypeData = GetString(ID_STR_UNLOAD); SetMenuItemInfo(subMenu, IDM_MANAGESKINSMENU_LOAD, MF_BYCOMMAND, &mii); } else { EnableMenuItem(subMenu, IDM_MANAGESKINSMENU_REFRESH, MF_BYCOMMAND | MF_GRAYED); } } // Show context menu TrackPopupMenu( subMenu, TPM_RIGHTBUTTON | TPM_LEFTALIGN, pt.x, pt.y, 0, m_Window, NULL ); DestroyMenu(menu); } } } break; case TVN_SELCHANGED: if (nm->idFrom == IDC_MANAGESKINS_SKINS_TREEVIEW) { m_SkinWindow = NULL; m_SkinFileName.clear(); m_SkinFolderPath.clear(); // Temporarily disable handling commands m_HandleCommands = false; WCHAR buffer[MAX_PATH]; // Get current selection name TVITEM tvi = {0}; tvi.hItem = TreeView_GetSelection(nm->hwndFrom); tvi.mask = TVIF_TEXT | TVIF_CHILDREN; tvi.pszText = buffer; tvi.cchTextMax = MAX_PATH; TreeView_GetItem(nm->hwndFrom, &tvi); if (tvi.cChildren == 0) { // Current selection is file m_SkinFileName = buffer; tvi.mask = TVIF_TEXT; // Loop through parents to get skin folder m_SkinFolderPath.clear(); while ((tvi.hItem = TreeView_GetParent(nm->hwndFrom, tvi.hItem)) != NULL) { TreeView_GetItem(nm->hwndFrom, &tvi); m_SkinFolderPath.insert(0, 1, L'\\'); m_SkinFolderPath.insert(0, buffer); } m_SkinFolderPath.resize(m_SkinFolderPath.length() - 1); // Get rid of trailing slash ReadSkin(); } else { DisableControls(true); } m_HandleCommands = true; } break; default: return FALSE; } return TRUE; }