|
|
/****************************************************************************\
* * picsdlg.cpp * * Created: William Taylor (wtaylor) 01/22/01 * * MS Ratings Pics Ratings Property Page * \****************************************************************************/
#include "msrating.h"
#include "mslubase.h"
#include "picsdlg.h" // CPicsDialog
#include "debug.h" // TraceMsg()
#include <contxids.h> // Help Context ID's
#include <mluisupp.h> // SHWinHelpOnDemandWrap() and MLLoadStringA()
/*Helpers---------------------------------------------------------------------*/ int g_nKeys, g_nLock; // indexes of the images
DWORD CPicsDialog::aIds[] = { IDC_STATIC1, IDH_RATINGS_CATEGORY_LABEL, IDC_PT_TREE, IDH_RATINGS_CATEGORY_LIST, IDC_RATING_LABEL, IDH_RATINGS_RATING_LABEL, IDC_PT_TB_SELECT, IDH_RATINGS_RATING_LABEL, IDC_PT_T_RSN_SDESC, IDH_RATINGS_RATING_TEXT, IDC_STATIC2, IDH_RATINGS_DESCRIPTION_LABEL, IDC_PT_T_RSN_LDESC, IDH_RATINGS_DESCRIPTION_TEXT, IDC_STATIC3, IDH_RATINGS_VIEW_PROVIDER_PAGE, IDC_DETAILSBUTTON, IDH_RATINGS_VIEW_PROVIDER_PAGE, 0,0 };
CPicsDialog::CPicsDialog( PRSD * p_pPRSD ) { ASSERT( p_pPRSD ); m_pPRSD = p_pPRSD; }
LRESULT CPicsDialog::OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { TV_ITEM tvm; TreeNode *pTN;
InitTreeViewImageLists(GetDlgItem(IDC_PT_TREE));
//force the trackbar to redraw its background with the new color
PRSD * pPRSD = m_pPRSD;
ZeroMemory(&tvm,sizeof(tvm));
tvm.hItem=TreeView_GetSelection(GetDlgItem(IDC_PT_TREE)); tvm.mask=TVIF_PARAM;
TreeView_GetItem(GetDlgItem(IDC_PT_TREE),&tvm);
pTN=(TreeNode *) tvm.lParam;
ASSERT( pTN );
if ( ! pTN ) { TraceMsg( TF_ERROR, "CPicsDialog::OnSysColorChange() - pTN is NULL!" ); return 0L; }
ControlsShow( pTN->tne ); switch(pTN->tne) { case tneRatingSystemInfo: { SelectRatingSystemInfo( (PicsRatingSystem*) pTN->pData ); break; } case tneRatingSystemNode: { SelectRatingSystemNode( (PicsCategory*) pTN->pData ); break; } }
return 0L; }
LRESULT CPicsDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { PicsDlgInit();
bHandled = FALSE; return 1L; // Let the system set the focus
}
LRESULT CPicsDialog::OnScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { switch (LOWORD(wParam)){ case TB_THUMBTRACK: case TB_BOTTOM: case TB_ENDTRACK: case TB_LINEDOWN: case TB_LINEUP: case TB_PAGEDOWN: case TB_PAGEUP: case TB_THUMBPOSITION: case TB_TOP: NewTrackbarPosition(); MarkChanged(); break; }
return 0L; }
LRESULT CPicsDialog::OnDetails(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { LaunchRatingSystemSite(); return 0L; }
LRESULT CPicsDialog::OnSetActive(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) { PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CPicsDialog::OnSetActive() - pPRSD is NULL!" ); return 0L; }
if (pPRSD->fNewProviders) { //Means that user changed list of provider files
HWND hwndTree; hwndTree = GetDlgItem(IDC_PT_TREE); KillTree(hwndTree , TreeView_GetRoot(hwndTree)); pPRSD->fNewProviders = FALSE; PicsDlgInit(); }
bHandled = FALSE; return 0L; }
LRESULT CPicsDialog::OnApply(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) { LPPSHNOTIFY lpPSHNotify = (LPPSHNOTIFY) pnmh;
/*do apply stuff*/
PicsDlgSave();
if ( ! lpPSHNotify->lParam ) { // Apply
return PSNRET_NOERROR; }
// Do this if hit OK or Cancel, not Apply
OnReset( idCtrl, pnmh, bHandled );
return PSNRET_NOERROR; }
LRESULT CPicsDialog::OnReset(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) { // Do this if hit OK or Cancel, not Apply
HWND hDlg = m_hWnd; ASSERT( hDlg );
SendMessage(hDlg,WM_SETREDRAW, FALSE,0L); PicsDlgUninit(); SendMessage(hDlg,WM_SETREDRAW, TRUE,0L);
return 0L; }
LRESULT CPicsDialog::OnTreeItemExpanding(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) { LPNMTREEVIEW pNMTreeView = (LPNMTREEVIEW)pnmh;
if ( ! pNMTreeView ) { return 0L; }
if (pNMTreeView->action == TVE_COLLAPSE) { ::SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, TRUE); return 1L; //Suppress expanding tree.
}
return 0L; }
LRESULT CPicsDialog::OnTreeSelChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) { LPNMTREEVIEW pNMTreeView = (LPNMTREEVIEW)pnmh; TreeNode *pTN = pNMTreeView ? ((TreeNode*) pNMTreeView->itemNew.lParam) : NULL;
if ( ! pTN ) { TraceMsg( TF_ERROR, "CPicsDialog::OnTreeSelChanged() - pTN is NULL!" ); return 0L; }
PRSD * pPRSD = m_pPRSD;
if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CPicsDialog::OnTreeSelChanged() - pPRSD is NULL!" ); return 0L; }
if (pPRSD->fNewProviders) { return 1L; /* tree is being cleaned up, ignore sel changes */ }
ControlsShow( pTN->tne );
switch(pTN->tne) { case tneRatingSystemInfo: SelectRatingSystemInfo( (PicsRatingSystem*) pTN->pData ); break; case tneRatingSystemNode: SelectRatingSystemNode( (PicsCategory*) pTN->pData ); break; }
return 1L; }
LRESULT CPicsDialog::OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { SHWinHelpOnDemandWrap((HWND)((LPHELPINFO)lParam)->hItemHandle, ::szHelpFile, HELP_WM_HELP, (DWORD_PTR)(LPSTR)aIds);
return 0L; }
LRESULT CPicsDialog::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { SHWinHelpOnDemandWrap((HWND)wParam, ::szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)(LPVOID)aIds);
return 0L; }
// InitTreeViewImageLists - creates an image list, adds three bitmaps to
// it, and associates the image list with a tree-view control.
// Returns TRUE if successful or FALSE otherwise.
// hwndTV - handle of the tree-view control
//
#define NUM_BITMAPS 2
#define CX_BITMAP 16
#define CY_BITMAP 16
void CPicsDialog::SetTreeImages( HWND hwndTV, HIMAGELIST himl ) { HIMAGELIST oldHiml; // handle of image list
// Associate the image list with the tree-view control.
oldHiml = TreeView_SetImageList( hwndTV, himl, TVSIL_NORMAL );
if ( oldHiml != NULL ) { ImageList_Destroy( oldHiml ); } }
BOOL CPicsDialog::InitTreeViewImageLists(HWND hwndTV) { HIMAGELIST himl; // handle of image list
HBITMAP hbmp; // handle of bitmap
// Create the image list.
if ((himl = ImageList_Create(CX_BITMAP, CY_BITMAP, FALSE, NUM_BITMAPS, 0)) == NULL) { TraceMsg( TF_WARNING, "CPicsDialog::InitTreeViewImageLists() - himl Image List Creation Failed!" ); return FALSE; }
// Add the open file, closed file, and document bitmaps.
hbmp=(HBITMAP) LoadImage(g_hInstance, MAKEINTRESOURCE(IDB_KEYS), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); g_nKeys = ImageList_Add(himl, hbmp, (HBITMAP) NULL); DeleteObject(hbmp);
hbmp=(HBITMAP) LoadImage(g_hInstance, MAKEINTRESOURCE(IDB_LOCK), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); g_nLock = ImageList_Add(himl, hbmp, (HBITMAP) NULL); DeleteObject(hbmp);
// Fail if not all of the images were added.
if (ImageList_GetImageCount(himl) < NUM_BITMAPS) { TraceMsg( TF_WARNING, "CPicsDialog::InitTreeViewImageLists() - Not all images were added!" ); return FALSE; }
// Associate the image list with the tree-view control.
SetTreeImages( hwndTV, himl );
return TRUE; }
void CPicsDialog::LaunchRatingSystemSite( void ) { HWND hDlg = m_hWnd;
TreeNode *pTN = TreeView_GetSelectionLParam(GetDlgItem(IDC_PT_TREE)); if (pTN == NULL) return;
PicsRatingSystem *pPRS = NULL;
if (pTN->tne == tneRatingSystemInfo) pPRS = (PicsRatingSystem *)pTN->pData; else if (pTN->tne == tneRatingSystemNode) { if ((PicsCategory *)pTN->pData != NULL) pPRS = ((PicsCategory *)pTN->pData)->pPRS; }
if (pPRS != NULL) { BOOL fSuccess = FALSE; HINSTANCE hShell32 = ::LoadLibrary(::szShell32); if (hShell32 != NULL) { PFNSHELLEXECUTE pfnShellExecute = (PFNSHELLEXECUTE)::GetProcAddress(hShell32, ::szShellExecute); if (pfnShellExecute != NULL) { fSuccess = (*pfnShellExecute)(hDlg, NULL, pPRS->etstrRatingService.Get(), NULL, NULL, SW_SHOW) != NULL; } ::FreeLibrary(hShell32); } if (!fSuccess) { NLS_STR nlsMessage(MAX_RES_STR_LEN); if(nlsMessage) { NLS_STR nlsTemp(STR_OWNERALLOC, pPRS->etstrRatingSystem.Get()); const NLS_STR *apnls[] = { &nlsTemp, NULL }; if ( WN_SUCCESS == (nlsMessage.LoadString(IDS_CANT_LAUNCH, apnls)) ) { MyMessageBox(hDlg, nlsMessage.QueryPch(), IDS_GENERIC, MB_OK | MB_ICONSTOP); } } } } }
void CPicsDialog::PicsDlgInit( void ) { HTREEITEM hTree; TreeNode *pTN; HWND hwndTree; int x,z;
HWND hDlg = m_hWnd;
ASSERT( hDlg );
if ( ! hDlg ) { TraceMsg( TF_ERROR, "CPicsDialog::PicsDlgInit() - hDlg is NULL!" ); return; }
PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CPicsDialog::PicsDlgInit() - pPRSD is NULL!" ); return; }
hwndTree = GetDlgItem(IDC_PT_TREE);
/* Note, if there are installed providers but they all failed, there
* will be dummy entries for them in the array. So we will not attempt * to install RSACi automatically unless there really are no providers * installed at all. */ if (!pPRSD->pPRSI->arrpPRS.Length()) { // There are no providers.
if ( ! InstallDefaultProvider() ) { MyMessageBox(hDlg, IDS_INSTALL_INFO, IDS_GENERIC, MB_OK); ControlsShow( tneNone ); return; } } /*make the tree listing*/ /*Individual Rating Systems*/ InitTreeViewImageLists(hwndTree);
BOOL fAnyInvalid = FALSE; BOOL fAnyValid = FALSE; for (z = 0; z < pPRSD->pPRSI->arrpPRS.Length(); ++z) { PicsRatingSystem *pPRS = pPRSD->pPRSI->arrpPRS[z];
if (!(pPRS->dwFlags & PRS_ISVALID)) { fAnyInvalid = TRUE; continue; } fAnyValid = TRUE;
pTN = new TreeNode(tneRatingSystemInfo, pPRS); ASSERT(pTN); hTree = AddOneItem(hwndTree, NULL, (char*) pPRS->etstrName.Get(), TVI_SORT, (LPARAM) pTN, g_nLock); for (x = 0; x < pPRS->arrpPC.Length(); ++x) { AddCategory(pPRS->arrpPC[x], hwndTree, hTree); } TreeView_Expand(hwndTree, hTree, TVE_EXPAND); }
if (fAnyInvalid) { MyMessageBox(hDlg, IDS_INVALID_PROVIDERS, IDS_GENERIC, MB_OK | MB_ICONWARNING); }
if (fAnyValid) { HTREEITEM hTreeItem;
hTreeItem=TreeView_GetNextItem(hwndTree, TreeView_GetRoot(hwndTree),TVGN_CHILD);
if(hTreeItem!=NULL) { TreeView_SelectItem(hwndTree, hTreeItem); pTN = TreeView_GetSelectionLParam(GetDlgItem(IDC_PT_TREE)); if (pTN) { ControlsShow( pTN->tne );
switch(pTN->tne) { case tneRatingSystemInfo: SelectRatingSystemInfo( (PicsRatingSystem*) pTN->pData ); break; case tneRatingSystemNode: SelectRatingSystemNode( (PicsCategory*) pTN->pData ); break; } } } else { TreeView_SelectItem(hwndTree, TreeView_GetRoot(hwndTree));
pTN = TreeView_GetSelectionLParam(GetDlgItem(IDC_PT_TREE));
ControlsShow( tneRatingSystemInfo );
if ( pTN ) { SelectRatingSystemInfo( (PicsRatingSystem*) pTN->pData ); } } } else { ControlsShow( tneNone ); } }
void CPicsDialog::KillTree(HWND hwndTree, HTREEITEM hTree) { ASSERT( hwndTree );
while (hTree != NULL) { /* If this node has any items under it, delete them as well. */ HTREEITEM hChild = TreeView_GetChild( hwndTree, hTree ); if (hChild != NULL) { KillTree( hwndTree, hChild ); }
HTREEITEM hNext = TreeView_GetNextSibling( hwndTree, hTree );
TreeView_SelectItem( hwndTree, hTree ); delete TreeView_GetSelectionLParam( hwndTree ); TreeView_DeleteItem( hwndTree, hTree ); hTree = hNext; } }
void CPicsDialog::PicsDlgUninit( void ) { HWND hwndTree;
hwndTree = GetDlgItem(IDC_PT_TREE); KillTree( hwndTree, TreeView_GetRoot(hwndTree) );
// Remove the image list from the tree-view control.
SetTreeImages( hwndTree, NULL );
PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
/* If we have a temporary copy of the user's ratings list, destroy it. */ if ( pPRSD && pPRSD->pTempRatings != NULL ) { DestroyRatingSystemList(pPRSD->pTempRatings); pPRSD->pTempRatings = NULL; }
ControlsShow( tneNone ); }
void CPicsDialog::PicsDlgSave( void ) { PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CPicsDialog::PicsDlgSave() - pPRSD is NULL!" ); return; }
/* To save changes, throw away the user's ratings list and steal the
* temporary copy we're using in the dialog. As an optimization, we * don't copy it here, because in the case of OK, we'd just be destroying * the original immediately after this. If the user hit Apply, we'll * re-clone a new temp ratings list for the dialog's purpose the next * time we need one. * * If there is no temporary copy, then PicsDlgSave is a nop. */ if (pPRSD->pTempRatings != NULL) { DestroyRatingSystemList(pPRSD->pPU->m_pRatingSystems); pPRSD->pPU->m_pRatingSystems = pPRSD->pTempRatings; pPRSD->pTempRatings = NULL; } }
#ifdef RATING_LOAD_GRAPHICS /* loading icon out of msrating.dll? completely bogus. */
POINT CPicsDialog::BitmapWindowCoord( int nID ) { POINT pt; RECT rD, rI;
pt.x = ::GetWindowRect(GetDlgItem(nID), &rI); pt.y = GetWindowRect(&rD); pt.x = rI.left - rD.left; pt.y = rI.top - rD.top; return pt; }
void CPicsDialog::LoadGraphic( char *pIcon, POINT pt ) { HICON hIcon; int i;
MyAtoi(pIcon, &i);
PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CPicsDialog::LoadGraphic() - pPRSD is NULL!" ); return; }
// No need to pull from msratelc.dll for non-localized icons.
hIcon = pIcon ? LoadIcon( g_hInstance, MAKEINTRESOURCE(i) ) : NULL; if (hIcon) { HWND hwndBitmapCategory;
HWND hDlg = m_hWnd;
ASSERT( hDlg );
if ( ! hDlg ) { TraceMsg( TF_ERROR, "CPicsDialog::LoadGraphic() - hDlg is NULL!" ); return; }
hwndBitmapCategory = CreateWindow("Static",NULL,SS_ICON|WS_CHILD, pt.x, pt.y,0,0,hDlg, NULL,NULL,0); ::ShowWindow( hwndBitmapCategory, SW_SHOW ); DeleteObject( (HGDIOBJ) SendMessage( hwndBitmapCategory, STM_SETIMAGE, IMAGE_ICON, (LPARAM) hIcon) );
pPRSD->hwndBitmapCategory = hwndBitmapCategory; } } #endif /* RATING_LOAD_GRAPHICS */
PicsEnum* CPicsDialog::PosToEnum(PicsCategory *pPC, LPARAM lPos) { int z, diff=-1, temp; PicsEnum *pPE=NULL;
for (z=0;z<pPC->arrpPE.Length();++z){ temp = (int) (lPos-pPC->arrpPE[z]->etnValue.Get()); if (temp>=0){ if (temp<diff || diff==-1){ diff = temp; pPE = pPC->arrpPE[z]; } } }
return pPE; }
void CPicsDialog::NewTrackbarPosition( void ) { signed long lPos; TreeNode *pTN; PicsEnum *pPE; PicsCategory *pPC;
PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CPicsDialog::NewTrackbarPosition() - pPRSD is NULL!" ); return; }
DeleteBitmapWindow( pPRSD->hwndBitmapLabel );
pTN = TreeView_GetSelectionLParam(GetDlgItem(IDC_PT_TREE)); if (pTN == NULL) return;
pPC = (PicsCategory*) pTN->pData; BOOL fLabelled = pPC->etfLabelled.fIsInit() && pPC->etfLabelled.Get();
lPos = (long) SendMessage(GetDlgItem(IDC_PT_TB_SELECT), TBM_GETPOS, 0, 0); pPE = PosToEnum(pPC, fLabelled ? (LPARAM) pPC->arrpPE[lPos]->etnValue.Get() : lPos); if (pPE) { ::SetWindowText(GetDlgItem(IDC_PT_T_RSN_SDESC), pPE->etstrName.Get()); ::SetWindowText(GetDlgItem(IDC_PT_T_RSN_LDESC), pPE->etstrDesc.fIsInit() ? pPE->etstrDesc.Get() : szNULL);
} else { char pszBuf[MAXPATHLEN]; char rgBuf[sizeof(pszBuf) + 12]; // big enough to insert a number
MLLoadStringA(IDS_VALUE, pszBuf, sizeof(pszBuf)); wsprintf(rgBuf, pszBuf, lPos); ::SetWindowText(GetDlgItem(IDC_PT_T_RSN_SDESC), rgBuf); ::SetWindowText(GetDlgItem(IDC_PT_T_RSN_LDESC), pPC->etstrDesc.fIsInit() ? pPC->etstrDesc.Get() : szNULL); }
/* save the selected value into the temporary ratings list */ UserRating *pRating = GetTempRating( pPC ); if (pRating != NULL) { pRating->m_nValue = (int) (fLabelled ? pPC->arrpPE[lPos]->etnValue.Get() : lPos); } }
void CPicsDialog::SelectRatingSystemNode( PicsCategory *pPC ) { HWND hwnd; BOOL fLabelOnly; LPARAM lValue; int z;
ASSERT( pPC );
if ( ! pPC ) { TraceMsg( TF_ERROR, "CPicsDialog::SelectRatingSystemNode() - pPC is NULL!" ); return; }
#ifdef RATING_LOAD_GRAPHICS
/*Category Icon*/ if (pPC->etstrIcon.fIsInit()) { // Load Graphic to m_pPRSD->hwndBitmapCategory
LoadGraphic( pPC->etstrIcon.Get(), BitmapWindowCoord( IDC_PT_T_BITMAP_LABEL ) ); } #endif
/*Setup Trackbar*/ if ((pPC->etnMax.fIsInit() && P_INFINITY==pPC->etnMax.Get()) || (pPC->etnMin.fIsInit() && N_INFINITY==pPC->etnMin.Get()) || (!(pPC->etnMin.fIsInit() && pPC->etnMax.fIsInit())) ) { ShowHideControl( IDC_PT_T_RSN_SDESC, FALSE ); ShowHideControl( IDC_PT_T_RSN_LDESC, FALSE ); ShowHideControl( IDC_PT_TB_SELECT, FALSE ); } else { hwnd = GetDlgItem(IDC_PT_TB_SELECT); SendMessage(hwnd, TBM_CLEARTICS, TRUE, 0);
fLabelOnly = pPC->etfLabelled.fIsInit() && pPC->etfLabelled.Get(); /*Ranges*/ if (pPC->etnMax.fIsInit()) { lValue = (LPARAM) ( fLabelOnly ? pPC->arrpPE.Length()-1 : pPC->etnMax.Get() ); SendMessage(hwnd, TBM_SETRANGEMAX, TRUE, lValue); ASSERT(lValue == SendMessage(hwnd, TBM_GETRANGEMAX, 0,0)); } if (pPC->etnMin.fIsInit()) { lValue = (LPARAM) ( fLabelOnly ? 0 : pPC->etnMin.Get() ); SendMessage(hwnd, TBM_SETRANGEMIN, TRUE, lValue); ASSERT(lValue == SendMessage(hwnd, TBM_GETRANGEMIN, 0,0)); }
/*Ticks*/ for (z=0;z<pPC->arrpPE.Length();++z) { lValue = (LPARAM) ( fLabelOnly ? z : pPC->arrpPE[z]->etnValue.Get()); SendMessage(hwnd, TBM_SETTIC, 0, lValue); }
/*Initial Position of trackbar*/ UserRating *pRating = GetTempRating( pPC );
if (pRating != NULL) { if (fLabelOnly) { for (z=0;z<pPC->arrpPE.Length();++z) { if (pPC->arrpPE[z]->etnValue.Get() == pRating->m_nValue) { lValue=z; break; } } } else { lValue = (LPARAM) pRating->m_nValue; } } else { lValue = (LPARAM) ( fLabelOnly ? 0 : pPC->etnMin.Get()); }
SendMessage(hwnd, TBM_SETPOS, TRUE, lValue);
// On dialog close, setting the trackbar position fails.
// ASSERT(lValue == SendMessage(hwnd, TBM_GETPOS, 0,0));
NewTrackbarPosition(); } }
void CPicsDialog::SelectRatingSystemInfo( PicsRatingSystem *pPRS ) { ASSERT( pPRS );
if ( ! pPRS ) { TraceMsg( TF_ERROR, "CPicsDialog::SelectRatingSystemInfo() - pPRS is NULL!" ); return; }
::SetWindowText(GetDlgItem(IDC_PT_T_RSN_LDESC), pPRS->etstrDesc.Get());
#ifdef RATING_LOAD_GRAPHICS
if (pPRS->etstrIcon.fIsInit()) { // Load Graphic to m_pPRSD->hwndBitmapCategory
LoadGraphic( pPRS->etstrIcon.Get(), BitmapWindowCoord( IDC_PT_T_BITMAP_LABEL ) ); } #endif
}
void CPicsDialog::DeleteBitmapWindow( HWND & p_rhwnd ) { if (p_rhwnd) { DeleteObject( (HGDIOBJ) SendMessage(p_rhwnd, STM_GETIMAGE, IMAGE_BITMAP, 0)); ::DestroyWindow(p_rhwnd); p_rhwnd = 0; } }
void CPicsDialog::ControlsShow( TreeNodeEnum tne ) { BOOL fEnable;
/*Bitmap placeholders never need to be seen*/ ShowHideControl( IDC_PT_T_BITMAP_CATEGORY, FALSE ); ShowHideControl( IDC_PT_T_BITMAP_LABEL, FALSE );
PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
/*Kill old graphic windows*/ if ( pPRSD ) { DeleteBitmapWindow( pPRSD->hwndBitmapCategory ); DeleteBitmapWindow( pPRSD->hwndBitmapLabel ); }
/*RatingSystemNode Controls*/ fEnable = (tne == tneRatingSystemNode);
ShowHideControl( IDC_PT_T_RSN_SDESC, fEnable ); ShowHideControl( IDC_PT_TB_SELECT, fEnable ); ShowHideControl( IDC_RATING_LABEL, fEnable );
/*RatingSystemInfo Controls*/ fEnable = (tne==tneRatingSystemInfo || tne==tneRatingSystemNode);
ShowHideControl( IDC_PT_T_RSN_LDESC, fEnable); ShowHideControl( IDC_DETAILSBUTTON, fEnable); }
TreeNode* CPicsDialog::TreeView_GetSelectionLParam(HWND hwndTree){ TV_ITEM tv;
tv.mask = TVIF_HANDLE | TVIF_PARAM; tv.hItem = TreeView_GetSelection(hwndTree); if (SendMessage(hwndTree, TVM_GETITEM, 0, (LPARAM) &tv)) return (TreeNode*) tv.lParam; else return 0; }
HTREEITEM CPicsDialog::AddOneItem(HWND hwndTree, HTREEITEM hParent, LPSTR szText, HTREEITEM hInsAfter, LPARAM lpData, int iImage){ HTREEITEM hItem; TV_ITEM tvI; TV_INSERTSTRUCT tvIns;
// The .pszText is filled in.
tvI.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvI.iSelectedImage = iImage; tvI.iImage = iImage; tvI.pszText = szText; tvI.cchTextMax = strlenf(szText); tvI.lParam = lpData;
tvIns.item = tvI; tvIns.hInsertAfter = hInsAfter; tvIns.hParent = hParent;
// Insert the item into the tree.
hItem = (HTREEITEM)SendMessage(hwndTree, TVM_INSERTITEM, 0, (LPARAM)(LPTV_INSERTSTRUCT)&tvIns);
return (hItem); }
void CPicsDialog::AddCategory(PicsCategory *pPC, HWND hwndTree, HTREEITEM hParent){ int z; char *pc; TreeNode *pTN;
/*if we have a real name, us it, else use transmission name*/ if (pPC->etstrName.fIsInit()) { pc = pPC->etstrName.Get(); } else if (pPC->etstrDesc.fIsInit()) { pc = pPC->etstrDesc.Get(); } else { pc = (char*) pPC->etstrTransmitAs.Get(); }
/*Category Tab*/ pTN = new TreeNode(tneRatingSystemNode, pPC); ASSERT(pTN);
/*insert self*/ hParent = AddOneItem(hwndTree, hParent, pc, TVI_SORT, (LPARAM) pTN, g_nKeys);
/*insert children*/ int cChildren = pPC->arrpPC.Length();
if (cChildren > 0) { for (z = 0; z < cChildren; ++z) AddCategory(pPC->arrpPC[z], hwndTree, hParent); TreeView_Expand(hwndTree, hParent, TVE_EXPAND); } }
BOOL CPicsDialog::InstallDefaultProvider( void ) { NLS_STR nlsFilename(MAXPATHLEN); BOOL fRet = FALSE;
PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CPicsDialog::InstallDefaultProvider() - pPRSD is NULL!" ); return fRet; }
if (nlsFilename.QueryError() != ERROR_SUCCESS) { TraceMsg( TF_ERROR, "CPicsDialog::InstallDefaultProvider() - nlsFilename Allocation Failed!" ); return fRet; }
CHAR * pszFileName = nlsFilename.Party();
if (pszFileName) { GetSystemDirectory(pszFileName, nlsFilename.QueryAllocSize()); nlsFilename.DonePartying(); LPSTR pszBackslash = ::strrchrf(nlsFilename.QueryPch(), '\\'); if (pszBackslash == NULL || *(pszBackslash+1) != '\0') nlsFilename.strcat(szBACKSLASH); nlsFilename.strcat(szDEFAULTRATFILE);
PicsRatingSystem *pPRS; HRESULT hres = LoadRatingSystem(nlsFilename.QueryPch(), &pPRS); if (pPRS != NULL) { pPRSD->pPRSI->arrpPRS.Append(pPRS); fRet = TRUE; }
pPRSD->pPRSI->fRatingInstalled = fRet;
CheckUserSettings(pPRS); /* give user default settings for all categories */ } else { nlsFilename.DonePartying(); }
return fRet; }
/* GetTempRatingList returns the dialog's temporary copy of the user's rating
* system list. If we don't have any such temporary copy yet, we make one. */ UserRatingSystem * CPicsDialog::GetTempRatingList( void ) { PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
if ( ! pPRSD ) { TraceMsg( TF_ERROR, "CPicsDialog::GetTempRatingList() - pPRSD is NULL!" ); return NULL; }
if (pPRSD->pTempRatings == NULL) { pPRSD->pTempRatings = DuplicateRatingSystemList(pPRSD->pPU->m_pRatingSystems); }
return pPRSD->pTempRatings; }
UserRating * CPicsDialog::GetTempRating( PicsCategory *pPC ) { UserRating *pRating = NULL;
/* save the selected value into the temporary ratings list */ UserRatingSystem *pURS = GetTempRatingList(); LPSTR pszRatingService = pPC->pPRS->etstrRatingService.Get(); if (pURS != NULL) { pURS = FindRatingSystem(pURS, pszRatingService); }
if (pURS == NULL) { pURS = new UserRatingSystem; if (pURS == NULL) { TraceMsg( TF_ERROR, "CPicsDialog::GetTempRating() - pURS is NULL!" ); return NULL; }
PRSD * pPRSD = m_pPRSD;
ASSERT( pPRSD );
pURS->SetName(pszRatingService); pURS->m_pNext = pPRSD ? pPRSD->pTempRatings : NULL; pURS->m_pPRS = pPC->pPRS; if ( pPRSD ) { pPRSD->pTempRatings = pURS; } }
LPSTR pszRatingName = pPC->etstrTransmitAs.Get();
pRating = pURS->FindRating(pszRatingName); if (pRating == NULL) { pRating = new UserRating; if (pRating == NULL) { TraceMsg( TF_ERROR, "CPicsDialog::GetTempRating() - pRating is NULL!" ); return NULL; }
pRating->SetName(pszRatingName); pRating->m_pPC = pPC; if (!pPC->etnMin.fIsInit() || (pPC->etfLabelled.fIsInit() && pPC->etfLabelled.Get())) { pRating->m_nValue = 0; } else { pRating->m_nValue = pPC->etnMin.Get(); }
pURS->AddRating(pRating); }
return pRating; }
|