//------------------------------------------------------------------------------
// void Create()
//------------------------------------------------------------------------------
void BurnThrusterPanel::Create()
{
   #ifdef DEBUG_BURNPANEL_CREATE
   MessageInterface::ShowMessage("BurnThrusterPanel::Create() entered\n");
   #endif

   #if __WXMAC__
   int otherTextWidth = 150;
   #else
   int otherTextWidth = 150;
   #endif

   localObject = NULL;
   
   Integer bsize = 2; // border size
   // get the config object
   wxConfigBase *pConfig = wxConfigBase::Get();
   // SetPath() understands ".."
   pConfig->SetPath(gmatwxT("/Burn Thruster"));
   
   //-----------------------------------------------------------------
   // coordinate system items
   //-----------------------------------------------------------------
   // Coordinate Systems 
   wxStaticText *coordSysLabel =
      new wxStaticText(this, ID_TEXT, gmatwxT(GUI_ACCEL_KEY"Coordinate System"));
   coordSysComboBox  =
      theGuiManager->GetCoordSysComboBox(this, ID_COMBOBOX, wxSize(150,-1));
   coordSysComboBox->SetToolTip(pConfig->Read(_T("CoordinateSystemHint")));
   
   // Addd Local to CoordinateSystem list
   coordSysComboBox->Insert("Local", 0);
   
   // Origin
   originLabel = new wxStaticText(this, ID_TEXT, gmatwxT(GUI_ACCEL_KEY"Origin"));
   originComboBox =
      theGuiManager->GetCelestialBodyComboBox(this, ID_COMBOBOX,
                                              wxSize(150,-1));
   originComboBox->SetToolTip(pConfig->Read(_T("OriginHint")));
   
   // Axes 
   StringArray axesLabels = theObject->GetPropertyEnumStrings("Axes");
   wxArrayString wxAxesLabels = ToWxArrayString(axesLabels);
   
   axisLabel = new wxStaticText(this, ID_TEXT, gmatwxT(GUI_ACCEL_KEY"Axes"));
   
   axesComboBox = 
      new wxComboBox(this, ID_COMBOBOX, gmatwxT(""), wxDefaultPosition, 
                     wxSize(150,-1), wxAxesLabels, wxCB_DROPDOWN|wxCB_READONLY);
   axesComboBox->SetSelection(0);
   axesComboBox->SetToolTip(pConfig->Read(_T("AxesHint")));
   
   //----- Add to sizer
   wxFlexGridSizer *coordSysSizer = new wxFlexGridSizer(3, 0, 0);
   coordSysSizer->Add(coordSysLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   coordSysSizer->Add(coordSysComboBox, 0, wxALIGN_LEFT|wxALL, bsize);
   coordSysSizer->Add(20,20);
   
   coordSysSizer->Add(originLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   coordSysSizer->Add(originComboBox, 0, wxALIGN_LEFT|wxALL, bsize);
   coordSysSizer->Add(20,20);
   
   coordSysSizer->Add(axisLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   coordSysSizer->Add(axesComboBox, 0, wxALIGN_LEFT|wxALL, bsize);
   coordSysSizer->Add(20,20);
   
   GmatStaticBoxSizer *coordSysBoxSizer =
      new GmatStaticBoxSizer(wxVERTICAL, this, "Coordinate System");
   coordSysBoxSizer->Add(coordSysSizer, 0, wxALIGN_CENTER|wxALL, 0);
   
   //-----------------------------------------------------------------
   // thrust vector items
   //-----------------------------------------------------------------
   
   // ThrustDirection1
   XUnitLabel = new wxStaticText(this, ID_TEXT, gmatwxT(""));
   XLabel = new wxStaticText(this, ID_TEXT, gmatwxT("ThrustDirection"GUI_ACCEL_KEY"1"));
   elem1TextCtrl =
      new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), 
                      wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
   elem1TextCtrl->SetToolTip(pConfig->Read(_T("ThrustDirection1Hint")));
   
   // ThrustDirection2
   YUnitLabel =
      new wxStaticText(this, ID_TEXT, gmatwxT(""));
   YLabel =
      new wxStaticText(this, ID_TEXT, gmatwxT("ThrustDirection"GUI_ACCEL_KEY"2"),
                        wxDefaultPosition,wxDefaultSize, 0);
   elem2TextCtrl =
      new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), 
                      wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
   elem2TextCtrl->SetToolTip(pConfig->Read(_T("ThrustDirection2Hint")));
   
   // ThrustDirection3
   ZUnitLabel = new wxStaticText(this, ID_TEXT, gmatwxT(""));
   ZLabel = new wxStaticText(this, ID_TEXT, gmatwxT("ThrustDirection"GUI_ACCEL_KEY"3"));
   elem3TextCtrl =
      new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), 
                     wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
   elem3TextCtrl->SetToolTip(pConfig->Read(_T("ThrustDirection3Hint")));
   
   wxStaticText *dutyCycleLabel = NULL;
   wxStaticText *scaleFactorLabel = NULL;
   
   if (theObject->IsOfType(Gmat::THRUSTER))
   {
      // Thruster Duty Cycle
      dutyCycleLabel =
         new wxStaticText(this, ID_TEXT, gmatwxT("Duty "GUI_ACCEL_KEY"Cycle"));
      dutyCycleTextCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), 
                        wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
      dutyCycleTextCtrl->SetToolTip(pConfig->Read(_T("DutyCycleHint")));
      
      // Thruster Scale Factor
      scaleFactorLabel =
         new wxStaticText(this, ID_TEXT, gmatwxT("Thrust "GUI_ACCEL_KEY"Scale Factor"));
      scaleFactorTextCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""),
                        wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
      scaleFactorTextCtrl->SetToolTip(pConfig->Read(_T("ThrustScaleFactorHint")));
   }
   
   //----- Add to sizer   
   wxFlexGridSizer *vectorSizer = new wxFlexGridSizer(3, 0, 0);
   vectorSizer->Add(XLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   vectorSizer->Add(elem1TextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
   vectorSizer->Add(XUnitLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   
   vectorSizer->Add(YLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   vectorSizer->Add(elem2TextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
   vectorSizer->Add(YUnitLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   
   vectorSizer->Add(ZLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   vectorSizer->Add(elem3TextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
   vectorSizer->Add(ZUnitLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   
   if (theObject->IsOfType(Gmat::THRUSTER))
   {
      vectorSizer->Add(dutyCycleLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      vectorSizer->Add(dutyCycleTextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
      vectorSizer->Add(20,20);
      
      vectorSizer->Add(scaleFactorLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      vectorSizer->Add(scaleFactorTextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
      vectorSizer->Add(20,20);
   }
   
   vectorBoxSizer =
      new GmatStaticBoxSizer(wxVERTICAL, this, "Thrust Vector");
   vectorBoxSizer->Add(vectorSizer, 0, wxALIGN_CENTER|wxALL, 0);
   
   //-----------------------------------------------------------------
   // mass change items
   //-----------------------------------------------------------------
   // Decrement mass
   decMassCheckBox =
      new wxCheckBox(this, ID_CHECKBOX, gmatwxT(GUI_ACCEL_KEY"Decrement Mass"),
                     wxDefaultPosition, wxSize(-1, -1), bsize);
   decMassCheckBox->SetToolTip(pConfig->Read(_T("DecrementMassHint")));
   
   //Tank
   tankLabel =
      new wxStaticText(this, ID_TEXT, gmatwxT(GUI_ACCEL_KEY"Tank"));
   tankComboBox =
      theGuiManager->GetFuelTankComboBox(this, ID_COMBOBOX, wxSize(150,-1));
   tankComboBox->SetToolTip(pConfig->Read(_T("TankHint")));
   
   ispLabel = NULL;
   ispTextCtrl = NULL;
   ispUnit = NULL;
   // Isp for ImpulsiveBurn only
   if (theObject->IsOfType(Gmat::IMPULSIVE_BURN))
   {
      ispLabel =
         new wxStaticText(this, ID_TEXT, gmatwxT(GUI_ACCEL_KEY"Isp"));
      ispTextCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), 
                        wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
      ispTextCtrl->SetToolTip(pConfig->Read(_T("IspHint")));
      ispUnit =
         new wxStaticText(this, ID_TEXT, gmatwxT(" s"));
   }
   
   // Gravitational Acceleration
   gravityAccelLabel =
      new wxStaticText(this, ID_TEXT, gmatwxT(GUI_ACCEL_KEY"GravitationalAccel"));
   gravityAccelTextCtrl =
      new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), 
                     wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
   gravityAccelTextCtrl->SetToolTip(pConfig->Read(_T("GravitationalAccelHint")));
   gravityAccelUnit =
      new wxStaticText(this, ID_TEXT, gmatwxT(" m/s^2"));
   
   // Coefficients for Thruster only
   if (theObject->IsOfType(Gmat::THRUSTER))
   {
//      cCoefButton = new wxButton(this, ID_BUTTON, gmatwxT("Edit "GUI_ACCEL_KEY"Thruster Coef."));
//      cCoefButton->SetToolTip(pConfig->Read(_T("EditThrusterCoefficientHint")));
//      kCoefButton = new wxButton(this, ID_BUTTON, gmatwxT("Edit "GUI_ACCEL_KEY"Impulse Coef."));
//      kCoefButton->SetToolTip(pConfig->Read(_T("EditImpulseCoefficientHint")));
      configButton = new wxButton(this, ID_BUTTON, gmatwxT(""GUI_ACCEL_KEY"Configure Polynomials"));
      configButton->SetToolTip(pConfig->Read(_T("ConfigPolynomialsHint")));
   }
   
   wxBoxSizer *coefSizer = new wxBoxSizer(wxHORIZONTAL);
   if (theObject->IsOfType(Gmat::THRUSTER))
   {
//      coefSizer->Add(cCoefButton, 0, wxALIGN_CENTER|wxALL, 5);
//      coefSizer->Add(kCoefButton, 0, wxALIGN_CENTER|wxALL, 5);
      coefSizer->Add(configButton, 0, wxALIGN_CENTER|wxALL, 5);  // need anther one here?
   }
   
   //----- Add to sizer   
   wxFlexGridSizer *massSizer = new wxFlexGridSizer(3, 0, 0);
   massSizer->Add(decMassCheckBox, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   massSizer->Add(20,20);
   massSizer->Add(20,20);
   
   massSizer->Add(tankLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   massSizer->Add(tankComboBox, 0, wxALIGN_LEFT|wxALL, bsize);
   massSizer->Add(20,20);
   
   if (theObject->IsOfType(Gmat::IMPULSIVE_BURN))
   {
      massSizer->Add(ispLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      massSizer->Add(ispTextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
      massSizer->Add(ispUnit, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   }
   
   massSizer->Add(gravityAccelLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   massSizer->Add(gravityAccelTextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
   massSizer->Add(gravityAccelUnit, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   
   if (theObject->IsOfType(Gmat::THRUSTER))
   {      
      massSizer->Add(20, 20, 0, wxALIGN_LEFT|wxALL, bsize);
      massSizer->Add(20, 20, 0, wxALIGN_LEFT|wxALL, bsize);
      massSizer->Add(20, 20, 0, wxALIGN_LEFT|wxALL, bsize);
   }
   
   GmatStaticBoxSizer *massBoxSizer =
      new GmatStaticBoxSizer(wxVERTICAL, this, "Mass Change");
   massBoxSizer->Add(massSizer, 0, wxALIGN_CENTER|wxALL, 0);
   
   // Handle ElectricThruster items
   GmatStaticBoxSizer *electricBoxSizer = NULL;
   if (theObject->IsOfType("ElectricThruster"))
   {
      electricBoxSizer = new GmatStaticBoxSizer(wxVERTICAL, this, "Thrust Config.");
      // Thrust Model
      thrustModelTxt =
         new wxStaticText( this, ID_TEXT, gmatwxT("Thrust "GUI_ACCEL_KEY"Model"),
                           wxDefaultPosition, wxDefaultSize, 0);
      StringArray thrustModels = theObject->GetPropertyEnumStrings("ThrustModel");
      Integer numModels = thrustModels.size();
      thrustModelArray = new wxString[numModels];
      for (Integer ii=0; ii<numModels; ii++)
         thrustModelArray[ii] = thrustModels[ii].c_str();

      thrustModelCB =
         new wxComboBox( this, ID_COMBOBOX, gmatwxT(thrustModelArray[0]),
            wxDefaultPosition, wxSize(180,-1), numModels, thrustModelArray,
            wxCB_DROPDOWN|wxCB_READONLY );
      thrustModelCB->SetToolTip(pConfig->Read(_T("ThrustModelHint")));

      // Minimum and Maximum Usable Power
      minPowerTxt =
         new wxStaticText( this, ID_TEXT, gmatwxT("Mi"GUI_ACCEL_KEY"nimum Usable Power"),
                           wxDefaultPosition, wxDefaultSize, 0);
      maxPowerTxt =
         new wxStaticText( this, ID_TEXT, gmatwxT("Ma"GUI_ACCEL_KEY"ximum Usable Power"),
                           wxDefaultPosition, wxDefaultSize, 0);
      minPowerTxtCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), wxDefaultPosition,
                        wxSize(otherTextWidth,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
      maxPowerTxtCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), wxDefaultPosition,
                        wxSize(otherTextWidth,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));

      minPowerUnits =
         new wxStaticText(this, ID_TEXT, gmatwxT("kW"), wxDefaultPosition, wxDefaultSize, 0);
      maxPowerUnits =
         new wxStaticText(this, ID_TEXT, gmatwxT("kW"), wxDefaultPosition, wxDefaultSize, 0);

      // Efficiency and ISP and Constant Thrust
      efficiencyTxt =
         new wxStaticText( this, ID_TEXT, gmatwxT(""GUI_ACCEL_KEY"Fixed Efficiency"),
                           wxDefaultPosition, wxDefaultSize, 0);
      ispTxt =
         new wxStaticText( this, ID_TEXT, gmatwxT(""GUI_ACCEL_KEY"Isp"),
                           wxDefaultPosition, wxDefaultSize, 0);
      constantThrustTxt =
         new wxStaticText( this, ID_TEXT, gmatwxT(""GUI_ACCEL_KEY"Constant Thrust"),
                           wxDefaultPosition, wxDefaultSize, 0);
      efficiencyTxtCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), wxDefaultPosition,
                        wxSize(otherTextWidth,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
      ispTxtCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), wxDefaultPosition,
                        wxSize(otherTextWidth,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
      constantThrustTxtCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, gmatwxT(""), wxDefaultPosition,
                        wxSize(otherTextWidth,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));

      efficiencyUnits =
         new wxStaticText(this, ID_TEXT, gmatwxT(""), wxDefaultPosition, wxDefaultSize, 0);
      ispUnits =
         new wxStaticText(this, ID_TEXT, gmatwxT("s"), wxDefaultPosition, wxDefaultSize, 0);
      constantThrustUnits =
         new wxStaticText(this, ID_TEXT, gmatwxT("N"), wxDefaultPosition, wxDefaultSize, 0);

      wxFlexGridSizer *electricSizer = new wxFlexGridSizer(3, 0, 0);
      electricSizer->Add(thrustModelTxt, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(thrustModelCB, 0, wxALIGN_LEFT|wxALL, bsize);
      electricSizer->Add(20,20);
      electricSizer->Add(minPowerTxt, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(minPowerTxtCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(minPowerUnits, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(maxPowerTxt, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(maxPowerTxtCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(maxPowerUnits, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(efficiencyTxt, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(efficiencyTxtCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(efficiencyUnits, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(ispTxt, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(ispTxtCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(ispUnits, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(constantThrustTxt, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(constantThrustTxtCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      electricSizer->Add(constantThrustUnits, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);

      electricBoxSizer->Add(electricSizer, 0, wxALIGN_CENTER|wxALL, 0);
   }

   //-----------------------------------------------------------------
   // add to page sizer
   //-----------------------------------------------------------------
   wxBoxSizer *pageSizer = new wxBoxSizer(wxVERTICAL);
   pageSizer->Add(coordSysBoxSizer, 0, wxALIGN_CENTER|wxGROW|wxALL, bsize);
   pageSizer->Add(vectorBoxSizer, 0, wxALIGN_CENTER|wxGROW|wxALL, bsize);
   pageSizer->Add(massBoxSizer, 0, wxALIGN_CENTER|wxGROW|wxALL, bsize);
   
   if (theObject->IsOfType(Gmat::THRUSTER))
   {
      if (theObject->IsOfType("ElectricThruster"))
      {
         pageSizer->Add(electricBoxSizer, 0, wxALIGN_CENTER|wxALL, bsize);
      }
      pageSizer->Add(coefSizer, 0, wxALIGN_CENTER|wxALL, bsize);
   }
   
   theMiddleSizer->Add(pageSizer, 0, wxALIGN_CENTRE|wxALL, bsize);
   
   #ifdef DEBUG_BURNPANEL_CREATE
   MessageInterface::ShowMessage("BurnThrusterPanel::Create() exiting\n");
   #endif
}
Exemple #2
0
//------------------------------------------------------------------------------
// void Create()
//------------------------------------------------------------------------------
void TankConfigPanel::Create()
{
   // Border size
   int minLabelSize;
   Integer bsize = 2;
   Integer labelSizeProportion = 0;
   Integer ctrlSizeProportion = 1;
   Integer unitSizeProportion = 0;
   
   // get the config object
   wxConfigBase *pConfig = wxConfigBase::Get();
   // SetPath() understands ".."
   pConfig->SetPath(wxT("/Fuel Tank"));

   //-----------------------------------------------------------------
   // Create controls in tab order
   //-----------------------------------------------------------------
   // Volume
   wxStaticText *volumeLabel =
      new wxStaticText( this, ID_TEXT, wxT(GUI_ACCEL_KEY) wxT("Volume")); 
   volumeTextCtrl =
      new wxTextCtrl( this, ID_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC) );
   volumeTextCtrl->SetToolTip(pConfig->Read(wxT("VolumeHint")));
   wxStaticText *volumeUnit =
      new wxStaticText( this, ID_TEXT, wxT("m^3"));
   
   // Pressure Model
   wxStaticText *pressureModelLabel =
      new wxStaticText( this, ID_TEXT, wxT("Pressure ") wxT(GUI_ACCEL_KEY) wxT("Model"));
   StringArray pressModelList =
       theFuelTank->GetPropertyEnumStrings(FuelTank::PRESSURE_MODEL);
   wxArrayString wxPressModelLabels = ToWxArrayString(pressModelList);
   pressureModelComboBox = 
      new wxComboBox( this, ID_COMBOBOX, wxT(""), wxDefaultPosition, wxSize(120,-1),
                      wxPressModelLabels, wxCB_DROPDOWN|wxCB_READONLY);
   pressureModelComboBox->SetToolTip(pConfig->Read(wxT("PressureModelHint")));
   
   // Fuel Mass
   wxStaticText *fuelMassLabel =
      new wxStaticText( this, ID_TEXT, wxT("F") wxT(GUI_ACCEL_KEY) wxT("uel Mass"));
   fuelMassTextCtrl =
      new wxTextCtrl( this, ID_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC) );
   fuelMassTextCtrl->SetToolTip(pConfig->Read(wxT("MassHint")));
   wxStaticText *fuelMassUnit =
      new wxStaticText( this, ID_TEXT, wxT("kg"));
   
   // Allow Negative Fuel Mass
   allowNegativeFuelMassCheckBox =
      new wxCheckBox( this, ID_CHECKBOX, wxT("Allow ") wxT(GUI_ACCEL_KEY) wxT("Negative Fuel Mass"));
   allowNegativeFuelMassCheckBox->SetToolTip(pConfig->Read(wxT("AllowNegFuelMassHint")));
   
   // Fuel Density
   wxStaticText *fuelDensityLabel =
      new wxStaticText( this, ID_TEXT, wxT("Fuel ") wxT(GUI_ACCEL_KEY) wxT("Density"));
   fuelDensityTextCtrl =
      new wxTextCtrl( this, ID_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC) );
   fuelDensityTextCtrl->SetToolTip(pConfig->Read(wxT("DensityHint")));
   wxStaticText *fuelDensityUnit =
      new wxStaticText( this, ID_TEXT, wxT("kg/m^3"));
   
   // Temperature
   wxStaticText *temperatureLabel =
      new wxStaticText( this, ID_TEXT, wxT(GUI_ACCEL_KEY) wxT("Temperature"));
   temperatureTextCtrl =
      new wxTextCtrl( this, ID_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC) );
   temperatureTextCtrl->SetToolTip(pConfig->Read(wxT("TemperatureHint")));
   wxStaticText *temperatureUnit =
      new wxStaticText( this, ID_TEXT, wxT("C"));
   
   // Reference Temperature
   wxStaticText *refTemperatureLabel =
      new wxStaticText( this, ID_TEXT, wxT(GUI_ACCEL_KEY) wxT("Reference Temperature"));
   refTemperatureTextCtrl =
      new wxTextCtrl( this, ID_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC) );
   refTemperatureTextCtrl->SetToolTip(pConfig->Read(wxT("ReferenceTemperatureHint")));
   wxStaticText *refTemperatureUnit =
      new wxStaticText( this, ID_TEXT, wxT("C"));
   
   // Pressure
   wxStaticText *pressureLabel =
      new wxStaticText( this, ID_TEXT, wxT(GUI_ACCEL_KEY) wxT("Pressure"));
   pressureTextCtrl =
      new wxTextCtrl( this, ID_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC) );
   pressureTextCtrl->SetToolTip(pConfig->Read(wxT("PressureHint")));
   wxStaticText *pressureUnit =
      new wxStaticText( this, ID_TEXT, wxT("kPa"));

   // set the min width for one of the labels for each GmatStaticBoxSizer
   minLabelSize = volumeLabel->GetBestSize().x;
   minLabelSize = (minLabelSize < pressureModelLabel->GetBestSize().x) ? pressureModelLabel->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < fuelMassLabel->GetBestSize().x) ? fuelMassLabel->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < fuelDensityLabel->GetBestSize().x) ? fuelDensityLabel->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < temperatureLabel->GetBestSize().x) ? temperatureLabel->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < refTemperatureLabel->GetBestSize().x) ? refTemperatureLabel->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < pressureLabel->GetBestSize().x) ? pressureLabel->GetBestSize().x : minLabelSize;

   volumeLabel->SetMinSize(wxSize(minLabelSize, volumeLabel->GetMinHeight()));
   fuelMassLabel->SetMinSize(wxSize(minLabelSize, fuelMassLabel->GetMinHeight()));

   // set the min width for one of the UNIT labels for each GmatStaticBoxSizer
   minLabelSize = volumeUnit->GetBestSize().x;
   minLabelSize = (minLabelSize < fuelMassUnit->GetBestSize().x) ? fuelMassUnit->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < fuelDensityUnit->GetBestSize().x) ? fuelDensityUnit->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < temperatureUnit->GetBestSize().x) ? temperatureUnit->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < refTemperatureUnit->GetBestSize().x) ? refTemperatureUnit->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < pressureUnit->GetBestSize().x) ? pressureUnit->GetBestSize().x : minLabelSize;

   volumeUnit->SetMinSize(wxSize(minLabelSize, volumeUnit->GetMinHeight()));
   fuelMassUnit->SetMinSize(wxSize(minLabelSize, fuelMassUnit->GetMinHeight()));

   //-----------------------------------------------------------------
   // Add to fuel properties sizer
   //-----------------------------------------------------------------
   wxFlexGridSizer *flexGridSizer1 = new wxFlexGridSizer( 3, 0, 0 );
   //flexGridSizer1->AddGrowableCol(1);
   
   flexGridSizer1->Add(fuelMassLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer1->Add(fuelMassTextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer1->Add(fuelMassUnit, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   
   flexGridSizer1->Add(0, 0, 0);
   flexGridSizer1->Add(allowNegativeFuelMassCheckBox, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer1->Add(0, 0, 0);
   
   flexGridSizer1->Add(fuelDensityLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer1->Add(fuelDensityTextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer1->Add(fuelDensityUnit, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);

   flexGridSizer1->Add(temperatureLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer1->Add(temperatureTextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer1->Add(temperatureUnit, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   
   flexGridSizer1->Add(refTemperatureLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer1->Add(refTemperatureTextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer1->Add(refTemperatureUnit, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   
   flexGridSizer1->Add(pressureLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer1->Add(pressureTextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer1->Add(pressureUnit, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   
   // create the Fuel Properties group box
   fuelPropertiesSizer = new GmatStaticBoxSizer( wxVERTICAL, this, wxT("Fuel Properties") );
   fuelPropertiesSizer->Add(flexGridSizer1, 0, wxEXPAND|wxALL, bsize);
   
   //-----------------------------------------------------------------
   // Add to tank properties sizer
   //-----------------------------------------------------------------
   wxFlexGridSizer *flexGridSizer2 = new wxFlexGridSizer( 3, 0, 0 );
   //flexGridSizer2->AddGrowableCol(1);
   
   flexGridSizer2->Add(volumeLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer2->Add(volumeTextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer2->Add(volumeUnit, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   
   flexGridSizer2->Add(pressureModelLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer2->Add(pressureModelComboBox, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer2->Add(0, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);

   // create the Tank Properties group box
   tankPropertiesSizer = new GmatStaticBoxSizer( wxVERTICAL, this, wxT("Tank Properties") );
   tankPropertiesSizer->Add(flexGridSizer2, 0, wxEXPAND|wxALL, bsize);

   //-----------------------------------------------------------------
   // Now put tank & fuel properties sizers into the middle sizer
   //-----------------------------------------------------------------
   theMiddleSizer->Add(tankPropertiesSizer, 0, wxEXPAND|wxALL, bsize);
   theMiddleSizer->Add(fuelPropertiesSizer, 1, wxEXPAND|wxALL, bsize);
   theMiddleSizer->SetSizeHints(this);

}
Exemple #3
0
//------------------------------------------------------------------------------
// void Create()
//------------------------------------------------------------------------------
void BurnThrusterPanel::Create()
{
   #ifdef DEBUG_BURNPANEL_CREATE
   MessageInterface::ShowMessage("BurnThrusterPanel::Create() entered\n");
   #endif
   
   Integer bsize = 2; // border size
   // get the config object
   wxConfigBase *pConfig = wxConfigBase::Get();
   // SetPath() understands ".."
   pConfig->SetPath(wxT("/Burn Thruster"));
   
   //-----------------------------------------------------------------
   // coordinate system items
   //-----------------------------------------------------------------
   // Coordinate Systems 
   wxStaticText *coordSysLabel =
      new wxStaticText(this, ID_TEXT, wxT(GUI_ACCEL_KEY"Coordinate System"));
   coordSysComboBox  =
      theGuiManager->GetCoordSysComboBox(this, ID_COMBOBOX, wxSize(150,-1));
   coordSysComboBox->SetToolTip(pConfig->Read(_T("CoordinateSystemHint")));
   
   // Addd Local to CoordinateSystem list
   coordSysComboBox->Insert("Local", 0);
   
   // Origin
   originLabel = new wxStaticText(this, ID_TEXT, wxT(GUI_ACCEL_KEY"Origin"));
   originComboBox =
      theGuiManager->GetCelestialBodyComboBox(this, ID_COMBOBOX,
                                              wxSize(150,-1));
   originComboBox->SetToolTip(pConfig->Read(_T("OriginHint")));
   
   // Axes 
   StringArray axesLabels = theObject->GetPropertyEnumStrings("Axes");
   wxArrayString wxAxesLabels = ToWxArrayString(axesLabels);
   
   axisLabel = new wxStaticText(this, ID_TEXT, wxT(GUI_ACCEL_KEY"Axes"));
   
   axesComboBox = 
      new wxComboBox(this, ID_COMBOBOX, wxT(""), wxDefaultPosition, 
                     wxSize(150,-1), wxAxesLabels, wxCB_DROPDOWN|wxCB_READONLY);
   axesComboBox->SetSelection(0);
   axesComboBox->SetToolTip(pConfig->Read(_T("AxesHint")));
   
   //----- Add to sizer
   wxFlexGridSizer *coordSysSizer = new wxFlexGridSizer(3, 0, 0);
   coordSysSizer->Add(coordSysLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   coordSysSizer->Add(coordSysComboBox, 0, wxALIGN_LEFT|wxALL, bsize);
   coordSysSizer->Add(20,20);
   
   coordSysSizer->Add(originLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   coordSysSizer->Add(originComboBox, 0, wxALIGN_LEFT|wxALL, bsize);
   coordSysSizer->Add(20,20);
   
   coordSysSizer->Add(axisLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   coordSysSizer->Add(axesComboBox, 0, wxALIGN_LEFT|wxALL, bsize);
   coordSysSizer->Add(20,20);
   
   GmatStaticBoxSizer *coordSysBoxSizer =
      new GmatStaticBoxSizer(wxVERTICAL, this, "Coordinate System");
   coordSysBoxSizer->Add(coordSysSizer, 0, wxALIGN_CENTER|wxALL, 0);
   
   //-----------------------------------------------------------------
   // thrust vector items
   //-----------------------------------------------------------------
   
   // ThrustDirection1
   XUnitLabel = new wxStaticText(this, ID_TEXT, wxT(""));
   XLabel = new wxStaticText(this, ID_TEXT, wxT("ThrustDirection"GUI_ACCEL_KEY"1"));
   elem1TextCtrl =
      new wxTextCtrl(this, ID_TEXTCTRL, wxT(""), 
                      wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
   elem1TextCtrl->SetToolTip(pConfig->Read(_T("ThrustDirection1Hint")));
   
   // ThrustDirection2
   YUnitLabel =
      new wxStaticText(this, ID_TEXT, wxT(""));
   YLabel =
      new wxStaticText(this, ID_TEXT, wxT("ThrustDirection"GUI_ACCEL_KEY"2"),
                        wxDefaultPosition,wxDefaultSize, 0);
   elem2TextCtrl =
      new wxTextCtrl(this, ID_TEXTCTRL, wxT(""), 
                      wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
   elem2TextCtrl->SetToolTip(pConfig->Read(_T("ThrustDirection2Hint")));
   
   // ThrustDirection3
   ZUnitLabel = new wxStaticText(this, ID_TEXT, wxT(""));
   ZLabel = new wxStaticText(this, ID_TEXT, wxT("ThrustDirection"GUI_ACCEL_KEY"3"));
   elem3TextCtrl =
      new wxTextCtrl(this, ID_TEXTCTRL, wxT(""), 
                     wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
   elem3TextCtrl->SetToolTip(pConfig->Read(_T("ThrustDirection3Hint")));
   
   wxStaticText *dutyCycleLabel = NULL;
   wxStaticText *scaleFactorLabel = NULL;
   
   if (theObject->IsOfType(Gmat::THRUSTER))
   {
      // Thruster Duty Cycle
      dutyCycleLabel =
         new wxStaticText(this, ID_TEXT, wxT("Duty "GUI_ACCEL_KEY"Cycle"));
      dutyCycleTextCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, wxT(""), 
                        wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
      dutyCycleTextCtrl->SetToolTip(pConfig->Read(_T("DutyCycleHint")));
      
      // Thruster Scale Factor
      scaleFactorLabel =
         new wxStaticText(this, ID_TEXT, wxT("Thrust "GUI_ACCEL_KEY"Scale Factor"));
      scaleFactorTextCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, wxT(""),
                        wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
      scaleFactorTextCtrl->SetToolTip(pConfig->Read(_T("ThrustScaleFactorHint")));
   }
   
   //----- Add to sizer   
   wxFlexGridSizer *vectorSizer = new wxFlexGridSizer(3, 0, 0);
   vectorSizer->Add(XLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   vectorSizer->Add(elem1TextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
   vectorSizer->Add(XUnitLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   
   vectorSizer->Add(YLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   vectorSizer->Add(elem2TextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
   vectorSizer->Add(YUnitLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   
   vectorSizer->Add(ZLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   vectorSizer->Add(elem3TextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
   vectorSizer->Add(ZUnitLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   
   if (theObject->IsOfType(Gmat::THRUSTER))
   {
      vectorSizer->Add(dutyCycleLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      vectorSizer->Add(dutyCycleTextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
      vectorSizer->Add(20,20);
      
      vectorSizer->Add(scaleFactorLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      vectorSizer->Add(scaleFactorTextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
      vectorSizer->Add(20,20);
   }
   
   vectorBoxSizer =
      new GmatStaticBoxSizer(wxVERTICAL, this, "Thrust Vector");
   vectorBoxSizer->Add(vectorSizer, 0, wxALIGN_CENTER|wxALL, 0);
   
   //-----------------------------------------------------------------
   // mass change items
   //-----------------------------------------------------------------
   // Decrement mass
   decMassCheckBox =
      new wxCheckBox(this, ID_CHECKBOX, wxT(GUI_ACCEL_KEY"Decrement Mass"),
                     wxDefaultPosition, wxSize(-1, -1), bsize);
   decMassCheckBox->SetToolTip(pConfig->Read(_T("DecrementMassHint")));
   
   //Tank
   tankLabel =
      new wxStaticText(this, ID_TEXT, wxT(GUI_ACCEL_KEY"Tank"));
   tankComboBox =
      theGuiManager->GetFuelTankComboBox(this, ID_COMBOBOX, wxSize(150,-1));
   tankComboBox->SetToolTip(pConfig->Read(_T("TankHint")));
   
   ispLabel = NULL;
   ispTextCtrl = NULL;
   ispUnit = NULL;
   // Isp for ImpulsiveBurn only
   if (theObject->IsOfType(Gmat::IMPULSIVE_BURN))
   {
      ispLabel =
         new wxStaticText(this, ID_TEXT, wxT(GUI_ACCEL_KEY"Isp"));
      ispTextCtrl =
         new wxTextCtrl(this, ID_TEXTCTRL, wxT(""), 
                        wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
      ispTextCtrl->SetToolTip(pConfig->Read(_T("IspHint")));
      ispUnit =
         new wxStaticText(this, ID_TEXT, wxT(" s"));
   }
   
   // Gravitational Acceleration
   gravityAccelLabel =
      new wxStaticText(this, ID_TEXT, wxT(GUI_ACCEL_KEY"GravitationalAccel"));
   gravityAccelTextCtrl =
      new wxTextCtrl(this, ID_TEXTCTRL, wxT(""), 
                     wxDefaultPosition, wxSize(150,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC));
   gravityAccelTextCtrl->SetToolTip(pConfig->Read(_T("GravitationalAccelHint")));
   gravityAccelUnit =
      new wxStaticText(this, ID_TEXT, wxT(" m/s^2"));
   
   // Coefficients for Thruster only
   if (theObject->IsOfType(Gmat::THRUSTER))
   {
      cCoefButton = new wxButton(this, ID_BUTTON, wxT("Edit "GUI_ACCEL_KEY"Thruster Coef."));
      cCoefButton->SetToolTip(pConfig->Read(_T("EditThrusterCoefficientHint")));
      kCoefButton = new wxButton(this, ID_BUTTON, wxT("Edit "GUI_ACCEL_KEY"Impulse Coef."));
      kCoefButton->SetToolTip(pConfig->Read(_T("EditImpulseCoefficientHint")));
   }
   
   wxBoxSizer *coefSizer = new wxBoxSizer(wxHORIZONTAL);
   if (theObject->IsOfType(Gmat::THRUSTER))
   {
      coefSizer->Add(cCoefButton, 0, wxALIGN_CENTER|wxALL, 5);
      coefSizer->Add(kCoefButton, 0, wxALIGN_CENTER|wxALL, 5);
   }
   
   //----- Add to sizer   
   wxFlexGridSizer *massSizer = new wxFlexGridSizer(3, 0, 0);
   massSizer->Add(decMassCheckBox, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   massSizer->Add(20,20);
   massSizer->Add(20,20);
   
   massSizer->Add(tankLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   massSizer->Add(tankComboBox, 0, wxALIGN_LEFT|wxALL, bsize);
   massSizer->Add(20,20);
   
   if (theObject->IsOfType(Gmat::IMPULSIVE_BURN))
   {
      massSizer->Add(ispLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
      massSizer->Add(ispTextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
      massSizer->Add(ispUnit, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   }
   
   massSizer->Add(gravityAccelLabel, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   massSizer->Add(gravityAccelTextCtrl, 0, wxALIGN_LEFT|wxALL, bsize);
   massSizer->Add(gravityAccelUnit, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, bsize);
   
   if (theObject->IsOfType(Gmat::THRUSTER))
   {      
      massSizer->Add(20, 20, 0, wxALIGN_LEFT|wxALL, bsize);
      massSizer->Add(20, 20, 0, wxALIGN_LEFT|wxALL, bsize);
      massSizer->Add(20, 20, 0, wxALIGN_LEFT|wxALL, bsize);
   }
   
   GmatStaticBoxSizer *massBoxSizer =
      new GmatStaticBoxSizer(wxVERTICAL, this, "Mass Change");
   massBoxSizer->Add(massSizer, 0, wxALIGN_CENTER|wxALL, 0);
   
   //-----------------------------------------------------------------
   // add to page sizer
   //-----------------------------------------------------------------
   wxBoxSizer *pageSizer = new wxBoxSizer(wxVERTICAL);
   pageSizer->Add(coordSysBoxSizer, 0, wxALIGN_CENTER|wxGROW|wxALL, bsize);
   pageSizer->Add(vectorBoxSizer, 0, wxALIGN_CENTER|wxGROW|wxALL, bsize);
   pageSizer->Add(massBoxSizer, 0, wxALIGN_CENTER|wxGROW|wxALL, bsize);
   
   if (theObject->IsOfType(Gmat::THRUSTER))
      pageSizer->Add(coefSizer, 0, wxALIGN_CENTER|wxALL, bsize);
   
   theMiddleSizer->Add(pageSizer, 0, wxALIGN_CENTRE|wxALL, bsize);
   
   #ifdef DEBUG_BURNPANEL_CREATE
   MessageInterface::ShowMessage("BurnThrusterPanel::Create() exiting\n");
   #endif
}
Exemple #4
0
//------------------------------------------------------------------------------
// void Create()
//------------------------------------------------------------------------------
void GroundStationPanel::Create()
{
   // create local copy of ground station
   localGroundStation = (GroundstationInterface*)theGroundStation->Clone();

    // Border size
   int minLabelSize;
   Integer bsize = 2;
   Integer labelSizeProportion = 0;
   Integer ctrlSizeProportion = 1;
   Integer unitSizeProportion = 0;
   
   // get the config object
   wxConfigBase *pConfig = wxConfigBase::Get();
   // SetPath() understands ".."
   pConfig->SetPath(wxT("/Ground Station"));

   //-----------------------------------------------------------------
   // Create controls in tab order
   //-----------------------------------------------------------------
   // Station ID
   wxStaticText *stationIDLabel =
      new wxStaticText( this, ID_TEXT, wxT(GUI_ACCEL_KEY"ID") );
   stationIDTextCtrl =
      new wxTextCtrl( this, ID_STATION_ID_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0 );
   // Since Groundstation is now in plugin, this no longer works:
//   stationIDTextCtrl->SetToolTip(pConfig->Read(_T((GroundStation::PARAMETER_TEXT[GroundStation::STATION_ID-GroundStation::STATION_ID]+"Hint").c_str())));
   stationIDTextCtrl->SetToolTip(pConfig->Read(_T("IdHint")));
   
   // Central Body
   wxStaticText *centralBodyLabel =
      new wxStaticText( this, ID_TEXT, wxT("Central "GUI_ACCEL_KEY"Body"));
   StringArray centralBodyList;
   centralBodyList.push_back("Earth");
   wxArrayString wxCentralBodyLabels = ToWxArrayString(centralBodyList);
   centralBodyComboBox = new wxComboBox( this, ID_COMBOBOX, wxT(""), wxDefaultPosition, wxSize(120,-1),
         wxCentralBodyLabels, wxCB_DROPDOWN|wxCB_READONLY);
// for now, we are only allowing Earth as the central body; when code is updated to use any body
// as central body, un-comment the following code:
//   centralBodyComboBox = GuiItemManager::GetInstance()->GetCelestialBodyComboBox(this, ID_COMBOBOX,
//                                                              wxSize(150,-1));
   centralBodyComboBox->SetToolTip(pConfig->Read(_T((BodyFixedPoint::PARAMETER_TEXT[BodyFixedPoint::CENTRAL_BODY-BodyFixedPoint::CENTRAL_BODY]+"Hint").c_str())));
   
   // State Type
   wxStaticText *stateTypeLabel =
      new wxStaticText( this, ID_TEXT, wxT("State "GUI_ACCEL_KEY"Type"));
   StringArray stateTypeList =
       localGroundStation->GetPropertyEnumStrings(BodyFixedPoint::STATE_TYPE);
   wxArrayString wxStateTypeLabels = ToWxArrayString(stateTypeList);
   stateTypeComboBox = 
      new wxComboBox( this, ID_STATE_TYPE_COMBOBOX, wxT(""), wxDefaultPosition, wxSize(120,-1),
                      wxStateTypeLabels, wxCB_DROPDOWN|wxCB_READONLY);
   stateTypeComboBox->SetToolTip(pConfig->Read(_T((BodyFixedPoint::PARAMETER_TEXT[BodyFixedPoint::STATE_TYPE-BodyFixedPoint::CENTRAL_BODY]+"Hint").c_str())));
   
   // Horizon Reference
   wxStaticText *horizonReferenceLabel =
      new wxStaticText( this, ID_TEXT, wxT(GUI_ACCEL_KEY"Horizon Reference"));
   StringArray horizonReferenceList =
       localGroundStation->GetPropertyEnumStrings(BodyFixedPoint::HORIZON_REFERENCE);
   wxArrayString wxHorizonReferenceLabels = ToWxArrayString(horizonReferenceList);
   horizonReferenceComboBox = 
      new wxComboBox( this, ID_HORIZON_REFERENCE_COMBOBOX, wxT(""), wxDefaultPosition, wxSize(120,-1),
                      wxHorizonReferenceLabels, wxCB_DROPDOWN|wxCB_READONLY);
   horizonReferenceComboBox->SetToolTip(pConfig->Read(_T((BodyFixedPoint::PARAMETER_TEXT[BodyFixedPoint::HORIZON_REFERENCE-BodyFixedPoint::CENTRAL_BODY]+"Hint").c_str())));
   
   // Location 1
   location1Label =
       new wxStaticText( this, ID_TEXT, localGroundStation->GetStringParameter(BodyFixedPoint::LOCATION_LABEL_1).c_str());
   location1TextCtrl =
      new wxTextCtrl( this, ID_LOCATION_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC) );
   //location1TextCtrl->SetToolTip(pConfig->Read(wxT(localGroundStation->GetStringParameter(BodyFixedPoint::LOCATION_LABEL_1)+"Hint")));
   location1Unit =
      new wxStaticText( this, ID_TEXT, localGroundStation->GetStringParameter(BodyFixedPoint::LOCATION_UNITS_1).c_str());
   
   // Location 2
   location2Label =
       new wxStaticText( this, ID_TEXT, localGroundStation->GetStringParameter(BodyFixedPoint::LOCATION_LABEL_2).c_str());
   location2TextCtrl =
      new wxTextCtrl( this, ID_LOCATION_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC) );
   //location2TextCtrl->SetToolTip(pConfig->Read(wxT(localGroundStation->GetStringParameter(BodyFixedPoint::LOCATION_LABEL_2)+"Hint")));
   location2Unit =
       new wxStaticText( this, ID_TEXT, localGroundStation->GetStringParameter(BodyFixedPoint::LOCATION_UNITS_2).c_str());
   
   // Location 3
   location3Label =
       new wxStaticText( this, ID_TEXT, localGroundStation->GetStringParameter(BodyFixedPoint::LOCATION_LABEL_3).c_str());
   location3TextCtrl =
      new wxTextCtrl( this, ID_LOCATION_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0, wxTextValidator(wxGMAT_FILTER_NUMERIC) );
   //location3TextCtrl->SetToolTip(pConfig->Read(_T(localGroundStation->GetStringParameter(BodyFixedPoint::LOCATION_LABEL_3)+"Hint")));
   location3Unit =
       new wxStaticText( this, ID_TEXT, localGroundStation->GetStringParameter(BodyFixedPoint::LOCATION_UNITS_3).c_str());
   
   // Hardware
   //hardwareLabel =
   //    new wxStaticText( this, ID_TEXT, wxT(localGroundStation->GetStringParameter(BodyFixedPoint::HARDWARE)));
//   wxStaticText *hardwareLabel =
//       new wxStaticText( this, ID_TEXT, wxT("Hardware"));
//   hardwareTextCtrl =
//      new wxTextCtrl( this, ID_HARDWARE_TEXTCTRL, wxT(""), wxDefaultPosition, wxSize(120,-1), 0 );
//   //hardwareTextCtrl->SetToolTip(pConfig->Read(_T(BodyFixedPoint::PARAMETER_TEXT[BodyFixedPoint::HARDWARE-BodyFixedPoint::CENTRAL_BODY]"Hint")));
//   hardwareTextCtrl->SetToolTip(pConfig->Read(_T("HardwareHint")));
   
   // update labels and tooltips based on statetype
   UpdateControls();

   // set the min width for one of the labels for each GmatStaticBoxSizer
   minLabelSize = stationIDLabel->GetBestSize().x;
   minLabelSize = (minLabelSize < centralBodyLabel->GetBestSize().x) ? centralBodyLabel->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < stateTypeLabel->GetBestSize().x) ? stateTypeLabel->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < horizonReferenceLabel->GetBestSize().x) ? horizonReferenceLabel->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < location1Label->GetBestSize().x) ? location1Label->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < location2Label->GetBestSize().x) ? location2Label->GetBestSize().x : minLabelSize;
   minLabelSize = (minLabelSize < location3Label->GetBestSize().x) ? location3Label->GetBestSize().x : minLabelSize;
//   minLabelSize = (minLabelSize < hardwareLabel->GetBestSize().x) ? hardwareLabel->GetBestSize().x : minLabelSize;

   stationIDLabel->SetMinSize(wxSize(minLabelSize, stationIDLabel->GetMinHeight()));
   centralBodyLabel->SetMinSize(wxSize(minLabelSize, centralBodyLabel->GetMinHeight()));
//   hardwareLabel->SetMinSize(wxSize(minLabelSize, hardwareLabel->GetMinHeight()));

   //-----------------------------------------------------------------
   // Add to Station ID sizer
   //-----------------------------------------------------------------
   wxFlexGridSizer *flexGridSizer1 = new wxFlexGridSizer( 3, 0, 0 );
   //flexGridSizer1->AddGrowableCol(1);
   flexGridSizer1->Add(stationIDLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer1->Add(stationIDTextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer1->Add(0, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   
   theMiddleSizer->Add(flexGridSizer1, 0, wxEXPAND|wxALL, bsize);
   
   //-----------------------------------------------------------------
   // Add to location properties sizer
   //-----------------------------------------------------------------
   wxFlexGridSizer *flexGridSizer2 = new wxFlexGridSizer( 3, 0, 0 );
   //flexGridSizer2->AddGrowableCol(1);
   
   flexGridSizer2->Add(centralBodyLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer2->Add(centralBodyComboBox, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer2->Add(0, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);

   flexGridSizer2->Add(stateTypeLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer2->Add(stateTypeComboBox, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer2->Add(0, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   
   flexGridSizer2->Add(horizonReferenceLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer2->Add(horizonReferenceComboBox, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer2->Add(0, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);

   flexGridSizer2->Add(location1Label, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer2->Add(location1TextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer2->Add(location1Unit, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);

   flexGridSizer2->Add(location2Label, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer2->Add(location2TextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer2->Add(location2Unit, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);

   flexGridSizer2->Add(location3Label, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
   flexGridSizer2->Add(location3TextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
   flexGridSizer2->Add(location3Unit, unitSizeProportion, wxALIGN_LEFT|wxALL, bsize);

   // create the location Properties group box
   locationPropertiesSizer = new GmatStaticBoxSizer( wxVERTICAL, this, "Location" );
   locationPropertiesSizer->Add(flexGridSizer2, 0, wxEXPAND|wxALL, bsize);

   //-----------------------------------------------------------------
   // Add to hardware properties sizer
   //-----------------------------------------------------------------
//   wxFlexGridSizer *flexGridSizer3 = new wxFlexGridSizer( 3, 0, 0 );
//   //flexGridSizer2->AddGrowableCol(1);
//
//   flexGridSizer3->Add(hardwareLabel, labelSizeProportion, wxALIGN_LEFT|wxALL, bsize);
//   flexGridSizer3->Add(hardwareTextCtrl, ctrlSizeProportion, wxGROW|wxALL, bsize);
//
//   // create the hardware Properties group box
//   hardwarePropertiesSizer = new GmatStaticBoxSizer( wxVERTICAL, this, "Hardware" );
//   hardwarePropertiesSizer->Add(flexGridSizer3, 0, wxEXPAND|wxALL, bsize);

   //-----------------------------------------------------------------
   // Now put ground & fuel properties sizers into the middle sizer
   //-----------------------------------------------------------------
   theMiddleSizer->Add(locationPropertiesSizer, 1, wxEXPAND|wxALL, bsize);
//   theMiddleSizer->Add(hardwarePropertiesSizer, 0, wxEXPAND|wxALL, bsize);
   theMiddleSizer->SetSizeHints(this);

}