// Refresh page contents. void KeyboardPage::RefreshData( LPPARSER pParser ) { _ASSERT_VALID( pParser ); // Save parser. m_pParser = pParser; // Reset list box. m_Keys.SetRedraw( FALSE ); m_Keys.ResetContent(); // Go through the key hashes. LPHASH lpHash, lpNext; TCHAR szKeyString[ 256 ]; for ( int i = 0; i < HASHSIZE; i++ ) { for ( lpHash = pParser->aHash[ i ]; lpHash; lpHash = lpNext ) { // Pick up next hash in this chain. lpNext = lpHash->lpNext; // Convert code and qualifier into // a string. ::CodeQual2Str( lpHash->cCode, lpHash->cQual, szKeyString, 256 ); // Add the string to the list. m_Keys.AddString( szKeyString ); } } m_Keys.SetRedraw(); // Setup the GUI. SetupControls(); }
bool CGUIWindowSettingsCategory::OnAction(const CAction &action) { switch (action.GetID()) { case ACTION_SETTINGS_LEVEL_CHANGE: { //Test if we can access the new level if (!g_passwordManager.CheckSettingLevelLock(CViewStateSettings::GetInstance().GetNextSettingLevel(), true)) return false; CViewStateSettings::GetInstance().CycleSettingLevel(); CSettings::GetInstance().Save(); // try to keep the current position std::string oldCategory; if (m_iCategory >= 0 && m_iCategory < (int)m_categories.size()) oldCategory = m_categories[m_iCategory]->GetId(); SET_CONTROL_LABEL(CONTRL_BTN_LEVELS, 10036 + (int)CViewStateSettings::GetInstance().GetSettingLevel()); // only re-create the categories, the settings will be created later SetupControls(false); m_iCategory = 0; // try to find the category that was previously selected if (!oldCategory.empty()) { for (int i = 0; i < (int)m_categories.size(); i++) { if (m_categories[i]->GetId() == oldCategory) { m_iCategory = i; break; } } } CreateSettings(); return true; } default: break; } return CGUIDialogSettingsManagerBase::OnAction(action); }
// WM_INITDIALOG handler. LRESULT KeywordEdit::OnInitDialog( LPPROPSHEETPAGE pPsp ) { // Setup controls. m_Tools.Attach( GetDlgItemHandle( IDC_TOOLS )); m_Tools.SetupToolbar( TRUE, FALSE, FALSE, TRUE, TRUE ); m_Keys.Attach( GetDlgItemHandle( IDC_KEYS )); m_Keys.SetupToolbar( FALSE, FALSE, TRUE, FALSE ); m_List.Attach( GetDlgItemHandle( IDC_LIST )); m_KeyList.Attach( GetDlgItemHandle( IDC_WORDS )); m_Case.Attach( GetDlgItemHandle( IDC_CASE )); // Setup values. m_Case.SetCheck( m_bCase ? BST_CHECKED : BST_UNCHECKED ); m_List.SetKeywordList( &m_KeyLst ); // Setup the GUI. SetupControls(); return TRUE; }
void MsnWepDlg::Show() { FormWindow::Show(); ShowMsnDlg(); if (mission) { for (int i = 0; i < mission->GetElements().size(); i++) { MissionElement* e = mission->GetElements().at(i); if (e->Player()) { elem = e; break; } } } if (elem) { SetupControls(); } }
void CSettingsPage::UpdateBrother() { if(!m_dad->m_Brother){ TRACE0("No brother on update\n"); return; } if(::IsWindow(m_hWnd)) UpdateData(); CBrother toCompare; toCompare = *m_dad->m_Brother; m_dad->m_Brother->m_IntervalBad=m_IntervalBad; m_dad->m_Brother->m_IntervalGood=m_IntervalGood; if(m_OverrideIntervals) m_dad->m_Brother->flags|=CBrother::flagsOverrideIntervals; else m_dad->m_Brother->flags&=~CBrother::flagsOverrideIntervals; m_dad->m_Brother->m_Retries=m_Retries; if(m_OverrideRetries) m_dad->m_Brother->flags|=CBrother::flagsOverrideRetries; else m_dad->m_Brother->flags&=~CBrother::flagsOverrideRetries; m_dad->m_Brother->m_TimeOut=m_TimeOut; if(m_OverrideTimeout) m_dad->m_Brother->flags|=CBrother::flagsOverrideTimeout; else m_dad->m_Brother->flags&=~CBrother::flagsOverrideTimeout; m_dad->m_Brother->ParentalAdjust(); if(toCompare!=(*m_dad->m_Brother)){ CDocument *pDoc = m_dad->m_Daddy->GetDocument(); ASSERT(pDoc); pDoc->SetModifiedFlag(); } if(::IsWindow(m_hWnd)){ UpdateData(FALSE); SetupControls(); } }
void CSettingsPage::UpdatePage() { if(!m_dad->m_Brother) return; if(::IsWindow(m_hWnd)){ if(m_dad->m_Brother->m_Daddy){ m_OverrideIntervalsCtl.EnableWindow(TRUE); m_OverrideRetriesCtl.EnableWindow(TRUE); m_OverrideTimeoutCtl.EnableWindow(TRUE); }else{ m_OverrideIntervalsCtl.EnableWindow(FALSE); m_OverrideRetriesCtl.EnableWindow(FALSE); m_OverrideTimeoutCtl.EnableWindow(FALSE); } } if(m_dad->m_Brother->flags&CBrother::flagsOverrideIntervals) m_OverrideIntervals=TRUE; else m_OverrideIntervals=FALSE; if(m_dad->m_Brother->flags&CBrother::flagsOverrideTimeout) m_OverrideTimeout=TRUE; else m_OverrideTimeout=FALSE; if(m_dad->m_Brother->flags&CBrother::flagsOverrideRetries) m_OverrideRetries=TRUE; else m_OverrideRetries=FALSE; m_IntervalBad=m_dad->m_Brother->m_IntervalBad; m_IntervalGood=m_dad->m_Brother->m_IntervalGood; m_Retries=m_dad->m_Brother->m_Retries; m_TimeOut=m_dad->m_Brother->m_TimeOut; if(::IsWindow(m_hWnd)){ UpdateData(FALSE); SetupControls(); } }
void psMovementManager::SetActor(GEMClientActor* a) { actor = a ? a : psengine->GetCelClient()->GetMainPlayer() ; CS_ASSERT(actor); SetupControls(); }
/* This processes SDL events */ void I_GetEvent() { static event_t event; static event_t kbevent; unsigned long key; if(!controls_set) SetupControls(); event.type = ev_joystick; event.data1 = 0; event.data2 = 0; event.data3 = 0; key = Read_Key(); if (analog) { if (ctl.ly >= 0xD0) event.data3 = 1; // DOWN if (ctl.ly <= 0x10) event.data3 = -1; // UP if (ctl.lx <= 0x10) event.data2 = -1; // LEFT if (ctl.lx >= 0xD0) event.data2 = 1; // RIGHT } else { if (ctl.buttons & SCE_CTRL_DOWN) event.data3 = 1; // DOWN if (ctl.buttons & SCE_CTRL_UP) event.data3 = -1; // UP if (ctl.buttons & SCE_CTRL_LEFT) event.data2 = -1; // LEFT if (ctl.buttons & SCE_CTRL_RIGHT) event.data2 = 1; // RIGHT } //printf("I_GetEvent: buttons: 0x%x data1: %d data2: %d data3: %d", ctl.buttons, event.data1, event.data2, event.data3); D_PostEvent(&event); if (key & SCE_CTRL_LTRIGGER) { if (key & SCE_CTRL_RTRIGGER) { if (key & SCE_CTRL_START) { NewPrompter(); I_FinishUpdate2(); } } } else { if (d_controls[1] == KEY_ENTER || d_controls[1] == KEY_ESCAPE || d_controls[1] == ' ' || d_controls[1] == KEY_TAB) { if (key & SCE_CTRL_START) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[1]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[1]; D_PostEvent(&kbevent); } } else { if (ctl.buttons & SCE_CTRL_START) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[1]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[1]; D_PostEvent(&kbevent); } } if (d_controls[2] == KEY_ENTER || d_controls[2] == KEY_ESCAPE || d_controls[2] == ' ' || d_controls[2] == KEY_TAB) { if (key & SCE_CTRL_SELECT) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[2]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[2]; D_PostEvent(&kbevent); } } else { if (ctl.buttons & SCE_CTRL_SELECT) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[2]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[2]; D_PostEvent(&kbevent); } } if (d_controls[3] == KEY_ENTER || d_controls[3] == KEY_ESCAPE || d_controls[3] == ' ' || d_controls[3] == KEY_TAB) { if (key & SCE_CTRL_CROSS) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[3]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[3]; D_PostEvent(&kbevent); } } else { if (ctl.buttons & SCE_CTRL_CROSS) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[3]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[3]; D_PostEvent(&kbevent); } } if (gamestate == GS_LEVEL) { boolean looped = false; plyrweap = &players[consoleplayer]; num = plyrweap->readyweapon; if (analog) { if (key & SCE_CTRL_UP) { looped = false; while (1) { ++num; if (num > wp_supershotgun) { if (looped) { num = plyrweap->readyweapon; break; } num = wp_fist; looped = true; } if (plyrweap->weaponowned[num]) { plyrweap->pendingweapon = num; break; } } kbevent.type = ev_keydown; kbevent.data1 = KEY_1 + num; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = KEY_1 + num; D_PostEvent(&kbevent); } if (key & SCE_CTRL_DOWN) { looped = false; while (1) { --num; if (num == -1) { if (looped) { num = plyrweap->readyweapon; break; } num = wp_supershotgun; looped = true; } if (plyrweap->weaponowned[num]) { plyrweap->pendingweapon = num; break; } } kbevent.type = ev_keydown; kbevent.data1 = KEY_1 + num; D_PostEvent(&kbevent); } } if (!analog) { if (ctl.ly <= 0x10) { looped = false; while (1) { ++num; if (num > wp_supershotgun) { if (looped) { num = plyrweap->readyweapon; break; } num = wp_fist; looped = true; } if (plyrweap->weaponowned[num]) { plyrweap->pendingweapon = num; break; } } kbevent.type = ev_keydown; kbevent.data1 = KEY_1 + num; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = KEY_1 + num; D_PostEvent(&kbevent); } if (ctl.ly >= 0xD0) { looped = false; while (1) { --num; if (num == -1) { if (looped) { num = plyrweap->readyweapon; break; } num = wp_supershotgun; looped = true; } if (plyrweap->weaponowned[num]) { plyrweap->pendingweapon = num; break; } } kbevent.type = ev_keydown; kbevent.data1 = KEY_1 + num; D_PostEvent(&kbevent); } } } if (d_controls[5] == KEY_ENTER || d_controls[5] == KEY_ESCAPE || d_controls[5] == ' ' || d_controls[5] == KEY_TAB) { if (key & SCE_CTRL_TRIANGLE) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[5]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[5]; D_PostEvent(&kbevent); } } else { if (ctl.buttons & SCE_CTRL_TRIANGLE) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[5]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[5]; D_PostEvent(&kbevent); } } if (d_controls[8] == KEY_ENTER || d_controls[8] == KEY_ESCAPE || d_controls[8] == ' ' || d_controls[8] == KEY_TAB) { if (key & SCE_CTRL_LTRIGGER) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[8]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[8]; D_PostEvent(&kbevent); } } else { if (ctl.buttons & SCE_CTRL_LTRIGGER) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[8]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[8]; D_PostEvent(&kbevent); } } if (d_controls[9] == KEY_ENTER || d_controls[9] == KEY_ESCAPE || d_controls[9] == ' ' || d_controls[9] == KEY_TAB) { if (key & SCE_CTRL_RTRIGGER) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[9]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[9]; D_PostEvent(&kbevent); } } else { if (ctl.buttons & SCE_CTRL_RTRIGGER) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[9]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[9]; D_PostEvent(&kbevent); } } if (d_controls[6] == KEY_ENTER || d_controls[6] == KEY_ESCAPE || d_controls[6] == ' ' || d_controls[6] == KEY_TAB) { if(key & SCE_CTRL_SQUARE){ kbevent.type = ev_keydown; kbevent.data1 = d_controls[6]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[6]; D_PostEvent(&kbevent); } } else { if(ctl.buttons & SCE_CTRL_SQUARE){ kbevent.type = ev_keydown; kbevent.data1 = d_controls[6]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[6]; D_PostEvent(&kbevent); } } if (d_controls[7] == KEY_ENTER || d_controls[7] == KEY_ESCAPE || d_controls[7] == ' ' || d_controls[7] == KEY_TAB) { if(key & SCE_CTRL_CIRCLE) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[7]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[7]; D_PostEvent(&kbevent); } } else { if(ctl.buttons & SCE_CTRL_CIRCLE) { kbevent.type = ev_keydown; kbevent.data1 = d_controls[7]; D_PostEvent(&kbevent); } else { kbevent.type = ev_keyup; kbevent.data1 = d_controls[7]; D_PostEvent(&kbevent); } } } }
// WM_COMMAND handler. LRESULT KeyboardPage::OnCommand( UINT nNotifyCode, UINT nCtrlID, HWND hWndCtrl ) { // What's up? switch ( nCtrlID ) { case EditToolbar::ETID_NEW: // Command toolbar? if ( hWndCtrl == m_ComTools ) { // Obtain button rectangle. ClsRect rc; m_ComTools.GetItemRect( 0, rc ); // Convert rectangle to screen // coordinates. m_ComTools.ClientToScreen( rc ); // Show the menu. ::TrackPopupMenuEx( m_Menu,//*m_Menu.GetSubMenu( 0 ), TPM_LEFTALIGN, rc.Left(), rc.Bottom(), GetSafeHWND(), NULL ); } else { // Show the key recorder. KeyRec kr; ClsString str; if ( kr.KeyRecord( *GetParent(), str )) AddKeyMapping( str ); } return 0; case EditToolbar::ETID_DELETE: // Command toolbar? if ( hWndCtrl == m_ComTools ) { // Get current selection. LPCNODE pCNode = ( LPCNODE )m_Commands.GetItemData( m_Commands.GetCurSel()); if ( pCNode != ( LPCNODE )LB_ERR ) { // Save selection position. int nSel = m_Commands.GetCurSel(); int nPos = nSel; int nMax = m_Commands.GetCount(); // Select the next or previous // entry. if ( nSel == nMax - 1 && nSel ) nSel--; else nSel++; // Select the new item m_Commands.SetCurSel( nSel ); // Remove the node from the listview. m_Commands.DeleteString( nPos ); // Remove it from the command list. Remove(( LPNODE )pCNode ); // Free the node // data. if ( pCNode->nType != CTYPE_HARDCODED ) ::FreePooled( pParserPool, pCNode->pcStr ); // And the node itself. ::FreePooled( pParserPool, pCNode ); // Setup GUI. SetupControls(); pSettings->Changed( m_pParser ); } return 0; } else { // Get the key descriptor. TCHAR szKeyString[ 64 ]; int nSel = m_Keys.GetCurSel(), nMax = m_Keys.GetCount(); if ( nSel != LB_ERR ) { if ( m_Keys.GetText( nSel, szKeyString ) != LB_ERR ) { // Convert to a code and qualifier. TCHAR cCode, cQual; if ( ::Str2CodeQual( szKeyString, &cCode, &cQual )) { // Remove the hash. This will automatically destroy // the command-list aswell. ::RemHash( pParserPool, m_pParser->aHash, cCode, cQual ); // Remove it from the listview. m_Keys.DeleteString( nSel ); // Was it the last one? if ( nSel == nMax - 1 ) nSel--; // Select the next or previous key. m_Keys.SetCurSel( nSel ); SendMessage( WM_COMMAND, MAKEWPARAM( IDC_KEYS, LBN_SELCHANGE ), ( LPARAM )m_Keys.GetSafeHWND()); // Changes made... pSettings->Changed( m_pParser ); } } } } return 0; case EditToolbar::ETID_UP: { // Valid node? LPCNODE pCNode = ( LPCNODE )m_Commands.GetItemData( m_Commands.GetCurSel()); if ( pCNode != ( LPCNODE )LB_ERR ) { // Get it's predecessor. LPCNODE pCPrev = pCNode->lpPrev; // Swap both data entries. CNODE cTemp; cTemp.nType = pCPrev->nType; cTemp.uCommand = pCPrev->uCommand; pCPrev->nType = pCNode->nType; pCPrev->uCommand = pCNode->uCommand; pCNode->nType = cTemp.nType; pCNode->uCommand = cTemp.uCommand; // Select the previous item which // in fact is the already selected // item. m_Commands.SetCurSel( m_Commands.GetCurSel() - 1 ); SetupControls(); pSettings->Changed( m_pParser ); return 0; } } case EditToolbar::ETID_DOWN: { // Valid node? LPCNODE pCNode = ( LPCNODE )m_Commands.GetItemData( m_Commands.GetCurSel()); if ( pCNode != ( LPCNODE )LB_ERR ) { // Get it's successor. LPCNODE pCNext = pCNode->lpNext; // Swap both data entries. CNODE cTemp; cTemp.nType = pCNext->nType; cTemp.uCommand = pCNext->uCommand; pCNext->nType = pCNode->nType; pCNext->uCommand = pCNode->uCommand; pCNode->nType = cTemp.nType; pCNode->uCommand = cTemp.uCommand; // Select the next item which // in fact is the already selected // item. m_Commands.SetCurSel( m_Commands.GetCurSel() + 1 ); SetupControls(); pSettings->Changed( m_pParser ); return 0; } } case IDS_INSERT: CreateNode( CTYPE_TEXT, ( LPVOID )( LPCTSTR )ClsString( MAKEINTRESOURCE( IDS_NEWINSERT ))); return 0; case IDS_HARDCODED: CreateNode( CTYPE_HARDCODED, ( LPVOID )( ::GetCommandTable()->nCommandID )); return 0; case IDS_RUN: CreateNode( CTYPE_RUN, ( LPVOID )( _T( "Calc.exe" ))); return 0; case IDS_OPEN: CreateNode( CTYPE_SHELLOPEN, ( LPVOID )( _T( "ReadMe.txt" ))); return 0; case IDC_KEYS: if ( nNotifyCode == LBN_SELCHANGE ) { // Get the current selection. LPHASH pSel = GetSelection(); if ( pSel ) { // Clear the contents of the command list. m_Commands.ResetContent(); // Add commands. LPCNODE pNode; for ( pNode = pSel->lpCommands->lpFirst; pNode->lpNext; pNode = pNode->lpNext ) m_Commands.AddString(( LPCTSTR )pNode ); } } // Setup controls. SetupControls(); return 0; case IDC_COMMANDS: // Double-click? if ( nNotifyCode == LBN_DBLCLK ) { // Find the command node. LPCNODE pCNode = ( LPCNODE )m_Commands.GetItemData( m_Commands.GetCurSel()); if ( pCNode != ( LPCNODE )LB_ERR ) { // What's the type? switch ( pCNode->nType ) { case CTYPE_HARDCODED: { // Open the editor. Hardcoded h; if ( h.Select( *GetParent(), pCNode )) { // Refresh list. m_Commands.Invalidate(); pSettings->Changed( m_pParser ); } break; } case CTYPE_TEXT: { // Open the editor. TextInsert ti; HICON hIcon = ImageList_GetIcon( m_hImages, 1, ILD_NORMAL ); if ( ti.Edit( *GetParent(), pCNode, hIcon )) { // Refresh list. m_Commands.Invalidate(); pSettings->Changed( m_pParser ); } if ( hIcon ) ::DestroyIcon( hIcon ); return 0; } case CTYPE_RUN: case CTYPE_SHELLOPEN: { // Open the editor. Run r; if ( r.Edit( *GetParent(), pCNode )) { // Refresh list. m_Commands.Invalidate(); pSettings->Changed( m_pParser ); } } } } } else // Setup GUI. SetupControls(); return 0; } // Pass to the base class. return Page::OnCommand( nNotifyCode, nCtrlID, hWndCtrl ); }
// Create a command list node. void KeyboardPage::CreateNode( int nType, LPVOID lpvData ) { // Get the currently selected keyboard hash. LPHASH pHash = GetSelection(); LPCNODE pCNode = NULL; if ( pHash ) { // Allocate node. pCNode = ( LPCNODE )::AllocPooled( pParserPool, sizeof( CNODE )); if ( pCNode != NULL ) { // Setup type. pCNode->nType = nType; // Hardcoded? if ( nType == CTYPE_HARDCODED ) // Setup function. pCNode->lpFunc = ::FindCommand(( int )lpvData ); else { // Allocate string copy. pCNode->pcStr = ::CopyStringPool( pParserPool, ( LPCTSTR )lpvData ); if ( pCNode->pcStr == NULL ) { // Failure. MessageBox( ClsString( MAKEINTRESOURCE( IDS_NO_MEMORY )), ClsGetApp()->GetAppTitle(), MB_ICONERROR | MB_OK ); ::FreePooled( pParserPool, pCNode ); pCNode = NULL; } } } else MessageBox( ClsString( MAKEINTRESOURCE( IDS_NO_MEMORY )), ClsGetApp()->GetAppTitle(), MB_ICONERROR | MB_OK ); } // Still there? if ( pCNode ) { // Add the node to the list. AddTail(( LPLIST )pHash->lpCommands, ( LPNODE )pCNode ); // Add it to the listview. int nSel = m_Commands.AddString(( LPCTSTR )pCNode ); if ( nSel != LB_ERR ) { // Select the entry. m_Commands.SetCurSel( nSel ); // Edit the node. SendMessage( WM_COMMAND, MAKEWPARAM( IDC_COMMANDS, LBN_DBLCLK ), ( LPARAM )m_Commands.GetSafeHWND()); // Changes have been made. pSettings->Changed( m_pParser ); SetupControls(); } else { // Show out of memory error. Guess this should be the // only reason this could fail. MessageBox( ClsString( MAKEINTRESOURCE( IDS_NO_MEMORY )), ClsGetApp()->GetAppTitle(), MB_ICONERROR | MB_OK ); // Free the node and // it's string. if ( nType != CTYPE_HARDCODED ) ::FreePooled( pParserPool, pCNode->pcStr ); ::FreePooled( pParserPool, pCNode ); } } }
void CGUIDialogSettingsBase::SetupView() { SetupControls(); }
// WM_COMMAND message handler. LRESULT KeywordEdit::OnCommand( UINT nNotifyCode, UINT nCtrlID, HWND hWndCtrl ) { // What's the ID? switch ( nCtrlID ) { case EditToolbar::ETID_EDIT: { // Valid entry? LPKEYWORDS pKW = ( LPKEYWORDS )m_List.GetItemData( m_List.GetCurSel()); if ( pKW != ( LPKEYWORDS )LB_ERR ) { // Edit the keywords. KWEdit kwe; kwe.Edit( *this, pKW, this ); } return 0; } case EditToolbar::ETID_INSERT: { // Popup the file dialog. ClsFileDialog fd; fd.Filters() = _T( "Text files (*.txt)\0*.txt\0All files (*.*)\0*.*\0\0" ); fd.Caption().LoadString( IDS_INSERT_KEYWORDS ); if ( fd.DoModal( this, NULL, NULL, TRUE, OFN_FILEMUSTEXIST )) { // Get the selected filename. ClsString name; fd.GetName( 0, name ); // Read the file and add the read keywords // to the selected node. ReadKeywords( name ); // Make sure the keywords are // displayed. SendMessage( WM_COMMAND, MAKEWPARAM( IDC_LIST, LBN_SELCHANGE ), ( LPARAM )m_List.GetSafeHWND()); } return 0; } case EditToolbar::ETID_COLOR: { // Get the current selection. int nSel = m_List.GetCurSel(); // Only show the popup when there is // a valid selection. if ( nSel != LB_ERR ) { // Get the position of the selected entry. ClsRect rc; m_Tools.GetItemRect( 6, rc ); m_Tools.ClientToScreen( rc ); // Obtain the entry data. LPKEYWORDS pKW = ( LPKEYWORDS )m_List.GetItemData( nSel ); if ( pKW != ( LPKEYWORDS )LB_ERR ) { // Create the popup. The popup will automatically destroy // itself. new ClsColorPopup( ClsPoint( rc.Left(), rc.Bottom()), pKW->crColor, this, CS_FORE, NULL, ClsString( MAKEINTRESOURCE( IDS_CUSTOM )), NULL, TRUE, FALSE ); } } return 0; } case EditToolbar::ETID_BGCOLOR: { // Get the current selection. int nSel = m_List.GetCurSel(); // Only show the popup when there is // a valid selection. if ( nSel != LB_ERR ) { // Get the position of the selected entry. ClsRect rc; m_Tools.GetItemRect( 7, rc ); m_Tools.ClientToScreen( rc ); // Obtain the entry data. LPKEYWORDS pKW = ( LPKEYWORDS )m_List.GetItemData( nSel ); if ( pKW != ( LPKEYWORDS )LB_ERR ) { // Create the popup. The popup will automatically destroy // itself. new ClsColorPopup( ClsPoint( rc.Left(), rc.Bottom()), pKW->crBgColor, this, CS_BACK, ClsString( MAKEINTRESOURCE( IDS_TRANSPARENT )), ClsString( MAKEINTRESOURCE( IDS_CUSTOM )), NULL, TRUE, FALSE ); } } return 0; } case IDC_LIST: { // Selection change? if ( nNotifyCode == LBN_SELCHANGE ) { // Valid entry? LPKEYWORDS pKW = ( LPKEYWORDS )m_List.GetItemData( m_List.GetCurSel()); if ( pKW != ( LPKEYWORDS )LB_ERR ) { // Reset words content. m_KeyList.ResetContent(); // Add keywords. m_KeyList.SetRedraw( FALSE ); for ( int i = 0; i < ::ArrayGetSize( pKW->lpaKeywords ); i++ ) m_KeyList.AddString(( LPCTSTR )*(( LPTSTR * )::ArrayGetAt( pKW->lpaKeywords, i ))); m_KeyList.SetRedraw(); // Setup UI. SetupControls(); } } return 0; } case EditToolbar::ETID_DELETE: { // Valid entry? LPKEYWORDS pKW = ( LPKEYWORDS )m_List.GetItemData( m_List.GetCurSel()); if ( pKW != ( LPKEYWORDS )LB_ERR ) { ClsMessageBox mb; mb.Title() = ClsGetApp()->GetAppTitle(); mb.Buttons().LoadString( IDS_YESNO ); mb.Body().LoadString( IDS_KEYWORD_DELETE ); mb.Flags() = ClsMessageBox::MBF_ICONEXCLAMATION; // Sure? if ( mb.MsgBox( GetSafeHWND())) { // Save current selection // position. int nSel = m_List.GetCurSel(); int nPos = nSel; // Select the next one or // the previous one. if ( nSel == m_List.GetCount() - 1 ) nSel--; else nSel++; // Select the other item. m_List.SetCurSel( nSel ); // Setup UI. SetupControls(); // Clear the list contents m_KeyList.ResetContent(); // Reset selection. SendMessage( WM_COMMAND, MAKEWPARAM( IDC_LIST, LBN_SELCHANGE ), ( LPARAM )m_List.GetSafeHWND()); // Remove the selection. m_List.DeleteString( nPos ); // Remove the node. Remove(( LPNODE )pKW ); // Free the keyword array and the node. if ( pKW->lpaKeywords ) ::ArrayDelete( pKW->lpaKeywords ); ::FreePooled( pParserPool, pKW ); } } return 0; } case EditToolbar::ETID_NEW: { // Allocate a new node. LPKEYWORDS pKW = ( LPKEYWORDS )::AllocPooled( pParserPool, sizeof( KEYWORDS )); if ( pKW ) { // Allocate an array. pKW->lpaKeywords = ::ArrayCreate( 0, 500, sizeof( LPTSTR * )); if ( pKW->lpaKeywords ) { // Set color. pKW->crColor = ::GetSysColor( COLOR_WINDOWTEXT ); pKW->crBgColor = CLR_DEFAULT; // Add the node to the list. AddTail(( LPLIST )&m_KeyLst, ( LPNODE )pKW ); // Add it to the listview and select it. int nPos = m_List.AddString(( LPCTSTR )pKW ); m_List.SetCurSel( nPos ); // Clear the keywords list. m_KeyList.ResetContent(); // Setup UI. SetupControls(); return 0; } else ::FreePooled( pParserPool, pKW ); } // Error. MessageBox( ClsString( MAKEINTRESOURCE( IDS_NO_MEMORY )), ClsGetApp()->GetAppTitle(), MB_ICONERROR | MB_OK ); return 0; } case IDC_CASE: // Get value. m_bCase = ( BOOL )( m_Case.GetCheck() == BST_CHECKED ); return 0; case IDC_OK: // Return OK EndDialog( TRUE ); return 0; case IDC_CANCEL: // Cancel. EndDialog( FALSE ); return 0; } // Pass onto the base class. return ClsDialog::OnCommand( nNotifyCode, nCtrlID, hWndCtrl ); }