Im working on a dialog box in which several rules must be followed before the OK button is turned on.
Currently, any action on the page, such as entering data or selecting an item from the drop-down list (among other things) calls one function called ProcessEvent () - this function processes all the logic and enables or disables the OK button.
My problem is that I find it difficult to make the rules concise and understandable.
Some of the rules can be nullified by another action in the dialog box, and now I have finished working with if else instructions all over the place or which are difficult to read and follow and expand.
The code below simplifies the problem, but demonstrates it well. How best to deal with this problem (if possible)
bool CWorkstation::ProcessEvent(void) { UpdateData(); CharCount = GetDlgItemInt(IDC_CharCount, NULL, FALSE); //get latest if ( IsDlgButtonChecked(IDC_USEDBNAME)) { if (!IsDlgButtonChecked(IDC_MAXDBNAME)) { EnableNext(TRUE); } } if (IsDlgButtonChecked(IDC_MAXDBNAME) && CharCount) { if (IsDlgButtonChecked(IDC_USEXMLNAME)) { if ( PrefixName.IsEmpty() ) { EnableNext(FALSE); } else { EnableNext(TRUE); } } } if (IsDlgButtonChecked(IDC_USEXMLNAME) && PrefixName.GetLength() > 1) { EnableNext(TRUE); } if ( IsDlgButtonChecked(IDC_WSAUTONAME) || IsDlgButtonChecked(IDC_RENAMEIFDUP)) { // TRACE("IDC_WSAUTONAME is Checked\n"); if ( IsDlgButtonChecked(IDC_USEXMLNAME) && PrefixName.GetLength() > 1 ) { if ( IsDlgButtonChecked(IDC_IDC_USESHORTNAME) ) { EnableNext(TRUE); } else if ( IsDlgButtonChecked(IDC_USELONGNAME) ) { EnableNext(TRUE); } else { EnableNext(FALSE); } } if ( !IsDlgButtonChecked(IDC_USEPREFIX) ) { if ( IsDlgButtonChecked(IDC_IDC_USESHORTNAME) || IsDlgButtonChecked(IDC_USELONGNAME) ) { EnableNext(TRUE); } } return false; } }
source share