void DIALOG_CREATE_ARRAY::OnOkClick( wxCommandEvent& event ) { ARRAY_OPTIONS* newSettings = NULL; wxArrayString errorStrs; const wxWindow* page = m_gridTypeNotebook->GetCurrentPage(); if( page == m_gridPanel ) { ARRAY_GRID_OPTIONS* newGrid = new ARRAY_GRID_OPTIONS(); bool ok = true; // ints ok = ok && validateLongEntry(*m_entryNx, newGrid->m_nx, _("horizontal count"), errorStrs); ok = ok && validateLongEntry(*m_entryNy, newGrid->m_ny, _("vertical count"), errorStrs); newGrid->m_delta.x = DoubleValueFromString( g_UserUnit, m_entryDx->GetValue() ); newGrid->m_delta.y = DoubleValueFromString( g_UserUnit, m_entryDy->GetValue() ); newGrid->m_offset.x = DoubleValueFromString( g_UserUnit, m_entryOffsetX->GetValue() ); newGrid->m_offset.y = DoubleValueFromString( g_UserUnit, m_entryOffsetY->GetValue() ); ok = ok && validateLongEntry(*m_entryStagger, newGrid->m_stagger, _("stagger"), errorStrs); newGrid->m_stagger_rows = m_radioBoxGridStaggerType->GetSelection() == 0; newGrid->m_horizontalThenVertical = m_radioBoxGridNumberingAxis->GetSelection() == 0; newGrid->m_reverseNumberingAlternate = m_checkBoxGridReverseNumbering->GetValue(); newGrid->m_shouldNumber = m_numberingEnabled; if ( m_numberingEnabled ) { newGrid->m_2dArrayNumbering = m_radioBoxGridNumberingScheme->GetSelection() != 0; bool numOk = validateNumberingTypeAndOffset( *m_entryGridPriNumberingOffset, *m_choicePriAxisNumbering, newGrid->m_priAxisNumType, newGrid->m_numberingOffsetX, errorStrs ); if( newGrid->m_2dArrayNumbering ) { numOk = validateNumberingTypeAndOffset( *m_entryGridSecNumberingOffset, *m_choiceSecAxisNumbering, newGrid->m_secAxisNumType, newGrid->m_numberingOffsetY, errorStrs ) && numOk; } ok = ok && numOk; newGrid->m_numberingStartIsSpecified = m_rbGridStartNumberingOpt->GetSelection() == 1; } // Only use settings if all values are good if( ok ) newSettings = newGrid; else delete newGrid; } else if( page == m_circularPanel ) { ARRAY_CIRCULAR_OPTIONS* newCirc = new ARRAY_CIRCULAR_OPTIONS(); bool ok = true; newCirc->m_centre.x = DoubleValueFromString( g_UserUnit, m_entryCentreX->GetValue() ); newCirc->m_centre.y = DoubleValueFromString( g_UserUnit, m_entryCentreY->GetValue() ); newCirc->m_angle = DoubleValueFromString( DEGREES, m_entryCircAngle->GetValue() ); ok = ok && validateLongEntry(*m_entryCircCount, newCirc->m_nPts, _("point count"), errorStrs); newCirc->m_rotateItems = m_entryRotateItemsCb->GetValue(); newCirc->m_shouldNumber = m_numberingEnabled; if ( m_numberingEnabled ) { newCirc->m_numberingStartIsSpecified = m_rbCircStartNumberingOpt->GetSelection() == 1; newCirc->m_numberingType = NUMBERING_NUMERIC; ok = ok && validateLongEntry(*m_entryCircNumberingStart, newCirc->m_numberingOffset, _("numbering start"), errorStrs); } // Only use settings if all values are good if( ok ) newSettings = newCirc; else delete newCirc; } // If we got good settings, send them out and finish if( newSettings ) { delete m_settings; // assign pointer and ownership here m_settings = newSettings; ReadConfigFromControls(); EndModal( wxID_OK ); } else { wxString errorStr; if( errorStrs.IsEmpty() ) errorStr = _("Bad parameters"); else errorStr = boost::algorithm::join( errorStrs, "\n" ); wxMessageBox( errorStr ); } }
bool DIALOG_CREATE_ARRAY::TransferDataFromWindow() { ARRAY_OPTIONS* newSettings = NULL; wxArrayString errors; const wxWindow* page = m_gridTypeNotebook->GetCurrentPage(); if( page == m_gridPanel ) { ARRAY_GRID_OPTIONS* newGrid = new ARRAY_GRID_OPTIONS(); bool ok = true; // ints ok = ok && validateLongEntry(*m_entryNx, newGrid->m_nx, _("horizontal count"), errors); ok = ok && validateLongEntry(*m_entryNy, newGrid->m_ny, _("vertical count"), errors); newGrid->m_delta.x = m_hSpacing.GetValue(); newGrid->m_delta.y = m_vSpacing.GetValue(); newGrid->m_offset.x = m_hOffset.GetValue(); newGrid->m_offset.y = m_vOffset.GetValue(); ok = ok && validateLongEntry(*m_entryStagger, newGrid->m_stagger, _("stagger"), errors); newGrid->m_stagger_rows = m_radioBoxGridStaggerType->GetSelection() == 0; newGrid->m_horizontalThenVertical = m_radioBoxGridNumberingAxis->GetSelection() == 0; newGrid->m_reverseNumberingAlternate = m_checkBoxGridReverseNumbering->GetValue(); newGrid->SetShouldNumber( m_numberingEnabled ); if ( m_numberingEnabled ) { newGrid->SetNumberingStartIsSpecified( m_rbGridStartNumberingOpt->GetSelection() == 1 ); if( newGrid->GetNumberingStartIsSpecified() ) { newGrid->m_2dArrayNumbering = m_radioBoxGridNumberingScheme->GetSelection() != 0; // validate from the input fields bool numOk = validateNumberingTypeAndOffset( *m_entryGridPriNumberingOffset, *m_choicePriAxisNumbering, newGrid->m_priAxisNumType, newGrid->m_numberingOffsetX, errors ); if( newGrid->m_2dArrayNumbering ) { numOk = validateNumberingTypeAndOffset( *m_entryGridSecNumberingOffset, *m_choiceSecAxisNumbering, newGrid->m_secAxisNumType, newGrid->m_numberingOffsetY, errors ) && numOk; } ok = ok && numOk; } else { // artificial linear numeric scheme from 1 newGrid->m_2dArrayNumbering = false; newGrid->m_priAxisNumType = ARRAY_OPTIONS::NUMBERING_TYPE_T::NUMBERING_NUMERIC; newGrid->m_numberingOffsetX = 1; // Start at "1" } } // Only use settings if all values are good if( ok ) newSettings = newGrid; else delete newGrid; } else if( page == m_circularPanel ) { ARRAY_CIRCULAR_OPTIONS* newCirc = new ARRAY_CIRCULAR_OPTIONS(); bool ok = true; newCirc->m_centre.x = m_hCentre.GetValue(); newCirc->m_centre.y = m_vCentre.GetValue(); newCirc->m_angle = DoubleValueFromString( DEGREES, m_entryCircAngle->GetValue() ); ok = ok && validateLongEntry(*m_entryCircCount, newCirc->m_nPts, _("point count"), errors); newCirc->m_rotateItems = m_entryRotateItemsCb->GetValue(); newCirc->SetShouldNumber( m_numberingEnabled ); if ( m_numberingEnabled ) { newCirc->SetNumberingStartIsSpecified( m_rbCircStartNumberingOpt->GetSelection() == 1 ); if( newCirc->GetNumberingStartIsSpecified() ) { newCirc->m_numberingType = ARRAY_OPTIONS::NUMBERING_NUMERIC; ok = ok && validateLongEntry( *m_entryCircNumberingStart, newCirc->m_numberingOffset, _( "numbering start" ), errors ); } else { // artificial linear numeric scheme from 1 newCirc->m_numberingOffset = 1; // Start at "1" } } // Only use settings if all values are good if( ok ) newSettings = newCirc; else delete newCirc; } // If we got good settings, send them out and finish if( newSettings ) { delete m_settings; // assign pointer and ownership here m_settings = newSettings; m_cfg_persister.ReadConfigFromControls(); return true; } else { wxString errorStr; if( errors.IsEmpty() ) errorStr = _("Bad parameters"); else errorStr = boost::algorithm::join( errors, "\n" ); wxMessageBox( errorStr ); return false; } }