Merge branch 'master' into photobooth-split
This commit is contained in:
commit
0c6cf5a6ce
@ -1,3 +1,12 @@
|
||||
OpenRocket 13.11.2 (2014-01-01):
|
||||
------------------------------
|
||||
|
||||
Bug Fixes:
|
||||
* Numerous bug fixes and usability improvements in the new
|
||||
flight configuration tab.
|
||||
* Fix couple of layout issues
|
||||
* Updated Spanish, French and Chinese translations
|
||||
|
||||
OpenRocket 13.11.1 (2013-11-15):
|
||||
------------------------------
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
# The OpenRocket build version
|
||||
|
||||
build.version=13.11.1dev
|
||||
build.version=13.11.2dev
|
||||
|
||||
|
||||
# The source of the package. When building a package for a specific
|
||||
|
@ -57,7 +57,7 @@ RocketPanel.lbl.ViewType = View Type:
|
||||
|
||||
! BasicFrame
|
||||
BasicFrame.tab.Rocketdesign = Rocket design
|
||||
BasicFrame.tab.Flightconfig = Configurations
|
||||
BasicFrame.tab.Flightconfig = Motors & Configuration
|
||||
BasicFrame.tab.Flightsim = Flight simulations
|
||||
BasicFrame.title.Addnewcomp = Add new component
|
||||
BasicFrame.dlg.lbl1 = Design '
|
||||
@ -454,6 +454,11 @@ SimuRunDlg.lbl.Velocity = Velocity:
|
||||
SimuRunDlg.msg.Unabletosim = Unable to simulate:
|
||||
SimuRunDlg.msg.errorOccurred = An error occurred during the simulation:
|
||||
|
||||
BasicEventSimulationEngine.error.noMotorsDefined = No motors defined in the simulation.
|
||||
BasicEventSimulationEngine.error.earlyMotorBurnout = Motor burnout without liftoff.
|
||||
BasicEventSimulationEngine.error.noIgnition = No motors ignited.
|
||||
BasicEventSimulationEngine.error.NaNResult = Simulation resulted in not-a-number (NaN) value, please report a bug.
|
||||
|
||||
|
||||
RK4SimulationStepper.error.valuesTooLarge = Simulation values exceeded limits. Try selecting a shorter time step.
|
||||
|
||||
@ -1866,6 +1871,7 @@ MotorConfigurationPanel.btn.removeMotor = Remove motor
|
||||
MotorConfigurationPanel.btn.selectMotor = Select motor
|
||||
MotorConfigurationPanel.btn.selectIgnition = Select ignition
|
||||
MotorConfigurationPanel.btn.resetIgnition = Reset ignition
|
||||
MotorConfigurationPanel.lbl.nomotors = No motor mounts defined. Select one or more tubes from the list on the left as motor mounts.
|
||||
|
||||
MotorConfigurationTableModel.table.ignition.default = Default ({0})
|
||||
RecoveryConfigurationPanel.table.deployment.default = Default ({0})
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -53,7 +53,7 @@ RocketPanel.FigTypeAct.Unfinished = 3D \u0447\u0435\u0440\u043d\u043e\u0432\u043
|
||||
|
||||
RocketPanel.lbl.Flightcfg = \u041f\u043e\u043b\u0435\u0442\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f:
|
||||
RocketPanel.lbl.infoMessage = <html>\u041a\u043b\u0438\u043a \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 Shift+\u043a\u043b\u0438\u043a \u0434\u043b\u044f \u0441\u043c\u0435\u043d\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u0414\u0432\u043e\u0439\u043d\u043e\u0439 \u043a\u043b\u0438\u043a \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u041a\u043b\u0438\u043a+\u0442\u0430\u0449\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f
|
||||
RocketPanel.lbl.ViewType = \u0412\u0438\u0434:
|
||||
RocketPanel.lbl.ViewType = \u0412\u0438\u0434:
|
||||
|
||||
! BasicFrame
|
||||
BasicFrame.tab.Rocketdesign = \u041f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u043a\u0435\u0442\u044b
|
||||
@ -114,21 +114,21 @@ AboutDialog.lbl.translatorIcon =
|
||||
|
||||
! Print dialog
|
||||
PrintDialog.title = \u041f\u0435\u0447\u0430\u0442\u044c \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442
|
||||
PrintDialog.but.previewAndPrint = \u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0435\u0447\u0430\u0442\u0438
|
||||
PrintDialog.but.previewAndPrint = \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438 \u043f\u0435\u0447\u0430\u0442\u044c
|
||||
PrintDialog.checkbox.showByStage = \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e \u0441\u0442\u0443\u043f\u0435\u043d\u044f\u043c
|
||||
PrintDialog.lbl.selectElements = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b:
|
||||
printdlg.but.saveaspdf = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 PDF
|
||||
printdlg.but.preview = \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
|
||||
printdlg.but.settings = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
|
||||
PrintDialog.error.preview.title = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440.
|
||||
PrintDialog.error.preview.desc1 = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 PDF.
|
||||
PrintDialog.error.preview.title = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440.
|
||||
PrintDialog.error.preview.desc1 = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 PDF.
|
||||
PrintDialog.error.preview.desc2 = \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u043f\u0446\u0438\u0435\u0439 "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 PDF"
|
||||
|
||||
!PrintSettingsDialog
|
||||
PrintSettingsDialog.title = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0435\u0447\u0430\u0442\u0438
|
||||
PrintSettingsDialog.lbl.Templatefillcolor = \u0426\u0432\u0435\u0442 \u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432:
|
||||
PrintSettingsDialog.lbl.Templatebordercolor = \u0426\u0432\u0435\u0442 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432:
|
||||
PrintSettingsDialog.lbl.Papersize = \u0420\u0430\u0437\u0432\u043c\u0435\u0440 \u0431\u0443\u043c\u0430\u0433\u0438:
|
||||
PrintSettingsDialog.lbl.Templatebordercolor = \u0426\u0432\u0435\u0442 \u0430\u0431\u0440\u0438\u0441\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432:
|
||||
PrintSettingsDialog.lbl.Papersize = \u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u043c\u0430\u0433\u0438:
|
||||
PrintSettingsDialog.lbl.Paperorientation = \u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0431\u0443\u043c\u0430\u0433\u0438:
|
||||
PrintSettingsDialog.but.Reset = \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
|
||||
PrintSettingsDialog.but.Close = \u0417\u0430\u043a\u0440\u044b\u0442\u044c
|
||||
@ -204,7 +204,7 @@ edtmotorconfdlg.tbl.Stageheader = \u0421\u0442\u0443\u043f\u0435\u043d\u044c
|
||||
edtmotorconfdlg.tbl.Separationheader = \u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435
|
||||
|
||||
! Rename FlightConfiguration Dialog
|
||||
RenameConfigDialog.title = \u041f\u0435\u0440\u0435\u0438\u043c\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438
|
||||
RenameConfigDialog.title = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438
|
||||
RenameConfigDialog.lbl.name = \u0418\u043c\u044f \u043f\u043e\u043b\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:
|
||||
RenameConfigDialog.but.reset = \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
|
||||
|
||||
@ -256,7 +256,7 @@ pref.dlg.tab.Options = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
|
||||
pref.dlg.tab.Miscellaneousoptions = \u041f\u0440\u043e\u0447\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
|
||||
|
||||
pref.dlg.tab.Graphics = \u0413\u0440\u0430\u0444\u0438\u043a\u0430
|
||||
pref.dlg.lbl.DecalEditor = \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440
|
||||
pref.dlg.lbl.DecalEditor = \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440
|
||||
pref.dlg.opengl.lbl.title = 3D-\u0433\u0440\u0430\u0444\u0438\u043a\u0430
|
||||
pref.dlg.opengl.but.enableGL = \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c 3D-\u0433\u0440\u0430\u0444\u0438\u043a\u0443
|
||||
pref.dlg.opengl.but.enableAA = \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435
|
||||
@ -296,7 +296,7 @@ pref.dlg.lbl.Stability = \u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\
|
||||
pref.dlg.lbl.FlightTime = \u0412\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0435\u0442\u0430:
|
||||
pref.dlg.lbl.effect1 = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b..
|
||||
pref.dlg.lbl.Checkingupdates = \u041f\u043e\u0438\u0441\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439...
|
||||
pref.dlg.lbl.msg1 = \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.
|
||||
pref.dlg.lbl.msg1 = \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.
|
||||
pref.dlg.lbl.msg2 = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445.
|
||||
pref.dlg.lbl.msg3 = \u0412\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 OpenRocket.
|
||||
pref.dlg.lbl.msg4 = \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.
|
||||
@ -306,7 +306,7 @@ pref.dlg.PrefChoiseSelector3 = \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\
|
||||
pref.dlg.PrefBooleanSelector1 = \u0423\u0434\u0430\u043b\u0438\u0442\u044c
|
||||
pref.dlg.PrefBooleanSelector2 = \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c
|
||||
pref.dlg.Add = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
|
||||
pref.dlg.DescriptionArea.Adddirectories = \u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u043e\u0438\u0445 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438, \u0444\u0430\u0439\u043b\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 RASP (*.eng), \u0444\u0430\u0439\u043b\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 RockSim (*.rse) \u0438\u043b\u0438 ZIP-\u0430\u0440\u0445\u0438\u0432\u044b, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u043e\u0439 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (;). \u0418\u0437\u043c\u043d\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u044f\u0442 \u0432 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 OpenRocket.
|
||||
pref.dlg.DescriptionArea.Adddirectories = \u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u043e\u0438\u0445 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438, \u0444\u0430\u0439\u043b\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 RASP (*.eng), \u0444\u0430\u0439\u043b\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 RockSim (*.rse) \u0438\u043b\u0438 ZIP-\u0430\u0440\u0445\u0438\u0432\u044b, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u043e\u0439 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (;). \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u044f\u0442 \u0432 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 OpenRocket.
|
||||
|
||||
PreferencesDialog.lbl.language = \u042f\u0437\u044b\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430:
|
||||
PreferencesDialog.languages.default = \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439
|
||||
@ -315,7 +315,7 @@ PreferencesDialog.lbl.languageEffect = \u042f\u0437\u044b\u043a \u0441\u043c\u04
|
||||
! Simulation edit dialog
|
||||
simedtdlg.but.runsimulation = \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442
|
||||
simedtdlg.but.resettodefault = \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
|
||||
simedtdlg.but.savedefault = Save as default
|
||||
simedtdlg.but.savedefault = \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
|
||||
simedtdlg.but.add = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
|
||||
simedtdlg.but.remove = \u0423\u0434\u0430\u043b\u0438\u0442\u044c
|
||||
simedtdlg.title.Editsim = \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0440\u0430\u0441\u0447\u0435\u0442\u0430
|
||||
@ -342,7 +342,7 @@ simedtdlg.checkbox.InterStdAtmosphere = \u0418\u0441\u043f\u043e\u043b\u044c\u04
|
||||
simedtdlg.checkbox.ttip.InterStdAtmosphere1 = <html>\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u044b<br>\u0412 \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430
|
||||
simedtdlg.checkbox.ttip.InterStdAtmosphere2 = \u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435
|
||||
simedtdlg.checkbox.ttip.InterStdAtmosphere3 = \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u043e\u0440\u044f.
|
||||
simedtdlg.lbl.Temperature = \u0422\u0435\u043c\u0435\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430:
|
||||
simedtdlg.lbl.Temperature = \u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430:
|
||||
simedtdlg.lbl.ttip.Temperature = \u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0435.
|
||||
simedtdlg.lbl.Pressure = \u0414\u0430\u0432\u043b\u0435\u043d\u0438\u0435:
|
||||
simedtdlg.lbl.ttip.Pressure = \u0410\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u043d\u043e\u0435 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0435.
|
||||
@ -366,7 +366,7 @@ simedtdlg.lbl.ttip.Direction2 = \u043a \u0432\u0435\u0442\u0440\u0443,
|
||||
simedtdlg.lbl.ttip.Direction3 = \u043e\u0442 \u0432\u0435\u0442\u0440\u0430.
|
||||
simedtdlg.border.Simopt = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0441\u0447\u0435\u0442\u0430
|
||||
simedtdlg.lbl.Calcmethod = \u041c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0447\u0435\u0442\u0430:
|
||||
simedtdlg.lbl.ttip.Calcmethod = <html>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0411\u043e\u0440\u0440\u043e\u043c\u0430\u043d\u0430 \u0440\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0430\u044d\u0440\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u0437\u0434\u0435\u0441\u0442\u0432\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e<br>\u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c \u0411\u043e\u0440\u0440\u043e\u043c\u0430\u043d\u0430, \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u043c \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.
|
||||
simedtdlg.lbl.ttip.Calcmethod = <html>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0411\u043e\u0440\u0440\u043e\u043c\u0430\u043d\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0430\u044d\u0440\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e<br>\u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c \u0411\u043e\u0440\u0440\u043e\u043c\u0430\u043d\u0430, \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u043c \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.
|
||||
simedtdlg.lbl.ExtBarrowman = \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0411\u043e\u0440\u0440\u043e\u043c\u0430\u043d\u0430
|
||||
simedtdlg.lbl.Simmethod = \u041c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0447\u0435\u0442\u0430:
|
||||
simedtdlg.lbl.ttip.Simmethod1 = <html>\u0420\u0430\u0441\u0447\u0435\u0442 \u0434\u043b\u044f \u0448\u0435\u0441\u0442\u0438 \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u044b \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0432\u043e\u0431\u043e\u0434\u0443 \u0440\u0430\u043a\u0435\u0442\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0435\u0442\u0430<br>
|
||||
@ -436,13 +436,13 @@ simpanel.col.Maxacceleration = \u041c\u0430\u043a\u0441. \u0443\u0441\u043a\u043
|
||||
simpanel.col.Timetoapogee = \u0412\u0440\u0435\u043c\u044f \u0434\u043e \u0430\u043f\u043e\u0433\u0435\u044f
|
||||
simpanel.col.Flighttime = \u0412\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0435\u0442\u0430
|
||||
simpanel.col.Groundhitvelocity = \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f
|
||||
simpanel.ttip.uptodate = <i>\u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u044b</i>
|
||||
simpanel.ttip.uptodate = <i>\u0414\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b</i>
|
||||
simpanel.ttip.loaded = <i>\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0438\u0437 \u0444\u0430\u0439\u043b\u0430</i>
|
||||
simpanel.ttip.outdated = <i><font color=\"red\">\u0414\u0430\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438</font></i><br>\u041d\u0430\u0436\u043c\u0438\u0442\u0435 <i><b>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442\u044b</b></i> \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430.
|
||||
simpanel.ttip.external = <i>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435</i>
|
||||
simpanel.ttip.notSimulated = <i>\u0420\u0430\u0441\u0447\u0435\u0442 \u0435\u0449\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f</i><br>\u041d\u0430\u0436\u043c\u0438\u0442\u0435 <i><b>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442\u044b</b></i> \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430.
|
||||
simpanel.ttip.noData = \u041d\u0435\u0442 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.
|
||||
simpanel.ttip.noWarnings = <font color=\"gray\">\u041d\u0435\u0442 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439</font>
|
||||
simpanel.ttip.noWarnings = <font color=\"gray\">\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u043d\u0435\u0442.</font>
|
||||
simpanel.ttip.warnings = <font color=\"red\">\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f:</font>
|
||||
|
||||
! SimulationRunDialog
|
||||
@ -454,21 +454,26 @@ SimuRunDlg.lbl.Velocity = \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c:
|
||||
SimuRunDlg.msg.Unabletosim = \u0420\u0430\u0441\u0447\u0435\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d:
|
||||
SimuRunDlg.msg.errorOccurred = \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430:
|
||||
|
||||
BasicEventSimulationEngine.error.noMotorsDefined = \u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438.
|
||||
BasicEventSimulationEngine.error.earlyMotorBurnout = \u0412\u044b\u0433\u043e\u0440\u0430\u043d\u0438\u0435 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f \u0431\u0435\u0437 \u043e\u0442\u0440\u044b\u0432\u0430 \u0440\u0430\u043a\u0435\u0442\u044b \u043e\u0442 \u0437\u0435\u043c\u043b\u0438.
|
||||
BasicEventSimulationEngine.error.noIgnition = \u041d\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0437\u0430\u0436\u0438\u0433\u0430\u043d\u0438\u0435.
|
||||
BasicEventSimulationEngine.error.NaNResult = \u0420\u0430\u0441\u0447\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0435\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u043c (NaN). \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043e\u0442\u0447\u0435\u0442 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.
|
||||
|
||||
RK4SimulationStepper.error.valuesTooLarge = \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u0445 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u041f\u043e\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u0430\u0433.
|
||||
|
||||
RK4SimulationStepper.error.valuesTooLarge = \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u0445 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u0430\u0433.
|
||||
|
||||
SimulationModifierTree.OptimizationParameters = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b
|
||||
|
||||
! SimulationExportPanel
|
||||
SimExpPan.desc = \u0422\u0435\u043a\u0441\u0442, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438 (*.csv)
|
||||
SimExpPan.border.Vartoexport = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435
|
||||
SimExpPan.border.Stage = Stage to export
|
||||
SimExpPan.border.Stage = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0443\u043f\u0435\u043d\u044c
|
||||
SimExpPan.but.Selectall = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435
|
||||
SimExpPan.but.Selectnone = \u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440
|
||||
SimExpPan.border.Fieldsep = \u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043f\u043e\u043b\u0435\u0439
|
||||
SimExpPan.lbl.Fieldsepstr = \u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043f\u043e\u043b\u0435\u0439:
|
||||
SimExpPan.lbl.longA1 = <html>\u0421\u0442\u0440\u043e\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<br>
|
||||
SimExpPan.lbl.longA2 = \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438 (CSV) \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0437\u043d\u0430\u043a\u043e\u043c ','
|
||||
SimExpPan.lbl.longA2 = \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438 (CSV) \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0437\u043d\u0430\u043a\u043e\u043c ','
|
||||
SimExpPan.checkbox.Includesimudesc = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u0430
|
||||
SimExpPan.checkbox.ttip.Includesimudesc = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0441\u0447\u0435\u0442\u0430
|
||||
SimExpPan.border.Comments = \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f
|
||||
@ -520,7 +525,7 @@ ExpressionBuilderDialog.InsertVariable = \u0412\u0441\u0442\u0430\u0432\u0438\u0
|
||||
ExpressionBuilderDialog.InsertOperator = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440
|
||||
ExpressionBuilderDialog.led.ttip.Name = \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c
|
||||
ExpressionBuilderDialog.led.ttip.Symbol = \u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c
|
||||
ExpressionBuilderDialog.led.ttip.Expression = \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u0432\u0435\u0447\u0442\u043d\u044b\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b
|
||||
ExpressionBuilderDialog.led.ttip.Expression = \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b
|
||||
ExpressionBuilderDialog.CopyToOtherSimulations = \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b
|
||||
ExpressionBuilderDialog.CopyToOtherSimulations.ttip = <html>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430<br>\u0423\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b.
|
||||
|
||||
@ -559,7 +564,7 @@ Operator.random = \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\
|
||||
Operator.expm1 = \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e exp(x)-1, \u043d\u043e \u0431\u043b\u0434\u0435\u0435 \u0442\u043e\u0447\u043d\u043e\u0435 \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 x
|
||||
Operator.mean = \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u0430
|
||||
Operator.min = \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u0430
|
||||
Operator.max = \u041c\u0430\u043a\u0438\u0441\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u0430
|
||||
Operator.max = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u0430
|
||||
Operator.var = \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u0430
|
||||
Operator.stdev = \u0414\u0435\u0432\u0438\u0430\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u0430
|
||||
Operator.rms = \u0421\u0440\u0435\u0434\u043d\u0435-\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u0430
|
||||
@ -607,7 +612,7 @@ compaddbuttons.Bodycompandfinsets = \u041a\u043e\u0440\u043f\u0443\u0441\u043d\u
|
||||
compaddbuttons.Nosecone = \u0413\u043e\u043b\u043e\u0432\u043d\u043e\u0439\n\u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044c
|
||||
compaddbuttons.Bodytube = \u041a\u043e\u0440\u043f\u0443\u0441\u043d\u0430\u044f\n\u0442\u0440\u0443\u0431\u0430
|
||||
compaddbuttons.Transition = \u041f\u0435\u0440\u0435\u0445\u043e\u0434
|
||||
compaddbuttons.Trapezoidal = \u0422\u0440\u0430\u043f\u0435\u0446\u0438\u0435\u0434\u0430\u043b\u044c\u043d\u043e\u0435\n\u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
|
||||
compaddbuttons.Trapezoidal = \u0422\u0440\u0430\u043f\u0435\u0446\u0435\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0435\n\u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
|
||||
compaddbuttons.Elliptical = \u042d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435\n\u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
|
||||
compaddbuttons.Freeform = \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439\n\u0444\u043e\u0440\u043c\u044b
|
||||
compaddbuttons.Launchlug = \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435\n\u043a\u043e\u043b\u044c\u0446\u043e
|
||||
@ -692,7 +697,7 @@ ringcompcfg.radialdirectionfrom = \u0420\u0430\u0434\u0438\u0430\u043b\u044c\u04
|
||||
ringcompcfg.but.Reset = \u0421\u0431\u0440\u043e\u0441
|
||||
ringcompcfg.but.Resetcomponant = \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0430 \u043e\u0441\u0438 \u0440\u0430\u043a\u0435\u0442\u044b
|
||||
ringcompcfg.EngineBlock.desc = <html><b>\u0423\u043f\u043e\u0440 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f</b> \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044e \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f \u0432\u043f\u0435\u0440\u0435\u0434 \u0432 \u0442\u0440\u0443\u0431\u0435.<br><br>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 <b>\u041a\u043e\u0440\u043f\u0443\u0441\u043d\u0443\u044e \u0442\u0440\u0443\u0431\u0443</b> \u0438\u043b\u0438 <b>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0442\u0440\u0443\u0431\u0443</b> \u0438 \u043e\u0442\u043c\u0435\u0442\u044c\u0442\u0435 \u044d\u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u0430\u043a \u043a\u0440\u0435\u043f\u0435\u0436 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 <em>\u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c</em> .
|
||||
ringcompcfg.note.desc = \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0442\u0440\u0443\u0431\u0430 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0430\u044d\u0440\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0443, \u0434\u0430\u0436\u0435 \u0431\u0443\u0434\u0443\u0447\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u043e\u0439 \u0437\u0430 \u043f\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043a\u043e\u0440\u043f\u0443\u0441\u0430.
|
||||
ringcompcfg.note.desc = \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0442\u0440\u0443\u0431\u0430 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0430\u044d\u0440\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0443, \u0434\u0430\u0436\u0435 \u0431\u0443\u0434\u0443\u0447\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u043e\u0439 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043a\u043e\u0440\u043f\u0443\u0441\u0430.
|
||||
|
||||
|
||||
! Body Tube Config
|
||||
@ -705,7 +710,7 @@ BodyTubecfg.tab.Generalproperties = \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u
|
||||
BodyTubecfg.tab.Motor = \u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c
|
||||
BodyTubecfg.tab.Motormountconf = \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f
|
||||
BodyTubecfg.checkbox.Automatic = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438
|
||||
BodyTubecfg.checkbox.Filled = \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0430\u044f
|
||||
BodyTubecfg.checkbox.Filled = \u0421\u043f\u043b\u043e\u0448\u043d\u0430\u044f
|
||||
|
||||
! FinSetConfig
|
||||
FinSetConfig.tab.Fintabs = \u041a\u0440\u0435\u043f\u0435\u0436\u043d\u044b\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u044b
|
||||
@ -885,7 +890,7 @@ InnerTubeCfg.lbl.ttip.Rotation = \u0423\u0433\u043e\u043b \u043f\u043e\u0432\u04
|
||||
InnerTubeCfg.lbl.Rotangle = \u0423\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430
|
||||
InnerTubeCfg.but.Splitcluster = \u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440
|
||||
InnerTubeCfg.lbl.longA1 = <html>\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b.<br>
|
||||
InnerTubeCfg.lbl.longA2 = \u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0442\u0440\u0443\u0431\u0435.
|
||||
InnerTubeCfg.lbl.longA2 = \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0442\u0440\u0443\u0431\u0435.
|
||||
InnerTubeCfg.but.Resetsettings = \u0421\u0431\u0440\u043e\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a
|
||||
InnerTubeCfg.but.ttip.Resetsettings = \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
|
||||
|
||||
@ -940,7 +945,7 @@ NoseConeCfg.lbl.Noseconelength = \u0414\u043b\u0438\u043d\u0430 \u043e\u0431\u04
|
||||
NoseConeCfg.lbl.Basediam = \u0414\u0438\u0430\u043c\u0435\u0442\u0440 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f:
|
||||
NoseConeCfg.checkbox.Automatic = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438
|
||||
NoseConeCfg.lbl.Wallthickness = \u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0441\u0442\u0435\u043d\u043a\u0438:
|
||||
NoseConeCfg.checkbox.Filled = \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439
|
||||
NoseConeCfg.checkbox.Filled = \u0421\u043f\u043b\u043e\u0448\u043d\u043e\u0439
|
||||
NoseConeCfg.tab.General = \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435
|
||||
NoseConeCfg.tab.ttip.General = \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b
|
||||
NoseConeCfg.tab.Shoulder = \u0412\u044b\u0441\u0442\u0443\u043f \u043c\u0443\u0444\u0442\u044b
|
||||
@ -1005,7 +1010,7 @@ StreamerCfg.lbl.longA1 = <html>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\
|
||||
StreamerCfg.lbl.longB1 = <html>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0431\u0449\u0435\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u043b\u0435\u043d\u0442\u044b.<br>
|
||||
StreamerCfg.lbl.longB2 = \u0411\u043e\u043b\u044c\u0448\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043b\u043e\u0431\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f.
|
||||
StreamerCfg.lbl.Automatic = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438
|
||||
StreamerCfg.lbl.longC1 = \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0441\u043e\u043f\u0440\u043e\u0442\u043e\u0438\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u043b\u0435\u043d\u0442\u044b.
|
||||
StreamerCfg.lbl.longC1 = \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u043b\u0435\u043d\u0442\u044b.
|
||||
StreamerCfg.lbl.Posrelativeto = \u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e:
|
||||
StreamerCfg.lbl.plus = \u043f\u043b\u044e\u0441
|
||||
StreamerCfg.lbl.Packedlength = \u0414\u043b\u0438\u043d\u0430 \u0443\u043a\u043b\u0430\u0434\u043a\u0438:
|
||||
@ -1039,7 +1044,7 @@ TransitionCfg.lbl.Forediam = \u0414\u0438\u0430\u043c\u0435\u0442\u0440 \u0432\u
|
||||
TransitionCfg.checkbox.Automatic = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438
|
||||
TransitionCfg.lbl.Aftdiam = \u0414\u0438\u0430\u043c\u0435\u0442\u0440 \u0432\u0445\u043e\u0434\u0430:
|
||||
TransitionCfg.lbl.Wallthickness = \u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0441\u0442\u0435\u043d\u043a\u0438:
|
||||
TransitionCfg.checkbox.Filled = \u0417\u0430\u043b\u0438\u0442
|
||||
TransitionCfg.checkbox.Filled = \u0421\u043f\u043b\u043e\u0448\u043d\u043e\u0439
|
||||
TransitionCfg.tab.General = \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435
|
||||
TransitionCfg.tab.Generalproperties = \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b
|
||||
TransitionCfg.tab.Shoulder = \u0412\u044b\u0441\u0442\u0443\u043f
|
||||
@ -1065,18 +1070,18 @@ TrapezoidFinSetCfg.tab.General = \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u043
|
||||
TrapezoidFinSetCfg.tab.Generalproperties = \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b
|
||||
|
||||
! StorageOptionChooser
|
||||
StorageOptChooser.lbl.Simdatatostore = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0447\u0442\u043e\u0432:
|
||||
StorageOptChooser.lbl.Simdatatostore = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432:
|
||||
StorageOptChooser.rdbut.Allsimdata = \u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u0430
|
||||
StorageOptChooser.lbl.longA1 = <html>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432.<br>
|
||||
StorageOptChooser.lbl.longA2 = \u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c!
|
||||
StorageOptChooser.rdbut.Every = \u041a\u0430\u0436\u0434\u044b\u0435
|
||||
StorageOptChooser.lbl.longB1 = <html>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u0442\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439.<br>
|
||||
StorageOptChooser.lbl.longB1 = <html>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u0442\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439.<br>
|
||||
StorageOptChooser.lbl.longB2 = \u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430.
|
||||
StorageOptChooser.lbl.seconds = \u0441\u0435\u043a\u0443\u043d\u0434
|
||||
StorageOptChooser.rdbut.Onlyprimfig = \u0422\u043e\u043b\u044c\u043a\u043e \u0441\u0445\u0435\u043c\u0443
|
||||
StorageOptChooser.lbl.longC1 = <html>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435<br>
|
||||
StorageOptChooser.lbl.longC2 = \u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430.
|
||||
StorageOptChooser.lbl.longD1 = \u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0440\u0438\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438.
|
||||
StorageOptChooser.lbl.longD1 = \u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438.
|
||||
StorageOptChooser.ttip.Saveopt = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430
|
||||
StorageOptChooser.lbl.Estfilesize = \u041e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430:
|
||||
StorageOptChooser.lbl.Saveopt = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f
|
||||
@ -1100,7 +1105,7 @@ TCMotorSelPan.equalsIgnoreCase.None = \u041d\u0435\u0442
|
||||
TCMotorSelPan.lbl.NumberofsecondsorNone = (\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u0438\u043b\u0438 "\u041d\u0435\u0442")
|
||||
TCMotorSelPan.lbl.Totalimpulse = \u041e\u0431\u0449\u0438\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441:
|
||||
TCMotorSelPan.lbl.Avgthrust = \u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0442\u044f\u0433\u0430:
|
||||
TCMotorSelPan.lbl.Maxthrust = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044f\u0430 \u0442\u044f\u0433\u0430:
|
||||
TCMotorSelPan.lbl.Maxthrust = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u044f\u0433\u0430:
|
||||
TCMotorSelPan.lbl.Burntime = \u0412\u0440\u0435\u043c\u044f \u0433\u043e\u0440\u0435\u043d\u0438\u044f:
|
||||
TCMotorSelPan.lbl.Launchmass = \u0421\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u0441\u0430:
|
||||
TCMotorSelPan.lbl.Emptymass = \u041e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u043c\u0430\u0441\u0441\u0430:
|
||||
@ -1160,7 +1165,7 @@ main.menu.edit.paste = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c
|
||||
main.menu.edit.delete = \u0423\u0434\u0430\u043b\u0438\u0442\u044c
|
||||
main.menu.edit.resize = \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c...
|
||||
main.menu.edit.resize.desc = \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u0441\u0445\u0435\u043c\u044b
|
||||
main.menu.edit.editprese = \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043e\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432
|
||||
main.menu.edit.editprese = \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430
|
||||
main.menu.edit.preferences = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
|
||||
main.menu.edit.preferences.desc = \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f
|
||||
|
||||
@ -1169,7 +1174,7 @@ main.menu.analyze.desc = \u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0430\u043a
|
||||
main.menu.analyze.componentAnalysis = \u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432
|
||||
main.menu.analyze.componentAnalysis.desc = \u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u043a\u0435\u0442\u044b \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438
|
||||
main.menu.analyze.optimization = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u043a\u0435\u0442\u044b
|
||||
main.menu.analyze.optimization.desc = \u041e\u0431\u0449\u0430\u044f\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0440\u0430\u043a\u0435\u0442\u044b
|
||||
main.menu.analyze.optimization.desc = \u041e\u0431\u0449\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0440\u0430\u043a\u0435\u0442\u044b
|
||||
main.menu.analyze.customExpressions = \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f
|
||||
main.menu.analyze.customExpressions.desc = \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439
|
||||
|
||||
@ -1315,7 +1320,7 @@ TubeCoupler.TubeCoupler = \u041c\u0443\u0444\u0442\u0430
|
||||
!InnerTube
|
||||
InnerTube.InnerTube = \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0442\u0440\u0443\u0431\u0430
|
||||
! TrapezoidFinSet
|
||||
TrapezoidFinSet.TrapezoidFinSet = \u0422\u0440\u0430\u043f\u0435\u0446\u0438\u0435\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
|
||||
TrapezoidFinSet.TrapezoidFinSet = \u0422\u0440\u0430\u043f\u0435\u0446\u0435\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
|
||||
! FreeformFinSet
|
||||
FreeformFinSet.FreeformFinSet = \u041e\u043f\u0435\u0440\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b
|
||||
!MassComponent
|
||||
@ -1358,13 +1363,13 @@ MotorMount.IgnitionEvent.short.NEVER = \u041d\u0438\u043a\u043e\u0433\u0434\u043
|
||||
ComponentIcons.Nosecone = \u0413\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044c
|
||||
ComponentIcons.Bodytube = \u041a\u043e\u0440\u043f\u0443\u0441\u043d\u0430\u044f \u0442\u0440\u0443\u0431\u0430
|
||||
ComponentIcons.Transition = \u041f\u0435\u0440\u0435\u0445\u043e\u0434
|
||||
ComponentIcons.Trapezoidalfinset = \u0422\u0440\u0430\u043f\u0435\u0446\u0438\u0435\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
|
||||
ComponentIcons.Trapezoidalfinset = \u0422\u0440\u0430\u043f\u0435\u0446\u0435\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
|
||||
ComponentIcons.Ellipticalfinset = \u042d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
|
||||
ComponentIcons.Freeformfinset = \u041e\u043f\u0435\u0440\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b
|
||||
ComponentIcons.Launchlug = \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u044c\u0446\u043e
|
||||
ComponentIcons.Innertube = \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0442\u0440\u0443\u0431\u0430
|
||||
ComponentIcons.Tubecoupler = \u041c\u0443\u0444\u0442\u0430
|
||||
ComponentIcons.Centeringring = \u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u044c\u0443\u043e
|
||||
ComponentIcons.Centeringring = \u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u044c\u0446\u043e
|
||||
ComponentIcons.Bulkhead = \u041f\u0435\u0440\u0435\u0431\u043e\u0440\u043a\u0430
|
||||
ComponentIcons.Engineblock = \u0423\u043f\u043e\u0440 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f
|
||||
ComponentIcons.Parachute = \u041f\u0430\u0440\u0430\u0448\u044e\u0442
|
||||
@ -1408,7 +1413,7 @@ FlightEvent.Type.GROUND_HIT = \u041f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u
|
||||
FlightEvent.Type.SIMULATION_END = \u041a\u043e\u043d\u0435\u0446 \u0440\u0430\u0441\u0447\u0435\u0442\u0430
|
||||
FlightEvent.Type.ALTITUDE = \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b
|
||||
FlightEvent.Type.TUMBLE = \u041e\u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435
|
||||
FlightEvent.Type.EXCEPTION = Exception
|
||||
FlightEvent.Type.EXCEPTION = \u041e\u0448\u0438\u0431\u043a\u0430
|
||||
|
||||
! ThrustCurveMotorColumns
|
||||
TCurveMotorCol.MANUFACTURER = \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c
|
||||
@ -1584,8 +1589,8 @@ optimization.modifier.nosecone.diameter = \u0414\u0438\u0430\u043c\u0435\u0442\u
|
||||
optimization.modifier.nosecone.diameter.desc = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0438\u0430\u043c\u0435\u0442\u0440 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044f.
|
||||
optimization.modifier.nosecone.thickness = \u0422\u043e\u043b\u0449\u0438\u043d\u0430
|
||||
optimization.modifier.nosecone.thickness.desc = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u0449\u0438\u043d\u0443 \u0441\u0442\u0435\u043d\u043e\u043a \u043d\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044f.
|
||||
optimization.modifier.nosecone.shapeparameter = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u043e\u0440\u0438\u044b
|
||||
optimization.modifier.nosecone.shapeparameter.desc = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0442\u0440 \u0444\u043e\u0440\u043c\u044b \u043d\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044f.
|
||||
optimization.modifier.nosecone.shapeparameter = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u043e\u0440\u043c\u044b
|
||||
optimization.modifier.nosecone.shapeparameter.desc = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u043e\u0440\u043c\u044b \u043d\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044f.
|
||||
|
||||
optimization.modifier.transition.length = \u0414\u043b\u0438\u043d\u0430
|
||||
optimization.modifier.transition.length.desc = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430.
|
||||
@ -1638,7 +1643,7 @@ optimization.modifier.internalcomponent.position = \u041f\u043e\u043b\u043e\u043
|
||||
optimization.modifier.internalcomponent.position.desc = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e.
|
||||
|
||||
optimization.modifier.masscomponent.mass = \u041c\u0430\u0441\u0441\u0430
|
||||
optimization.modifier.masscomponent.mass.desc = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c the \u043c\u0430\u0441\u0441\u0443 \u0432\u0435\u0441\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.
|
||||
optimization.modifier.masscomponent.mass.desc = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0443 \u0432\u0435\u0441\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.
|
||||
|
||||
optimization.modifier.parachute.diameter = \u0414\u0438\u0430\u043c\u0435\u0442\u0440
|
||||
optimization.modifier.parachute.diameter.desc = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0438\u0430\u043c\u0435\u0442\u0440 \u043f\u0430\u0440\u0430\u0448\u044e\u0442\u043d\u043e\u0433\u043e \u043a\u0443\u043f\u043e\u043b\u0430.
|
||||
@ -1712,7 +1717,7 @@ GeneralOptimizationDialog.status.stepSize.ttip = \u0422\u0435\u043a\u0443\u0449\
|
||||
GeneralOptimizationDialog.btn.plotPath = \u0413\u0440\u0430\u0444\u0438\u043a \u043f\u0443\u0442\u0438
|
||||
GeneralOptimizationDialog.btn.plotPath.ttip = \u041f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u043f\u0443\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u0434\u0432\u0443\u0445 \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439)
|
||||
GeneralOptimizationDialog.btn.save = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0443\u0442\u044c
|
||||
GeneralOptimizationDialog.btn.save.ttip = \u0421\u043e\u0445\u0440\u043d\u0430\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432 \u0444\u0430\u0439\u043b CSV.
|
||||
GeneralOptimizationDialog.btn.save.ttip = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432 \u0444\u0430\u0439\u043b CSV.
|
||||
GeneralOptimizationDialog.btn.apply = \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e
|
||||
GeneralOptimizationDialog.btn.apply.ttip = \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a \u0441\u0445\u0435\u043c\u0435 \u0440\u0430\u043a\u0435\u0442\u044b
|
||||
GeneralOptimizationDialog.btn.reset = \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
|
||||
@ -1751,7 +1756,7 @@ MaximumAltitudeParameter.name = \u0412\u044b\u0441\u043e\u0442\u0430 \u0430\u043
|
||||
MaximumVelocityParameter.name = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c
|
||||
MaximumAccelerationParameter.name = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435
|
||||
StabilityParameter.name = \u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c
|
||||
GroundHitVelocityParameter.name = \u0421\u043a\u043e\u0440\u0441\u0442\u044c \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f
|
||||
GroundHitVelocityParameter.name = \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f
|
||||
LandingDistanceParameter.name = \u0414\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f
|
||||
TotalFlightTimeParameter.name = \u041e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0435\u0442\u0430
|
||||
DeploymentVelocityParameter.name = \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u0430\u0440\u0430\u0448\u044e\u0442\u0430
|
||||
@ -1791,7 +1796,7 @@ GuidedTourSelectionDialog.btn.start = \u041d\u0430\u0447\u0430\u0442\u044c!
|
||||
CustomFinImport.button.label = \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
|
||||
CustomFinImport.badFinImage = \u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u0423\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043e\u0434\u0438\u043d\u043c \u0447\u0435\u0440\u043d\u044b\u043c \u0438\u043b\u0438 \u0442\u0435\u043c\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043d\u0438\u0437\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.
|
||||
CustomFinImport.errorLoadingFile = \u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430:
|
||||
CustomFinImport.errorParsingFile = \u041e\u0448\u0438\u0431\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430:
|
||||
CustomFinImport.errorParsingFile = \u041e\u0448\u0438\u0431\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430:
|
||||
CustomFinImport.undo = \u0418\u043c\u043f\u043e\u0440\u0442 \u0444\u043e\u0440\u043c\u044b \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430
|
||||
CustomFinImport.error.title = \u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430
|
||||
CustomFinImport.error.badimage = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438\u0437 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.
|
||||
@ -1838,7 +1843,7 @@ table.column.Shape = \u0424\u043e\u0440\u043c\u0430
|
||||
table.column.Material = \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b
|
||||
table.column.Finish = \u041e\u0442\u0434\u0435\u043b\u043a\u0430
|
||||
table.column.Thickness = \u0422\u043e\u043b\u0449\u0438\u043d\u0430
|
||||
table.column.Filled = \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d
|
||||
table.column.Filled = \u0421\u043f\u043b\u043e\u0448\u043d\u043e\u0439
|
||||
table.column.Mass = \u041c\u0430\u0441\u0441\u0430
|
||||
table.column.Diameter = \u0414\u0438\u0430\u043c\u0435\u0442\u0440
|
||||
table.column.Sides = \u0421\u0442\u043e\u0440\u043e\u043d\u044b
|
||||
@ -1866,6 +1871,7 @@ MotorConfigurationPanel.btn.removeMotor = \u0423\u0434\u0430\u043b\u0438\u0442\u
|
||||
MotorConfigurationPanel.btn.selectMotor = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c
|
||||
MotorConfigurationPanel.btn.selectIgnition = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0436\u0438\u0433\u0430\u043d\u0438\u0435
|
||||
MotorConfigurationPanel.btn.resetIgnition = \u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0437\u0430\u0436\u0438\u0433\u0430\u043d\u0438\u0435
|
||||
MotorConfigurationPanel.lbl.nomotors = \u041a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043f\u0443\u0441\u043d\u044b\u0445 \u0442\u0440\u0443\u0431 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043b\u0435\u0432\u0430.
|
||||
|
||||
MotorConfigurationTableModel.table.ignition.default = \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e ({0})
|
||||
RecoveryConfigurationPanel.table.deployment.default = \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e ({0})
|
||||
@ -1885,4 +1891,4 @@ SeparationSelectionDialog.opt.override = \u0418\u0437\u043c\u0435\u043d\u0438\u0
|
||||
|
||||
MotorConfigurationPanel.description = <b>\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438 \u0438 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u0436\u0438\u0433\u0430\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u043b\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.</b><br> <em>\u041a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439:</em> \u0423\u043a\u0430\u0436\u0438\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439.<br> <em>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439:</em> \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u0438 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u0436\u0438\u0433\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f.
|
||||
|
||||
MotorDescriptionSubstitutor.description = \u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438
|
||||
MotorDescriptionSubstitutor.description = \u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438
|
171
core/resources/l10n/messages_tr.properties
Normal file
171
core/resources/l10n/messages_tr.properties
Normal file
@ -0,0 +1,171 @@
|
||||
#
|
||||
# English base translation file
|
||||
#
|
||||
# Should you need to add new logical keys here is the proposed method
|
||||
#
|
||||
# className.ComponentType.componentName
|
||||
#
|
||||
#
|
||||
# Text tokens within braces should not be translated, e.g.
|
||||
# "The file '{filename}' exists."
|
||||
# They are pieces that are inserted dynamically.
|
||||
#
|
||||
|
||||
|
||||
! Set to the name of the current translation file (used for debugging
|
||||
purposes)
|
||||
debug.currentFile = messages.properties
|
||||
|
||||
! RocketActions
|
||||
RocketActions.checkbox.Donotaskmeagain = Yeniden Tekrarlama
|
||||
RocketActions.lbl.Youcanchangedefop = Hatal\u0131 \u00c7al\u0131\u015fmay\u0131 De\u011fi\u015ftirebilirsin
|
||||
in the preferences.
|
||||
RocketActions.showConfirmDialog.lbl1 = Se\u00e7ili sim\u00fclasyonlar\u0131 silmek ister misiniz?
|
||||
RocketActions.showConfirmDialog.lbl2 = <html><i>Bu \u00e7al\u0131\u015fma tamamlanmad\u0131.</i>
|
||||
RocketActions.showConfirmDialog.title = Sim\u00fclasyonlar\u0131 Sil
|
||||
RocketActions.DelCompAct.Delete = Sil
|
||||
RocketActions.DelCompAct.ttip.Delete = Se\u00e7ili par\u00e7ay\u0131 sil.
|
||||
RocketActions.DelSimuAct.Delete = Sil
|
||||
RocketActions.DelSimuAct.ttip.Delete = Se\u00e7ili sim\u00fclasyonu sil.
|
||||
RocketActions.DelAct.Delete = Sil
|
||||
RocketActions.DelAct.ttip.Delete = Se\u00e7ilen par\u00e7ay\u0131 ya da sim\u00fclasyonu sil
|
||||
RocketActions.CutAction.Cut = Kes
|
||||
RocketActions.CutAction.ttip.Cut = Kes bu par\u00e7ay\u0131 yada sim\u00fclasyonun
|
||||
haf\u0131zadan ve kald\u0131r bu tasar\u0131mdan
|
||||
RocketActions.CopyAct.Copy = Kopyala
|
||||
RocketActions.CopyAct.ttip.Copy = Bu par\u00e7ay\u0131 kopyala (ve altpar\u00e7alar\u0131)
|
||||
haf\u0131zaya
|
||||
RocketActions.PasteAct.Paste = Yap\u0131\u015ft\u0131r
|
||||
RocketActions.PasteAct.ttip.Paste = Yap\u0131\u015ft\u0131r par\u00e7ay\u0131 ya da simulasyonu haf\u0131za \u00fczerinden
|
||||
tasar\u0131ma do\u011fru.
|
||||
RocketActions.EditAct.Edit = D\u00fczenle
|
||||
RocketActions.EditAct.ttip.Edit = Se\u00e7ilmi\u015f par\u00e7ay\u0131 d\u00fczenle .
|
||||
RocketActions.NewStageAct.Newstage = Yeni A\u015fama
|
||||
RocketActions.NewStageAct.ttip.Newstage = Yeni bir roket tasar\u0131m\u0131 ekle
|
||||
RocketActions.ActBoosterstage = Yard\u0131mc\u0131/Y\u00fckseltici A\u015fama
|
||||
RocketActions.MoveUpAct.Moveup = Yukar\u0131 \u00c7\u0131kar
|
||||
RocketActions.MoveUpAct.ttip.Moveup = Yukar\u0131ya do\u011fru bu par\u00e7ay\u0131 haraket ettir.
|
||||
RocketActions.MoveDownAct.Movedown = A\u015fa\u011f\u0131ya \u0130ndir
|
||||
RocketActions.MoveDownAct.ttip.Movedown = A\u015fa\u011f\u0131ya do\u011fru bu par\u00e7ay\u0131 haraket
|
||||
ettir.
|
||||
|
||||
! RocketPanel
|
||||
RocketPanel.FigTypeAct.Sideview = Yandan G\u00f6r\u00fcn\u00fc\u015f
|
||||
RocketPanel.FigTypeAct.Backview = Arkadan G\u00f6r\u00fcn\u00fc\u015f
|
||||
RocketPanel.FigTypeAct.Figure3D = 3D Resimlendirme
|
||||
RocketPanel.FigTypeAct.Finished = 3D Bitmi\u015f
|
||||
RocketPanel.FigTypeAct.Unfinished = 3D Bitmemi\u015f
|
||||
|
||||
|
||||
RocketPanel.lbl.Flightcfg = U\u00e7u\u015f Bi\u00e7imi/Konumu:
|
||||
RocketPanel.lbl.infoMessage = <html>Click to select Shift+Click
|
||||
to select other Double-click to edit Click+drag to
|
||||
move
|
||||
RocketPanel.lbl.ViewType = G\u00f6r\u00fcn\u00fc\u015f \u015eekli:
|
||||
|
||||
! BasicFrame
|
||||
BasicFrame.tab.Rocketdesign = Roket Tasar\u0131m\u0131
|
||||
BasicFrame.tab.Flightconfig = Motorlar & Bi\u00e7imleri
|
||||
BasicFrame.tab.Flightsim = U\u00e7u\u015f Sim\u00fclasyonlar\u0131
|
||||
BasicFrame.title.Addnewcomp = Yeni par\u00e7a ekle
|
||||
BasicFrame.dlg.lbl1 = Tasar\u0131m '
|
||||
BasicFrame.dlg.lbl2 = ' Kaydedilmemi\u015f.
|
||||
BasicFrame.dlg.lbl3 = Kaydetmek ister misiniz?
|
||||
BasicFrame.dlg.title = Tasar\u0131m Kaydedilmedi
|
||||
BasicFrame.StageName.Sustainer = Devam Et
|
||||
BasicFrame.WarningDialog.txt1 = Problemler a\u00e7\u0131l\u0131rken d\u00fczenleniyor
|
||||
BasicFrame.WarningDialog.txt2 = Baz\u0131 tasar\u0131m par\u00e7alar\u0131 d\u00fczg\u00fcnce
|
||||
y\u00fcklenemedi.
|
||||
BasicFrame.WarningDialog.title = Dosya a\u00e7\u0131l\u0131rken Tehlike
|
||||
|
||||
|
||||
! General error messages used in multiple contexts
|
||||
error.fileExists.title = File exists
|
||||
error.fileExists.desc = File '{filename}' exists. \u00dczerine yazmak ister misiniz?
|
||||
|
||||
error.writing.title = Hata Dosya Yaz\u0131l\u0131rken
|
||||
error.writing.desc = Bir hata dosya yaz\u0131l\u0131rken ortaya \u00e7\u0131kt\u0131:
|
||||
Configuration.lbl.override = Bu durum baz\u0131 u\u00e7u\u015f bi\u00e7imlerinde ge\u00e7ersizdir.
|
||||
|
||||
|
||||
! Labels used in buttons of dialog windows
|
||||
# TODO: Rename these to "btn.xxx"
|
||||
button.ok = Tamam
|
||||
button.cancel = \u00c7\u0131k\u0131\u015f
|
||||
button.close = Kapat
|
||||
|
||||
! Common labels used in buttons of dialog windows
|
||||
dlg.but.ok = Tamam
|
||||
dlg.but.cancel = \u00c7\u0131k\u0131\u015f
|
||||
dlg.but.close = Kapat
|
||||
! General file type names
|
||||
filetypes.pdf = PDF files (*.pdf)
|
||||
BasicFrame.SimpleFileFilter1 = All rocket designs (*.ork; *.rkt)
|
||||
BasicFrame.SimpleFileFilter2 = OpenRocket designs (*.ork)
|
||||
BasicFrame.SimpleFileFilter3 = RockSim designs (*.rkt)
|
||||
BasicFrame.SimpleFileFilter4 = OpenRocket presets (*.orc)
|
||||
filetypes.images = Resim Dosyalar\u0131
|
||||
|
||||
|
||||
! Diyolog Hakk\u0131nda
|
||||
AboutDialog.lbl.version = Version
|
||||
! The texts below provide additional credits for the translation maintainer
|
||||
! - In AboutDialog.lbl.translation replace "English" with the current
|
||||
language.
|
||||
! - AboutDialog.lbl.translator is the translator / group name (may be empty)
|
||||
! - AboutDialog.lbl.translatorWebsite is a URL to the translator / group
|
||||
(may be empty)
|
||||
! - AboutDialog.lbl.translatorIcon is the file name of an icon under
|
||||
pix/translators/ (may be empty)
|
||||
AboutDialog.lbl.translation = English translation by:Turkish
|
||||
AboutDialog.lbl.translator =Batuhan Dereli
|
||||
AboutDialog.lbl.translatorWebsite =www.batuhandereli.com
|
||||
AboutDialog.lbl.translatorIcon =
|
||||
|
||||
|
||||
! Yaz\u0131c\u0131
|
||||
PrintDialog.title = Yazd\u0131r yada \u00c7\u0131kart
|
||||
PrintDialog.but.previewAndPrint = \u00c7\u0131kt\u0131 \u00d6ncesi Bak & Yaz
|
||||
PrintDialog.checkbox.showByStage = Par\u00e7a G\u00f6ster
|
||||
PrintDialog.lbl.selectElements = \u0130\u00e7eren gruplar\u0131 se\u00e7:
|
||||
printdlg.but.saveaspdf = Kaydet PDF Olarak
|
||||
printdlg.but.preview = \u00d6nceki
|
||||
printdlg.but.settings = Ayarlar
|
||||
PrintDialog.error.preview.title = \u00d6nceki g\u00f6r\u00fcnt\u00fc ula\u015f\u0131lmaz
|
||||
PrintDialog.error.preview.desc1 = Pdf g\u00f6r\u00fcnt\u00fc ula\u015f\u0131lmaz.
|
||||
PrintDialog.error.preview.desc2 = L\u00fctfen kullan "Pdf Olarak Kaydet" i\u00e7eren
|
||||
ayarlardan.
|
||||
|
||||
|
||||
!PrintSettingsDialog
|
||||
PrintSettingsDialog.title = Yaz\u0131c\u0131 Ayarlar\u0131
|
||||
PrintSettingsDialog.lbl.Templatefillcolor = Kal\u0131p Renkli Doldur:
|
||||
PrintSettingsDialog.lbl.Templatebordercolor = Kal\u0131b\u0131 S\u0131n\u0131rl\u0131 Doldur:
|
||||
PrintSettingsDialog.lbl.Papersize = Ka\u011f\u0131t Boyutu:
|
||||
PrintSettingsDialog.lbl.Paperorientation = Ka\u011f\u0131t Hizalama:
|
||||
PrintSettingsDialog.but.Reset = Yeniden Ba\u015flat
|
||||
PrintSettingsDialog.but.Close = Kapat
|
||||
|
||||
|
||||
! Bug Report dialog
|
||||
bugreport.dlg.title = Hata Raporu
|
||||
bugreport.dlg.but.Sendbugreport = Hata Raporu G\u00f6nder
|
||||
bugreport.dlg.but.Sendbugreport.Ttip = Atomatik olarak hata raporu g\u00f6nder OPEN ROCKET
|
||||
geli\u015ftiricilerine.
|
||||
bugreport.dlg.successmsg1 = Hata raporu sorunsuz yolland\u0131.
|
||||
bugreport.dlg.successmsg2 = Te\u015fekk\u00fcrler sizin sayenizde OPENROCKET daha iyi geli\u015ficek!
|
||||
bugreport.dlg.successmsg3 = Hata Raporu G\u00f6nderildi
|
||||
bugreport.dlg.connectedInternet = <html>E\u011fer internet ba\u011flant\u0131n varsa,
|
||||
basit\u00e7e t\u0131klay\u0131p<em>Hata Raporu G\u00f6nder</em>.
|
||||
bugreport.dlg.otherwise = Ba\u015fka \u015fekilde,adrese yollay\u0131n:
|
||||
bugreport.lbl.Theinformation = Genel hata raporlar\u0131hakk\u0131nda bilgi i\u00e7eriyor.Emin de\u011filsen ve
|
||||
hislerinden \u00f6t\u00fcr\u00fc koyuyorsan hata raporunu koyma .
|
||||
bugreport.dlg.failedmsg1 = OpenRocket hata raporunu g\u00f6ndermek i\u00e7in uygun de\u011fil:
|
||||
bugreport.dlg.failedmsg2 = L\u00fctfen manual bir yolla g\u00f6nder
|
||||
bugreport.dlg.failedmsg3 = Hata raporu g\u00f6nderiliyor
|
||||
bugreport.reportDialog.txt = <html><b> OpenRocket i\u00e7erisindeki hatalar\u0131
|
||||
form doldurarak yollayabilirsiniz.</b><br>Hatta hatalar\u0131 dosyalay\u0131p internet sitesi
|
||||
\u00fczerinde proje sayfas\u0131na koyabilirsin.
|
||||
bugreport.reportDialog.txt2 = <html><b>L\u00fctfen belirtiniz tam olarak nas\u0131l bir beklentiniz vard\u0131</b>
|
||||
bugreport.dlg.provideDescription = L\u00fctfen Hatay\u0131 ilk ne zaman rastlad\u0131n\u0131z tam olarak a\u00e7\u0131klay\u0131n\u0131z
|
||||
bugreport.dlg.provideDescription.title = Hata tan\u0131m\u0131 kayboluyor
|
@ -69,12 +69,13 @@ public class RockSimAppearanceBuilder extends AppearanceBuilder {
|
||||
if ("file".equals(name)) {
|
||||
if (value.length() > 0) {
|
||||
final File f = new File(value);
|
||||
if (!f.exists()) {
|
||||
//Find out how to get path of current rocksim file
|
||||
//so I can look in it's directory
|
||||
if (f.exists()) {
|
||||
Attachment a = context.getAttachmentFactory().getAttachment(name);
|
||||
setImage(context.getOpenRocketDocument().getDecalImage(a));
|
||||
}
|
||||
Attachment a = context.getAttachmentFactory().getAttachment(name);
|
||||
setImage(context.getOpenRocketDocument().getDecalImage(a));
|
||||
// else {
|
||||
// If we can't find the file on the filesystem, we just ignore the decal.
|
||||
//}
|
||||
}
|
||||
} else if ("repeat".equals(name)) {
|
||||
repeat = "1".equals(value);
|
||||
|
@ -28,7 +28,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
public abstract class RocketComponent implements ChangeSource, Cloneable, Iterable<RocketComponent>, Visitable<RocketComponentVisitor, RocketComponent> {
|
||||
public abstract class RocketComponent implements ChangeSource, Cloneable, Iterable<RocketComponent> {
|
||||
private static final Logger log = LoggerFactory.getLogger(RocketComponent.class);
|
||||
|
||||
// Because of changes to Java 1.7.0-45's mechanism to construct DataFlavor objects (used in Drag and Drop)
|
||||
@ -1736,9 +1736,9 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
||||
}
|
||||
|
||||
///////////// Visitor pattern implementation
|
||||
@Override
|
||||
public void accept(RocketComponentVisitor visitor) {
|
||||
public <R> R accept(RocketComponentVisitor<R> visitor) {
|
||||
visitor.visit(this);
|
||||
return visitor.getResult();
|
||||
}
|
||||
|
||||
//////////// Helper methods for subclasses
|
||||
|
@ -1,5 +1,19 @@
|
||||
package net.sf.openrocket.rocketcomponent;
|
||||
|
||||
public interface RocketComponentVisitor extends Visitor<RocketComponentVisitor, RocketComponent> {
|
||||
public interface RocketComponentVisitor<R> {
|
||||
|
||||
/**
|
||||
* The callback method. This method is the 2nd leg of the double-dispatch, having been invoked from a
|
||||
* corresponding <code>accept</code>.
|
||||
*
|
||||
* @param visitable the instance of the Visitable (the target of what is being visiting)
|
||||
*/
|
||||
void visit(RocketComponent visitable);
|
||||
|
||||
/**
|
||||
* Return the final result
|
||||
* @return
|
||||
*/
|
||||
R getResult();
|
||||
|
||||
}
|
||||
|
@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Visitable.java
|
||||
*/
|
||||
package net.sf.openrocket.rocketcomponent;
|
||||
|
||||
/**
|
||||
* This interface describes a portion of the Visitor pattern, using generics to assure type-safety.
|
||||
* The elements of the concrete object hierarchy are only visitable by an associated hierarchy of visitors,
|
||||
* while these visitors are only able to visit the elements of that hierarchy.
|
||||
*
|
||||
* The key concept regarding the Visitor pattern is to realize that Java will only "discriminate" the type of an
|
||||
* object being called, not the type of an object being passed.
|
||||
*
|
||||
* In order for the type of two objects to be determinable to the JVM, each object must be the receiver of an
|
||||
* invocation. Here, when accept is called on a Visitable, the concrete type of the Visitable becomes "known" but the
|
||||
* concrete type of the argument is still unknown. <code>visit</code> is then called on the parameter object, passing
|
||||
* the Visitable back, which has type and identity. Flow of control has now been 'double-dispatched' such that the
|
||||
* type (and identity) of both objects are known.
|
||||
*
|
||||
* Specifically, this interface is to be implemented by every class in the RocketComponent hierarchy that
|
||||
* can be visited AND which are sufficiently specialized from their super class. If they only provide
|
||||
* constraints to their superclass (such as TubeCoupler), then the implementation of this interface at
|
||||
* the superclass level is sufficient.
|
||||
*
|
||||
* Admittedly, the syntax is a bit contorted here, as it is necessarily self-referential for type-safety.
|
||||
*
|
||||
* <V> The visitor type
|
||||
* <T> The visitable (the concrete class that implements this interface)
|
||||
*/
|
||||
public interface Visitable<V extends Visitor<V, T>, T extends Visitable<V, T>> {
|
||||
|
||||
/**
|
||||
* Any class in the hierarchy that allows itself to be visited will implement this method. The normal
|
||||
* behavior is that the visitor will invoke this method of a Visitable, passing itself. The Visitable
|
||||
* turns around calls the Visitor back. This idiom is also known as 'double-dispatching'.
|
||||
*
|
||||
* @param visitor the visitor that will be called back
|
||||
*/
|
||||
public void accept(V visitor);
|
||||
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
/*
|
||||
* Visitor.java
|
||||
*/
|
||||
package net.sf.openrocket.rocketcomponent;
|
||||
|
||||
/**
|
||||
* This interface describes a portion of the Visitor pattern, using generics to assure type-safety.
|
||||
* The elements of the concrete object hierarchy are only visitable by an associated hierarchy of visitors,
|
||||
* while these visitors are only able to visit the elements of that hierarchy.
|
||||
*
|
||||
* The key concept regarding the Visitor pattern is to realize that Java will only "discriminate" the type of an
|
||||
* object being called, not the type of an object being passed.
|
||||
*
|
||||
* In order for the type of two objects to be determinable to the JVM, each object must be the receiver of an
|
||||
* invocation. Here, when accept is called on a Visitable, the concrete type of the Visitable becomes "known" but the
|
||||
* concrete type of the argument is still unknown. <code>visit</code> is then called on the parameter object, passing
|
||||
* the Visitable back, which has type and identity. Flow of control has now been 'double-dispatched' such that the
|
||||
* type (and identity) of both objects are known.
|
||||
*
|
||||
* Specifically, this interface is to be implemented by every class in the RocketComponent hierarchy that
|
||||
* can be visited AND which are sufficiently specialized from their super class. If they only provide
|
||||
* constraints to their superclass (such as TubeCoupler), then the implementation of this interface at
|
||||
* the superclass level is sufficient.
|
||||
*
|
||||
* Admittedly, the syntax is a bit contorted here, as it is necessarily self-referential for type-safety.
|
||||
*
|
||||
* <V> The visitor type (the concrete class that implements this interface)
|
||||
* <T> The visitable
|
||||
*/
|
||||
public interface Visitor<V extends Visitor<V, T>, T extends Visitable<V, T>> {
|
||||
|
||||
/**
|
||||
* The callback method. This method is the 2nd leg of the double-dispatch, having been invoked from a
|
||||
* corresponding <code>accept</code>.
|
||||
*
|
||||
* @param visitable the instance of the Visitable (the target of what is being visiting)
|
||||
*/
|
||||
void visit(T visitable);
|
||||
}
|
@ -3,24 +3,24 @@ package net.sf.openrocket.rocketvisitors;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponentVisitor;
|
||||
|
||||
public abstract class BredthFirstRecusiveVisitor implements RocketComponentVisitor {
|
||||
|
||||
public abstract class BredthFirstRecusiveVisitor<R> implements RocketComponentVisitor<R> {
|
||||
|
||||
@Override
|
||||
public final void visit(RocketComponent visitable) {
|
||||
|
||||
|
||||
this.doAction(visitable);
|
||||
|
||||
for ( RocketComponent child: visitable.getChildren() ) {
|
||||
|
||||
for (RocketComponent child : visitable.getChildren()) {
|
||||
this.doAction(child);
|
||||
}
|
||||
|
||||
for ( RocketComponent child: visitable.getChildren() ) {
|
||||
|
||||
for (RocketComponent child : visitable.getChildren()) {
|
||||
this.visit(child);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected abstract void doAction( RocketComponent visitable );
|
||||
|
||||
protected abstract void doAction(RocketComponent visitable);
|
||||
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
package net.sf.openrocket.rocketvisitors;
|
||||
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.FlightConfigurableComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
|
||||
public class CopyFlightConfigurationVisitor extends DepthFirstRecusiveVisitor {
|
||||
|
||||
public class CopyFlightConfigurationVisitor extends DepthFirstRecusiveVisitor<Void> {
|
||||
|
||||
private final String oldConfigId;
|
||||
private final String newConfigId;
|
||||
|
||||
@ -13,14 +13,18 @@ public class CopyFlightConfigurationVisitor extends DepthFirstRecusiveVisitor {
|
||||
this.oldConfigId = oldConfigId;
|
||||
this.newConfigId = newConfigId;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void doAction(RocketComponent visitable) {
|
||||
|
||||
if ( visitable instanceof FlightConfigurableComponent ) {
|
||||
((FlightConfigurableComponent)visitable).cloneFlightConfiguration(oldConfigId, newConfigId);
|
||||
if (visitable instanceof FlightConfigurableComponent) {
|
||||
((FlightConfigurableComponent) visitable).cloneFlightConfiguration(oldConfigId, newConfigId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void getResult() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,19 +3,19 @@ package net.sf.openrocket.rocketvisitors;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponentVisitor;
|
||||
|
||||
public abstract class DepthFirstRecusiveVisitor implements RocketComponentVisitor {
|
||||
|
||||
public abstract class DepthFirstRecusiveVisitor<R> implements RocketComponentVisitor<R> {
|
||||
|
||||
@Override
|
||||
public final void visit(RocketComponent visitable) {
|
||||
|
||||
|
||||
this.doAction(visitable);
|
||||
|
||||
for ( RocketComponent child: visitable.getChildren() ) {
|
||||
for (RocketComponent child : visitable.getChildren()) {
|
||||
this.visit(child);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected abstract void doAction( RocketComponent visitable );
|
||||
|
||||
protected abstract void doAction(RocketComponent visitable);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
package net.sf.openrocket.rocketvisitors;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
|
||||
public class ListComponents<T extends RocketComponent> extends DepthFirstRecusiveVisitor<List<T>> {
|
||||
|
||||
private final Class<T> componentClazz;
|
||||
protected List<T> components = new ArrayList<T>();
|
||||
|
||||
public ListComponents(Class<T> componentClazz) {
|
||||
super();
|
||||
this.componentClazz = componentClazz;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<T> getResult() {
|
||||
return components;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doAction(RocketComponent visitable) {
|
||||
if (componentClazz.isAssignableFrom(visitable.getClass())) {
|
||||
components.add((T) visitable);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package net.sf.openrocket.rocketvisitors;
|
||||
|
||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
|
||||
public class ListMotorMounts extends ListComponents<RocketComponent> {
|
||||
|
||||
public ListMotorMounts() {
|
||||
super(RocketComponent.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doAction(RocketComponent visitable) {
|
||||
if (visitable instanceof MotorMount && ((MotorMount) visitable).isMotorMount()) {
|
||||
components.add(visitable);
|
||||
}
|
||||
}
|
||||
}
|
@ -66,7 +66,7 @@ public class BasicEventSimulationEngine implements SimulationEngine {
|
||||
flightConfigurationId = configuration.getFlightConfigurationID();
|
||||
MotorInstanceConfiguration motorConfiguration = setupMotorConfiguration(configuration);
|
||||
if (motorConfiguration.getMotorIDs().isEmpty()) {
|
||||
throw new MotorIgnitionException("No motors defined in the simulation.");
|
||||
throw new MotorIgnitionException(trans.get("BasicEventSimulationEngine.error.noMotorsDefined"));
|
||||
}
|
||||
|
||||
status = new SimulationStatus(configuration, motorConfiguration, simulationConditions);
|
||||
@ -403,7 +403,7 @@ public class BasicEventSimulationEngine implements SimulationEngine {
|
||||
case BURNOUT: {
|
||||
// If motor burnout occurs without lift-off, abort
|
||||
if (!status.isLiftoff()) {
|
||||
throw new SimulationLaunchException("Motor burnout without liftoff.");
|
||||
throw new SimulationLaunchException(trans.get("BasicEventSimulationEngine.error.earlyMotorBurnout"));
|
||||
}
|
||||
// Add ejection charge event
|
||||
MotorId motorId = (MotorId) event.getData();
|
||||
@ -514,7 +514,7 @@ public class BasicEventSimulationEngine implements SimulationEngine {
|
||||
|
||||
// If no motor has ignited, abort
|
||||
if (!status.isMotorIgnited()) {
|
||||
throw new MotorIgnitionException("No motors ignited.");
|
||||
throw new MotorIgnitionException(trans.get("BasicEventSimulationEngine.error.noIgnition"));
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -579,7 +579,7 @@ public class BasicEventSimulationEngine implements SimulationEngine {
|
||||
" rocketOrientationQuaternion=" + status.getRocketOrientationQuaternion() +
|
||||
" rocketRotationVelocity=" + status.getRocketRotationVelocity() +
|
||||
" effectiveLaunchRodLength=" + status.getEffectiveLaunchRodLength());
|
||||
throw new SimulationException("Simulation resulted in not-a-number (NaN) value, please report a bug.");
|
||||
throw new SimulationException(trans.get("BasicEventSimulationEngine.error.NaNResult"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -80,13 +80,18 @@ header("Content-type: text/plain");
|
||||
$version = $_GET["version"];
|
||||
$updates = "";
|
||||
|
||||
$unstable = "13.11.1";
|
||||
$unstable = "13.11.2";
|
||||
$stable = "1.0.0";
|
||||
|
||||
|
||||
if (preg_match("/^13.11$/", $version)) {
|
||||
if (preg_match("/^13.11.1$/", $version)) {
|
||||
$updates = "Version: " . $unstable . "\n" .
|
||||
"4: Bug fixes - Various fixes to motor selection\n".
|
||||
"";
|
||||
} else if (preg_match("/^13.11$/", $version)) {
|
||||
$updates = "Version: " . $unstable . "\n" .
|
||||
"4: Bug fixes - Tube Coupler configuration among other things\n".
|
||||
"4: Bug fixes - Various fixes to motor selection\n".
|
||||
"";
|
||||
} else if (preg_match("/^13.09.1$/", $version)) {
|
||||
$updates = "Version: " . $unstable . "\n" .
|
||||
|
@ -48,6 +48,10 @@
|
||||
<div class="content">
|
||||
<div class="news">
|
||||
<h2>Recent news:</h2>
|
||||
<p><span class="date">01.01.2014:</span> Version 13.11.2 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes,
|
||||
usability improvements, and layout fixes.
|
||||
</p>
|
||||
<p><span class="date">15.11.2013:</span> Version 13.11.1 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes
|
||||
including fixing Tube Coupler configuration, various exceptions in
|
||||
@ -97,20 +101,20 @@
|
||||
<a href="http://sourceforge.net/donate/index.php?group_id=260357"><img src="project-support.jpg" width="88" height="32" alt="Support This Project" /></a>
|
||||
</div>
|
||||
<div class="downloadbox">
|
||||
<a class="main" href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.1/OpenRocket-13.11.1.jar/download">
|
||||
<a class="main" href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.2/OpenRocket-13.11.2.jar/download">
|
||||
<strong>Download now!</strong>
|
||||
<span>OpenRocket-13.11.1.jar</span>
|
||||
<span>OpenRocket-13.11.2.jar</span>
|
||||
</a>
|
||||
<span class="alternative">
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.1/ReleaseNotes/view">Release notes</a> |
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.1/OpenRocket-13.11.1-src.zip/download">Source code</a>
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.2/ReleaseNotes/view">Release notes</a> |
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.2/OpenRocket-13.11.2-src.zip/download">Source code</a>
|
||||
</span>
|
||||
</div>
|
||||
<p>OpenRocket can be started in most graphical environments (including
|
||||
Windows) by double-clicking the package icon. No installation is
|
||||
required.</p>
|
||||
<p>From the command line OpenRocket can be started by
|
||||
<span class="command">java -jar OpenRocket-13.11.1.jar</span></p>
|
||||
<span class="command">java -jar OpenRocket-13.11.2.jar</span></p>
|
||||
<h3>Android version</h3>
|
||||
<p>The Android version allows opening OpenRocket files, viewing
|
||||
simulations and motors. Later versions will allow running
|
||||
|
@ -49,12 +49,12 @@
|
||||
<h2>Introduction</h2>
|
||||
<div class="rightpane">
|
||||
<div class="downloadbox">
|
||||
<a class="main" href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.1/OpenRocket-13.11.1.jar/download">
|
||||
<a class="main" href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.2/OpenRocket-13.11.2.jar/download">
|
||||
<strong>Download now!</strong>
|
||||
<span>OpenRocket-13.11.1.jar</span>
|
||||
<span>OpenRocket-13.11.2.jar</span>
|
||||
</a>
|
||||
<span class="alternative">
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.1/ReleaseNotes/view">Release notes</a> |
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11.2/ReleaseNotes/view">Release notes</a> |
|
||||
<a href="download.html">Other versions</a>
|
||||
</span>
|
||||
</div>
|
||||
@ -96,6 +96,10 @@
|
||||
<div class="clear"></div>
|
||||
<div class="news">
|
||||
<h2>News</h2>
|
||||
<p><span class="date">01.01.2014:</span> Version 13.11.2 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes,
|
||||
usability improvements, and layout fixes.
|
||||
</p>
|
||||
<p><span class="date">15.11.2013:</span> Version 13.11.1 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes
|
||||
including fixing Tube Coupler configuration, various exceptions in
|
||||
|
@ -1,4 +1,4 @@
|
||||
<set version="13.11.1">
|
||||
<set version="13.11.2">
|
||||
<set androidversion="12.09">
|
||||
|
||||
<def name="downloadbox">
|
||||
|
@ -9,6 +9,11 @@
|
||||
|
||||
<!--- Remember to move the position of "onlyrecent" below! --->
|
||||
|
||||
<p><span class="date">01.01.2014:</span> Version 13.11.2 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes,
|
||||
usability improvements, and layout fixes.
|
||||
</p>
|
||||
|
||||
<p><span class="date">15.11.2013:</span> Version 13.11.1 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes
|
||||
including fixing Tube Coupler configuration, various exceptions in
|
||||
|
@ -311,19 +311,14 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
}
|
||||
|
||||
public void setMotorMountAndConfig( MotorMount mount, String currentConfig ) {
|
||||
double diameter = 0;
|
||||
|
||||
if ( mount != null ) {
|
||||
diameter = mount.getMotorMountDiameter();
|
||||
}
|
||||
|
||||
if (currentConfig != null && mount != null) {
|
||||
MotorConfiguration motorConf = mount.getMotorConfiguration().get(currentConfig);
|
||||
selectedMotor = (ThrustCurveMotor) motorConf.getMotor();
|
||||
selectedDelay = motorConf.getEjectionDelay();
|
||||
diameter = mount.getMotorMountDiameter();
|
||||
}
|
||||
|
||||
selectedMotorSet = null;
|
||||
|
||||
// If current motor is not found in db, add a new ThrustCurveMotorSet containing it
|
||||
if (selectedMotor != null) {
|
||||
for (ThrustCurveMotorSet motorSet : database) {
|
||||
@ -426,6 +421,7 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
curveSelectionBox.setEnabled(false);
|
||||
curveSelectionLabel.setEnabled(false);
|
||||
motorInformationPanel.clearData();
|
||||
table.clearSelection();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -120,7 +120,8 @@ public class BasicFrame extends JFrame {
|
||||
private static final int SHORTCUT_KEY = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
|
||||
|
||||
public static final int COMPONENT_TAB = 0;
|
||||
public static final int SIMULATION_TAB = 1;
|
||||
public static final int CONFIGURATION_TAB = 1;
|
||||
public static final int SIMULATION_TAB = 2;
|
||||
|
||||
|
||||
/**
|
||||
@ -267,7 +268,7 @@ public class BasicFrame extends JFrame {
|
||||
|
||||
// Upper-left segment, component tree
|
||||
|
||||
JPanel panel = new JPanel(new MigLayout("fill, flowy", "", "[grow]"));
|
||||
JPanel panel = new JPanel(new MigLayout("fill, flowy", "[grow][grow 0]","[grow]"));
|
||||
|
||||
tree = new ComponentTree(document);
|
||||
tree.setSelectionModel(componentSelectionModel);
|
||||
|
@ -13,49 +13,49 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, ExceptionHandler {
|
||||
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(SwingExceptionHandler.class);
|
||||
|
||||
|
||||
private static final int MEMORY_RESERVE = 512 * 1024;
|
||||
|
||||
|
||||
/**
|
||||
* A memory reserve of 0.5 MB of memory, that can be freed when showing the dialog.
|
||||
* <p>
|
||||
* This field is package-private so that the JRE cannot optimize its use away.
|
||||
*/
|
||||
volatile byte[] memoryReserve = null;
|
||||
|
||||
|
||||
private volatile boolean handling = false;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void uncaughtException(final Thread thread, final Throwable throwable) {
|
||||
|
||||
|
||||
// Free memory reserve if out of memory
|
||||
if (isOutOfMemoryError(throwable)) {
|
||||
memoryReserve = null;
|
||||
handling = false;
|
||||
log.error("Out of memory error detected", throwable);
|
||||
}
|
||||
|
||||
|
||||
if (isNonFatalJREBug(throwable)) {
|
||||
log.warn("Ignoring non-fatal JRE bug", throwable);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
log.error("Handling uncaught exception on thread=" + thread, throwable);
|
||||
throwable.printStackTrace();
|
||||
|
||||
|
||||
if (handling) {
|
||||
log.warn("Exception is currently being handled, ignoring");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
handling = true;
|
||||
|
||||
|
||||
// Show on the EDT
|
||||
if (SwingUtilities.isEventDispatchThread()) {
|
||||
log.info("Exception handler running on EDT, showing dialog");
|
||||
@ -69,9 +69,9 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
} catch (Throwable ex) {
|
||||
|
||||
|
||||
// Make sure the handler does not throw any exceptions
|
||||
try {
|
||||
log.error("Caught exception while handling exception", ex);
|
||||
@ -79,15 +79,15 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
ex.printStackTrace();
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
|
||||
|
||||
} finally {
|
||||
// Mark handling as completed
|
||||
handling = false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Handle an error condition programmatically without throwing an exception.
|
||||
* This can be used in cases where recovery of the error is desirable.
|
||||
@ -102,8 +102,8 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
log.error(message, new Throwable());
|
||||
handleErrorCondition(new InternalException(message));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Handle an error condition programmatically without throwing an exception.
|
||||
* This can be used in cases where recovery of the error is desirable.
|
||||
@ -119,8 +119,8 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
log.error(message, exception);
|
||||
handleErrorCondition(new InternalException(message, exception));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Handle an error condition programmatically without throwing an exception.
|
||||
* This can be used in cases where recovery of the error is desirable.
|
||||
@ -137,7 +137,7 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
log.error("Error occurred", exception);
|
||||
}
|
||||
final Thread thread = Thread.currentThread();
|
||||
|
||||
|
||||
if (SwingUtilities.isEventDispatchThread()) {
|
||||
log.info("Running in EDT, showing dialog");
|
||||
this.showDialog(thread, exception);
|
||||
@ -155,8 +155,8 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
log.error("Exception occurred in error handler", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The actual handling routine.
|
||||
*
|
||||
@ -164,82 +164,82 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
* @param e the exception.
|
||||
*/
|
||||
private void showDialog(Thread t, Throwable e) {
|
||||
|
||||
|
||||
// Out of memory
|
||||
if (isOutOfMemoryError(e)) {
|
||||
log.info("Showing out-of-memory dialog");
|
||||
JOptionPane.showMessageDialog(null,
|
||||
new Object[] {
|
||||
"OpenRocket is out of available memory!",
|
||||
"You should immediately close unnecessary design windows,",
|
||||
"save any unsaved designs and restart OpenRocket!"
|
||||
}, "Out of memory", JOptionPane.ERROR_MESSAGE);
|
||||
"OpenRocket is out of available memory!",
|
||||
"You should immediately close unnecessary design windows,",
|
||||
"save any unsaved designs and restart OpenRocket!"
|
||||
}, "Out of memory", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Create the message
|
||||
String msg = e.getClass().getSimpleName() + ": " + e.getMessage();
|
||||
if (msg.length() > 90) {
|
||||
msg = msg.substring(0, 80) + "...";
|
||||
}
|
||||
|
||||
|
||||
// Unknown Error
|
||||
if (!(e instanceof Exception) && !(e instanceof LinkageError)) {
|
||||
log.info("Showing Error dialog");
|
||||
JOptionPane.showMessageDialog(null,
|
||||
new Object[] {
|
||||
"An unknown Java error occurred:",
|
||||
msg,
|
||||
"<html>You should immediately close unnecessary design windows,<br>" +
|
||||
"save any unsaved designs and restart OpenRocket!"
|
||||
}, "Unknown Java error", JOptionPane.ERROR_MESSAGE);
|
||||
"An unknown Java error occurred:",
|
||||
msg,
|
||||
"<html>You should immediately close unnecessary design windows,<br>" +
|
||||
"save any unsaved designs and restart OpenRocket!"
|
||||
}, "Unknown Java error", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Normal exception, show question dialog
|
||||
log.info("Showing Exception dialog");
|
||||
int selection = JOptionPane.showOptionDialog(null, new Object[] {
|
||||
"OpenRocket encountered an uncaught exception. This typically signifies " +
|
||||
"a bug in the software.",
|
||||
"<html><em> " + msg + "</em>",
|
||||
" ",
|
||||
"Please take a moment to report this bug to the developers.",
|
||||
"This can be done automatically if you have an Internet connection."
|
||||
"<html><em> " + msg + "</em>",
|
||||
" ",
|
||||
"Please take a moment to report this bug to the developers.",
|
||||
"This can be done automatically if you have an Internet connection."
|
||||
}, "Uncaught exception", JOptionPane.DEFAULT_OPTION,
|
||||
JOptionPane.ERROR_MESSAGE, null,
|
||||
new Object[] { "View bug report", "Close" }, "View bug report");
|
||||
|
||||
JOptionPane.ERROR_MESSAGE, null,
|
||||
new Object[] { "View bug report", "Close" }, "View bug report");
|
||||
|
||||
if (selection != 0) {
|
||||
// User cancelled
|
||||
log.info(Markers.USER_MARKER, "User chose not to fill bug report");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Show bug report dialog
|
||||
log.info(Markers.USER_MARKER, "User requested sending bug report");
|
||||
BugReportDialog.showExceptionDialog(null, t, e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Registers the uncaught exception handler. This should be used to ensure that
|
||||
* all necessary registrations are performed.
|
||||
*/
|
||||
public void registerExceptionHandler() {
|
||||
|
||||
|
||||
Thread.setDefaultUncaughtExceptionHandler(this);
|
||||
|
||||
|
||||
// Handler for modal dialogs of Sun's Java implementation
|
||||
// See bug ID 4499199.
|
||||
System.setProperty("sun.awt.exception.handler", AwtHandler.class.getName());
|
||||
|
||||
|
||||
reserveMemory();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reserve the buffer memory that is freed in case an OutOfMemoryError occurs.
|
||||
*/
|
||||
@ -249,9 +249,9 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
memoryReserve[i] = (byte) i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Return whether this throwable was caused by an OutOfMemoryError
|
||||
* condition. An exception is deemed to be caused by OutOfMemoryError
|
||||
@ -271,9 +271,9 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Handler used in modal dialogs by Sun Java implementation.
|
||||
*/
|
||||
@ -282,8 +282,8 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
Application.getExceptionHandler().uncaughtException(Thread.currentThread(), t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Detect various non-fatal Sun JRE bugs.
|
||||
*
|
||||
@ -291,32 +291,32 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
* @return whether this exception should be ignored
|
||||
*/
|
||||
private boolean isNonFatalJREBug(Throwable t) {
|
||||
|
||||
|
||||
// NOTE: Calling method logs the entire throwable, so log only message here
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Detect and ignore bug 6826104 in Sun JRE.
|
||||
*/
|
||||
if (t instanceof NullPointerException) {
|
||||
StackTraceElement[] trace = t.getStackTrace();
|
||||
|
||||
|
||||
if (trace.length > 3 &&
|
||||
trace[0].getClassName().equals("sun.awt.X11.XWindowPeer") &&
|
||||
trace[0].getMethodName().equals("restoreTransientFor") &&
|
||||
|
||||
|
||||
trace[1].getClassName().equals("sun.awt.X11.XWindowPeer") &&
|
||||
trace[1].getMethodName().equals("removeFromTransientFors") &&
|
||||
|
||||
|
||||
trace[2].getClassName().equals("sun.awt.X11.XWindowPeer") &&
|
||||
trace[2].getMethodName().equals("setModalBlocked")) {
|
||||
log.warn("Ignoring Sun JRE bug (6826104): http://bugs.sun.com/view_bug.do?bug_id=6826104" + t);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Detect and ignore bug 6828938 in Sun JRE 1.6.0_14 - 1.6.0_16.
|
||||
*/
|
||||
@ -326,26 +326,26 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
if (elements.length >= 3 &&
|
||||
(buggyClass.equals(elements[0].getClassName()) ||
|
||||
buggyClass.equals(elements[1].getClassName()) ||
|
||||
buggyClass.equals(elements[2].getClassName()))) {
|
||||
buggyClass.equals(elements[2].getClassName()))) {
|
||||
log.warn("Ignoring Sun JRE bug 6828938: " +
|
||||
"(see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6828938): " + t);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Detect and ignore bug 6561072 in Sun JRE 1.6.0_?
|
||||
*/
|
||||
if (t instanceof NullPointerException) {
|
||||
StackTraceElement[] trace = t.getStackTrace();
|
||||
|
||||
|
||||
if (trace.length > 3 &&
|
||||
trace[0].getClassName().equals("javax.swing.JComponent") &&
|
||||
trace[0].getMethodName().equals("repaint") &&
|
||||
|
||||
|
||||
trace[1].getClassName().equals("sun.swing.FilePane$2") &&
|
||||
trace[1].getMethodName().equals("repaintListSelection") &&
|
||||
|
||||
|
||||
trace[2].getClassName().equals("sun.swing.FilePane$2") &&
|
||||
trace[2].getMethodName().equals("repaintSelection")) {
|
||||
log.warn("Ignoring Sun JRE bug 6561072 " +
|
||||
@ -353,14 +353,14 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Detect and ignore bug 6933331 in Sun JRE 1.6.0_18 and others
|
||||
*/
|
||||
if (t instanceof IllegalStateException) {
|
||||
StackTraceElement[] trace = t.getStackTrace();
|
||||
|
||||
|
||||
if (trace.length > 1 &&
|
||||
trace[0].getClassName().equals("sun.awt.windows.WComponentPeer") &&
|
||||
trace[0].getMethodName().equals("getBackBuffer")) {
|
||||
@ -369,20 +369,20 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Detect and ignore bug in Sun JRE 1.6.0_19
|
||||
*/
|
||||
if (t instanceof NullPointerException) {
|
||||
StackTraceElement[] trace = t.getStackTrace();
|
||||
|
||||
|
||||
if (trace.length > 3 &&
|
||||
trace[0].getClassName().equals("sun.awt.shell.Win32ShellFolder2") &&
|
||||
trace[0].getMethodName().equals("pidlsEqual") &&
|
||||
|
||||
|
||||
trace[1].getClassName().equals("sun.awt.shell.Win32ShellFolder2") &&
|
||||
trace[1].getMethodName().equals("equals") &&
|
||||
|
||||
|
||||
trace[2].getClassName().equals("sun.awt.shell.Win32ShellFolderManager2") &&
|
||||
trace[2].getMethodName().equals("isFileSystemRoot")) {
|
||||
log.warn("Ignoring Sun JRE bug " +
|
||||
@ -390,7 +390,7 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Detect Sun JRE bug in D3D
|
||||
*/
|
||||
@ -401,25 +401,43 @@ public class SwingExceptionHandler implements Thread.UncaughtExceptionHandler, E
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Detect and ignore DnD bug in component tree - related to 6560955 in Sun JRE.
|
||||
*/
|
||||
if (t instanceof NullPointerException) {
|
||||
StackTraceElement[] trace = t.getStackTrace();
|
||||
|
||||
if (trace.length > 2 &&
|
||||
trace[0].getClassName().equals("javax.swing.tree.TreePath") &&
|
||||
trace[0].getMethodName().equals("pathByAddingChild") &&
|
||||
|
||||
trace[1].getClassName().equals("javax.swing.plaf.basic.BasicTreeUI") &&
|
||||
trace[1].getMethodName().equals("getDropLineRect")) {
|
||||
|
||||
log.warn("Ignoring Sun JRE bug updating drop location " +
|
||||
"(see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6560955): " + t);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static class InternalException extends Exception {
|
||||
public InternalException() {
|
||||
super();
|
||||
}
|
||||
|
||||
|
||||
public InternalException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
|
||||
public InternalException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
|
||||
public InternalException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
@ -16,8 +16,11 @@ import net.sf.openrocket.gui.dialogs.flightconfiguration.RenameConfigDialog;
|
||||
import net.sf.openrocket.gui.main.BasicFrame;
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.rocketcomponent.FlightConfigurableComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketvisitors.ListComponents;
|
||||
import net.sf.openrocket.rocketvisitors.ListMotorMounts;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.util.StateChangeListener;
|
||||
|
||||
@ -38,7 +41,11 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe
|
||||
private final MotorConfigurationPanel motorConfigurationPanel;
|
||||
private final RecoveryConfigurationPanel recoveryConfigurationPanel;
|
||||
private final SeparationConfigurationPanel separationConfigurationPanel;
|
||||
|
||||
|
||||
private final static int MOTOR_TAB_INDEX = 0;
|
||||
private final static int RECOVERY_TAB_INDEX = 1;
|
||||
private final static int SEPARATION_TAB_INDEX = 2;
|
||||
|
||||
@Override
|
||||
public void stateChanged(EventObject e) {
|
||||
updateButtonState();
|
||||
@ -178,9 +185,37 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe
|
||||
|
||||
private void updateButtonState() {
|
||||
String currentId = rocket.getDefaultConfiguration().getFlightConfigurationID();
|
||||
// Enable the remove/rename/copy buttons only when a configuration is selected.
|
||||
removeConfButton.setEnabled(currentId != null);
|
||||
renameConfButton.setEnabled(currentId != null);
|
||||
copyConfButton.setEnabled(currentId != null);
|
||||
|
||||
// Count the number of motor mounts
|
||||
int motorMountCount = rocket.accept(new ListMotorMounts()).size();
|
||||
|
||||
// Count the number of recovery devices
|
||||
int recoveryDeviceCount = rocket.accept(new ListComponents<RecoveryDevice>(RecoveryDevice.class)).size();
|
||||
|
||||
// Count the number of stages
|
||||
int stageCount = rocket.getStageCount();
|
||||
|
||||
// Enable the new configuration button only when a motor mount is defined.
|
||||
newConfButton.setEnabled(motorMountCount > 0);
|
||||
|
||||
// Only enable the recovery tab if there is a motor mount and there is a recovery device
|
||||
tabs.setEnabledAt(RECOVERY_TAB_INDEX, motorMountCount > 0 && recoveryDeviceCount > 0);
|
||||
|
||||
// If the selected tab was the recovery tab, and there is no longer any recovery devices,
|
||||
// switch to the motor tab.
|
||||
if( recoveryDeviceCount == 0 && tabs.getSelectedIndex() == RECOVERY_TAB_INDEX ) {
|
||||
tabs.setSelectedIndex(MOTOR_TAB_INDEX);
|
||||
}
|
||||
|
||||
tabs.setEnabledAt(SEPARATION_TAB_INDEX, motorMountCount > 0 && stageCount > 1);
|
||||
|
||||
if ( stageCount ==1 && tabs.getSelectedIndex() == SEPARATION_TAB_INDEX ) {
|
||||
tabs.setSelectedIndex(MOTOR_TAB_INDEX);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package net.sf.openrocket.gui.main.flightconfigpanel;
|
||||
|
||||
import java.awt.CardLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
@ -22,6 +23,8 @@ import javax.swing.SwingUtilities;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.event.TableModelEvent;
|
||||
import javax.swing.event.TableModelListener;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
@ -49,6 +52,10 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
|
||||
|
||||
private final JButton selectMotorButton, removeMotorButton, selectIgnitionButton, resetIgnitionButton;
|
||||
|
||||
private final JPanel cards;
|
||||
private final static String HELP_LABEL = "help";
|
||||
private final static String TABLE_LABEL = "table";
|
||||
|
||||
private final MotorChooserDialog motorChooserDialog;
|
||||
protected FlightConfigurableTableModel<MotorMount> configurationTableModel;
|
||||
|
||||
@ -57,7 +64,6 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
|
||||
|
||||
motorChooserDialog = new MotorChooserDialog(SwingUtilities.getWindowAncestor(flightConfigurationPanel));
|
||||
|
||||
|
||||
{
|
||||
//// Select motor mounts
|
||||
JPanel subpanel = new JPanel(new MigLayout(""));
|
||||
@ -75,8 +81,16 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
|
||||
this.add(subpanel, "split, w 200lp, growy");
|
||||
}
|
||||
|
||||
cards = new JPanel(new CardLayout());
|
||||
this.add( cards );
|
||||
|
||||
JLabel helpText = new JLabel(trans.get("MotorConfigurationPanel.lbl.nomotors"));
|
||||
cards.add(helpText, HELP_LABEL );
|
||||
|
||||
JScrollPane scroll = new JScrollPane(table);
|
||||
this.add(scroll, "grow, wrap");
|
||||
cards.add(scroll, TABLE_LABEL );
|
||||
|
||||
this.add(cards, "grow, wrap");
|
||||
|
||||
//// Select motor
|
||||
selectMotorButton = new JButton(trans.get("MotorConfigurationPanel.btn.selectMotor"));
|
||||
@ -122,6 +136,14 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
|
||||
|
||||
}
|
||||
|
||||
protected void showEmptyText() {
|
||||
((CardLayout)cards.getLayout()).show(cards, HELP_LABEL);
|
||||
}
|
||||
|
||||
protected void showContent() {
|
||||
((CardLayout)cards.getLayout()).show(cards, TABLE_LABEL);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JTable initializeTable() {
|
||||
//// Motor selection table.
|
||||
@ -133,6 +155,16 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
|
||||
}
|
||||
|
||||
};
|
||||
// Listen to changes to the table so we can disable the help text when a
|
||||
// motor mount is added through the edit body tube dialog.
|
||||
configurationTableModel.addTableModelListener( new TableModelListener() {
|
||||
|
||||
@Override
|
||||
public void tableChanged(TableModelEvent e) {
|
||||
MotorConfigurationPanel.this.updateButtonState();
|
||||
}
|
||||
|
||||
});
|
||||
JTable configurationTable = new JTable(configurationTableModel);
|
||||
configurationTable.getTableHeader().setReorderingAllowed(false);
|
||||
configurationTable.setCellSelectionEnabled(true);
|
||||
@ -151,6 +183,7 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return configurationTable;
|
||||
}
|
||||
|
||||
@ -165,12 +198,21 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
|
||||
}
|
||||
|
||||
private void updateButtonState() {
|
||||
String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID();
|
||||
MotorMount currentMount = getSelectedComponent();
|
||||
selectMotorButton.setEnabled(currentMount != null && currentID != null);
|
||||
removeMotorButton.setEnabled(currentMount != null && currentID != null);
|
||||
selectIgnitionButton.setEnabled(currentMount != null && currentID != null);
|
||||
resetIgnitionButton.setEnabled(currentMount != null && currentID != null);
|
||||
if( configurationTableModel.getColumnCount() > 1 ) {
|
||||
showContent();
|
||||
String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID();
|
||||
MotorMount currentMount = getSelectedComponent();
|
||||
selectMotorButton.setEnabled(currentMount != null && currentID != null);
|
||||
removeMotorButton.setEnabled(currentMount != null && currentID != null);
|
||||
selectIgnitionButton.setEnabled(currentMount != null && currentID != null);
|
||||
resetIgnitionButton.setEnabled(currentMount != null && currentID != null);
|
||||
} else {
|
||||
showEmptyText();
|
||||
selectMotorButton.setEnabled(false);
|
||||
removeMotorButton.setEnabled(false);
|
||||
selectIgnitionButton.setEnabled(false);
|
||||
resetIgnitionButton.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -42,7 +42,7 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences {
|
||||
private static final List<Locale> SUPPORTED_LOCALES;
|
||||
static {
|
||||
List<Locale> list = new ArrayList<Locale>();
|
||||
for (String lang : new String[] { "en", "de", "es", "fr", "it", "ru", "cs", "pl", "ja", "pt" }) {
|
||||
for (String lang : new String[] { "en", "de", "es", "fr", "it", "ru", "cs", "pl", "ja", "pt", "tr" }) {
|
||||
list.add(new Locale(lang));
|
||||
}
|
||||
list.add(new Locale("zh","CN"));
|
||||
|
@ -10,6 +10,7 @@ import javax.swing.SwingUtilities;
|
||||
import javax.swing.Timer;
|
||||
import javax.swing.ToolTipManager;
|
||||
|
||||
import net.miginfocom.layout.LayoutUtil;
|
||||
import net.sf.openrocket.arch.SystemInfo;
|
||||
import net.sf.openrocket.arch.SystemInfo.Platform;
|
||||
import net.sf.openrocket.communication.UpdateInfo;
|
||||
@ -50,6 +51,10 @@ public class SwingStartup {
|
||||
|
||||
// Check for "openrocket.debug" property before anything else
|
||||
checkDebugStatus();
|
||||
|
||||
if (System.getProperty("openrocket.debug.layout") != null) {
|
||||
LayoutUtil.setGlobalDebugMillis(100);
|
||||
}
|
||||
|
||||
// Initialize logging first so we can use it
|
||||
initializeLogging();
|
||||
|
Loading…
x
Reference in New Issue
Block a user