diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties
index 8321f6e8b..b5b965b22 100644
--- a/core/resources/l10n/messages.properties
+++ b/core/resources/l10n/messages.properties
@@ -817,8 +817,6 @@ ringcompcfg.InnerRadius = InnerRadius
ringcompcfg.AutomaticInner.ttip = Matches inner diameter to the outer diameter of the child inner tube.
ringcompcfg.Thickness = Thickness
ringcompcfg.Length = Length
-ringcompcfg.Positionrelativeto = Position relative to:
-ringcompcfg.plus = plus
ringcompcfg.PositionValue = PositionValue
ringcompcfg.Radialdistance = Radial distance:
ringcompcfg.Distancefrom = Distance from the rocket centerline
@@ -936,14 +934,6 @@ RocketCompCfg.lbl.Mass = Mass:
RocketCompCfg.lbl.Componentmass = Component mass:
RocketCompCfg.lbl.overriddento = (overridden to
RocketCompCfg.lbl.overriddenby = (overridden by
-RocketCompCfg.lbl.Componentmaterial = Component material:
-RocketCompCfg.lbl.Componentfinish = Component finish:
-RocketCompCfg.lbl.ttip.componentmaterialaffects = The component material affects the weight of the component.
-RocketCompCfg.combo.ttip.componentmaterialaffects = The component material affects the weight of the component.
-RocketCompCfg.lbl.longA1 = The component finish affects the aerodynamic drag of the component.
-RocketCompCfg.lbl.longA2 = The value indicated is the average roughness height of the surface.
-RocketCompCfg.but.Setforall = Set for all
-RocketCompCfg.but.ttip.Setforall = Set this finish for all components of the rocket.
RocketCompCfg.checkbox.Overridemass = Override mass:
RocketCompCfg.checkbox.Overridemass.ttip = Overrides the mass of the component calculated by the component's volume and density.
RocketCompCfg.checkbox.Overridecenterofgrav = Override center of gravity CG:
@@ -976,7 +966,6 @@ RocketCompCfg.checkbox.Endcapped = End capped
RocketCompCfg.checkbox.Endcapped.ttip = Caps (closes) the end of the shoulder.
RocketCompCfg.title.Aftshoulder = Aft shoulder
RocketCompCfg.border.Foreshoulder = Fore shoulder
-!RocketCompCfg.lbl.Length = Length:
RocketCompCfg.lbl.InstanceCount = Instance Count:
RocketCompCfg.lbl.InstanceSeparation = Instance Separation:
RocketCompCfg.tab.Outside = Outside
@@ -991,6 +980,22 @@ RocketCompCfg.CancelOperation.title = Cancel operation
RocketCompCfg.CancelOperation.checkbox.dontAskAgain = Don't ask me again
RocketCompCfg.btn.ComponentInfo.ttip = Show/hide informative text about this component.
+! MaterialPanel
+MaterialPanel.lbl.ComponentMaterial = Component material:
+MaterialPanel.lbl.ComponentFinish = Component finish:
+MaterialPanel.title.Material = Material
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = The component material affects the weight of the component.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = The component material affects the weight of the component.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = The component finish affects the aerodynamic drag of the component.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = The value indicated is the average roughness height of the surface.
+MaterialPanel.but.SetForAll = Set for all
+MaterialPanel.but.SetForAll.ttip = Set this finish for all components of the rocket.
+
+! PlacementPanel
+PlacementPanel.title.Placement = Placement
+PlacementPanel.lbl.PosRelativeTo = Position relative to:
+PlacementPanel.lbl.plus = plus
+
! ComponentInfo
ComponentInfo.Rocket = This is your rocket. Nothing more to say about it. Have fun designing and building it! :)
ComponentInfo.AxialStage = A stage is a section of the model rocket that contains motors which ignite successively and separate after motor burnout.
Each stage must safely descend after separation. The main stage, often called the 'Sustainer', usually descends with a recovery device.
@@ -1048,14 +1053,30 @@ StageConfig.parallel.angle = Angle:
StageConfig.parallel.count = Number of Copies:
StageConfig.parallel.plus = plus
+! FinSetConfig
+FinSetCfg.lbl.FinRotation = Fin rotation:
+FinSetCfg.lbl.FinRotation.ttip = The angle of the first fin in the fin set.
+
+! TrapezoidFinSetConfig
+TrapezoidFinSetCfg.lbl.Nbroffins = Number of fins:
+TrapezoidFinSetCfg.lbl.ttip.Nbroffins = The number of fins in the fin set.
+TrapezoidFinSetCfg.lbl.Fincant = Fin cant:
+TrapezoidFinSetCfg.lbl.ttip.Fincant =The angle that the fins are canted with respect to the rocket body.
+TrapezoidFinSetCfg.lbl.Rootchord = Root chord:
+TrapezoidFinSetCfg.lbl.Tipchord = Tip chord:
+TrapezoidFinSetCfg.lbl.Height = Height:
+TrapezoidFinSetCfg.lbl.Sweeplength = Sweep length:
+TrapezoidFinSetCfg.lbl.Sweepangle = Sweep angle:
+TrapezoidFinSetCfg.lbl.FincrossSection = Fin cross section:
+TrapezoidFinSetCfg.lbl.Thickness = Thickness:
+TrapezoidFinSetCfg.tab.General = General
+TrapezoidFinSetCfg.tab.Generalproperties = General properties
+
!EllipticalFinSetConfig
EllipticalFinSetCfg.Nbroffins = Number of fins:
-EllipticalFinSetCfg.Rotation = Rotation:
EllipticalFinSetCfg.Fincant = Fin cant:
EllipticalFinSetCfg.Rootchord = Root chord:
EllipticalFinSetCfg.Height = Height:
-EllipticalFinSetCfg.Positionrelativeto = Position relative to:
-EllipticalFinSetCfg.plus = plus
EllipticalFinSetCfg.FincrossSection = Fin cross section:
EllipticalFinSetCfg.Thickness = Thickness:
EllipticalFinSetCfg.General = General
@@ -1068,14 +1089,10 @@ FreeformFinSetCfg.tab.ttip.General = General properties
FreeformFinSetCfg.tab.Shape = Shape
FreeformFinSetCfg.tab.ttip.Finshape = Fin shape
FreeformFinSetCfg.lbl.Numberoffins = Number of fins:
-FreeformFinSetCfg.lbl.Finrotation = Fin rotation:
FreeformFinSetCfg.lbl.Fincant = Fin cant:
FreeformFinSetCfg.lbl.ttip.Fincant = The angle that the fins are canted with respect to the rocket body.
-FreeformFinSetCfg.lbl.Posrelativeto = Position relative to:
-FreeformFinSetCfg.lbl.plus = plus
FreeformFinSetCfg.lbl.FincrossSection = Fin cross section:
FreeformFinSetCfg.lbl.Thickness = Thickness:
-! doubleClick1 + 2 form the message "Double-click to edit", split approximately at the middle
FreeformFinSetConfig.lbl.doubleClick1 = Double-click
FreeformFinSetConfig.lbl.doubleClick2 = to edit
FreeformFinSetConfig.lbl.clickDrag = Click+drag: Add and move points
@@ -1120,8 +1137,6 @@ LaunchLugCfg.lbl.Outerdiam = Outer diameter:
LaunchLugCfg.lbl.Innerdiam = Inner diameter:
LaunchLugCfg.lbl.Thickness = Thickness:
LaunchLugCfg.lbl.Angle = Rotation:
-LaunchLugCfg.lbl.Posrelativeto = Position relative to:
-LaunchLugCfg.lbl.plus = plus
LaunchLugCfg.tab.General = General
LaunchLugCfg.tab.Generalprop = General properties
@@ -1133,8 +1148,6 @@ RailBtnCfg.lbl.BaseHeight = Base Height:
RailBtnCfg.lbl.FlangeHeight = Flange Height:
RailBtnCfg.lbl.ScrewHeight = Screw Height:
RailBtnCfg.lbl.Angle = Rotation:
-RailBtnCfg.lbl.PosRelativeTo = Position relative to:
-RailBtnCfg.lbl.Plus = plus
RailBtnCfg.tab.General = General
RailBtnCfg.tab.GeneralProp = General properties
@@ -1143,8 +1156,6 @@ MassComponentCfg.lbl.Mass = Mass:
MassComponentCfg.lbl.Density = Approximate density:
MassComponentCfg.lbl.Length = Length:
MassComponentCfg.lbl.Diameter = Diameter:
-MassComponentCfg.lbl.PosRelativeto = Position relative to:
-MassComponentCfg.lbl.plus = plus
MassComponentCfg.tab.General = General
MassComponentCfg.tab.ttip.General = General properties
MassComponentCfg.tab.Radialpos = Radial position
@@ -1195,7 +1206,6 @@ NoseConeCfg.checkbox.Flip.ttip = Flips the nose cone direction to a tail cone.
Parachute.Parachute = Parachute
ParachuteCfg.lbl.Canopy = Canopy
ParachuteCfg.lbl.Shroudlines = Shroud lines
-ParachuteCfg.lbl.Placement = Placement
ParachuteCfg.lbl.Deployment = Deployment
ParachuteCfg.lbl.CanopyShape = Canopy shape:
ParachuteCfg.lbl.Diameter = Diameter:
@@ -1209,8 +1219,6 @@ ParachuteCfg.lbl.longB3 = A typical value for parachutes is 0.8.
ParachuteCfg.lbl.Numberoflines = Number of lines:
ParachuteCfg.lbl.Linelength = Line length:
ParachuteCfg.lbl.Material = Material:
-ParachuteCfg.lbl.Posrelativeto = Position relative to:
-ParachuteCfg.lbl.plus = plus
ParachuteCfg.checkbox.AutomaticPacked = Automatic
ParachuteCfg.checkbox.AutomaticPacked.ttip = Matches the packed diameter to the inside diameter of the parent component.
ParachuteCfg.lbl.Packedlength = Packed length:
@@ -1232,7 +1240,6 @@ ParachuteCfg.lbl.plusdelay = plus
! ShockCordConfig
ShockCordCfg.lbl.Shockcordlength = Shock cord length:
ShockCordCfg.lbl.Shockcordmaterial = Shock cord material:
-ShockCordCfg.lbl.Posrelativeto = Position relative to:
ShockCordCfg.lbl.plus = plus
ShockCordCfg.lbl.Packedlength = Packed length:
ShockCordCfg.lbl.Packeddiam = Packed diameter:
@@ -1253,8 +1260,6 @@ SleeveCfg.tab.General = General
SleeveCfg.tab.Generalproperties = General properties
! StreamerConfig
-StreamerCfg.lbl.Attributes = Attributes
-StreamerCfg.lbl.Placement = Placement
StreamerCfg.lbl.Deployment = Deployment
StreamerCfg.lbl.Striplength = Strip length:
StreamerCfg.lbl.Stripwidth = Strip width:
@@ -1268,8 +1273,6 @@ StreamerCfg.lbl.longB2 = A larger drag coefficient yields a slowed descent rate.
StreamerCfg.lbl.AutomaticCd = Automatic
StreamerCfg.lbl.AutomaticCd.ttip = Calculate the streamer drag coefficient (CD) using its dimensions.
StreamerCfg.lbl.longC1 = The drag coefficient is relative to the area of the streamer.
-StreamerCfg.lbl.Posrelativeto = Position relative to:
-StreamerCfg.lbl.plus = plus
StreamerCfg.lbl.Packedlength = Packed length:
StreamerCfg.lbl.Packeddiam = Packed diameter:
StreamerCfg.lbl.Deploysat = Deploys at:
@@ -1312,25 +1315,6 @@ TransitionCfg.tab.Generalproperties = General properties
TransitionCfg.tab.Shoulder = Shoulder
TransitionCfg.tab.Shoulderproperties = Shoulder properties
-! TrapezoidFinSetConfig
-TrapezoidFinSetCfg.lbl.Nbroffins = Number of fins:
-TrapezoidFinSetCfg.lbl.ttip.Nbroffins = The number of fins in the fin set.
-TrapezoidFinSetCfg.lbl.Finrotation = Fin rotation:
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = The angle of the first fin in the fin set.
-TrapezoidFinSetCfg.lbl.Fincant = Fin cant:
-TrapezoidFinSetCfg.lbl.ttip.Fincant =The angle that the fins are canted with respect to the rocket body.
-TrapezoidFinSetCfg.lbl.Rootchord = Root chord:
-TrapezoidFinSetCfg.lbl.Tipchord = Tip chord:
-TrapezoidFinSetCfg.lbl.Height = Height:
-TrapezoidFinSetCfg.lbl.Sweeplength = Sweep length:
-TrapezoidFinSetCfg.lbl.Sweepangle = Sweep angle:
-TrapezoidFinSetCfg.lbl.FincrossSection = Fin cross section:
-TrapezoidFinSetCfg.lbl.Thickness = Thickness:
-TrapezoidFinSetCfg.lbl.Posrelativeto = Position relative to:
-TrapezoidFinSetCfg.lbl.plus = plus
-TrapezoidFinSetCfg.tab.General = General
-TrapezoidFinSetCfg.tab.Generalproperties = General properties
-
! Save RKT Warning Dialog
SaveRktWarningDialog.txt1=Exporting to RockSim file format does not support all features of OpenRocket.
SaveRktWarningDialog.donotshow=Do not show this dialog again
@@ -1640,7 +1624,6 @@ TubeCoupler.TubeCoupler = Tube Coupler
!InnerTube
InnerTube.InnerTube = Inner Tube
InnerTubeCfg.lbl.Attributes = Attributes
-InnerTubeCfg.lbl.Placement = Placement
InnerTubeCfg.lbl.Material = Material:
! TrapezoidFinSet
TrapezoidFinSet.TrapezoidFinSet = Trapezoidal Fin Set
diff --git a/core/resources/l10n/messages_ar.properties b/core/resources/l10n/messages_ar.properties
index 1bd059b37..ece4864e8 100644
--- a/core/resources/l10n/messages_ar.properties
+++ b/core/resources/l10n/messages_ar.properties
@@ -921,14 +921,14 @@ RocketCompCfg.lbl.Mass = :الكتلة
RocketCompCfg.lbl.Componentmass = :كتلة المكون
RocketCompCfg.lbl.overriddento = (تم تجاوزها إلى
RocketCompCfg.lbl.overriddenby = (تجاوزها بواسطة
-RocketCompCfg.lbl.Componentmaterial = :مادة المكون
-RocketCompCfg.lbl.Componentfinish = :نهاية المكون
-RocketCompCfg.lbl.ttip.componentmaterialaffects = .تؤثر المادة المكونة على وزن المكون
-RocketCompCfg.combo.ttip.componentmaterialaffects = .تؤثر مادة المكون على وزنه
-RocketCompCfg.lbl.longA1 = .يؤثر إنهاء المكون على السحب الديناميكي الهوائي للمكون
-RocketCompCfg.lbl.longA2 = .القيمة المشار إليها هي متوسط إرتفاع خشونة السطح
-RocketCompCfg.but.Setforall = تعيين للجميع
-RocketCompCfg.but.ttip.Setforall = .إضبط هذه النهاية لجميع مكونات الصاروخ
+MaterialPanel.lbl.ComponentMaterial = :مادة المكون
+MaterialPanel.lbl.ComponentFinish = :نهاية المكون
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = .تؤثر المادة المكونة على وزن المكون
+MaterialPanel.combo.ttip.ComponentMaterialAffects = .تؤثر مادة المكون على وزنه
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = .يؤثر إنهاء المكون على السحب الديناميكي الهوائي للمكون
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = .القيمة المشار إليها هي متوسط إرتفاع خشونة السطح
+MaterialPanel.but.SetForAll = تعيين للجميع
+MaterialPanel.but.SetForAll.ttip = .إضبط هذه النهاية لجميع مكونات الصاروخ
RocketCompCfg.checkbox.Overridemass = :تجاوز الكتلة
RocketCompCfg.checkbox.Overridemass.ttip = .يتجاوز كتلة المكون المحسوبة من خلال حجم المكون وكثافته
RocketCompCfg.checkbox.Overridecenterofgrav = :تجاوز مركز الجاذبية
@@ -1025,7 +1025,7 @@ FreeformFinSetCfg.tab.ttip.General = الخصائص العامة
FreeformFinSetCfg.tab.Shape = الشكل
FreeformFinSetCfg.tab.ttip.Finshape = شكل الزعنفة
FreeformFinSetCfg.lbl.Numberoffins = :عدد الزعانف
-FreeformFinSetCfg.lbl.Finrotation = :إلتفاف الزعنفة
+FinSetCfg.lbl.FinRotation = :إلتفاف الزعنفة
FreeformFinSetCfg.lbl.Fincant = :ميلان الزعنفة
FreeformFinSetCfg.lbl.ttip.Fincant = .الزاوية التي تكون فيها الزعانف مائلة بالنسبة لجسم الصاروخ
FreeformFinSetCfg.lbl.Posrelativeto = :الموقع بالنسبة إلى
@@ -1077,7 +1077,6 @@ LaunchLugCfg.lbl.Outerdiam = :القطر الخارجي
LaunchLugCfg.lbl.Innerdiam = :القطر الداخلي
LaunchLugCfg.lbl.Thickness = السماكة
LaunchLugCfg.lbl.Angle = :الإلتفاف
-LaunchLugCfg.lbl.Posrelativeto = :الموضع بالنسبة إلى
LaunchLugCfg.lbl.plus = زائد
LaunchLugCfg.tab.General = عام
LaunchLugCfg.tab.Generalprop = الخصائص العامة
@@ -1150,7 +1149,6 @@ NoseConeCfg.tab.ttip.Shoulder = خصائص الأكتاف
Parachute.Parachute = المظلة
ParachuteCfg.lbl.Canopy = القماش
ParachuteCfg.lbl.Shroudlines = خطوط التعليق عبارة عن حبال رفيعة تربط المظلة بالناهضات
-ParachuteCfg.lbl.Placement = تحديد مستوى
ParachuteCfg.lbl.Deployment = النشر
ParachuteCfg.lbl.CanopyShape = :شكل القماش
ParachuteCfg.lbl.Diameter = :القطر
@@ -1207,8 +1205,7 @@ SleeveCfg.tab.Length = :الطول
SleeveCfg.tab.General = عام
SleeveCfg.tab.Generalproperties = خصائص عامة
! StreamerConfig
-StreamerCfg.lbl.Attributes = صفات
-StreamerCfg.lbl.Placement = تحديد مستوى
+PlacementPanel.lbl.Placement = تحديد مستوى
StreamerCfg.lbl.Deployment = النشر
StreamerCfg.lbl.Striplength = :طول الشريط
StreamerCfg.lbl.Stripwidth = :عرض الشريط
@@ -1270,7 +1267,7 @@ TransitionCfg.tab.Shoulderproperties = خصائص الأكتاف
TrapezoidFinSetCfg.lbl.Nbroffins = :عدد الزعانف
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = .عدد الزعانف في مجموعة الزعانف
TrapezoidFinSetCfg.lbl.Finrotation = :إلتفاف الزعنفة
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = .زاوية الزعنفة الأولى في مجموعة الزعانف
+FinSetCfg.lbl.FinRotation.ttip = .زاوية الزعنفة الأولى في مجموعة الزعانف
TrapezoidFinSetCfg.lbl.Fincant = ميل الزعنفة
TrapezoidFinSetCfg.lbl.ttip.Fincant = .الزاوية التي تكون فيها الزعانف مائلة بالنسبة لجسم الصاروخ
TrapezoidFinSetCfg.lbl.Rootchord = :وتر جذر الزعنفة
@@ -1280,8 +1277,8 @@ TrapezoidFinSetCfg.lbl.Sweeplength = :طول الوتر الأمامي للزع
TrapezoidFinSetCfg.lbl.Sweepangle = :زاوية الوتر الأمامي للزعنفة
TrapezoidFinSetCfg.lbl.FincrossSection = :المقطع العرضي للزعنفة
TrapezoidFinSetCfg.lbl.Thickness = :السماكة
-TrapezoidFinSetCfg.lbl.Posrelativeto = :الموضع بالنسبة إلى
-TrapezoidFinSetCfg.lbl.plus = زائد
+PlacementPanel.lbl.PosRelativeTo = :الموضع بالنسبة إلى
+PlacementPanel.lbl.plus = زائد
TrapezoidFinSetCfg.tab.General = عام
TrapezoidFinSetCfg.tab.Generalproperties = خصائص عامة
diff --git a/core/resources/l10n/messages_cs.properties b/core/resources/l10n/messages_cs.properties
index da29be1b0..07c147f83 100644
--- a/core/resources/l10n/messages_cs.properties
+++ b/core/resources/l10n/messages_cs.properties
@@ -631,14 +631,14 @@ RocketCompCfg.lbl.Mass = Hmotnost:
RocketCompCfg.lbl.Componentmass = Hmotnost komponenty:
RocketCompCfg.lbl.overriddento = (prepsno na
RocketCompCfg.lbl.overriddenby = (prepsno
-RocketCompCfg.lbl.Componentmaterial = Materil komponentu:
-RocketCompCfg.lbl.Componentfinish = Povrchov prava komponenty:
-RocketCompCfg.lbl.ttip.componentmaterialaffects = Materil komponenty ovlivnuje vhu komponety.
-RocketCompCfg.combo.ttip.componentmaterialaffects = Materil komponenty ovlivnuje vhu komponety.
-RocketCompCfg.lbl.longA1 = Povrchov prava komponenty ovlivnuje aerodynamiku komponenty.
-RocketCompCfg.lbl.longA2 = Hodnota odpovd prumern hrubosti povrchu.
-RocketCompCfg.but.Setforall = Nastav pro v\u0161echny
-RocketCompCfg.but.ttip.Setforall = Nastav povrchovou pravu pro v\u0161echny komponenty rakety.
+MaterialPanel.lbl.ComponentMaterial = Materil komponentu:
+MaterialPanel.lbl.ComponentFinish = Povrchov prava komponenty:
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = Materil komponenty ovlivnuje vhu komponety.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = Materil komponenty ovlivnuje vhu komponety.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = Povrchov prava komponenty ovlivnuje aerodynamiku komponenty.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = Hodnota odpovd prumern hrubosti povrchu.
+MaterialPanel.but.SetForAll = Nastav pro v\u0161echny
+MaterialPanel.but.SetForAll.ttip = Nastav povrchovou pravu pro v\u0161echny komponenty rakety.
RocketCompCfg.checkbox.Overridemass = Zmen hmotnost:
RocketCompCfg.checkbox.Overridecenterofgrav = Zmen te\u017Ei\u0161te:
RocketCompCfg.checkbox.OverrideSubcomponents = P\u0159eps\u00E1n\u00ED pro v\u0161echny d\u00EDl\u010D\u00ED sou\u010D\u00E1sti
@@ -707,7 +707,7 @@ FreeformFinSetCfg.tab.ttip.General = Obecn
FreeformFinSetCfg.tab.Shape = Tvar
FreeformFinSetCfg.tab.ttip.Finshape = Tvar stabiliztoru
FreeformFinSetCfg.lbl.Numberoffins = Pocet stabiliztoru:
-FreeformFinSetCfg.lbl.Finrotation = Rotace stabiliztoru:
+FinSetCfg.lbl.FinRotation = Rotace stabiliztoru:
FreeformFinSetCfg.lbl.Fincant = Natocen stabiliztoru:
FreeformFinSetCfg.lbl.ttip.Fincant = hly stabiliztoru jsou nakloneny vzhledem k telu rakety.
FreeformFinSetCfg.lbl.Posrelativeto = Pozice vzhledem k:
@@ -747,7 +747,6 @@ LaunchLugCfg.lbl.Outerdiam = Vnej\u0161
LaunchLugCfg.lbl.Innerdiam = Vnitrn prumer:
LaunchLugCfg.lbl.Thickness = Tlou\u0161tka:
LaunchLugCfg.lbl.Radialpos = Vzdlenost od stredu:
-LaunchLugCfg.lbl.Posrelativeto = Pozice vzhledem k:
LaunchLugCfg.lbl.plus = plus
LaunchLugCfg.tab.General = Obecn
LaunchLugCfg.tab.Generalprop = Obecn vlastnosti
@@ -899,7 +898,7 @@ TransitionCfg.tab.Shoulderproperties = Parametry pripojen
TrapezoidFinSetCfg.lbl.Nbroffins = Pocet stabiliztoru:
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = Pocet krdlek tvorc stabiliztor.
TrapezoidFinSetCfg.lbl.Finrotation = Rotace stabiliztoru:
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = hel prvnho kridlka v stabiliztoru.
+FinSetCfg.lbl.FinRotation.ttip = hel prvnho kridlka v stabiliztoru.
TrapezoidFinSetCfg.lbl.Fincant = Natocen stabiliztoru:
TrapezoidFinSetCfg.lbl.ttip.Fincant = hly stabiliztoru jsou nakloneny vzhledem k telu rakety.
TrapezoidFinSetCfg.lbl.Rootchord = Koren krdla:
@@ -909,8 +908,8 @@ TrapezoidFinSetCfg.lbl.Sweeplength = D
TrapezoidFinSetCfg.lbl.Sweepangle = hel skosen:
TrapezoidFinSetCfg.lbl.FincrossSection = Hrany stabiliztoru:
TrapezoidFinSetCfg.lbl.Thickness = Tlou\u0161tka:
-TrapezoidFinSetCfg.lbl.Posrelativeto = Pozice vzhledem k:
-TrapezoidFinSetCfg.lbl.plus = plus
+PlacementPanel.lbl.PosRelativeTo = Pozice vzhledem k:
+PlacementPanel.lbl.plus = plus
TrapezoidFinSetCfg.tab.General = Obecn
TrapezoidFinSetCfg.tab.Generalproperties = Obecn vlastnosti
diff --git a/core/resources/l10n/messages_de.properties b/core/resources/l10n/messages_de.properties
index 603735e4b..de6c64835 100644
--- a/core/resources/l10n/messages_de.properties
+++ b/core/resources/l10n/messages_de.properties
@@ -687,14 +687,14 @@ RocketCompCfg.lbl.Mass = Masse:
RocketCompCfg.lbl.Componentmass = Masse der Komponente:
RocketCompCfg.lbl.overriddento = (berschrieben auf
RocketCompCfg.lbl.overriddenby = (berschrieben durch
-RocketCompCfg.lbl.Componentmaterial = Material:
-RocketCompCfg.lbl.Componentfinish = Oberflche:
-RocketCompCfg.lbl.ttip.componentmaterialaffects = Das Material beeinflusst die Masse der Komponente.
-RocketCompCfg.combo.ttip.componentmaterialaffects = Das Material beeinflusst die Masse der Komponente.
-RocketCompCfg.lbl.longA1 = Die Oberflche beeinflusst den aerodynamischen Widerstand der Komponente.
-RocketCompCfg.lbl.longA2 = Der angegebene Wert ist die durchschnittliche Rautiefe der Oberflche.
-RocketCompCfg.but.Setforall = Fr alle setzen
-RocketCompCfg.but.ttip.Setforall = Diese Oberflchen fr alle Komponenten der Rakete setzen.
+MaterialPanel.lbl.ComponentMaterial = Material:
+MaterialPanel.lbl.ComponentFinish = Oberflche:
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = Das Material beeinflusst die Masse der Komponente.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = Das Material beeinflusst die Masse der Komponente.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = Die Oberflche beeinflusst den aerodynamischen Widerstand der Komponente.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = Der angegebene Wert ist die durchschnittliche Rautiefe der Oberflche.
+MaterialPanel.but.SetForAll = Fr alle setzen
+MaterialPanel.but.SetForAll.ttip = Diese Oberflchen fr alle Komponenten der Rakete setzen.
RocketCompCfg.lbl.Overridemassorcenter = berschreiben von Masse oder Schwerpunkts von
RocketCompCfg.checkbox.Overridemass = Masse berschreiben:
RocketCompCfg.checkbox.Overridecenterofgrav = Schwerpunkt berschreiben:
@@ -764,7 +764,7 @@ FreeformFinSetCfg.tab.ttip.General = Allgemeine Eigenschaften
FreeformFinSetCfg.tab.Shape = Form
FreeformFinSetCfg.tab.ttip.Finshape = Leitwerksform
FreeformFinSetCfg.lbl.Numberoffins = Anzahl der Leitwerke
-FreeformFinSetCfg.lbl.Finrotation = Rotation:
+FinSetCfg.lbl.FinRotation = Rotation:
FreeformFinSetCfg.lbl.Fincant = Neigung:
FreeformFinSetCfg.lbl.ttip.Fincant = Der Winkel, in dem die Leitwerke zum Krperrohr geneigt sind.
FreeformFinSetCfg.lbl.Posrelativeto = Position relativ zu:
@@ -804,7 +804,6 @@ LaunchLugCfg.lbl.Outerdiam = Au
LaunchLugCfg.lbl.Innerdiam = Innendurchmesser:
LaunchLugCfg.lbl.Thickness = Wandstrke:
LaunchLugCfg.lbl.Radialpos = Radiale Position:
-LaunchLugCfg.lbl.Posrelativeto = Position relativ zu:
LaunchLugCfg.lbl.plus = plus
LaunchLugCfg.tab.General = Allgemein
LaunchLugCfg.tab.Generalprop = Allgemeine Eigenschaften
@@ -957,7 +956,7 @@ TransitionCfg.tab.Shoulderproperties = Schultereigenschaften
TrapezoidFinSetCfg.lbl.Nbroffins = Anzahl der Leitwerke
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = Anzahl der Leitwerke in diesem Satz
TrapezoidFinSetCfg.lbl.Finrotation = Rotation der Leitwerke
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = Winkel des ersten Leitwerks in diesem Satz
+FinSetCfg.lbl.FinRotation.ttip = Winkel des ersten Leitwerks in diesem Satz
TrapezoidFinSetCfg.lbl.Fincant = Neigung:
TrapezoidFinSetCfg.lbl.ttip.Fincant = Der Winkel, in dem die Leitwerke zum Krperrohr geneigt sind.
TrapezoidFinSetCfg.lbl.Rootchord = Blatttiefe:
@@ -967,8 +966,8 @@ TrapezoidFinSetCfg.lbl.Sweeplength = Blattbreite:
TrapezoidFinSetCfg.lbl.Sweepangle = Pfeilungswinkel
TrapezoidFinSetCfg.lbl.FincrossSection = Leitwerksquerschnitt
TrapezoidFinSetCfg.lbl.Thickness = Wandstrke:
-TrapezoidFinSetCfg.lbl.Posrelativeto = Position relativ zu:
-TrapezoidFinSetCfg.lbl.plus = plus
+PlacementPanel.lbl.PosRelativeTo = Position relativ zu:
+PlacementPanel.lbl.plus = plus
TrapezoidFinSetCfg.tab.General = Allgemein
TrapezoidFinSetCfg.tab.Generalproperties = Allgemeine Eigenschaften
diff --git a/core/resources/l10n/messages_es.properties b/core/resources/l10n/messages_es.properties
index 8d57dcc5a..a4c3eeb43 100644
--- a/core/resources/l10n/messages_es.properties
+++ b/core/resources/l10n/messages_es.properties
@@ -359,7 +359,7 @@ FreeformFinSet.FreeformFinSet = Aletas de forma libre
FreeformFinSetCfg.lbl.Fincant = Inclinaci\u00f3n de las aletas:
FreeformFinSetCfg.lbl.FincrossSection = Borde de la aleta:
-FreeformFinSetCfg.lbl.Finrotation = Rotaci\u00f3n de las aletas:
+FinSetCfg.lbl.FinRotation = Rotaci\u00f3n de las aletas:
FreeformFinSetCfg.lbl.Numberoffins = N\u00famero de aletas:
FreeformFinSetCfg.lbl.Posrelativeto = Posici\u00f3n relativa a:
FreeformFinSetCfg.lbl.Thickness = Espesor:
@@ -493,7 +493,6 @@ LaunchLugCfg.lbl.Innerdiam = Di\u00e1metro interior:
! LaunchLugConfig
LaunchLugCfg.lbl.Length = Longitud:
LaunchLugCfg.lbl.Outerdiam = Di\u00e1metro exterior:
-LaunchLugCfg.lbl.Posrelativeto = Posici\u00f3n relativa a:
LaunchLugCfg.lbl.Radialpos = Posici\u00f3n radial:
LaunchLugCfg.lbl.Thickness = Espesor:
LaunchLugCfg.lbl.plus = Localizaci\u00f3n:
@@ -828,21 +827,21 @@ RocketCfg.lbl.Revisionhistory = Hist\u00f3rico de la revisi\u00f3n:
RocketCompCfg.border.Foreshoulder = Delantera del acople
RocketCompCfg.but.Saveasdefstyle = Guardar como estilo por defecto
-RocketCompCfg.but.Setforall = Aplicar a todos
-RocketCompCfg.but.ttip.Setforall = Aplicar este acabado a todos los componentes del cohete.
+MaterialPanel.but.SetForAll = Aplicar a todos
+MaterialPanel.but.SetForAll.ttip = Aplicar este acabado a todos los componentes del cohete.
RocketCompCfg.checkbox.Endcapped = Extremo tapado
RocketCompCfg.checkbox.Overridecenterofgrav = Especificar el CG:
RocketCompCfg.checkbox.Overridemass = Especificar la masa:
RocketCompCfg.checkbox.OverrideSubcomponents = Incluir de todos los subcomponentes
RocketCompCfg.checkbox.Usedefaultcolor = Usar color por defecto
-RocketCompCfg.combo.ttip.componentmaterialaffects = El peso del componente depender\u00e1 del material seleccionado.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = El peso del componente depender\u00e1 del material seleccionado.
RocketCompCfg.lbl.Choosecolor = Elija color
RocketCompCfg.lbl.Commentsonthe = Comentarios sobre
RocketCompCfg.lbl.Complinestyle = Estilo de l\u00ednea del componente:
RocketCompCfg.lbl.Componentcolor = Color del componente:
-RocketCompCfg.lbl.Componentfinish = Acabado:
+MaterialPanel.lbl.ComponentFinish = Acabado:
RocketCompCfg.lbl.Componentmass = Masa del componente:
-RocketCompCfg.lbl.Componentmaterial = Material del componente:
+MaterialPanel.lbl.ComponentMaterial = Material del componente:
! RocketComponentConfig
RocketCompCfg.lbl.Componentname = Nombre del componente:
RocketCompCfg.lbl.Diameter = Di\u00e1metro:
@@ -850,13 +849,13 @@ RocketCompCfg.lbl.Figurestyle = Estilo de dibujo:
RocketCompCfg.lbl.Length = Longitud:
RocketCompCfg.lbl.Mass = Masa:
RocketCompCfg.lbl.Thickness = Espesor:
-RocketCompCfg.lbl.longA1 = El Coeficiente de rozamiento depender\u00e1 del acabado del componente.
-RocketCompCfg.lbl.longA2 = El valor indicado es el promedio de la rugosidad en altura de la superficie.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = El Coeficiente de rozamiento depender\u00e1 del acabado del componente.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = El valor indicado es el promedio de la rugosidad en altura de la superficie.
RocketCompCfg.lbl.longB1 = En la masa especificada no se incluye la de los motores.
RocketCompCfg.lbl.longB2 = El CG se mide desde el extremo frontal del componente
RocketCompCfg.lbl.overriddenby = (Elegido por
RocketCompCfg.lbl.overriddento = (Elegido para
-RocketCompCfg.lbl.ttip.componentmaterialaffects = El material seleccionado para el componente afectar\u00e1 a la masa total del modelo.
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = El material seleccionado para el componente afectar\u00e1 a la masa total del modelo.
RocketCompCfg.tab.Appearance = Apariencia
RocketCompCfg.tab.Comment = Comentarios
RocketCompCfg.tab.Figstyleopt = Opciones de estilo de la figura
@@ -1211,15 +1210,15 @@ TrapezoidFinSetCfg.lbl.Finrotation = Rotaci\u00f3n de las aletas:
TrapezoidFinSetCfg.lbl.Height = Altura:
! TrapezoidFinSetConfig
TrapezoidFinSetCfg.lbl.Nbroffins = N\u00famero de aletas:
-TrapezoidFinSetCfg.lbl.Posrelativeto = Posici\u00f3n relativa a:
+PlacementPanel.lbl.PosRelativeTo = Posici\u00f3n relativa a:
TrapezoidFinSetCfg.lbl.Rootchord = Longitud de la l\u00ednea base:
TrapezoidFinSetCfg.lbl.Sweepangle = \u00c1ngulo del borde de ataque:
TrapezoidFinSetCfg.lbl.Sweeplength = Desplazamiento borde superior:
TrapezoidFinSetCfg.lbl.Thickness = Espesor:
TrapezoidFinSetCfg.lbl.Tipchord = Longitud del borde superior:
-TrapezoidFinSetCfg.lbl.plus = Localizaci\u00f3n:
+PlacementPanel.lbl.plus = Localizaci\u00f3n:
TrapezoidFinSetCfg.lbl.ttip.Fincant = El \u00e1ngulo de inclinaci\u00f3n de las aletas respecto al eje central del fuselaje.
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = Posici\u00f3n de las aletas alrededor del fuselaje.
+FinSetCfg.lbl.FinRotation.ttip = Posici\u00f3n de las aletas alrededor del fuselaje.
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = N\u00famero de aletas en la base de aletas.
TrapezoidFinSetCfg.tab.General = General
TrapezoidFinSetCfg.tab.Generalproperties = Propiedades generales
diff --git a/core/resources/l10n/messages_fr.properties b/core/resources/l10n/messages_fr.properties
index 511f502cc..5c118dd14 100644
--- a/core/resources/l10n/messages_fr.properties
+++ b/core/resources/l10n/messages_fr.properties
@@ -350,7 +350,7 @@ FreeformFinSet.FreeformFinSet = Ailerons personnalis\u00E9s
FreeformFinSetCfg.lbl.Fincant = Inclinaison de l'aileron:
FreeformFinSetCfg.lbl.FincrossSection = Coupe de l'aileron:
-FreeformFinSetCfg.lbl.Finrotation = Rotation des ailerons:
+FinSetCfg.lbl.FinRotation = Rotation des ailerons:
FreeformFinSetCfg.lbl.Numberoffins = Nombre d'ailerons:
FreeformFinSetCfg.lbl.Posrelativeto = Position par rapport \u00E0:
FreeformFinSetCfg.lbl.Thickness = Epaisseur:
@@ -486,7 +486,6 @@ LaunchLugCfg.lbl.Innerdiam = Diam\u00E8tre interne:
! LaunchLugConfig
LaunchLugCfg.lbl.Length = Longueur:
LaunchLugCfg.lbl.Outerdiam = Diam\u00E8tre externe:
-LaunchLugCfg.lbl.Posrelativeto = Position relative \u00E0:
LaunchLugCfg.lbl.Radialpos = Position circulaire:
LaunchLugCfg.lbl.Thickness = Epaisseur:
LaunchLugCfg.lbl.plus = plus
@@ -819,22 +818,22 @@ RocketCfg.lbl.Revisionhistory = Historique des modifications:
RocketCompCfg.border.Foreshoulder = Epaulement avant
RocketCompCfg.but.Saveasdefstyle = Sauver le mod\u00E8le par d\u00E9faut
-RocketCompCfg.but.Setforall = Appliquer \u00E0 tous
-RocketCompCfg.but.ttip.Setforall = R\u00E9gler la finition pour tous les composants de la fus\u00E9e.
+MaterialPanel.but.SetForAll = Appliquer \u00E0 tous
+MaterialPanel.but.SetForAll.ttip = R\u00E9gler la finition pour tous les composants de la fus\u00E9e.
RocketCompCfg.checkbox.Endcapped = Arri\u00E8re clos
RocketCompCfg.checkbox.Overridecenterofgrav = Forcer le centre de gravit\u00E9:
RocketCompCfg.checkbox.Overridecoeffofdrag = Modifier le coefficient de trainee:
RocketCompCfg.checkbox.Overridemass = Forcer la masse:
RocketCompCfg.checkbox.OverrideSubcomponents = Forcer pour tous les sous composants
RocketCompCfg.checkbox.Usedefaultcolor = Utiliser la couleur par d\u00E9faut
-RocketCompCfg.combo.ttip.componentmaterialaffects = Les mat\u00E9riaux utilis\u00E9s pour la pi\u00E8ce affectent le poids de la pi\u00E8ce.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = Les mat\u00E9riaux utilis\u00E9s pour la pi\u00E8ce affectent le poids de la pi\u00E8ce.
RocketCompCfg.lbl.Choosecolor = Choisir la couleur
RocketCompCfg.lbl.Commentsonthe = Commentaires \u00E0 propos du
RocketCompCfg.lbl.Complinestyle = Style de lignes pour les pi\u00E8ces:
RocketCompCfg.lbl.Componentcolor = Couleur de la pi\u00E8ce:
-RocketCompCfg.lbl.Componentfinish = Finition de la pi\u00E8ce:
+MaterialPanel.lbl.ComponentFinish = Finition de la pi\u00E8ce:
RocketCompCfg.lbl.Componentmass = Masse de la pi\u00E8ce:
-RocketCompCfg.lbl.Componentmaterial = Mat\u00E9riaux composant la pi\u00E8ce:
+MaterialPanel.lbl.ComponentMaterial = Mat\u00E9riaux composant la pi\u00E8ce:
! RocketComponentConfig
RocketCompCfg.lbl.Componentname = Nom de la pi\u00E8ce:
RocketCompCfg.lbl.Diameter = Diam\u00E8tre:
@@ -842,13 +841,13 @@ RocketCompCfg.lbl.Figurestyle = Mod\u00E8le de forme:
RocketCompCfg.lbl.Length = Longueur:
RocketCompCfg.lbl.Mass = Masse:
RocketCompCfg.lbl.Thickness = Epaisseur:
-RocketCompCfg.lbl.longA1 = La finition de la pi\u00E8ce affecte l'a\u00E9rodynamisme de la pi\u00E8ce.
-RocketCompCfg.lbl.longA2 = La valeur indiqu\u00E9e est la hauteur moyenne de la rugosit\u00E9 de la surface.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = La finition de la pi\u00E8ce affecte l'a\u00E9rodynamisme de la pi\u00E8ce.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = La valeur indiqu\u00E9e est la hauteur moyenne de la rugosit\u00E9 de la surface.
RocketCompCfg.lbl.longB1 = Le for\u00E7age de la masse n'inclus pas le ou les moteurs.
RocketCompCfg.lbl.longB2 = Le centre de gravit\u00E9 est mesur\u00E9 \u00E0 partir de l'extr\u00E9mit\u00E9 avant de la fus\u00E9e
RocketCompCfg.lbl.overriddenby = (forc\u00E9 par
RocketCompCfg.lbl.overriddento = (forc\u00E9 \u00E0
-RocketCompCfg.lbl.ttip.componentmaterialaffects = Les mat\u00E9riaux utilis\u00E9s pour la pi\u00E8ce affectent le poids de la pi\u00E8ce.
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = Les mat\u00E9riaux utilis\u00E9s pour la pi\u00E8ce affectent le poids de la pi\u00E8ce.
RocketCompCfg.tab.Appearance = Apparence
RocketCompCfg.tab.Comment = Commentaires
RocketCompCfg.tab.Figstyleopt = Options de la forme
@@ -1205,15 +1204,15 @@ TrapezoidFinSetCfg.lbl.Finrotation = Rotation de l'aileron:
TrapezoidFinSetCfg.lbl.Height = Hauteur:
! TrapezoidFinSetConfig
TrapezoidFinSetCfg.lbl.Nbroffins = Nombre d'ailerons:
-TrapezoidFinSetCfg.lbl.Posrelativeto = Position relative \u00E0:
+PlacementPanel.lbl.PosRelativeTo = Position relative \u00E0:
TrapezoidFinSetCfg.lbl.Rootchord = Longueur de la base de l'aileron:
TrapezoidFinSetCfg.lbl.Sweepangle = Angle du bord d'attaque:
TrapezoidFinSetCfg.lbl.Sweeplength = Longueur du bord d'attaque:
TrapezoidFinSetCfg.lbl.Thickness = Epaisseur:
TrapezoidFinSetCfg.lbl.Tipchord = Longueur du bout de l'aileron:
-TrapezoidFinSetCfg.lbl.plus = plus
+PlacementPanel.lbl.plus = plus
TrapezoidFinSetCfg.lbl.ttip.Fincant = Angle d'inclinaison des ailerons par rapport au tube du corps de la fus\u00E9e.
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = Angle du premier aileron dans le jeu.
+FinSetCfg.lbl.FinRotation.ttip = Angle du premier aileron dans le jeu.
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = Le nombre d'ailerons composant le jeu.
TrapezoidFinSetCfg.tab.General = G\u00E9n\u00E9ral
TrapezoidFinSetCfg.tab.Generalproperties = Propri\u00E9t\u00E9s g\u00E9n\u00E9rales
diff --git a/core/resources/l10n/messages_it.properties b/core/resources/l10n/messages_it.properties
index 5ad73871d..13f32cb2a 100644
--- a/core/resources/l10n/messages_it.properties
+++ b/core/resources/l10n/messages_it.properties
@@ -689,14 +689,14 @@ RocketCompCfg.lbl.Mass = Massa:
RocketCompCfg.lbl.Componentmass = La massa del componente :
RocketCompCfg.lbl.overriddento = (sovrascritto a
RocketCompCfg.lbl.overriddenby = (sovrascritto da
-RocketCompCfg.lbl.Componentmaterial = Materiale del componente:
-RocketCompCfg.lbl.Componentfinish = Finitura del componente:
-RocketCompCfg.lbl.ttip.componentmaterialaffects = Il materiale del componente influisce sulla sua massa.
-RocketCompCfg.combo.ttip.componentmaterialaffects = Il materiale del componente influisce sulla sua massa.
-RocketCompCfg.lbl.longA1 = La finitura del componente influisce sull'aerodinamica dello stesso.
-RocketCompCfg.lbl.longA2 = Il valore indicato e' la media dell'altezza delle asperita' della superficie.
-RocketCompCfg.but.Setforall = Imposta per tutti
-RocketCompCfg.but.ttip.Setforall = Imposta questa finitura per tutti i componenti del razzo.
+MaterialPanel.lbl.ComponentMaterial = Materiale del componente:
+MaterialPanel.lbl.ComponentFinish = Finitura del componente:
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = Il materiale del componente influisce sulla sua massa.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = Il materiale del componente influisce sulla sua massa.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = La finitura del componente influisce sull'aerodinamica dello stesso.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = Il valore indicato e' la media dell'altezza delle asperita' della superficie.
+MaterialPanel.but.SetForAll = Imposta per tutti
+MaterialPanel.but.SetForAll.ttip = Imposta questa finitura per tutti i componenti del razzo.
RocketCompCfg.checkbox.Overridemass = Modifica la massa:
RocketCompCfg.checkbox.Overridecenterofgrav = Sposta il centro di gravita':
RocketCompCfg.checkbox.OverrideSubcomponents = Modifica di tutti i subcomponenti
@@ -765,7 +765,7 @@ FreeformFinSetCfg.tab.ttip.General = Proprieta' generali
FreeformFinSetCfg.tab.Shape = Forma
FreeformFinSetCfg.tab.ttip.Finshape = Forma delle pinne
FreeformFinSetCfg.lbl.Numberoffins = Numero delle pinne:
-FreeformFinSetCfg.lbl.Finrotation = Rotazione delle pinne:
+FinSetCfg.lbl.FinRotation = Rotazione delle pinne:
FreeformFinSetCfg.lbl.Fincant = Inclinazione delle pinne:
FreeformFinSetCfg.lbl.ttip.Fincant = L'angolo d'inclinazione delle pinne rispetto al corpo del razzo.
FreeformFinSetCfg.lbl.Posrelativeto = Posizione relativa a :
@@ -805,7 +805,6 @@ LaunchLugCfg.lbl.Outerdiam = Diametro Esterno:
LaunchLugCfg.lbl.Innerdiam = Diametro Interno:
LaunchLugCfg.lbl.Thickness = Spessore:
LaunchLugCfg.lbl.Radialpos = Posizione radiale:
-LaunchLugCfg.lbl.Posrelativeto = Posizione relativa a :
LaunchLugCfg.lbl.plus = pi\u00f9
LaunchLugCfg.tab.General = Generale
LaunchLugCfg.tab.Generalprop = Proprieta' generali
@@ -958,7 +957,7 @@ TransitionCfg.tab.Shoulderproperties = Proprieta' della spalla
TrapezoidFinSetCfg.lbl.Nbroffins = Numero di pinne:
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = Il numero di pinne nell'insieme di pinne.
TrapezoidFinSetCfg.lbl.Finrotation = Rotazione delle pinne:
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = L'angolo della prima pinna dell'insieme.
+FinSetCfg.lbl.FinRotation.ttip = L'angolo della prima pinna dell'insieme.
TrapezoidFinSetCfg.lbl.Fincant = Inclinazione della pinna:
TrapezoidFinSetCfg.lbl.ttip.Fincant =L'angolo di inclinazione delle pinne rispetto al corpo del razzo.
TrapezoidFinSetCfg.lbl.Rootchord = Corda base:
@@ -968,8 +967,8 @@ TrapezoidFinSetCfg.lbl.Sweeplength = Sweep Lunghezza:
TrapezoidFinSetCfg.lbl.Sweepangle = Sweep angolo:
TrapezoidFinSetCfg.lbl.FincrossSection = Sezione della pinna:
TrapezoidFinSetCfg.lbl.Thickness = Spessore:
-TrapezoidFinSetCfg.lbl.Posrelativeto = Posizione relativa a :
-TrapezoidFinSetCfg.lbl.plus = pi\u00f9
+PlacementPanel.lbl.PosRelativeTo = Posizione relativa a :
+PlacementPanel.lbl.plus = pi\u00f9
TrapezoidFinSetCfg.tab.General = Generale
TrapezoidFinSetCfg.tab.Generalproperties = Proprieta' generali
diff --git a/core/resources/l10n/messages_ja.properties b/core/resources/l10n/messages_ja.properties
index d1c7f35a0..e118a63a8 100644
--- a/core/resources/l10n/messages_ja.properties
+++ b/core/resources/l10n/messages_ja.properties
@@ -719,14 +719,14 @@ RocketCompCfg.lbl.Mass = \u8CEA\u91CF\uFF1A
RocketCompCfg.lbl.Componentmass = \u90E8\u54C1\u8CEA\u91CF\uFF1A
RocketCompCfg.lbl.overriddento = (overridden to
RocketCompCfg.lbl.overriddenby = (overridden by
-RocketCompCfg.lbl.Componentmaterial = \u90E8\u54C1\u6750\u6599\uFF1A
-RocketCompCfg.lbl.Componentfinish = \u90E8\u54C1\u4ED5\u4E0A\u3052\u65B9\uFF1A
-RocketCompCfg.lbl.ttip.componentmaterialaffects = \u90E8\u54C1\u6750\u6599\u306F\u91CD\u91CF\u306B\u5F71\u97FF\u3059\u308B
-RocketCompCfg.combo.ttip.componentmaterialaffects = \u90E8\u54C1\u6750\u6599\u306F\u91CD\u91CF\u306B\u5F71\u97FF\u3059\u308B
-RocketCompCfg.lbl.longA1 = \u4ED5\u4E0A\u3052\u65B9\u306F\u6297\u529B\u4FC2\u6570\u306B\u5F71\u97FF\u3059\u308B
-RocketCompCfg.lbl.longA2 = \u3053\u306E\u5024\u306F\u8868\u9762\u7C97\u3055\u306E\u5E73\u5747\u5024\u3092\u793A\u3059
-RocketCompCfg.but.Setforall = \u5168\u3066\u306B\u9069\u7528
-RocketCompCfg.but.ttip.Setforall = \u3053\u306E\u4ED5\u4E0A\u3052\u65B9\u3092\u5168\u3066\u306E\u90E8\u54C1\u306B\u9069\u7528\u3059\u308B
+MaterialPanel.lbl.ComponentMaterial = \u90E8\u54C1\u6750\u6599\uFF1A
+MaterialPanel.lbl.ComponentFinish = \u90E8\u54C1\u4ED5\u4E0A\u3052\u65B9\uFF1A
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = \u90E8\u54C1\u6750\u6599\u306F\u91CD\u91CF\u306B\u5F71\u97FF\u3059\u308B
+MaterialPanel.combo.ttip.ComponentMaterialAffects = \u90E8\u54C1\u6750\u6599\u306F\u91CD\u91CF\u306B\u5F71\u97FF\u3059\u308B
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = \u4ED5\u4E0A\u3052\u65B9\u306F\u6297\u529B\u4FC2\u6570\u306B\u5F71\u97FF\u3059\u308B
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = \u3053\u306E\u5024\u306F\u8868\u9762\u7C97\u3055\u306E\u5E73\u5747\u5024\u3092\u793A\u3059
+MaterialPanel.but.SetForAll = \u5168\u3066\u306B\u9069\u7528
+MaterialPanel.but.SetForAll.ttip = \u3053\u306E\u4ED5\u4E0A\u3052\u65B9\u3092\u5168\u3066\u306E\u90E8\u54C1\u306B\u9069\u7528\u3059\u308B
RocketCompCfg.checkbox.Overridemass = \u8CEA\u91CF\u306E\u518D\u5B9A\u7FA9\uFF1A
RocketCompCfg.checkbox.Overridecenterofgrav = \u91CD\u5FC3\u306E\u518D\u5B9A\u7FA9\uFF1A
RocketCompCfg.checkbox.OverrideSubcomponents = \u3059\u3079\u3066\u306e\u30b5\u30d6\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b
@@ -795,7 +795,7 @@ FreeformFinSetCfg.tab.ttip.General = \u4E00\u822C
FreeformFinSetCfg.tab.Shape = \u5F62\u72B6
FreeformFinSetCfg.tab.ttip.Finshape = \u30D5\u30A3\u30F3\u5F62\u72B6
FreeformFinSetCfg.lbl.Numberoffins = \u30D5\u30A3\u30F3\u306E\u6570\uFF1A
-FreeformFinSetCfg.lbl.Finrotation = \u56DE\u8EE2\uFF1A
+FinSetCfg.lbl.FinRotation = \u56DE\u8EE2\uFF1A
FreeformFinSetCfg.lbl.Fincant = \u50BE\u659C\uFF1A
FreeformFinSetCfg.lbl.ttip.Fincant = \u30DC\u30C7\u30A3\u304B\u3089\u307F\u3066\u30D5\u30A3\u30F3\u306E\u50BE\u3044\u3066\u3044\u308B\u89D2\u5EA6
FreeformFinSetCfg.lbl.Posrelativeto = \u4F4D\u7F6E\uFF1A
@@ -835,7 +835,6 @@ LaunchLugCfg.lbl.Outerdiam = \u5916\u5F84\uFF1A
LaunchLugCfg.lbl.Innerdiam = \u5185\u5F84\uFF1A
LaunchLugCfg.lbl.Thickness = \u539A\u3055\uFF1A
LaunchLugCfg.lbl.Radialpos = \u56DE\u8EE2\u65B9\u5411\u4F4D\u7F6E\uFF1A
-LaunchLugCfg.lbl.Posrelativeto = \u4F4D\u7F6E\uFF1A
LaunchLugCfg.lbl.plus = \u30D7\u30E9\u30B9
LaunchLugCfg.tab.General = \u4E00\u822C
LaunchLugCfg.tab.Generalprop = \u4E00\u822C
@@ -988,7 +987,7 @@ TransitionCfg.tab.Shoulderproperties = \u30B7\u30E7\u30EB\u30C0\u30FC
TrapezoidFinSetCfg.lbl.Nbroffins = \u30D5\u30A3\u30F3\u306E\u6570
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = \u30D5\u30A3\u30F3\u306E\u6570
TrapezoidFinSetCfg.lbl.Finrotation = \u56DE\u8EE2\uFF1A
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = \u30D5\u30A3\u30F3\u306E\u89D2\u5EA6
+FinSetCfg.lbl.FinRotation.ttip = \u30D5\u30A3\u30F3\u306E\u89D2\u5EA6
TrapezoidFinSetCfg.lbl.Fincant = \u50BE\u659C\uFF1A
TrapezoidFinSetCfg.lbl.ttip.Fincant = \u30DC\u30C7\u30A3\u306B\u5BFE\u3057\u3066\u306E\u30D5\u30A3\u30F3\u306E\u50BE\u659C\u89D2\u5EA6
TrapezoidFinSetCfg.lbl.Rootchord = \u6839\u672C\u9577\u3055\uFF1A
@@ -998,8 +997,8 @@ TrapezoidFinSetCfg.lbl.Sweeplength = \u5F8C\u9000\u9577\u3055\uFF1A
TrapezoidFinSetCfg.lbl.Sweepangle = \u5F8C\u9000\u89D2\uFF1A
TrapezoidFinSetCfg.lbl.FincrossSection = \u30D5\u30A3\u30F3\u65AD\u9762\u7A4D\uFF1A
TrapezoidFinSetCfg.lbl.Thickness = \u539A\u3055\uFF1A
-TrapezoidFinSetCfg.lbl.Posrelativeto = \u4F4D\u7F6E\uFF1A
-TrapezoidFinSetCfg.lbl.plus = \u30D7\u30E9\u30B9
+PlacementPanel.lbl.PosRelativeTo = \u4F4D\u7F6E\uFF1A
+PlacementPanel.lbl.plus = \u30D7\u30E9\u30B9
TrapezoidFinSetCfg.tab.General = \u4E00\u822C
TrapezoidFinSetCfg.tab.Generalproperties = \u4E00\u822C
diff --git a/core/resources/l10n/messages_nl.properties b/core/resources/l10n/messages_nl.properties
index d25062186..9804cf4c7 100644
--- a/core/resources/l10n/messages_nl.properties
+++ b/core/resources/l10n/messages_nl.properties
@@ -837,14 +837,14 @@ RocketCompCfg.lbl.Mass = Massa:
RocketCompCfg.lbl.Componentmass = Componentmassa:
RocketCompCfg.lbl.overriddento = (overschreven naar
RocketCompCfg.lbl.overriddenby = (overschreven door
-RocketCompCfg.lbl.Componentmaterial = Componentmateriaal:
-RocketCompCfg.lbl.Componentfinish = Componentafwerking:
-RocketCompCfg.lbl.ttip.componentmaterialaffects = Het materiaal van het onderdeel beïnvloedt het gewicht van het onderdeel.
-RocketCompCfg.combo.ttip.componentmaterialaffects = Het materiaal van het onderdeel beïnvloedt het gewicht van het onderdeel.
-RocketCompCfg.lbl.longA1 = De afwerking van het onderdeel beïnvloedt de luchtweerstand van het onderdeel.
-RocketCompCfg.lbl.longA2 = De aangegeven waarde is de gemiddelde ruwheidshoogte van het oppervlak.
-RocketCompCfg.but.Setforall = Instellen voor alle
-RocketCompCfg.but.ttip.Setforall = Stel deze afwerking in voor alle onderdelen van de raket.
+MaterialPanel.lbl.ComponentMaterial = Componentmateriaal:
+MaterialPanel.lbl.ComponentFinish = Componentafwerking:
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = Het materiaal van het onderdeel beïnvloedt het gewicht van het onderdeel.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = Het materiaal van het onderdeel beïnvloedt het gewicht van het onderdeel.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = De afwerking van het onderdeel beïnvloedt de luchtweerstand van het onderdeel.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = De aangegeven waarde is de gemiddelde ruwheidshoogte van het oppervlak.
+MaterialPanel.but.SetForAll = Instellen voor alle
+MaterialPanel.but.SetForAll.ttip = Stel deze afwerking in voor alle onderdelen van de raket.
RocketCompCfg.checkbox.Overridemass = Overschrijf massa:
RocketCompCfg.checkbox.Overridecenterofgrav = Overschrijf zwaartepunt:
RocketCompCfg.checkbox.SetDragCoeff = Stel wrijvingscoëfficiënt in:
@@ -920,7 +920,7 @@ FreeformFinSetCfg.tab.ttip.General = Algemene eigenschappen
FreeformFinSetCfg.tab.Shape = Vorm
FreeformFinSetCfg.tab.ttip.Finshape = Vinvorm
FreeformFinSetCfg.lbl.Numberoffins = Aantal vinnen:
-FreeformFinSetCfg.lbl.Finrotation = Vinrotatie:
+FinSetCfg.lbl.FinRotation = Vinrotatie:
FreeformFinSetCfg.lbl.Fincant = Vinkanteling:
FreeformFinSetCfg.lbl.ttip.Fincant = De hoek waarin de vinnen zijn gekanteld ten opzichte van de raketromp.
FreeformFinSetCfg.lbl.Posrelativeto = Positie relatief t.o.v.:
@@ -969,7 +969,6 @@ LaunchLugCfg.lbl.Outerdiam = Buitendiameter:
LaunchLugCfg.lbl.Innerdiam = Binnendiameter:
LaunchLugCfg.lbl.Thickness = Dikte:
LaunchLugCfg.lbl.Angle = Rotatie:
-LaunchLugCfg.lbl.Posrelativeto = Positie relatief t.o.v.:
LaunchLugCfg.lbl.plus = plus
LaunchLugCfg.tab.General = Algemeen
LaunchLugCfg.tab.Generalprop = Algemene eigenschappen
@@ -1136,7 +1135,7 @@ TransitionCfg.tab.Shoulderproperties = Schoudereigenschappen
TrapezoidFinSetCfg.lbl.Nbroffins = Aantal vinnen:
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = Het aantal vinnen in de vinnenset.
TrapezoidFinSetCfg.lbl.Finrotation = Vinrotatie:
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = De hoek van de eerste vin in de vinnenset.
+FinSetCfg.lbl.FinRotation.ttip = De hoek van de eerste vin in de vinnenset.
TrapezoidFinSetCfg.lbl.Fincant = Vinkanteling:
TrapezoidFinSetCfg.lbl.ttip.Fincant = De hoek waarin de vinnen zijn gekanteld ten opzichte van de raketromp.
TrapezoidFinSetCfg.lbl.Rootchord = Root chord:
@@ -1146,8 +1145,8 @@ TrapezoidFinSetCfg.lbl.Sweeplength = Zwaailengte:
TrapezoidFinSetCfg.lbl.Sweepangle = Zwaaihoek:
TrapezoidFinSetCfg.lbl.FincrossSection = Vindoorsnede:
TrapezoidFinSetCfg.lbl.Thickness = Dikte:
-TrapezoidFinSetCfg.lbl.Posrelativeto = Positie relatief t.o.v.:
-TrapezoidFinSetCfg.lbl.plus = plus
+PlacementPanel.lbl.PosRelativeTo = Positie relatief t.o.v.:
+PlacementPanel.lbl.plus = plus
TrapezoidFinSetCfg.tab.General = Algemeen
TrapezoidFinSetCfg.tab.Generalproperties = Algemene eigenschappen
diff --git a/core/resources/l10n/messages_pl.properties b/core/resources/l10n/messages_pl.properties
index 64845d0bb..1bd476d8a 100644
--- a/core/resources/l10n/messages_pl.properties
+++ b/core/resources/l10n/messages_pl.properties
@@ -633,14 +633,14 @@ update.dlg.latestVersion = Korzystasz z najnowszej wersji OpenRocket: %s.
RocketCompCfg.lbl.Componentmass = Masa cz\u0119\u015Bci:
RocketCompCfg.lbl.overriddento = (wymuszone do
RocketCompCfg.lbl.overriddenby = (wymuszone przez
- RocketCompCfg.lbl.Componentmaterial = Materia\u0142 cz\u0119\u015Bci:
- RocketCompCfg.lbl.Componentfinish = Wyko\u0144czenie cz\u0119\u015Bci:
- RocketCompCfg.lbl.ttip.componentmaterialaffects = Materia\u0142 cz\u0119\u015Bci ma wp\u0142yw na jej ci\u0119\u017Car.
- RocketCompCfg.combo.ttip.componentmaterialaffects = Materia\u0142 cz\u0119\u015Bci ma wp\u0142yw na jej ci\u0119\u017Car.
- RocketCompCfg.lbl.longA1 = Wyko\u0144czenie cz\u0119\u015Bci ma wp\u0142yw na jej opr aerodynamiczny.
- RocketCompCfg.lbl.longA2 = Wskazana warto\u015B\u0107 okre\u015Bla przeci\u0119tn\u0105 chropowato\u015B\u0107 powierzchni.
- RocketCompCfg.but.Setforall = Ustaw dla wszystkich
- RocketCompCfg.but.ttip.Setforall = Nadaj to wyko\u0144czenie wszystkim cz\u0119\u015Bci\u0105 sk\u0142adow\u0105 rakiety.
+ MaterialPanel.lbl.ComponentMaterial = Materia\u0142 cz\u0119\u015Bci:
+ MaterialPanel.lbl.ComponentFinish = Wyko\u0144czenie cz\u0119\u015Bci:
+ MaterialPanel.lbl.ttip.ComponentMaterialAffects = Materia\u0142 cz\u0119\u015Bci ma wp\u0142yw na jej ci\u0119\u017Car.
+ MaterialPanel.combo.ttip.ComponentMaterialAffects = Materia\u0142 cz\u0119\u015Bci ma wp\u0142yw na jej ci\u0119\u017Car.
+ MaterialPanel.lbl.ComponentFinish.ttip.longA1 = Wyko\u0144czenie cz\u0119\u015Bci ma wp\u0142yw na jej opr aerodynamiczny.
+ MaterialPanel.lbl.ComponentFinish.ttip.longA2 = Wskazana warto\u015B\u0107 okre\u015Bla przeci\u0119tn\u0105 chropowato\u015B\u0107 powierzchni.
+ MaterialPanel.but.SetForAll = Ustaw dla wszystkich
+ MaterialPanel.but.SetForAll.ttip = Nadaj to wyko\u0144czenie wszystkim cz\u0119\u015Bci\u0105 sk\u0142adow\u0105 rakiety.
RocketCompCfg.checkbox.Overridemass = Wymu\u015B ci\u0119\u017Car:
RocketCompCfg.checkbox.Overridecenterofgrav = Wymu\u015B \u015Brodek ci\u0119\u017Cko\u015Bci:
RocketCompCfg.checkbox.OverrideSubcomponents = Nadpisanie dla wszystkich podkomponent\u00F3w
@@ -710,7 +710,7 @@ ComponentInfo.EngineBlock = Blokada silnika unieruchamia silnik wewn\u01
FreeformFinSetCfg.tab.Shape = Kszta\u0142t
FreeformFinSetCfg.tab.ttip.Finshape = Kszta\u0142t statecznikw
FreeformFinSetCfg.lbl.Numberoffins = Liczba statecznikw:
- FreeformFinSetCfg.lbl.Finrotation = Rotacja statecznikw:
+ FinSetCfg.lbl.FinRotation = Rotacja statecznikw:
FreeformFinSetCfg.lbl.Fincant = Nachylenie statecznikw:
FreeformFinSetCfg.lbl.ttip.Fincant = K\u0105t nachylenia statecznikw wzgl\u0119dem korpusu.
FreeformFinSetCfg.lbl.Posrelativeto = Po\u0142o\u017Cenie wzgl\u0119dem:
@@ -750,7 +750,6 @@ ComponentInfo.EngineBlock = Blokada silnika unieruchamia silnik wewn\u01
LaunchLugCfg.lbl.Innerdiam = \u015Arednica wewn\u0119trzna:
LaunchLugCfg.lbl.Thickness = Grubo\u015B\u0107:
LaunchLugCfg.lbl.Radialpos = Po\u0142o\u017Cenie wzgl\u0119dem \u015Brodka:
- LaunchLugCfg.lbl.Posrelativeto = Po\u0142o\u017Cenie wzgl\u0119dem:
LaunchLugCfg.lbl.plus = plus
LaunchLugCfg.tab.General = Oglne
LaunchLugCfg.tab.Generalprop = W\u0142a\u015Bciwo\u015Bci oglne
@@ -902,7 +901,7 @@ ComponentInfo.EngineBlock = Blokada silnika unieruchamia silnik wewn\u01
TrapezoidFinSetCfg.lbl.Nbroffins = Liczba statecznikw:
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = Liczba statecznikw w zestawie.
TrapezoidFinSetCfg.lbl.Finrotation = Rotacja statecznikw:
- TrapezoidFinSetCfg.lbl.ttip.Finrotation = K\u0105t nachylenia pierwszego statecznika w zestawie.
+ FinSetCfg.lbl.FinRotation.ttip = K\u0105t nachylenia pierwszego statecznika w zestawie.
TrapezoidFinSetCfg.lbl.Fincant = Nachylenie statecznikw:
TrapezoidFinSetCfg.lbl.ttip.Fincant = K\u0105t nachylenia statecznikw wzgl\u0119dem korpusu.
TrapezoidFinSetCfg.lbl.Rootchord = Kraw\u0119d\u017A podstawy:
@@ -912,8 +911,8 @@ ComponentInfo.EngineBlock = Blokada silnika unieruchamia silnik wewn\u01
TrapezoidFinSetCfg.lbl.Sweepangle = K\u0105t przesuni\u0119cia:
TrapezoidFinSetCfg.lbl.FincrossSection = Przekrj statecznika:
TrapezoidFinSetCfg.lbl.Thickness = Grubo\u015B\u0107:
- TrapezoidFinSetCfg.lbl.Posrelativeto = Po\u0142o\u017Cenie wzgl\u0119dem:
- TrapezoidFinSetCfg.lbl.plus = plus
+ PlacementPanel.lbl.PosRelativeTo = Po\u0142o\u017Cenie wzgl\u0119dem:
+ PlacementPanel.lbl.plus = plus
TrapezoidFinSetCfg.tab.General = Oglne
TrapezoidFinSetCfg.tab.Generalproperties = W\u0142a\u015Bciwo\u015Bci oglne
diff --git a/core/resources/l10n/messages_pt.properties b/core/resources/l10n/messages_pt.properties
index fa3ad6ac2..0e43e37ca 100644
--- a/core/resources/l10n/messages_pt.properties
+++ b/core/resources/l10n/messages_pt.properties
@@ -339,7 +339,7 @@ FreeformFinSet.FreeformFinSet = Conjunto de aletas de formato livre
FreeformFinSetCfg.lbl.Fincant = Inclina\u00e7\u00e3o da aleta:
FreeformFinSetCfg.lbl.FincrossSection = Se\u00e7\u00e3o transversal da aleta:
-FreeformFinSetCfg.lbl.Finrotation = Rota\u00e7\u00e3o da aleta:
+FinSetCfg.lbl.FinRotation = Rota\u00e7\u00e3o da aleta:
FreeformFinSetCfg.lbl.Numberoffins = N\u00famero de aletas:
FreeformFinSetCfg.lbl.Posrelativeto = Posi\u00e7\u00e3o em rela\u00e7\u00e3o a:
FreeformFinSetCfg.lbl.Thickness = Se\u00e7\u00e3o transversal da aleta:
@@ -473,7 +473,6 @@ LaunchLugCfg.lbl.Innerdiam = Di\u00e2metro interno:
# LaunchLugConfig
LaunchLugCfg.lbl.Length = Comprimento:
LaunchLugCfg.lbl.Outerdiam = Di\u00e2metro Externo
-LaunchLugCfg.lbl.Posrelativeto = Posi\u00e7\u00e3o em rela\u00e7\u00e3o a:
LaunchLugCfg.lbl.Radialpos = Posi\u00e7\u00e3o radial:
LaunchLugCfg.lbl.Thickness = Espessura:
LaunchLugCfg.lbl.plus = mais
@@ -803,22 +802,22 @@ RocketCfg.lbl.Revisionhistory = Hist\u00f3rico de Revis\u00e3o:
RocketCompCfg.border.Foreshoulder = Ressalto dianteiro
RocketCompCfg.but.Saveasdefstyle = Salvar como estilo padr\u00e3o
-RocketCompCfg.but.Setforall = Definir para todos
-RocketCompCfg.but.ttip.Setforall = Definir este acabamento para todos os componentes do foguete.
+MaterialPanel.but.SetForAll = Definir para todos
+MaterialPanel.but.SetForAll.ttip = Definir este acabamento para todos os componentes do foguete.
RocketCompCfg.checkbox.Endcapped = Fim tampado
RocketCompCfg.checkbox.Overridecenterofgrav = Modificar o centro de gravidade:
RocketCompCfg.checkbox.Overridecoeffofdrag = Modificar o coeficiente de arrasto:
RocketCompCfg.checkbox.Overridemass = Modificar massa:
RocketCompCfg.checkbox.OverrideSubcomponents = Modificar de todos os subcomponentes
RocketCompCfg.checkbox.Usedefaultcolor = Use a cor padr\u00e3o
-RocketCompCfg.combo.ttip.componentmaterialaffects = O material do componente afeta o peso do componente.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = O material do componente afeta o peso do componente.
RocketCompCfg.lbl.Choosecolor = Escolha a cor
RocketCompCfg.lbl.Commentsonthe = Coment\u00e1rios sobre o
RocketCompCfg.lbl.Complinestyle = Estilo de linha de componentes:
RocketCompCfg.lbl.Componentcolor = Cor do componente:
-RocketCompCfg.lbl.Componentfinish = Acabamento de componentes:
+MaterialPanel.lbl.ComponentFinish = Acabamento de componentes:
RocketCompCfg.lbl.Componentmass = Massa do componente:
-RocketCompCfg.lbl.Componentmaterial = Material componente:
+MaterialPanel.lbl.ComponentMaterial = Material componente:
# RocketComponentConfig
RocketCompCfg.lbl.Componentname = Nome do componente:
RocketCompCfg.lbl.Diameter = Di\u00e2metro:
@@ -826,13 +825,13 @@ RocketCompCfg.lbl.Figurestyle = Estilo da figura:
RocketCompCfg.lbl.Length = Comprimento:
RocketCompCfg.lbl.Mass = Massa:
RocketCompCfg.lbl.Thickness = Espessura:
-RocketCompCfg.lbl.longA1 = O acabamento do componente afeta o arrasto aerodin\u00e2mico do componente.
-RocketCompCfg.lbl.longA2 = O valor indicado \u00e9 a altura m\u00e9dia da rugosidade da superf\u00edcie.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = O acabamento do componente afeta o arrasto aerodin\u00e2mico do componente.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = O valor indicado \u00e9 a altura m\u00e9dia da rugosidade da superf\u00edcie.
RocketCompCfg.lbl.longB1 = A massa modificada n\u00e3o inclui motores.
RocketCompCfg.lbl.longB2 = O centro de gravidade \u00e9 medido a partir da extremidade dianteira do
RocketCompCfg.lbl.overriddenby = (substitu\u00eddo pela
RocketCompCfg.lbl.overriddento = (substitu\u00eddo para
-RocketCompCfg.lbl.ttip.componentmaterialaffects = O material do componente afeta o peso do componente.
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = O material do componente afeta o peso do componente.
RocketCompCfg.tab.Comment = Coment\u00e1rio
RocketCompCfg.tab.Figstyleopt = Op\u00e7\u00f5es do estilo de figura
RocketCompCfg.tab.Figure = Figura
@@ -1168,15 +1167,15 @@ TrapezoidFinSetCfg.lbl.Finrotation = Rota\u00e7\u00e3o da aleta:
TrapezoidFinSetCfg.lbl.Height = Altura:
# TrapezoidFinSetConfig
TrapezoidFinSetCfg.lbl.Nbroffins = N\u00famero de aletas:
-TrapezoidFinSetCfg.lbl.Posrelativeto = Posi\u00e7\u00e3o em rela\u00e7\u00e3o a:
+PlacementPanel.lbl.PosRelativeTo = Posi\u00e7\u00e3o em rela\u00e7\u00e3o a:
TrapezoidFinSetCfg.lbl.Rootchord = Corda da raiz:
TrapezoidFinSetCfg.lbl.Sweepangle = \u00c2ngulo do contorno:
TrapezoidFinSetCfg.lbl.Sweeplength = Comprimento do contorno:
TrapezoidFinSetCfg.lbl.Thickness = Espessura:
TrapezoidFinSetCfg.lbl.Tipchord = Dica da corda:
-TrapezoidFinSetCfg.lbl.plus = mais
+PlacementPanel.lbl.plus = mais
TrapezoidFinSetCfg.lbl.ttip.Fincant = O \u00e2ngulo que as aletas s\u00e3o obl\u00edquos em rela\u00e7\u00e3o ao corpo do foguete.
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = \u00c2ngulo da primeira aleta no conjunto de aletas.
+FinSetCfg.lbl.FinRotation.ttip = \u00c2ngulo da primeira aleta no conjunto de aletas.
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = N\u00famero de alhetas no conjunto de aletas.
TrapezoidFinSetCfg.tab.General = Geral
TrapezoidFinSetCfg.tab.Generalproperties = Propriedades gerais
diff --git a/core/resources/l10n/messages_ru.properties b/core/resources/l10n/messages_ru.properties
index 2e259eea3..124ca6bc8 100644
--- a/core/resources/l10n/messages_ru.properties
+++ b/core/resources/l10n/messages_ru.properties
@@ -908,14 +908,14 @@ RocketCompCfg.lbl.Mass = \u041C\u0430\u0441\u0441\u0430:
RocketCompCfg.lbl.Componentmass = \u041C\u0430\u0441\u0441\u0430 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430:
RocketCompCfg.lbl.overriddento = (\u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E \u043D\u0430
RocketCompCfg.lbl.overriddenby = (\u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E \u043D\u0430
-RocketCompCfg.lbl.Componentmaterial = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430:
-RocketCompCfg.lbl.Componentfinish = \u041E\u0442\u0434\u0435\u043B\u043A\u0430 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430
-RocketCompCfg.lbl.ttip.componentmaterialaffects = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0435\u0433\u043E \u043C\u0430\u0441\u0441\u0443.
-RocketCompCfg.combo.ttip.componentmaterialaffects = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0435\u0433\u043E \u043C\u0430\u0441\u0441\u0443.
-RocketCompCfg.lbl.longA1 = \u041E\u0442\u0434\u0435\u043B\u043A\u0430 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0430\u044D\u0440\u043E\u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0441\u043E\u043F\u0440\u043E\u0442\u0438\u0432\u043B\u0435\u043D\u0438\u0435 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430
-RocketCompCfg.lbl.longA2 = \u0423\u043A\u0430\u0437\u0430\u043D\u043E \u0441\u0440\u0435\u0434\u043D\u0435\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0448\u0435\u0440\u043E\u0445\u043E\u0432\u0430\u0442\u043E\u0441\u0442\u0438.
-RocketCompCfg.but.Setforall = \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0434\u043B\u044F \u0432\u0441\u0435\u0445
-RocketCompCfg.but.ttip.Setforall = \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u044D\u0442\u0443 \u0448\u0435\u0440\u043E\u0445\u043E\u0432\u0430\u0442\u043E\u0441\u0442\u044C \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432 \u0440\u0430\u043A\u0435\u0442\u044B.
+MaterialPanel.lbl.ComponentMaterial = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430:
+MaterialPanel.lbl.ComponentFinish = \u041E\u0442\u0434\u0435\u043B\u043A\u0430 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0435\u0433\u043E \u043C\u0430\u0441\u0441\u0443.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0435\u0433\u043E \u043C\u0430\u0441\u0441\u0443.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = \u041E\u0442\u0434\u0435\u043B\u043A\u0430 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0430\u044D\u0440\u043E\u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0441\u043E\u043F\u0440\u043E\u0442\u0438\u0432\u043B\u0435\u043D\u0438\u0435 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = \u0423\u043A\u0430\u0437\u0430\u043D\u043E \u0441\u0440\u0435\u0434\u043D\u0435\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0448\u0435\u0440\u043E\u0445\u043E\u0432\u0430\u0442\u043E\u0441\u0442\u0438.
+MaterialPanel.but.SetForAll = \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0434\u043B\u044F \u0432\u0441\u0435\u0445
+MaterialPanel.but.SetForAll.ttip = \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u044D\u0442\u0443 \u0448\u0435\u0440\u043E\u0445\u043E\u0432\u0430\u0442\u043E\u0441\u0442\u044C \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432 \u0440\u0430\u043A\u0435\u0442\u044B.
RocketCompCfg.checkbox.Overridemass = \u041F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442\u044C \u043C\u0430\u0441\u0441\u0443:
RocketCompCfg.checkbox.Overridemass.ttip = \u041F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442 \u043C\u0430\u0441\u0441\u0443 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043D\u043D\u0443\u044E \u043F\u043E \u043E\u0431\u044A\u0435\u043C\u0443 \u0438 \u043F\u043B\u043E\u0442\u043D\u043E\u0441\u0442\u0438 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430.
RocketCompCfg.checkbox.Overridecenterofgrav = \u041F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442\u044C \u0446\u0435\u043D\u0442\u0440 \u0442\u044F\u0436\u0435\u0441\u0442\u0438:
@@ -1003,7 +1003,7 @@ FreeformFinSetCfg.tab.ttip.General = \u041E\u0441\u043D\u043E\u0432\u043D\u044B\
FreeformFinSetCfg.tab.Shape = \u0424\u043E\u0440\u043C\u0430
FreeformFinSetCfg.tab.ttip.Finshape = \u0424\u043E\u0440\u043C\u0430 \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430
FreeformFinSetCfg.lbl.Numberoffins = \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u043E\u0432:
-FreeformFinSetCfg.lbl.Finrotation = \u0412\u0440\u0430\u0449\u0435\u043D\u0438\u0435:
+FinSetCfg.lbl.FinRotation = \u0412\u0440\u0430\u0449\u0435\u043D\u0438\u0435:
FreeformFinSetCfg.lbl.Fincant = \u0423\u0433\u043E\u043B \u0430\u0442\u0430\u043A\u0438:
FreeformFinSetCfg.lbl.ttip.Fincant = \u0423\u0433\u043E\u043B \u0430\u0442\u0430\u043A\u0438 \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430 \u043F\u043E \u043E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044E \u043A \u043E\u0441\u0438 \u0440\u0430\u043A\u0435\u0442\u044B.
FreeformFinSetCfg.lbl.Posrelativeto = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E:
@@ -1053,7 +1053,6 @@ LaunchLugCfg.lbl.Outerdiam = \u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u0434\u
LaunchLugCfg.lbl.Innerdiam = \u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u0439 \u0434\u0438\u0430\u043C\u0435\u0442\u0440:
LaunchLugCfg.lbl.Thickness = \u0422\u043E\u043B\u0449\u0438\u043D\u0430:
LaunchLugCfg.lbl.Angle = \u0423\u0433\u043E\u043B:
-LaunchLugCfg.lbl.Posrelativeto = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E:
LaunchLugCfg.lbl.plus = \u043F\u043B\u044E\u0441
LaunchLugCfg.tab.General = \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0435
LaunchLugCfg.tab.Generalprop = \u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B
@@ -1125,7 +1124,6 @@ NoseConeCfg.tab.ttip.Shoulder = \u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440
Parachute.Parachute = \u041F\u0430\u0440\u0430\u0448\u044E\u0442
ParachuteCfg.lbl.Canopy = \u041A\u0443\u043F\u043E\u043B:
ParachuteCfg.lbl.Shroudlines = \u0421\u0442\u0440\u043E\u043F\u044B:
-ParachuteCfg.lbl.Placement = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435
ParachuteCfg.lbl.Deployment = \u0420\u0430\u0441\u043A\u0440\u044B\u0442\u0438\u0435
ParachuteCfg.lbl.CanopyShape = \u0424\u043E\u0440\u043C\u0430 \u043A\u0443\u043F\u043E\u043B\u0430:
ParachuteCfg.lbl.Diameter = \u0414\u0438\u0430\u043C\u0435\u0442\u0440:
@@ -1183,8 +1181,7 @@ SleeveCfg.tab.General = \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0435
SleeveCfg.tab.Generalproperties = \u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B
! StreamerConfig
-StreamerCfg.lbl.Attributes = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B
-StreamerCfg.lbl.Placement = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435
+PlacementPanel.title.Placement = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435
StreamerCfg.lbl.Deployment = \u0420\u0430\u0441\u043A\u0440\u044B\u0442\u0438\u0435
StreamerCfg.lbl.Striplength = \u0414\u043B\u0438\u043D\u0430 \u043B\u0435\u043D\u0442\u044B:
StreamerCfg.lbl.Stripwidth = \u0428\u0438\u0440\u0438\u043D\u0430 \u043B\u0435\u043D\u0442\u044B:
@@ -1246,7 +1243,7 @@ TransitionCfg.tab.Shoulderproperties = \u0421\u0432\u043E\u0439\u0441\u0442\u043
TrapezoidFinSetCfg.lbl.Nbroffins = \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u043E\u0432:
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u043E\u0432 \u0432 \u043E\u043F\u0435\u0440\u0435\u043D\u0438\u0438.
TrapezoidFinSetCfg.lbl.Finrotation = \u0412\u0440\u0430\u0449\u0435\u043D\u0438\u0435:
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = \u041F\u043E\u0432\u043E\u0440\u043E\u0442 \u043F\u0435\u0440\u0432\u043E\u0433\u043E \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430 \u0432 \u043E\u043F\u0435\u0440\u0435\u043D\u0438\u0438.
+FinSetCfg.lbl.FinRotation.ttip = \u041F\u043E\u0432\u043E\u0440\u043E\u0442 \u043F\u0435\u0440\u0432\u043E\u0433\u043E \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430 \u0432 \u043E\u043F\u0435\u0440\u0435\u043D\u0438\u0438.
TrapezoidFinSetCfg.lbl.Fincant = \u0423\u0433\u043E\u043B \u0430\u0442\u0430\u043A\u0438:
TrapezoidFinSetCfg.lbl.ttip.Fincant = \u0423\u0433\u043E\u043B \u0430\u0442\u0430\u043A\u0438 \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430 \u043F\u043E \u043E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044E \u043A \u043E\u0441\u0438 \u0440\u0430\u043A\u0435\u0442\u044B.
TrapezoidFinSetCfg.lbl.Rootchord = \u0414\u043B\u0438\u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F:
@@ -1256,8 +1253,8 @@ TrapezoidFinSetCfg.lbl.Sweeplength = \u0414\u043B\u0438\u043D\u0430 \u0441\u0442
TrapezoidFinSetCfg.lbl.Sweepangle = \u0423\u0433\u043E\u043B \u0441\u0442\u0440\u0435\u043B\u043E\u0432\u0438\u0434\u043D\u043E\u0441\u0442\u0438:
TrapezoidFinSetCfg.lbl.FincrossSection = \u041F\u0440\u043E\u0444\u0438\u043B\u044C \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430:
TrapezoidFinSetCfg.lbl.Thickness = \u0422\u043E\u043B\u0449\u0438\u043D\u0430:
-TrapezoidFinSetCfg.lbl.Posrelativeto = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E:
-TrapezoidFinSetCfg.lbl.plus = \u043F\u043B\u044E\u0441
+PlacementPanel.lbl.PosRelativeTo = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E:
+PlacementPanel.lbl.plus = \u043F\u043B\u044E\u0441
TrapezoidFinSetCfg.tab.General = \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0435
TrapezoidFinSetCfg.tab.Generalproperties = \u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B
diff --git a/core/resources/l10n/messages_uk_UA.properties b/core/resources/l10n/messages_uk_UA.properties
index 68f4ed718..714069d60 100644
--- a/core/resources/l10n/messages_uk_UA.properties
+++ b/core/resources/l10n/messages_uk_UA.properties
@@ -790,14 +790,14 @@ RocketCompCfg.lbl.Mass = Mass:
RocketCompCfg.lbl.Componentmass = Component mass:
RocketCompCfg.lbl.overriddento = (overridden to
RocketCompCfg.lbl.overriddenby = (overridden by
-RocketCompCfg.lbl.Componentmaterial = Component material:
-RocketCompCfg.lbl.Componentfinish = Component finish:
-RocketCompCfg.lbl.ttip.componentmaterialaffects = The component material affects the weight of the component.
-RocketCompCfg.combo.ttip.componentmaterialaffects = The component material affects the weight of the component.
-RocketCompCfg.lbl.longA1 = The component finish affects the aerodynamic drag of the component.
-RocketCompCfg.lbl.longA2 = The value indicated is the average roughness height of the surface.
-RocketCompCfg.but.Setforall = Set for all
-RocketCompCfg.but.ttip.Setforall = Set this finish for all components of the rocket.
+MaterialPanel.lbl.ComponentMaterial = Component material:
+MaterialPanel.lbl.ComponentFinish = Component finish:
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = The component material affects the weight of the component.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = The component material affects the weight of the component.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = The component finish affects the aerodynamic drag of the component.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = The value indicated is the average roughness height of the surface.
+MaterialPanel.but.SetForAll = Set for all
+MaterialPanel.but.SetForAll.ttip = Set this finish for all components of the rocket.
RocketCompCfg.checkbox.Overridemass = Override mass:
RocketCompCfg.checkbox.Overridecenterofgrav = Override center of gravity:
RocketCompCfg.checkbox.Overridecoeffofdrag = Override coefficient of drag:
@@ -867,7 +867,7 @@ FreeformFinSetCfg.tab.ttip.General = General properties
FreeformFinSetCfg.tab.Shape = Shape
FreeformFinSetCfg.tab.ttip.Finshape = Fin shape
FreeformFinSetCfg.lbl.Numberoffins = Number of fins:
-FreeformFinSetCfg.lbl.Finrotation = Fin rotation:
+FinSetCfg.lbl.FinRotation = Fin rotation:
FreeformFinSetCfg.lbl.Fincant = Fin cant:
FreeformFinSetCfg.lbl.ttip.Fincant = The angle that the fins are canted with respect to the rocket body.
FreeformFinSetCfg.lbl.Posrelativeto = Position relative to:
@@ -907,7 +907,6 @@ LaunchLugCfg.lbl.Outerdiam = Outer diameter:
LaunchLugCfg.lbl.Innerdiam = Inner diameter:
LaunchLugCfg.lbl.Thickness = Thickness:
LaunchLugCfg.lbl.Radialpos = Radial position:
-LaunchLugCfg.lbl.Posrelativeto = Position relative to:
LaunchLugCfg.lbl.plus = plus
LaunchLugCfg.tab.General = General
LaunchLugCfg.tab.Generalprop = General properties
@@ -1061,7 +1060,7 @@ TransitionCfg.tab.Shoulderproperties = Shoulder properties
TrapezoidFinSetCfg.lbl.Nbroffins = Number of fins:
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = The number of fins in the fin set.
TrapezoidFinSetCfg.lbl.Finrotation = Fin rotation:
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = The angle of the first fin in the fin set.
+FinSetCfg.lbl.FinRotation.ttip = The angle of the first fin in the fin set.
TrapezoidFinSetCfg.lbl.Fincant = Fin cant:
TrapezoidFinSetCfg.lbl.ttip.Fincant =The angle that the fins are canted with respect to the rocket body.
TrapezoidFinSetCfg.lbl.Rootchord = Root chord:
@@ -1071,8 +1070,8 @@ TrapezoidFinSetCfg.lbl.Sweeplength = Sweep length:
TrapezoidFinSetCfg.lbl.Sweepangle = Sweep angle:
TrapezoidFinSetCfg.lbl.FincrossSection = Fin cross section:
TrapezoidFinSetCfg.lbl.Thickness = Thickness:
-TrapezoidFinSetCfg.lbl.Posrelativeto = Position relative to:
-TrapezoidFinSetCfg.lbl.plus = plus
+PlacementPanel.lbl.PosRelativeTo = Position relative to:
+PlacementPanel.lbl.plus = plus
TrapezoidFinSetCfg.tab.General = General
TrapezoidFinSetCfg.tab.Generalproperties = General properties
diff --git a/core/resources/l10n/messages_zh_CN.properties b/core/resources/l10n/messages_zh_CN.properties
index 27202fd55..f1642f631 100644
--- a/core/resources/l10n/messages_zh_CN.properties
+++ b/core/resources/l10n/messages_zh_CN.properties
@@ -376,7 +376,7 @@ FreeformFinSet.FreeformFinSet = \u81EA\u7531\u66F2\u9762\u7A33\u5B9A\u7F
FreeformFinSetCfg.lbl.Fincant = \u7A33\u5B9A\u7FFC\u9762\u89D2:
FreeformFinSetCfg.lbl.FincrossSection = \u7A33\u5B9A\u7FFC\u6A2A\u5207\u9762:
-FreeformFinSetCfg.lbl.Finrotation = \u7A33\u5B9A\u7FFC\u65CB\u5EA6:
+FinSetCfg.lbl.FinRotation = \u7A33\u5B9A\u7FFC\u65CB\u5EA6:
FreeformFinSetCfg.lbl.Numberoffins = \u7A33\u5B9A\u7FFC\u6570\u91CF:
FreeformFinSetCfg.lbl.Posrelativeto = \u76F8\u5BF9\u4F4D\u7F6E:
FreeformFinSetCfg.lbl.Thickness = \u539A\u5EA6:
@@ -510,7 +510,6 @@ LaunchLugCfg.lbl.Innerdiam = \u5185\u76F4\u5F84:
! LaunchLugConfig
LaunchLugCfg.lbl.Length = \u957F\u5EA6:
LaunchLugCfg.lbl.Outerdiam = \u5916\u76F4\u5F84:
-LaunchLugCfg.lbl.Posrelativeto = \u76F8\u5BF9\u4F4D\u7F6E:
LaunchLugCfg.lbl.Radialpos = \u5F84\u5411\u4F4D\u7F6E:
LaunchLugCfg.lbl.Thickness = \u539A\u5EA6:
LaunchLugCfg.lbl.plus = \u52A0
@@ -892,21 +891,21 @@ RocketCfg.lbl.Revisionhistory = \u4FEE\u8BA2\u5386\u53F2:
RocketCompCfg.border.Foreshoulder = \u540E\u8FDE\u63A5\u5904
RocketCompCfg.but.Saveasdefstyle = \u4FDD\u5B58\u4E3A\u9ED8\u8BA4\u6837\u5F0F
-RocketCompCfg.but.Setforall = \u8BBE\u7F6E\u6240\u6709
-RocketCompCfg.but.ttip.Setforall = \u5BF9\u6240\u6709\u7684\u7EC4\u4EF6\u4F7F\u7528\u540C\u79CD\u8868\u9762\u5904\u7406.
+MaterialPanel.but.SetForAll = \u8BBE\u7F6E\u6240\u6709
+MaterialPanel.but.SetForAll.ttip = \u5BF9\u6240\u6709\u7684\u7EC4\u4EF6\u4F7F\u7528\u540C\u79CD\u8868\u9762\u5904\u7406.
RocketCompCfg.checkbox.Endcapped = \u6709\u7AEF\u76D6
RocketCompCfg.checkbox.Overridecenterofgrav = \u8986\u5199\u91CD\u5FC3:
RocketCompCfg.checkbox.Overridemass = \u8986\u5199\u8D28\u91CF:
RocketCompCfg.checkbox.OverrideSubcomponents = \u8986\u5199\u6240\u6709\u7EC4\u4EF6\u7684\u91CD\u91CF\u548C\u91CD\u5FC3
RocketCompCfg.checkbox.Usedefaultcolor = \u9ED8\u8BA4\u989C\u8272
-RocketCompCfg.combo.ttip.componentmaterialaffects = \u7EC4\u4EF6\u6750\u6599\u5C06\u4F1A\u5F71\u54CD\u5230\u7EC4\u4EF6\u91CD\u91CF.
+MaterialPanel.combo.ttip.ComponentMaterialAffects = \u7EC4\u4EF6\u6750\u6599\u5C06\u4F1A\u5F71\u54CD\u5230\u7EC4\u4EF6\u91CD\u91CF.
RocketCompCfg.lbl.Choosecolor = \u989C\u8272\u9009\u62E9
RocketCompCfg.lbl.Commentsonthe = \u6CE8\u91CA
RocketCompCfg.lbl.Complinestyle = \u7EC4\u4EF6\u7EBF\u578B:
RocketCompCfg.lbl.Componentcolor = \u7EC4\u4EF6\u989C\u8272:
-RocketCompCfg.lbl.Componentfinish = \u7EC4\u4EF6\u8868\u9762\u5904\u7406:
+MaterialPanel.lbl.ComponentFinish = \u7EC4\u4EF6\u8868\u9762\u5904\u7406:
RocketCompCfg.lbl.Componentmass = \u7EC4\u4EF6\u8D28\u91CF:
-RocketCompCfg.lbl.Componentmaterial = \u7EC4\u4EF6\u6750\u6599:
+MaterialPanel.lbl.ComponentMaterial = \u7EC4\u4EF6\u6750\u6599:
! RocketComponentConfig
RocketCompCfg.lbl.Componentname = \u7EC4\u4EF6\u540D\u79F0:
RocketCompCfg.lbl.Diameter = \u76F4\u5F84:
@@ -914,13 +913,13 @@ RocketCompCfg.lbl.Figurestyle = \u6837\u5F0F:
RocketCompCfg.lbl.Length = \u957F\u5EA6:
RocketCompCfg.lbl.Mass = \u8D28\u91CF:
RocketCompCfg.lbl.Thickness = \u539A\u5EA6:
-RocketCompCfg.lbl.longA1 = \u8868\u9762\u5904\u7406\u5C06\u4F1A\u5F71\u54CD\u5230\u7EC4\u4EF6\u7684\u7A7A\u6C14\u52A8\u529B.
-RocketCompCfg.lbl.longA2 = \u8BE5\u6570\u503C\u4E3A\u5E73\u5747\u8868\u9762\u7C97\u7CD9\u5EA6.
+MaterialPanel.lbl.ComponentFinish.ttip.longA1 = \u8868\u9762\u5904\u7406\u5C06\u4F1A\u5F71\u54CD\u5230\u7EC4\u4EF6\u7684\u7A7A\u6C14\u52A8\u529B.
+MaterialPanel.lbl.ComponentFinish.ttip.longA2 = \u8BE5\u6570\u503C\u4E3A\u5E73\u5747\u8868\u9762\u7C97\u7CD9\u5EA6.
RocketCompCfg.lbl.longB1 = \u8986\u5199\u8D28\u91CF\u4E0D\u5305\u62EC\u53D1\u52A8\u673A.
RocketCompCfg.lbl.longB2 = \u91CD\u5FC3\u4ECE\u5934\u90E8\u5F00\u59CB\u8BA1\u7B97
RocketCompCfg.lbl.overriddenby = (\u88AB\u8986\u5199
RocketCompCfg.lbl.overriddento = (\u8986\u5199\u5230
-RocketCompCfg.lbl.ttip.componentmaterialaffects = \u7EC4\u4EF6\u6750\u6599\u5C06\u4F1A\u5F71\u54CD\u5230\u7EC4\u4EF6\u91CD\u91CF.
+MaterialPanel.lbl.ttip.ComponentMaterialAffects = \u7EC4\u4EF6\u6750\u6599\u5C06\u4F1A\u5F71\u54CD\u5230\u7EC4\u4EF6\u91CD\u91CF.
RocketCompCfg.tab.Appearance = \u5916\u89C2
RocketCompCfg.tab.Comment = \u6CE8\u91CA
RocketCompCfg.tab.Figstyleopt = \u6837\u5F0F\u9009\u9879
@@ -1274,15 +1273,15 @@ TrapezoidFinSetCfg.lbl.Finrotation = \u7A33\u5B9A\u7FFC\u65CB\u89D2:
TrapezoidFinSetCfg.lbl.Height = \u9AD8\u5EA6:
! TrapezoidFinSetConfig
TrapezoidFinSetCfg.lbl.Nbroffins = \u7A33\u5B9A\u7FFC\u6570\u91CF:
-TrapezoidFinSetCfg.lbl.Posrelativeto = \u76F8\u5BF9\u4F4D\u7F6E:
+PlacementPanel.lbl.PosRelativeTo = \u76F8\u5BF9\u4F4D\u7F6E:
TrapezoidFinSetCfg.lbl.Rootchord = \u7FFC\u6839\u5F26:
TrapezoidFinSetCfg.lbl.Sweepangle = \u540E\u63A0\u89D2:
TrapezoidFinSetCfg.lbl.Sweeplength = \u540E\u63A0\u957F\u5EA6:
TrapezoidFinSetCfg.lbl.Thickness = \u539A\u5EA6:
TrapezoidFinSetCfg.lbl.Tipchord = \u7FFC\u68A2\u5F26:
-TrapezoidFinSetCfg.lbl.plus = \u52A0
+PlacementPanel.lbl.plus = \u52A0
TrapezoidFinSetCfg.lbl.ttip.Fincant = \u7A33\u5B9A\u7FFC\u7FFC\u9762\u4E0E\u7BAD\u4F53\u4E4B\u95F4\u7684\u5939\u89D2.
-TrapezoidFinSetCfg.lbl.ttip.Finrotation = \u7A33\u5B9A\u7FFC\u7EC4\u5408\u91CC\u7B2C\u4E00\u7247\u7684\u89D2\u5EA6
+FinSetCfg.lbl.FinRotation.ttip = \u7A33\u5B9A\u7FFC\u7EC4\u5408\u91CC\u7B2C\u4E00\u7247\u7684\u89D2\u5EA6
TrapezoidFinSetCfg.lbl.ttip.Nbroffins = \u68AF\u5F62\u7A33\u5B9A\u7FFC\u7684\u6570\u91CF.
TrapezoidFinSetCfg.tab.General = \u5E38\u89C4
TrapezoidFinSetCfg.tab.Generalproperties = \u5E38\u89C4\u5C5E\u6027
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/AxialStageConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/AxialStageConfig.java
index 26b910c31..8e3cbcb40 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/AxialStageConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/AxialStageConfig.java
@@ -66,7 +66,7 @@ public class AxialStageConfig extends ComponentAssemblyConfig {
DoubleModel dm = new DoubleModel( sepConfig, "SeparationDelay", 0);
JSpinner spin = new JSpinner(dm.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
- panel.add(spin, "width 45lp");
+ panel.add(spin, "width 65lp");
order.add(((SpinnerEditor)spin.getEditor()).getTextField());
//// seconds
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java
index 128bde727..2aaa97dea 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java
@@ -107,7 +107,7 @@ public class BodyTubeConfig extends RocketComponentConfig {
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
- panel.add(materialPanel, "cell 4 0, gapleft paragraph, aligny 0%, spany");
+ panel.add(materialPanel, "cell 4 0, gapleft 40lp, aligny 0%, spany");
//// General and General properties
tabbedPane.insertTab(trans.get("BodyTubecfg.tab.General"), null, panel,
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/ComponentAssemblyConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/ComponentAssemblyConfig.java
index 85d7c5eee..0002f2295 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/ComponentAssemblyConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/ComponentAssemblyConfig.java
@@ -104,39 +104,11 @@ public class ComponentAssemblyConfig extends RocketComponentConfig {
IntegerModel countModel = new IntegerModel( boosters, "InstanceCount", 1);
JSpinner countSpinner = new JSpinner(countModel.getSpinnerModel());
countSpinner.setEditor(new SpinnerEditor(countSpinner));
- motherPanel.add(countSpinner, "wmin 65lp, growx 1, wrap 10lp");
+ motherPanel.add(countSpinner, "wmin 65lp, growx 1, wrap 30lp");
order.add(((SpinnerEditor) countSpinner.getEditor()).getTextField());
- // setPositions relative to parent component
- JLabel positionLabel = new JLabel(trans.get("LaunchLugCfg.lbl.Posrelativeto"));
- motherPanel.add( positionLabel);
-
- ComboBoxModel axialPositionMethodModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- JComboBox> positionMethodCombo = new JComboBox( axialPositionMethodModel );
- motherPanel.add(positionMethodCombo, "spanx 3, wrap");
- order.add(positionMethodCombo);
-
- // plus
- motherPanel.add(new JLabel(trans.get("StageConfig.parallel.plus")), "right");
-
- final DoubleModel axialOffsetModel = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- final JSpinner axialOffsetSpinner = new JSpinner(axialOffsetModel.getSpinnerModel());
- axialOffsetSpinner.setEditor(new SpinnerEditor(axialOffsetSpinner));
- motherPanel.add(axialOffsetSpinner, "wmin 65lp, growx 1");
- order.add(((SpinnerEditor) axialOffsetSpinner.getEditor()).getTextField());
-
- positionMethodCombo.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- axialOffsetModel.stateChanged(new EventObject(e));
- }
- });
-
- motherPanel.add(new UnitSelector(axialOffsetModel));
- motherPanel.add(new BasicSlider(axialOffsetModel.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "gapleft para, growx 2, wrap");
+ // Position relative to
+ motherPanel.add(new PlacementPanel(component, order), "span, grow, wrap");
return motherPanel;
}
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/EllipticalFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/EllipticalFinSetConfig.java
index bb6755414..78eea8f62 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/EllipticalFinSetConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/EllipticalFinSetConfig.java
@@ -1,9 +1,6 @@
package net.sf.openrocket.gui.configdialog;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.EventObject;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
@@ -25,7 +22,6 @@ import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.rocketcomponent.FinSet;
import net.sf.openrocket.rocketcomponent.RocketComponent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
@@ -41,8 +37,8 @@ public class EllipticalFinSetConfig extends FinSetConfig {
JPanel mainPanel = new JPanel(new MigLayout());
-
- JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
+ // Left side
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
//// Number of fins
panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Nbroffins")));
@@ -54,21 +50,6 @@ public class EllipticalFinSetConfig extends FinSetConfig {
panel.add(spin, "growx, wrap");
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- //// Base rotation
- panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Rotation")));
-
- m = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
-
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 150lp, wrap");
-
-
//// Fin cant
JLabel label = new JLabel(trans.get("EllipticalFinSetCfg.Fincant"));
//// "The angle that the fins are canted with respect to the rocket
@@ -85,7 +66,7 @@ public class EllipticalFinSetConfig extends FinSetConfig {
panel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(-FinSet.MAX_CANT_RADIANS, FinSet.MAX_CANT_RADIANS)),
- "w 150lp, wrap");
+ "w 100lp, wrap");
@@ -100,7 +81,7 @@ public class EllipticalFinSetConfig extends FinSetConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 150lp, wrap");
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
//// Height
@@ -114,84 +95,70 @@ public class EllipticalFinSetConfig extends FinSetConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 150lp, wrap");
-
-
- //// Position
- //// Position relative to:
- panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Positionrelativeto")));
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap 30lp");
- final EnumModel axialMethodModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- final JComboBox axialMethodCombo = new JComboBox( axialMethodModel );
- panel.add(axialMethodCombo, "spanx, growx, wrap");
- order.add(axialMethodCombo);
-
- //// plus
- panel.add(new JLabel(trans.get("EllipticalFinSetCfg.plus")), "right");
-
- final DoubleModel axialOffsetModel = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- spin = new JSpinner(axialOffsetModel.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- axialMethodCombo.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- axialOffsetModel.stateChanged(new EventObject(e));
- }
- });
-
- panel.add(new UnitSelector(axialOffsetModel), "growx");
- panel.add(new BasicSlider(axialOffsetModel.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 150lp, wrap");
-
-
- //// Right portion
- mainPanel.add(panel, "aligny 0");
-
- mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy");
-
-
-
- panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
-
-
//// Cross section
- //// Fin cross section:
- panel.add(new JLabel(trans.get("EllipticalFinSetCfg.FincrossSection")), "span, split");
- JComboBox sectionCombo = new JComboBox(
- new EnumModel(component, "CrossSection"));
- panel.add( sectionCombo, "growx, wrap unrel");
- order.add(sectionCombo);
-
- //// Thickness:
- panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Thickness")));
-
- m = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0);
-
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 150lp, wrap 30lp");
-
-
+ {//// Fin cross section:
+ panel.add(new JLabel(trans.get("EllipticalFinSetCfg.FincrossSection")), "span, split");
+ JComboBox sectionCombo = new JComboBox(
+ new EnumModel(component, "CrossSection"));
+ panel.add(sectionCombo, "growx, wrap unrel");
+ order.add(sectionCombo);
+ }
+
+ {//// Thickness:
+ panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Thickness")));
+
+ m = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0);
+
+ spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ panel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+
+ panel.add(new UnitSelector(m), "growx");
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap 30lp");
+ }
+
+ mainPanel.add(panel, "aligny 0, gapright 50lp");
+
+ // Separator
+ //mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 20lp 20lp");
+ // Right side panel
+ panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
+
+ //// Root fillets
+ panel.add(filletMaterialPanel(), "span, grow, wrap");
+
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
- panel.add(materialPanel, "span, wrap");
+ panel.add(materialPanel, "span, grow, wrap");
- panel.add(filletMaterialPanel(), "span, wrap");
-
+
+ {// ------ Placement ------
+ //// Position relative to:
+ JPanel placementPanel = new PlacementPanel(component, order);
+ panel.add(placementPanel, "span, grow");
+
+ {//// Fin rotation
+ label = new JLabel(trans.get("FinSetCfg.lbl.FinRotation"));
+ label.setToolTipText(trans.get("FinSetCfg.lbl.FinRotation.ttip"));
+ placementPanel.add(label, "newline");
+
+ m = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
+
+ spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+
+ placementPanel.add(new UnitSelector(m), "growx");
+ placementPanel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
+ }
+ }
-
-
- mainPanel.add(panel, "aligny 20%");
+ mainPanel.add(panel, "aligny 0");
addFinSetButtons();
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java
index 3a061017b..42e231cd8 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java
@@ -148,7 +148,7 @@ public abstract class FinSetConfig extends RocketComponentConfig {
private JPanel finTabPanel() {
JPanel panel = new JPanel(
new MigLayout("gap rel unrel, ins 25lp",
- "[150lp::][65lp::][30lp::][200lp::]", ""));
+ "[100lp::][65lp::][30lp::][200lp::]", ""));
// JPanel panel = new JPanel(new MigLayout("fillx, align 20% 20%, gap rel unrel",
// "[40lp][80lp::][30lp::][100lp::]",""));
@@ -565,22 +565,22 @@ public abstract class FinSetConfig extends RocketComponentConfig {
UnitSelector us = new UnitSelector(m);
filletPanel.add(us, "growx");
us.setToolTipText(tip);
- BasicSlider bs =new BasicSlider(m.getSliderModel(0, 10));
- filletPanel.add(bs, "w 150lp, wrap para");
+ BasicSlider bs = new BasicSlider(m.getSliderModel(0, 0.1));
+ filletPanel.add(bs, "w 100lp, wrap para");
bs.setToolTipText(tip);
// Fillet Material:
JLabel label = new JLabel(trans.get("FinSetConfig.lbl.Finfilletmaterial"));
label.setToolTipText(tip);
//// The component material affects the weight of the component.
- label.setToolTipText(trans.get("RocketCompCfg.lbl.ttip.componentmaterialaffects"));
+ label.setToolTipText(trans.get("MaterialPanel.lbl.ttip.ComponentMaterialAffects"));
filletPanel.add(label, "spanx 4, wrap rel");
JComboBox materialCombo = new JComboBox(new MaterialModel(filletPanel, component, Material.Type.BULK, "FilletMaterial"));
//// The component material affects the weight of the component.
- materialCombo.setToolTipText(trans.get("RocketCompCfg.combo.ttip.componentmaterialaffects"));
- filletPanel.add( materialCombo, "spanx 4, growx, wrap paragraph");
+ materialCombo.setToolTipText(trans.get("MaterialPanel.combo.ttip.ComponentMaterialAffects"));
+ filletPanel.add( materialCombo, "spanx 4, growx");
order.add(materialCombo);
filletPanel.setToolTipText(tip);
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java
index efb0ffd89..567a176e7 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java
@@ -16,7 +16,6 @@ import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
-import java.util.EventObject;
import java.util.List;
import javax.swing.AbstractAction;
@@ -69,7 +68,6 @@ import net.sf.openrocket.rocketcomponent.FinSet;
import net.sf.openrocket.rocketcomponent.FreeformFinSet;
import net.sf.openrocket.rocketcomponent.IllegalFinPointException;
import net.sf.openrocket.rocketcomponent.RocketComponent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.Coordinate;
@@ -117,9 +115,9 @@ public class FreeformFinSetConfig extends FinSetConfig {
private JPanel generalPane() {
- JPanel mainPanel = new JPanel(new MigLayout("fill"));
+ JPanel mainPanel = new JPanel(new MigLayout());
- JPanel panel = new JPanel(new MigLayout("fill, gap rel unrel", "[][65lp::][30lp::]", ""));
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
{ //// Number of fins:
panel.add(new JLabel(trans.get("FreeformFinSetCfg.lbl.Numberoffins")));
@@ -132,21 +130,6 @@ public class FreeformFinSetConfig extends FinSetConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
}
- { //// Base rotation
- panel.add(new JLabel(trans.get("FreeformFinSetCfg.lbl.Finrotation")));
-
- DoubleModel m = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
-
- JSpinner spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 150lp, wrap");
- }
-
-
{ //// Fin cant
JLabel label = new JLabel(trans.get("FreeformFinSetCfg.lbl.Fincant"));
//// The angle that the fins are canted with respect to the rocket body.
@@ -161,47 +144,9 @@ public class FreeformFinSetConfig extends FinSetConfig {
order.add(((SpinnerEditor) cantAngleSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(cantAngleModel), "growx");
- panel.add(new BasicSlider(cantAngleModel.getSliderModel(-FinSet.MAX_CANT_RADIANS, FinSet.MAX_CANT_RADIANS)), "w 150lp, wrap 20lp");
+ panel.add(new BasicSlider(cantAngleModel.getSliderModel(-FinSet.MAX_CANT_RADIANS, FinSet.MAX_CANT_RADIANS)), "w 100lp, wrap 30lp");
}
-
- { //// Position
- //// Position relative to:
- panel.add(new JLabel(trans.get("FreeformFinSetCfg.lbl.Posrelativeto")));
-
-
- final EnumModel axialMethodModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods);
- final JComboBox axialMethodCombo = new JComboBox(axialMethodModel);
- panel.add(axialMethodCombo, "spanx 3, growx, wrap");
- order.add(axialMethodCombo);
-
- //// plus
- panel.add(new JLabel(trans.get("FreeformFinSetCfg.lbl.plus")), "right");
-
- final DoubleModel axialOffsetModel = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- final JSpinner axialOffsetSpinner = new JSpinner(axialOffsetModel.getSpinnerModel());
- axialOffsetSpinner.setEditor(new SpinnerEditor(axialOffsetSpinner));
- panel.add(axialOffsetSpinner, "growx");
- order.add(((SpinnerEditor) axialOffsetSpinner.getEditor()).getTextField());
-
- panel.add(new UnitSelector(axialOffsetModel), "growx");
- panel.add(new BasicSlider(axialOffsetModel.getSliderModel(new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE), new DoubleModel(component.getParent(), "Length"))), "w 150lp, wrap");
-
- axialMethodCombo.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- axialOffsetModel.stateChanged(new EventObject(e));
- }
- });
- }
-
- mainPanel.add(panel, "aligny 0");
- mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy, height 150lp");
-
-
- panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
-
-
{ //// Cross section
//// Fin cross section:
panel.add(new JLabel(trans.get("FreeformFinSetCfg.lbl.FincrossSection")), "span, split");
@@ -221,17 +166,50 @@ public class FreeformFinSetConfig extends FinSetConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 150lp, wrap 30lp");
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap 30lp");
+ }
+
+ mainPanel.add(panel, "aligny 0, gapright 50lp");
+
+ // Separator
+ //mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 20lp 20lp");
+
+
+ // Right side panel
+ panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
+
+ { //// Root fillets
+ panel.add(filletMaterialPanel(), "span, grow, wrap");
}
{ //// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
- panel.add(materialPanel, "span, wrap");
+ panel.add(materialPanel, "span, grow, wrap");
+ }
- panel.add(filletMaterialPanel(), "span, wrap");
+ {//// -------- Placement ------
+ //// Position relative to:
+ JPanel placementPanel = new PlacementPanel(component, order);
+ panel.add(placementPanel, "span, grow");
+
+ {//// Fin rotation
+ JLabel label = new JLabel(trans.get("FinSetCfg.lbl.FinRotation"));
+ label.setToolTipText(trans.get("FinSetCfg.lbl.FinRotation.ttip"));
+ placementPanel.add(label, "newline");
+
+ DoubleModel m = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
+
+ JSpinner spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+
+ placementPanel.add(new UnitSelector(m), "growx");
+ placementPanel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
+ }
}
- mainPanel.add(panel, "aligny 20%");
+ mainPanel.add(panel, "aligny 0");
return mainPanel;
}
@@ -411,7 +389,7 @@ public class FreeformFinSetConfig extends FinSetConfig {
chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
JPanel desc = new JPanel(new MigLayout("fill, ins 0 para 0 para"));
- desc.add(new DescriptionArea(trans.get("CustomFinImport.description"), 5, 0), "grow, wmin 150lp");
+ desc.add(new DescriptionArea(trans.get("CustomFinImport.description"), 5, 0), "grow, wmin 100lp");
chooser.setAccessory(desc);
int option = chooser.showOpenDialog(this);
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java
index cad3561b9..833e1ee74 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java
@@ -19,12 +19,13 @@ import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JSeparator;
import javax.swing.JSpinner;
+import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.BevelBorder;
@@ -34,7 +35,6 @@ import net.sf.openrocket.gui.Resettable;
import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.CustomFocusTraversalPolicy;
import net.sf.openrocket.gui.adaptors.DoubleModel;
-import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.DescriptionArea;
import net.sf.openrocket.gui.components.UnitSelector;
@@ -47,7 +47,6 @@ import net.sf.openrocket.rocketcomponent.InnerTube;
import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.RingComponent;
import net.sf.openrocket.rocketcomponent.RocketComponent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.BugException;
@@ -63,12 +62,14 @@ public class InnerTubeConfig extends RocketComponentConfig {
public InnerTubeConfig(OpenRocketDocument d, RocketComponent c, JDialog parent) {
super(d, c, parent);
- //// General and General properties
- JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][15lp]", ""));
+ JPanel mainPanel = new JPanel(new MigLayout());
+
+ //// Left panel
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]"));
DoubleModel m;
JSpinner spin;
- DoubleModel od = null;
+ DoubleModel od;
//// ---------------------------- Attributes ----------------------------
@@ -77,7 +78,6 @@ public class InnerTubeConfig extends RocketComponentConfig {
//// OuterRadius
od = new DoubleModel(component, "OuterRadius", 2, UnitGroup.UNITS_LENGTH, 0);
- // Diameter = 2*Radius
spin = new JSpinner(od.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
@@ -85,7 +85,7 @@ public class InnerTubeConfig extends RocketComponentConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(od), "growx");
- panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "growx, wrap");
+ panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap");
if (od.isAutomaticAvailable()) {
JCheckBox check = new JCheckBox(od.getAutomaticAction());
@@ -106,7 +106,7 @@ public class InnerTubeConfig extends RocketComponentConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(new DoubleModel(0), od)), "growx, wrap");
+ panel.add(new BasicSlider(m.getSliderModel(new DoubleModel(0), od)), "w 100lp, wrap");
if (m.isAutomaticAvailable()) {
JCheckBox check = new JCheckBox(m.getAutomaticAction());
@@ -128,7 +128,7 @@ public class InnerTubeConfig extends RocketComponentConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "growx, wrap");
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap");
//// Inner tube length
@@ -144,46 +144,26 @@ public class InnerTubeConfig extends RocketComponentConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "growx, wrap");
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "w 100lp, wrap");
+
+ mainPanel.add(panel, "aligny 0, gapright 40lp");
+
+ // Separator
+ //mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 10lp 10lp");
+
+ //// Right side of panel ----
+ panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]"));
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
- panel.add(materialPanel, "spanx 4, growx, wrap 15lp");
-
-
- //// Right side of panel ----
- JPanel panel2 = new JPanel(new MigLayout("gap rel unrel, insets 0", "[][65lp::][30lp::][15lp]", ""));
- panel.add(panel2, "cell 4 0, gapleft 15lp, aligny 0%, spany");
+ panel.add(materialPanel, "span, grow, wrap");
//// ---------------------------- Placement ----------------------------
+ panel.add(new PlacementPanel(component, order), "span, grow");
- //// Position relative to:
- panel2.add(new JLabel(trans.get("ringcompcfg.Positionrelativeto")));
+ mainPanel.add(panel, "aligny 0");
- JComboBox> combo = new JComboBox( new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods ));
- panel2.add(combo, "spanx 3, growx, wrap");
- order.add(combo);
-
- //// plus
- panel2.add(new JLabel(trans.get("ringcompcfg.plus")), "right");
-
- //// PositionValue
- m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel2.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel2.add(new UnitSelector(m), "growx");
- panel2.add(new BasicSlider(m.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "growx, wrap");
-
-
-
-
- tabbedPane.insertTab(trans.get("ThicknessRingCompCfg.tab.General"), null, panel,
+ tabbedPane.insertTab(trans.get("ThicknessRingCompCfg.tab.General"), null, mainPanel,
trans.get("ThicknessRingCompCfg.tab.Generalprop"), 0);
MotorConfig motorConfig = new MotorConfig((MotorMount)c, order);
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java
index 777cd17ca..ae593e646 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java
@@ -1,30 +1,26 @@
package net.sf.openrocket.gui.configdialog;
-import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JSeparator;
import javax.swing.JSpinner;
+import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.CustomFocusTraversalPolicy;
import net.sf.openrocket.gui.adaptors.DoubleModel;
-import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.rocketcomponent.RocketComponent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
@SuppressWarnings("serial")
public class LaunchLugConfig extends RocketComponentConfig {
@@ -33,10 +29,10 @@ public class LaunchLugConfig extends RocketComponentConfig {
public LaunchLugConfig(OpenRocketDocument d, RocketComponent c, JDialog parent) {
super(d, c, parent);
- JPanel primary = new JPanel(new MigLayout("fill"));
+ JPanel primary = new JPanel(new MigLayout());
- JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]", ""));
//// Body tube length
//// Length:
@@ -98,62 +94,39 @@ public class LaunchLugConfig extends RocketComponentConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap 20lp");
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap");
-
- //// Radial position:
- panel.add(new JLabel(trans.get("LaunchLugCfg.lbl.Angle")));
-
- m = new DoubleModel(component, "AngleOffset", UnitGroup.UNITS_ANGLE, -180, 180);
-
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI) ), "w 100lp, wrap");
-
- // finish up the left column
- primary.add(panel, "grow, gapright 20lp");
-
- // create a new panel for the right column
- panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
+ primary.add(panel, "grow, gapright 40lp");
- //// Position relative to:
- panel.add(new JLabel(trans.get("LaunchLugCfg.lbl.Posrelativeto")));
- EnumModel positionModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- JComboBox positionCombo = new JComboBox( positionModel );
- panel.add(positionCombo, "spanx, growx, wrap");
- order.add(positionCombo);
-
- //// plus
- final DoubleModel mAxOff = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- panel.add(new JLabel(trans.get("LaunchLugCfg.lbl.plus")), "right");
- spin = new JSpinner(mAxOff.getSpinnerModel()); // Plus quantity input
- spin.setEditor(new SpinnerEditor(spin));
- panel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel.add(new UnitSelector(mAxOff), "growx"); // Unity selection
- panel.add(new BasicSlider(mAxOff.getSliderModel( // Plus quantity slider
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 100lp, wrap para");
+ // Separator
+ //primary.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 20lp 20lp");
+
+ // Right panel
+ panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]", ""));
- // Add an action listener to update the plus quantity, based on the selected reference point
- positionCombo.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- mAxOff.stateChanged(e);
- }
- });
-
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
- panel.add(materialPanel, "span, wrap");
-
-
+ panel.add(materialPanel, "span, grow, wrap");
+
+ {//// Placement
+ //// Position relative to:
+ JPanel placementPanel = new PlacementPanel(component, order);
+ panel.add(placementPanel, "span, grow, wrap");
+
+ //// Rotation:
+ placementPanel.add(new JLabel(trans.get("LaunchLugCfg.lbl.Angle")), "newline");
+
+ m = new DoubleModel(component, "AngleOffset", UnitGroup.UNITS_ANGLE, -Math.PI, Math.PI);
+
+ spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+
+ placementPanel.add(new UnitSelector(m), "growx");
+ placementPanel.add(new BasicSlider(m.getSliderModel()), "w 100lp, wrap");
+ }
+
primary.add(panel, "grow");
//// General and General properties
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/MassComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/MassComponentConfig.java
index f41d9747d..ae8413ba6 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/MassComponentConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/MassComponentConfig.java
@@ -22,7 +22,6 @@ import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.MassComponent;
import net.sf.openrocket.rocketcomponent.RocketComponent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.gui.widgets.SelectColorButton;
@@ -126,32 +125,12 @@ public class MassComponentConfig extends RocketComponentConfig {
//// Right side
JPanel panel2 = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
- panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany");
+ panel.add(panel2, "cell 4 0, gapleft 40lp, aligny 0%, spany");
// Placement
- //// Position relative to:
- panel2.add(new JLabel(trans.get("MassComponentCfg.lbl.PosRelativeto")));
-
- final EnumModel methodModel = new EnumModel<>(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- final JComboBox> methodCombo = new JComboBox<>( methodModel );
- panel2.add(methodCombo, "spanx, growx, wrap");
- order.add(methodCombo);
-
- //// plus
- panel2.add(new JLabel(trans.get("MassComponentCfg.lbl.plus")), "right");
-
- m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel2.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel2.add(new UnitSelector(m), "growx");
- panel2.add(new BasicSlider(m.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 100lp, wrap");
+ //// Position
+ panel2.add(new PlacementPanel(component, order), "span, grow, wrap");
//// General and General properties
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/MaterialPanel.java b/swing/src/net/sf/openrocket/gui/configdialog/MaterialPanel.java
index e5cd60c61..58ac53ba3 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/MaterialPanel.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/MaterialPanel.java
@@ -11,11 +11,13 @@ import net.sf.openrocket.rocketcomponent.ExternalComponent;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.startup.Application;
+import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
-import java.awt.*;
+import javax.swing.border.EmptyBorder;
+import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
@@ -30,71 +32,76 @@ public class MaterialPanel extends JPanel {
public MaterialPanel(RocketComponent component, OpenRocketDocument document,
Material.Type type, String materialString, String finishString,
String partName, List order) {
- super(new MigLayout("insets 0"));
+ super(new MigLayout(component instanceof ExternalComponent ? "" : "ins 0"));
+ if (component instanceof ExternalComponent) {
+ this.setBorder(BorderFactory.createTitledBorder(trans.get("MaterialPanel.title.Material")));
+ }
+
JLabel label = new JLabel(materialString);
//// The component material affects the weight of the component.
- label.setToolTipText(trans.get("RocketCompCfg.lbl.ttip.componentmaterialaffects"));
+ label.setToolTipText(trans.get("MaterialPanel.lbl.ttip.ComponentMaterialAffects"));
this.add(label, "spanx 4, wrap rel");
JComboBox materialCombo = new JComboBox<>(new MaterialModel(this, component, type, partName));
//// The component material affects the weight of the component.
- materialCombo.setToolTipText(trans.get("RocketCompCfg.combo.ttip.componentmaterialaffects"));
+ materialCombo.setToolTipText(trans.get("MaterialPanel.combo.ttip.ComponentMaterialAffects"));
this.add(materialCombo, "spanx 4, growx, wrap paragraph");
order.add(materialCombo);
- if (component instanceof ExternalComponent) {
- label = new JLabel(finishString);
- ////The component finish affects the aerodynamic drag of the component.
- String tip = trans.get("RocketCompCfg.lbl.longA1")
- //// The value indicated is the average roughness height of the surface.
- + trans.get("RocketCompCfg.lbl.longA2");
- label.setToolTipText(tip);
- this.add(label, "spanx 4, wmin 220lp, wrap rel");
-
- JComboBox finishCombo = new JComboBox(
- new EnumModel(component, "Finish"));
- finishCombo.setToolTipText(tip);
- this.add(finishCombo, "spanx 4, growx, split");
- order.add(finishCombo);
-
- //// Set for all
- JButton button = new SelectColorButton(trans.get("RocketCompCfg.but.Setforall"));
- //// Set this finish for all components of the rocket.
- button.setToolTipText(trans.get("RocketCompCfg.but.ttip.Setforall"));
- button.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- ExternalComponent.Finish f = ((ExternalComponent) component).getFinish();
- try {
- document.startUndo("Set rocket finish");
-
- // Do changes
- Iterator iter = component.getRoot().iterator();
- while (iter.hasNext()) {
- RocketComponent c = iter.next();
- if (c instanceof ExternalComponent) {
- ((ExternalComponent) c).setFinish(f);
- }
- }
- } finally {
- document.stopUndo();
- }
- }
- });
- this.add(button, "wrap paragraph");
- order.add(button);
+ if (!(component instanceof ExternalComponent)) {
+ return;
}
+ label = new JLabel(finishString);
+ ////The component finish affects the aerodynamic drag of the component.
+ String tip = trans.get("MaterialPanel.lbl.ComponentFinish.ttip.longA1")
+ //// The value indicated is the average roughness height of the surface.
+ + trans.get("MaterialPanel.lbl.ComponentFinish.ttip.longA2");
+ label.setToolTipText(tip);
+ this.add(label, "spanx 4, wmin 220lp, wrap rel");
+
+ JComboBox finishCombo = new JComboBox(
+ new EnumModel<>(component, "Finish"));
+ finishCombo.setToolTipText(tip);
+ this.add(finishCombo, "spanx 4, growx, split");
+ order.add(finishCombo);
+
+ //// Set for all
+ JButton button = new SelectColorButton(trans.get("MaterialPanel.but.SetForAll"));
+ //// Set this finish for all components of the rocket.
+ button.setToolTipText(trans.get("MaterialPanel.but.SetForAll.ttip"));
+ button.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ ExternalComponent.Finish f = ((ExternalComponent) component).getFinish();
+ try {
+ document.startUndo("Set rocket finish");
+
+ // Do changes
+ Iterator iter = component.getRoot().iterator();
+ while (iter.hasNext()) {
+ RocketComponent c = iter.next();
+ if (c instanceof ExternalComponent) {
+ ((ExternalComponent) c).setFinish(f);
+ }
+ }
+ } finally {
+ document.stopUndo();
+ }
+ }
+ });
+ this.add(button);
+ order.add(button);
}
public MaterialPanel(RocketComponent component, OpenRocketDocument document,
Material.Type type, String partName, List order) {
- this(component, document, type, trans.get("RocketCompCfg.lbl.Componentmaterial"),
- trans.get("RocketCompCfg.lbl.Componentfinish"), partName, order);
+ this(component, document, type, trans.get("MaterialPanel.lbl.ComponentMaterial"),
+ trans.get("MaterialPanel.lbl.ComponentFinish"), partName, order);
}
public MaterialPanel(RocketComponent component, OpenRocketDocument document,
Material.Type type, List order) {
- this(component, document, type, trans.get("RocketCompCfg.lbl.Componentmaterial"),
- trans.get("RocketCompCfg.lbl.Componentfinish"), "Material", order);
+ this(component, document, type, trans.get("MaterialPanel.lbl.ComponentMaterial"),
+ trans.get("MaterialPanel.lbl.ComponentFinish"), "Material", order);
}
}
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java
index 558dfd49b..4c6842e77 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java
@@ -176,7 +176,7 @@ public class NoseConeConfig extends RocketComponentConfig {
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
panel2.add(materialPanel, "span, wrap");
- panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany");
+ panel.add(panel2, "cell 4 0, gapleft 40lp, aligny 0%, spany");
//// General and General properties
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java
index 6d5c0596d..df27a48e8 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java
@@ -14,7 +14,9 @@ import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JSeparator;
import javax.swing.JSpinner;
+import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.document.OpenRocketDocument;
@@ -23,7 +25,6 @@ import net.sf.openrocket.gui.adaptors.*;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.HtmlLabel;
import net.sf.openrocket.gui.components.StyledLabel;
-import net.sf.openrocket.gui.components.StyledLabel.Style;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.gui.widgets.SelectColorButton;
import net.sf.openrocket.l10n.Translator;
@@ -32,7 +33,6 @@ import net.sf.openrocket.rocketcomponent.DeploymentConfiguration;
import net.sf.openrocket.rocketcomponent.DeploymentConfiguration.DeployEvent;
import net.sf.openrocket.rocketcomponent.Parachute;
import net.sf.openrocket.rocketcomponent.RocketComponent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
@@ -47,7 +47,7 @@ public class ParachuteConfig extends RecoveryDeviceConfig {
// Left Side
JPanel primary = new JPanel(new MigLayout());
- JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]", ""));
// ---------------------------- Canopy ----------------------------
JPanel canopyPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
@@ -156,141 +156,117 @@ public class ParachuteConfig extends RecoveryDeviceConfig {
order.add(shroudMaterialCombo);
panel.add(shroudPanel, "spanx, wrap");
- primary.add(panel, "grow");
+ primary.add(panel, "grow, gapright 20lp");
+
+ // Separator
+ //primary.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 10lp 10lp");
// Right side
- panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
+ panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]", ""));
- // ---------------------------- Placement ----------------------------
- JPanel placementPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
- placementPanel.setBorder(BorderFactory.createTitledBorder(trans.get("ParachuteCfg.lbl.Placement")));
+ {// ---------------------------- Placement ----------------------------
+ //// Position relative to:
+ JPanel placementPanel = new PlacementPanel(component, order);
+ panel.add(placementPanel, "span, grow, wrap");
- //// Position relative to:
- placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Posrelativeto")));
-
- final EnumModel methodModel =
- new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- JComboBox positionCombo = new JComboBox( methodModel );
- placementPanel.add( positionCombo, "spanx, growx, wrap");
- order.add(positionCombo);
-
- //// plus
- placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.plus")), "right");
-
- m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- focusElement = spin;
- placementPanel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+ //// Packed length:
+ placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Packedlength")), "newline");
- placementPanel.add(new UnitSelector(m), "growx");
- placementPanel.add(new BasicSlider(m.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 150lp, wrap");
-
- //// Spatial length
- //// Packed length:
- placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Packedlength")));
-
- m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
-
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- placementPanel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+ m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
- placementPanel.add(new UnitSelector(m), "growx");
- placementPanel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 150lp, wrap");
-
-
- //// Tube diameter
- //// Packed diameter:
- placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Packeddiam")));
-
- final DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
- // Diameter = 2*Radius
-
- spin = new JSpinner(od.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- placementPanel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+ spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
- placementPanel.add(new UnitSelector(od), "growx");
- placementPanel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 150lp, wrap");
-
- ////// Automatic
- JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction());
- checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked"));
- checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip"));
- placementPanel.add(checkAutoPackedRadius, "skip, span 2, wrap");
- order.add(checkAutoPackedRadius);
-
- panel.add(placementPanel, "spanx, growx, wrap");
+ placementPanel.add(new UnitSelector(m), "growx");
+ placementPanel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 100lp, wrap");
- // ---------------------------- Deployment ----------------------------
- JPanel deploymentPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
- deploymentPanel.setBorder(BorderFactory.createTitledBorder(trans.get("ParachuteCfg.lbl.Deployment")));
+ //// Packed diameter:
+ placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Packeddiam")));
- //// Deploys at:
- deploymentPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Deploysat") + " " + CommonStrings.dagger), "");
-
- DeploymentConfiguration deploymentConfig = parachute.getDeploymentConfigurations().getDefault();
- // this issues a warning because EnumModel ipmlements ComboBoxModel without a parameter...
- ComboBoxModel deployOptionsModel =
- new EnumModel(deploymentConfig, "DeployEvent");
- JComboBox eventCombo =
- new JComboBox( deployOptionsModel );
- if( (component.getStageNumber() + 1 ) == d.getRocket().getStageCount() ){
- // This is the bottom stage: Restrict deployment options.
- eventCombo.removeItem( DeployEvent.LOWER_STAGE_SEPARATION );
+ final DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
+
+ spin = new JSpinner(od.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+
+ placementPanel.add(new UnitSelector(od), "growx");
+ placementPanel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap");
+
+ ////// Automatic
+ JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction());
+ checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked"));
+ checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip"));
+ placementPanel.add(checkAutoPackedRadius, "skip, spanx 2");
+ order.add(checkAutoPackedRadius);
}
- eventCombo.addItemListener(new ItemListener() {
- @Override
- public void itemStateChanged(ItemEvent e) {
- updateFields();
+
+ {// ---------------------------- Deployment ----------------------------
+ JPanel deploymentPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
+ deploymentPanel.setBorder(BorderFactory.createTitledBorder(trans.get("ParachuteCfg.lbl.Deployment")));
+
+ //// Deploys at:
+ deploymentPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Deploysat") + " " + CommonStrings.dagger), "");
+
+ DeploymentConfiguration deploymentConfig = parachute.getDeploymentConfigurations().getDefault();
+ // this issues a warning because EnumModel ipmlements ComboBoxModel without a parameter...
+ ComboBoxModel deployOptionsModel =
+ new EnumModel(deploymentConfig, "DeployEvent");
+ JComboBox eventCombo =
+ new JComboBox(deployOptionsModel);
+ if ((component.getStageNumber() + 1) == d.getRocket().getStageCount()) {
+ // This is the bottom stage: Restrict deployment options.
+ eventCombo.removeItem(DeployEvent.LOWER_STAGE_SEPARATION);
}
- });
- deploymentPanel.add(eventCombo, "spanx 3, growx, wrap");
- order.add(eventCombo);
-
- // ... and delay
- //// plus
- deploymentPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.plusdelay")), "right");
-
- m = new DoubleModel(deploymentConfig, "DeployDelay", 0);
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin, 3));
- deploymentPanel.add(spin, "spanx, split");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- //// seconds
- deploymentPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.seconds")), "wrap paragraph");
-
- //// Altitude:
- label = new JLabel(trans.get("ParachuteCfg.lbl.Altitude") + CommonStrings.dagger);
- altitudeComponents.add(label);
- deploymentPanel.add(label);
-
- m = new DoubleModel(deploymentConfig, "DeployAltitude", UnitGroup.UNITS_DISTANCE, 0);
-
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- altitudeComponents.add(spin);
- deploymentPanel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
- UnitSelector unit = new UnitSelector(m);
- altitudeComponents.add(unit);
- deploymentPanel.add(unit, "growx");
- BasicSlider slider = new BasicSlider(m.getSliderModel(100, 1000));
- altitudeComponents.add(slider);
- deploymentPanel.add(slider, "w 150lp, wrap");
+ eventCombo.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ updateFields();
+ }
+ });
+ deploymentPanel.add(eventCombo, "spanx 3, growx, wrap");
+ order.add(eventCombo);
- deploymentPanel.add(new StyledLabel(CommonStrings.override_description, -1), "spanx, wrap");
+ // ... and delay
+ //// plus
+ deploymentPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.plusdelay")), "right");
+
+ m = new DoubleModel(deploymentConfig, "DeployDelay", 0);
+ spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin, 3));
+ deploymentPanel.add(spin, "spanx, split");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+
+ //// seconds
+ deploymentPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.seconds")), "wrap paragraph");
+
+ //// Altitude:
+ label = new JLabel(trans.get("ParachuteCfg.lbl.Altitude") + CommonStrings.dagger);
+ altitudeComponents.add(label);
+ deploymentPanel.add(label);
+
+ m = new DoubleModel(deploymentConfig, "DeployAltitude", UnitGroup.UNITS_DISTANCE, 0);
+
+ spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ altitudeComponents.add(spin);
+ deploymentPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+ UnitSelector unit = new UnitSelector(m);
+ altitudeComponents.add(unit);
+ deploymentPanel.add(unit, "growx");
+ BasicSlider slider = new BasicSlider(m.getSliderModel(100, 1000));
+ altitudeComponents.add(slider);
+ deploymentPanel.add(slider, "w 100lp, wrap");
+
+ deploymentPanel.add(new StyledLabel(CommonStrings.override_description, -1), "spanx, wrap");
+
+ panel.add(deploymentPanel, "spanx, growx, wrap para");
+ }
- panel.add(deploymentPanel, "spanx, growx, wrap para");
primary.add(panel, "grow");
updateFields();
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/PlacementPanel.java b/swing/src/net/sf/openrocket/gui/configdialog/PlacementPanel.java
new file mode 100644
index 000000000..7b1eeae30
--- /dev/null
+++ b/swing/src/net/sf/openrocket/gui/configdialog/PlacementPanel.java
@@ -0,0 +1,66 @@
+package net.sf.openrocket.gui.configdialog;
+
+import net.miginfocom.swing.MigLayout;
+import net.sf.openrocket.gui.SpinnerEditor;
+import net.sf.openrocket.gui.adaptors.DoubleModel;
+import net.sf.openrocket.gui.adaptors.EnumModel;
+import net.sf.openrocket.gui.components.BasicSlider;
+import net.sf.openrocket.gui.components.UnitSelector;
+import net.sf.openrocket.l10n.Translator;
+import net.sf.openrocket.rocketcomponent.RocketComponent;
+import net.sf.openrocket.rocketcomponent.position.AxialMethod;
+import net.sf.openrocket.startup.Application;
+import net.sf.openrocket.unit.UnitGroup;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSpinner;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.EventObject;
+import java.util.List;
+
+/**
+ * Panel for configuring a component's placement relative to its parent.
+ */
+public class PlacementPanel extends JPanel {
+ private static final Translator trans = Application.getTranslator();
+
+ public PlacementPanel(RocketComponent component, List order) {
+ super(new MigLayout("gap rel unrel", "[][65lp::][30lp::]"));
+ this.setBorder(BorderFactory.createTitledBorder(trans.get("PlacementPanel.title.Placement")));
+
+ this.add(new JLabel(trans.get("PlacementPanel.lbl.PosRelativeTo")));
+
+ final EnumModel axialMethodModel = new EnumModel<>(component, "AxialMethod", AxialMethod.axialOffsetMethods );
+ final JComboBox axialMethodCombo = new JComboBox<>(axialMethodModel);
+ this.add(axialMethodCombo, "spanx, growx, wrap");
+ order.add(axialMethodCombo);
+
+ //// plus
+ this.add(new JLabel(trans.get("PlacementPanel.lbl.plus")), "right");
+
+ final DoubleModel axialOffsetModel = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
+ final JSpinner axialOffsetSpinner = new JSpinner(axialOffsetModel.getSpinnerModel());
+ axialOffsetSpinner.setEditor(new SpinnerEditor(axialOffsetSpinner));
+
+ this.add(axialOffsetSpinner, "growx");
+ order.add(((SpinnerEditor) axialOffsetSpinner.getEditor()).getTextField());
+
+ axialMethodCombo.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ axialOffsetModel.stateChanged(new EventObject(e));
+ }
+ });
+
+ this.add(new UnitSelector(axialOffsetModel), "growx");
+ this.add(new BasicSlider(axialOffsetModel.getSliderModel(
+ new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
+ new DoubleModel(component.getParent(), "Length"))),
+ "w 100lp");
+ }
+}
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java
index 1133e63d1..9d61245ca 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java
@@ -1,24 +1,24 @@
package net.sf.openrocket.gui.configdialog;
-import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JSeparator;
import javax.swing.JSpinner;
+import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.CustomFocusTraversalPolicy;
import net.sf.openrocket.gui.adaptors.DoubleModel;
-import net.sf.openrocket.gui.adaptors.EnumModel;
+import net.sf.openrocket.gui.adaptors.IntegerModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.rocketcomponent.RailButton;
import net.sf.openrocket.rocketcomponent.RocketComponent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
@@ -44,9 +44,9 @@ public class RailButtonConfig extends RocketComponentConfig {
private JPanel buttonTab( final RailButton rbc ){
- JPanel primary = new JPanel(new MigLayout("fill"));
+ JPanel primary = new JPanel(new MigLayout());
- JPanel panel = new JPanel( new MigLayout("gap rel unrel"));
+ JPanel panel = new JPanel( new MigLayout("gap rel unrel, ins 0"));
{ //// Outer Diameter
@@ -110,53 +110,62 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(heightSpinner, "growx");
order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(heightModel), "growx");
- panel.add(new BasicSlider(heightModel.getSliderModel(0, 0.02)), "w 100lp, wrap 20lp");
+ panel.add(new BasicSlider(heightModel.getSliderModel(0, 0.02)), "w 100lp, wrap 30lp");
}
- { //// Rotation:
- panel.add(new JLabel(trans.get("RailBtnCfg.lbl.Angle")));
- DoubleModel angleModel = new DoubleModel(component, "AngleOffset", UnitGroup.UNITS_ANGLE, -180, +180);
- JSpinner angleSpinner = new JSpinner( angleModel.getSpinnerModel());
- angleSpinner.setEditor(new SpinnerEditor(angleSpinner));
- panel.add(angleSpinner, "growx");
- order.add(((SpinnerEditor) angleSpinner.getEditor()).getTextField());
- panel.add(new UnitSelector( angleModel), "growx");
- panel.add(new BasicSlider( angleModel.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
+ { //// Instance Count
+ panel.add(new JLabel(trans.get("RocketCompCfg.lbl.InstanceCount")));
+ IntegerModel countModel = new IntegerModel(component, "InstanceCount", 1);
+ JSpinner countSpinner = new JSpinner( countModel.getSpinnerModel());
+ countSpinner.setEditor(new SpinnerEditor(countSpinner));
+ panel.add(countSpinner, "growx, wrap rel");
+ order.add(((SpinnerEditor) countSpinner.getEditor()).getTextField());
}
- primary.add(panel, "grow, gapright 201p");
- panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
-
- { //// Position relative to:
- panel.add(new JLabel(trans.get("RailBtnCfg.lbl.PosRelativeTo")));
-
- final EnumModel methodModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- JComboBox relToCombo = new JComboBox( methodModel );
- panel.add( relToCombo, "spanx, growx, wrap");
- order.add(relToCombo);
+ { //// Instance separation
+ panel.add(new JLabel(trans.get("RocketCompCfg.lbl.InstanceSeparation")));
+ DoubleModel separationModel = new DoubleModel(component, "InstanceSeparation", UnitGroup.UNITS_LENGTH);
+ JSpinner separationSpinner = new JSpinner( separationModel.getSpinnerModel());
+ separationSpinner.setEditor(new SpinnerEditor(separationSpinner));
+ panel.add(separationSpinner, "growx");
+ order.add(((SpinnerEditor) separationSpinner.getEditor()).getTextField());
+ panel.add(new UnitSelector(separationModel), "growx");
+ double maxSeparationDistance = 0.1;
+ if (component.getParent() != null && component.getParent().getLength() > 0) {
+ maxSeparationDistance = component.getParent().getLength();
+ }
+ panel.add(new BasicSlider(separationModel.getSliderModel(0, 0.001, maxSeparationDistance)), "w 100lp, wrap para");
}
- { //// plus
- panel.add(new JLabel(trans.get("RailBtnCfg.lbl.Plus")), "right");
- DoubleModel offsetModel = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- JSpinner offsetSpinner = new JSpinner(offsetModel.getSpinnerModel());
- offsetSpinner.setEditor(new SpinnerEditor(offsetSpinner));
- focusElement = offsetSpinner;
- panel.add(offsetSpinner, "growx");
- order.add(((SpinnerEditor) offsetSpinner.getEditor()).getTextField());
- panel.add(new UnitSelector(offsetModel), "growx");
- panel.add(new BasicSlider(offsetModel.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 100lp, wrap para");
- }
- //// Instance count/separation
- panel.add(instanceablePanel(), "span, wrap");
+ primary.add(panel, "grow, gapright 50lp");
+
+ // Separator
+ //primary.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 20lp 20lp");
+
+ // Right side panel
+ panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]", ""));
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
- panel.add(materialPanel,"span, wrap");
+ panel.add(materialPanel,"span, grow, wrap");
+
+ {// -------- Placement ------
+ //// Position relative to:
+ JPanel placementPanel = new PlacementPanel(component, order);
+ panel.add(placementPanel, "span, grow, wrap");
+
+ { //// Rotation:
+ placementPanel.add(new JLabel(trans.get("RailBtnCfg.lbl.Angle")), "newline");
+ DoubleModel angleModel = new DoubleModel(component, "AngleOffset", UnitGroup.UNITS_ANGLE, -180, +180);
+ JSpinner angleSpinner = new JSpinner( angleModel.getSpinnerModel());
+ angleSpinner.setEditor(new SpinnerEditor(angleSpinner));
+ placementPanel.add(angleSpinner, "growx");
+ order.add(((SpinnerEditor) angleSpinner.getEditor()).getTextField());
+ placementPanel.add(new UnitSelector(angleModel), "growx");
+ placementPanel.add(new BasicSlider(angleModel.getSliderModel(-Math.PI, Math.PI)), "w 100lp");
+ }
+ }
primary.add(panel, "grow");
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java
index e8126db28..544973dad 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java
@@ -2,24 +2,23 @@ package net.sf.openrocket.gui.configdialog;
import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JSeparator;
import javax.swing.JSpinner;
+import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.DoubleModel;
-import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.rocketcomponent.ThicknessRingComponent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
@@ -33,7 +32,9 @@ public class RingComponentConfig extends RocketComponentConfig {
protected JPanel generalTab(String outer, String inner, String thickness, String length) {
- JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
+ JPanel primary = new JPanel(new MigLayout());
+
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
DoubleModel m;
JSpinner spin;
DoubleModel od = null;
@@ -46,8 +47,7 @@ public class RingComponentConfig extends RocketComponentConfig {
//// OuterRadius
od = new DoubleModel(component, "OuterRadius", 2, UnitGroup.UNITS_LENGTH, 0);
- // Diameter = 2*Radius
-
+
spin = new JSpinner(od.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx");
@@ -61,7 +61,7 @@ public class RingComponentConfig extends RocketComponentConfig {
//// Automatic
check.setText(trans.get("ringcompcfg.Automatic"));
check.setToolTipText(trans.get("ringcompcfg.AutomaticOuter.ttip"));
- panel.add(check, "skip, span 2, wrap");
+ panel.add(check, "skip, spanx 2, wrap");
order.add(check);
}
}
@@ -133,43 +133,23 @@ public class RingComponentConfig extends RocketComponentConfig {
panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "w 100lp, wrap");
}
+ primary.add(panel, "grow, gapright 40lp");
+
+ // Separator
+ //primary.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 10lp 10lp");
+
+ // Right side panel
+ JPanel rightSide = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
+ primary.add(rightSide, "cell 4 0, aligny 0, spany");
+
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
- panel.add(materialPanel, "gaptop 20lp, spanx 4, growx, wrap");
+ rightSide.add(materialPanel, "span, grow, wrap");
- //// Placement ----
- JPanel positionPanel = new JPanel(new MigLayout("gap rel unrel, insets 0", "[][65lp::][30lp::]", ""));
+ //// Position
+ rightSide.add(new PlacementPanel(component, order), "span, grow");
- //// Position relative to:
- positionPanel.add(new JLabel(trans.get("ringcompcfg.Positionrelativeto")));
-
- final EnumModel methodModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- final JComboBox positionCombo = new JComboBox( methodModel );
- positionPanel.add(positionCombo, "spanx 3, growx, wrap");
- order.add(positionCombo);
-
- //// plus
- positionPanel.add(new JLabel(trans.get("ringcompcfg.plus")), "right");
-
- //// PositionValue
- m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- if (!(component instanceof ThicknessRingComponent)) {
- focusElement = spin;
- }
- positionPanel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- positionPanel.add(new UnitSelector(m), "growx");
- positionPanel.add(new BasicSlider(m.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 100lp, wrap");
-
- panel.add(positionPanel, "cell 4 0, gapleft paragraph, aligny 0%, spany");
-
- return panel;
+ return primary;
}
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java
index 32c214c9a..c7b12c99d 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java
@@ -464,34 +464,6 @@ public class RocketComponentConfig extends JPanel {
}
}
- protected JPanel instanceablePanel() {
- JPanel panel = new JPanel( new MigLayout("fill, insets 0") );
- { // Instance Count
- panel.add(new JLabel(trans.get("RocketCompCfg.lbl.InstanceCount")));
- IntegerModel countModel = new IntegerModel(component, "InstanceCount", 1);
- JSpinner countSpinner = new JSpinner( countModel.getSpinnerModel());
- countSpinner.setEditor(new SpinnerEditor(countSpinner));
- panel.add(countSpinner, "w 100lp, wrap rel");
- order.add(((SpinnerEditor) countSpinner.getEditor()).getTextField());
- }
-
- { // Instance separation
- panel.add(new JLabel(trans.get("RocketCompCfg.lbl.InstanceSeparation")));
- DoubleModel separationModel = new DoubleModel(component, "InstanceSeparation", UnitGroup.UNITS_LENGTH);
- JSpinner separationSpinner = new JSpinner( separationModel.getSpinnerModel());
- separationSpinner.setEditor(new SpinnerEditor(separationSpinner));
- panel.add(separationSpinner, "growx");
- order.add(((SpinnerEditor) separationSpinner.getEditor()).getTextField());
- panel.add(new UnitSelector(separationModel), "growx");
- double maxSeparationDistance = 0.1;
- if (component.getParent() != null && component.getParent().getLength() > 0) {
- maxSeparationDistance = component.getParent().getLength();
- }
- panel.add(new BasicSlider(separationModel.getSliderModel(0, 0.001, maxSeparationDistance)), "w 100lp, wrap para");
- }
- return panel;
- }
-
private JPanel overrideTab() {
JPanel panel = new JPanel(new MigLayout("align 0% 20%, gap rel unrel",
"[][65lp::80lp][::20lp][]", ""));
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java
index e27abec2e..d7f3f2c95 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java
@@ -8,7 +8,6 @@ import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.CustomFocusTraversalPolicy;
import net.sf.openrocket.gui.adaptors.DoubleModel;
-import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator;
@@ -16,7 +15,6 @@ import net.sf.openrocket.material.Material;
import net.sf.openrocket.gui.widgets.SelectColorButton;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.rocketcomponent.ShockCord;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
@@ -30,16 +28,17 @@ public class ShockCordConfig extends RocketComponentConfig {
public ShockCordConfig(OpenRocketDocument d, RocketComponent component, JDialog parent) {
super(d, component, parent);
- JLabel label;
- DoubleModel m;
- JSpinner spin;
+ JPanel primary = new JPanel(new MigLayout());
////// Left side
- JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
+ primary.add(panel, "grow");
+ JLabel label;
+ DoubleModel m;
+ JSpinner spin;
// Attributes
- // Cord length
//// Shock cord length
label = new JLabel(trans.get("ShockCordCfg.lbl.Shockcordlength"));
panel.add(label);
@@ -52,86 +51,65 @@ public class ShockCordConfig extends RocketComponentConfig {
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(0, 1, 10)), "w 150lp, wrap");
+ panel.add(new BasicSlider(m.getSliderModel(0, 1, 10)), "w 100lp, wrap");
// Material
//// Shock cord material:
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.LINE,
trans.get("ShockCordCfg.lbl.Shockcordmaterial"), null, "Material", order);
- panel.add(materialPanel, "spanx 4, wrap");
-
+ panel.add(materialPanel, "spanx 4, wrap, gapright 40lp");
+ // Separator
+ //primary.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 10lp 10lp");
///// Right side
- JPanel panel2 = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
- panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany");
-
- // Placement
+ panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
+ primary.add(panel, "aligny 0%, grow, spany");
- //// Position relative to:
- panel2.add(new JLabel(trans.get("ShockCordCfg.lbl.Posrelativeto")));
-
- final EnumModel methodModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- final JComboBox combo = new JComboBox( methodModel );
- panel2.add(combo, "spanx, growx, wrap");
- order.add(combo);
-
- //// plus
- panel2.add(new JLabel(trans.get("ShockCordCfg.lbl.plus")), "right");
-
- m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- focusElement = spin;
- panel2.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel2.add(new UnitSelector(m), "growx");
- panel2.add(new BasicSlider(m.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 150lp, wrap");
-
+ { // ----------- Placement ----------
+ //// Position relative to:
+ JPanel placementPanel = new PlacementPanel(component, order);
+ panel.add(placementPanel, "span, grow, wrap");
- //// Spatial length
- //// Packed length:
- panel2.add(new JLabel(trans.get("ShockCordCfg.lbl.Packedlength")));
-
- m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
-
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel2.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel2.add(new UnitSelector(m), "growx");
- panel2.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 150lp, wrap");
-
+ {//// Packed length:
+ placementPanel.add(new JLabel(trans.get("ShockCordCfg.lbl.Packedlength")), "newline");
- //// Tube diameter
- //// Packed diameter:
- panel2.add(new JLabel(trans.get("ShockCordCfg.lbl.Packeddiam")));
-
- DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
- // Diameter = 2*Radius
-
- spin = new JSpinner(od.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel2.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel2.add(new UnitSelector(od), "growx");
- panel2.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 150lp, wrap");
+ m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
+
+ spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+
+ placementPanel.add(new UnitSelector(m), "growx");
+ placementPanel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 100lp, wrap");
+ }
+
+
+ {//// Packed diameter:
+ placementPanel.add(new JLabel(trans.get("ShockCordCfg.lbl.Packeddiam")));
+
+ DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
+ spin = new JSpinner(od.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+
+ placementPanel.add(new UnitSelector(od), "growx");
+ placementPanel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap");
+
+ ////// Automatic
+ JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction());
+ checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked"));
+ checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip"));
+ placementPanel.add(checkAutoPackedRadius, "skip, spanx 2, wrap");
+ order.add(checkAutoPackedRadius);
+ }
+ }
- ////// Automatic
- JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction());
- checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked"));
- checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip"));
- panel2.add(checkAutoPackedRadius, "skip, span 2, wrap");
- order.add(checkAutoPackedRadius);
//// General and General properties
- tabbedPane.insertTab(trans.get("ShockCordCfg.tab.General"), null, panel,
+ tabbedPane.insertTab(trans.get("ShockCordCfg.tab.General"), null, primary,
trans.get("ShockCordCfg.tab.ttip.General"), 0);
//// Radial position and Radial position configuration
tabbedPane.insertTab(trans.get("ShockCordCfg.tab.Radialpos"), null, positionTab(),
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java
index 998c84f36..3bc02a02b 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java
@@ -31,7 +31,6 @@ import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.rocketcomponent.DeploymentConfiguration;
import net.sf.openrocket.rocketcomponent.DeploymentConfiguration.DeployEvent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.rocketcomponent.Streamer;
import net.sf.openrocket.startup.Application;
@@ -45,71 +44,69 @@ public class StreamerConfig extends RecoveryDeviceConfig {
super(d, component, parent);
Streamer streamer = (Streamer) component;
- // Left side
JPanel primary = new JPanel(new MigLayout());
-
- JPanel panel = new JPanel(new MigLayout());
+
+ // Left side
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]"));
//// ---------------------------- Attributes ----------------------------
- JPanel attributesPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
- attributesPanel.setBorder(BorderFactory.createTitledBorder(trans.get("StreamerCfg.lbl.Attributes")));
//// Strip length:
- attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Striplength")));
+ panel.add(new JLabel(trans.get("StreamerCfg.lbl.Striplength")));
DoubleModel m = new DoubleModel(component, "StripLength", UnitGroup.UNITS_LENGTH, 0);
JSpinner spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
- attributesPanel.add(spin, "growx");
+ panel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
- attributesPanel.add(new UnitSelector(m), "growx");
- attributesPanel.add(new BasicSlider(m.getSliderModel(0, 0.6, 1.5)), "w 150lp, wrap");
+ panel.add(new UnitSelector(m), "growx");
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.6, 1.5)), "w 150lp, wrap");
//// Strip width:
- attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Stripwidth")));
+ panel.add(new JLabel(trans.get("StreamerCfg.lbl.Stripwidth")));
m = new DoubleModel(component, "StripWidth", UnitGroup.UNITS_LENGTH, 0);
spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
- attributesPanel.add(spin, "growx");
+ panel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
- attributesPanel.add(new UnitSelector(m), "growx");
- attributesPanel.add(new BasicSlider(m.getSliderModel(0, 0.2)), "w 150lp, wrap 10lp");
+ panel.add(new UnitSelector(m), "growx");
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.2)), "w 150lp, wrap 10lp");
//// Strip area:
- attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Striparea")));
+ panel.add(new JLabel(trans.get("StreamerCfg.lbl.Striparea")));
m = new DoubleModel(component, "Area", UnitGroup.UNITS_AREA, 0);
spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
- attributesPanel.add(spin, "growx");
+ panel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
- attributesPanel.add(new UnitSelector(m), "growx");
- attributesPanel.add(new BasicSlider(m.getSliderModel(0, 0.04, 0.25)), "w 150lp, wrap");
+ panel.add(new UnitSelector(m), "growx");
+ panel.add(new BasicSlider(m.getSliderModel(0, 0.04, 0.25)), "w 150lp, wrap");
//// Aspect ratio:
- attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Aspectratio")));
+ panel.add(new JLabel(trans.get("StreamerCfg.lbl.Aspectratio")));
m = new DoubleModel(component, "AspectRatio", UnitGroup.UNITS_NONE, 0);
spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
- attributesPanel.add(spin, "growx");
+ panel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
// panel.add(new UnitSelector(m),"growx");
- attributesPanel.add(new BasicSlider(m.getSliderModel(2, 15)), "skip, w 150lp, wrap 10lp");
+ panel.add(new BasicSlider(m.getSliderModel(2, 15)), "skip, w 150lp, wrap 10lp");
//// Material:
- attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Material")));
+ panel.add(new JLabel(trans.get("StreamerCfg.lbl.Material")));
- JComboBox streamerMaterialCombo = new JComboBox(new MaterialModel(attributesPanel, component,
+ JComboBox streamerMaterialCombo = new JComboBox(new MaterialModel(panel, component,
Material.Type.SURFACE));
//// The component material affects the weight of the component.
streamerMaterialCombo.setToolTipText(trans.get("StreamerCfg.combo.ttip.MaterialModel"));
- attributesPanel.add(streamerMaterialCombo, "spanx 3, growx, wrap 15lp");
+ panel.add(streamerMaterialCombo, "spanx 3, growx, wrap 15lp");
order.add(streamerMaterialCombo);
// CD
@@ -120,97 +117,73 @@ public class StreamerConfig extends RecoveryDeviceConfig {
//// "A larger drag coefficient yields a slowed descent rate.
trans.get("StreamerCfg.lbl.longB2");
label.setToolTipText(tip);
- attributesPanel.add(label);
+ panel.add(label);
m = new DoubleModel(component, "CD", UnitGroup.UNITS_COEFFICIENT, 0);
spin = new JSpinner(m.getSpinnerModel());
spin.setToolTipText(tip);
spin.setEditor(new SpinnerEditor(spin));
- attributesPanel.add(spin, "growx");
+ panel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
JCheckBox check = new JCheckBox(m.getAutomaticAction());
//// Automatic
check.setText(trans.get("StreamerCfg.lbl.AutomaticCd"));
check.setToolTipText(trans.get("StreamerCfg.lbl.AutomaticCd.ttip"));
- attributesPanel.add(check, "skip, span, wrap");
+ panel.add(check, "skip, span, wrap");
order.add(check);
//// The drag coefficient is relative to the area of the streamer.
- attributesPanel.add(new StyledLabel(trans.get("StreamerCfg.lbl.longC1"),
+ panel.add(new StyledLabel(trans.get("StreamerCfg.lbl.longC1"),
-1, StyledLabel.Style.ITALIC), "gapleft para, span, wrap");
-
- panel.add(attributesPanel, "growx, wrap");
+ primary.add(panel, "grow, gapright 20lp");
+
+ // Separator
+ //primary.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 10lp 10lp");
// Right side
- primary.add(panel, "grow");
- panel = new JPanel(new MigLayout());
+ panel = new JPanel(new MigLayout("ins 0"));
- //// ---------------------------- Placement ----------------------------
- JPanel placementPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
- placementPanel.setBorder(BorderFactory.createTitledBorder(trans.get("StreamerCfg.lbl.Placement")));
+ {//// ---------------------------- Placement ----------------------------
+ JPanel placementPanel = new PlacementPanel(component, order);
- //// Position relative to:
- placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Posrelativeto")));
-
- final EnumModel methodModel = new EnumModel<>(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- final JComboBox positionCombo = new JComboBox<>( methodModel );
- placementPanel.add( positionCombo, "spanx, growx, wrap");
- order.add(positionCombo);
-
- //// plus
- placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.plus")), "right");
-
- m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- focusElement = spin;
- placementPanel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+ //// Packed length:
+ placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Packedlength")), "newline");
- placementPanel.add(new UnitSelector(m), "growx");
- placementPanel.add(new BasicSlider(m.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 150lp, wrap");
-
- //// Packed length:
- placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Packedlength")));
-
- m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
-
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- placementPanel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+ m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
- placementPanel.add(new UnitSelector(m), "growx");
- placementPanel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 150lp, wrap");
-
- //// Packed diameter:
- placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Packeddiam")));
-
- DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
- spin = new JSpinner(od.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- placementPanel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+ spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
- placementPanel.add(new UnitSelector(od), "growx");
- placementPanel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 150lp, wrap");
+ placementPanel.add(new UnitSelector(m), "growx");
+ placementPanel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 100lp, wrap");
- ////// Automatic
- JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction());
- checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked"));
- checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip"));
- placementPanel.add(checkAutoPackedRadius, "skip, spanx 2");
- order.add(checkAutoPackedRadius);
+ //// Packed diameter:
+ placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Packeddiam")));
- panel.add(placementPanel, "growx, wrap 15lp");
+ DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
+ spin = new JSpinner(od.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+ placementPanel.add(new UnitSelector(od), "growx");
+ placementPanel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap");
+
+ ////// Automatic
+ JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction());
+ checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked"));
+ checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip"));
+ placementPanel.add(checkAutoPackedRadius, "skip, spanx 2");
+ order.add(checkAutoPackedRadius);
+
+ panel.add(placementPanel, "growx, wrap");
+ }
//// ---------------------------- Deployment ----------------------------
JPanel deploymentPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
@@ -265,7 +238,7 @@ public class StreamerConfig extends RecoveryDeviceConfig {
deploymentPanel.add(unit, "growx");
BasicSlider slider = new BasicSlider(m.getSliderModel(100, 1000));
altitudeComponents.add(slider);
- deploymentPanel.add(slider, "w 150lp, wrap");
+ deploymentPanel.add(slider, "w 100lp, wrap");
deploymentPanel.add(new StyledLabel(CommonStrings.override_description, -1), "spanx, wrap");
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java
index f9050d396..0e95dde39 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java
@@ -33,8 +33,7 @@ public class TransitionConfig extends RocketComponentConfig {
private static final Translator trans = Application.getTranslator();
private JComboBox typeBox;
- //private JLabel description;
-
+
private JLabel shapeLabel;
private JSpinner shapeSpinner;
private BasicSlider shapeSlider;
@@ -194,7 +193,7 @@ public class TransitionConfig extends RocketComponentConfig {
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
panel2.add(materialPanel, "span, wrap");
- panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany");
+ panel.add(panel2, "cell 4 0, gapleft 40lp, aligny 0%, spany");
//// General and General properties
tabbedPane.insertTab(trans.get("TransitionCfg.tab.General"), null, panel,
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TrapezoidFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TrapezoidFinSetConfig.java
index a7f449659..72d6e6e9f 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/TrapezoidFinSetConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/TrapezoidFinSetConfig.java
@@ -1,9 +1,6 @@
package net.sf.openrocket.gui.configdialog;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.EventObject;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
@@ -26,7 +23,6 @@ import net.sf.openrocket.material.Material;
import net.sf.openrocket.rocketcomponent.FinSet;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.rocketcomponent.TrapezoidFinSet;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
@@ -40,8 +36,8 @@ public class TrapezoidFinSetConfig extends FinSetConfig {
JPanel mainPanel = new JPanel(new MigLayout());
-
- JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
+ // Left side
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
//// Number of fins:
JLabel label = new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Nbroffins"));
@@ -58,24 +54,6 @@ public class TrapezoidFinSetConfig extends FinSetConfig {
panel.add(finCountSpinner, "growx, wrap");
order.add(((SpinnerEditor) finCountSpinner.getEditor()).getTextField());
-
- { /// Base rotation
- label = new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Finrotation"));
- //// The angle of the first fin in the fin set.
- label.setToolTipText(trans.get("TrapezoidFinSetCfg.lbl.ttip.Finrotation"));
- panel.add(label);
-
- final DoubleModel baseRotationModel = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
-
- final JSpinner baseRotationSpinner = new JSpinner(baseRotationModel.getSpinnerModel());
- baseRotationSpinner.setEditor(new SpinnerEditor(baseRotationSpinner));
- panel.add(baseRotationSpinner, "growx");
- order.add(((SpinnerEditor) baseRotationSpinner.getEditor()).getTextField());
-
- panel.add(new UnitSelector(baseRotationModel), "growx");
- panel.add(new BasicSlider(baseRotationModel.getSliderModel(-Math.PI, Math.PI)), "w 150lp, wrap");
- }
-
{//// Fin cant:
label = new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Fincant"));
//// The angle that the fins are canted with respect to the rocket
@@ -91,7 +69,7 @@ public class TrapezoidFinSetConfig extends FinSetConfig {
panel.add(new UnitSelector(cantModel), "growx");
panel.add(new BasicSlider(cantModel.getSliderModel(-FinSet.MAX_CANT_RADIANS, FinSet.MAX_CANT_RADIANS)),
- "w 150lp, wrap");
+ "w 100lp, wrap");
}
{//// Root chord:
@@ -105,7 +83,7 @@ public class TrapezoidFinSetConfig extends FinSetConfig {
order.add(((SpinnerEditor) rootChordSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(rootChordModel), "growx");
- panel.add(new BasicSlider(rootChordModel.getSliderModel(0, 0.05, 0.2)), "w 150lp, wrap");
+ panel.add(new BasicSlider(rootChordModel.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
}
{//// Tip chord:
@@ -119,7 +97,7 @@ public class TrapezoidFinSetConfig extends FinSetConfig {
order.add(((SpinnerEditor) tipChordSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(tipChordModel), "growx");
- panel.add(new BasicSlider(tipChordModel.getSliderModel(0, 0.05, 0.2)), "w 150lp, wrap");
+ panel.add(new BasicSlider(tipChordModel.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
}
{//// Height:
@@ -133,7 +111,7 @@ public class TrapezoidFinSetConfig extends FinSetConfig {
order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(heightModel), "growx");
- panel.add(new BasicSlider(heightModel.getSliderModel(0, 0.05, 0.2)), "w 150lp, wrap");
+ panel.add(new BasicSlider(heightModel.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
}
{//// Sweep length:
@@ -151,7 +129,7 @@ public class TrapezoidFinSetConfig extends FinSetConfig {
// sweep slider from -1.1*TipChord to 1.1*RootChord
DoubleModel tc = new DoubleModel(component, "TipChord", -1.1, UnitGroup.UNITS_LENGTH);
DoubleModel rc = new DoubleModel(component, "RootChord", 1.1, UnitGroup.UNITS_LENGTH);
- panel.add(new BasicSlider(sweepDistanceModel.getSliderModel(tc, rc)), "w 150lp, wrap");
+ panel.add(new BasicSlider(sweepDistanceModel.getSliderModel(tc, rc)), "w 100lp, wrap");
}
{//// Sweep angle:
@@ -168,59 +146,18 @@ public class TrapezoidFinSetConfig extends FinSetConfig {
panel.add(new UnitSelector(sweepAngleModel), "growx");
panel.add(new BasicSlider(sweepAngleModel.getSliderModel(-Math.PI / 4, Math.PI / 4)),
- "w 150lp, wrap paragraph");
+ "w 100lp, wrap 30lp");
}
- {//// Position relative to:
- panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Posrelativeto")));
-
- final EnumModel axialMethodModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- final JComboBox axialMethodCombo = new JComboBox( axialMethodModel );
- panel.add(axialMethodCombo, "spanx, growx, wrap");
- order.add(axialMethodCombo);
-
- //// plus
- panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.plus")), "right");
-
- final DoubleModel axialOffsetModel = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- final JSpinner axialOffsetSpinner = new JSpinner(axialOffsetModel.getSpinnerModel());
- axialOffsetSpinner.setEditor(new SpinnerEditor(axialOffsetSpinner));
-
- panel.add(axialOffsetSpinner, "growx");
- order.add(((SpinnerEditor) axialOffsetSpinner.getEditor()).getTextField());
-
- axialMethodCombo.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- axialOffsetModel.stateChanged(new EventObject(e));
- }
- });
-
- panel.add(new UnitSelector(axialOffsetModel), "growx");
- panel.add(new BasicSlider(axialOffsetModel.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 150lp, wrap para");
-
-
- mainPanel.add(panel, "aligny 0");
-
- mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy");
- }
-
-
- panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
-
-
{//// Fin cross section:
panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.FincrossSection")));
JComboBox sectionCombo = new JComboBox(
- new EnumModel(component, "CrossSection"));
+ new EnumModel<>(component, "CrossSection"));
panel.add(sectionCombo, "span, growx, wrap");
order.add(sectionCombo);
+ }
-
- //// Thickness:
+ { //// Thickness:
panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Thickness")));
final DoubleModel thicknessModel = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0);
@@ -231,19 +168,49 @@ public class TrapezoidFinSetConfig extends FinSetConfig {
order.add(((SpinnerEditor) thicknessSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(thicknessModel), "growx");
- panel.add(new BasicSlider(thicknessModel.getSliderModel(0, 0.01)), "w 150lp, wrap para");
+ panel.add(new BasicSlider(thicknessModel.getSliderModel(0, 0.01)), "w 100lp, wrap para");
}
-
+
+ mainPanel.add(panel, "aligny 0, gapright 50lp");
+
+ // Separator
+ //mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 20lp 20lp");
+
+ // Right side panel
+ panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
+
+ // Root fillets
+ panel.add(filletMaterialPanel(), "span, grow, wrap");
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
- panel.add(materialPanel, "span, wrap");
-
-
-
- mainPanel.add(panel, "aligny 20%");
-
- panel.add(filletMaterialPanel(), "span, wrap");
+ panel.add(materialPanel, "span, grow, wrap");
+
+ {//// -------- Placement -------
+ // Position relative to:
+ JPanel placementPanel = new PlacementPanel(component, order);
+ panel.add(placementPanel, "span, grow");
+
+ { /// Fin rotation
+ label = new JLabel(trans.get("FinSetCfg.lbl.FinRotation"));
+ label.setToolTipText(trans.get("FinSetCfg.lbl.FinRotation.ttip"));
+ placementPanel.add(label, "newline");
+
+ final DoubleModel baseRotationModel = new DoubleModel(component, "BaseRotation",
+ UnitGroup.UNITS_ANGLE, -Math.PI, Math.PI);
+
+ final JSpinner baseRotationSpinner = new JSpinner(baseRotationModel.getSpinnerModel());
+ baseRotationSpinner.setEditor(new SpinnerEditor(baseRotationSpinner));
+ placementPanel.add(baseRotationSpinner, "growx");
+ order.add(((SpinnerEditor) baseRotationSpinner.getEditor()).getTextField());
+
+ placementPanel.add(new UnitSelector(baseRotationModel), "growx");
+ placementPanel.add(new BasicSlider(baseRotationModel.getSliderModel()), "w 100lp, wrap");
+ }
+ }
+
+ mainPanel.add(panel, "aligny 0");
+
//// General and General properties
tabbedPane.insertTab(trans.get("TrapezoidFinSetCfg.tab.General"), null, mainPanel,
trans.get("TrapezoidFinSetCfg.tab.Generalproperties"), 0);
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java
index e0ea77134..27e416aad 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java
@@ -1,29 +1,25 @@
package net.sf.openrocket.gui.configdialog;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.EventObject;
import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JSeparator;
import javax.swing.JSpinner;
+import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.CustomFocusTraversalPolicy;
import net.sf.openrocket.gui.adaptors.DoubleModel;
-import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.adaptors.IntegerModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.rocketcomponent.RocketComponent;
-import net.sf.openrocket.rocketcomponent.position.AxialMethod;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
@@ -34,10 +30,10 @@ public class TubeFinSetConfig extends RocketComponentConfig {
public TubeFinSetConfig(OpenRocketDocument d, RocketComponent c, JDialog parent) {
super(d, c, parent);
- JPanel primary = new JPanel(new MigLayout("fill"));
+ JPanel primary = new JPanel(new MigLayout());
- JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
+ JPanel panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]", ""));
//// Number of fins
panel.add(new JLabel(trans.get("TubeFinSetCfg.lbl.Nbroffins")));
@@ -68,8 +64,7 @@ public class TubeFinSetConfig extends RocketComponentConfig {
panel.add(new JLabel(trans.get("TubeFinSetCfg.lbl.Outerdiam")));
DoubleModel od = new DoubleModel(component, "OuterRadius", 2, UnitGroup.UNITS_LENGTH, 0);
- // Diameter = 2*Radius
-
+
spin = new JSpinner(od.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx");
@@ -114,65 +109,43 @@ public class TubeFinSetConfig extends RocketComponentConfig {
panel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap 20lp");
-
- //// Base rotation
- //// Fin rotation:
- JLabel label = new JLabel(trans.get("TubeFinSetCfg.lbl.Finrotation"));
- //// The angle of the first fin in the fin set.
- label.setToolTipText(trans.get("TubeFinSetCfg.lbl.ttip.Finrotation"));
- panel.add(label);
-
- m = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
-
- spin = new JSpinner(m.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
-
- panel.add(new UnitSelector(m), "growx");
- panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
-
- primary.add(panel, "grow, gapright 20lp");
- panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
-
- //// Position relative to:
- panel.add(new JLabel(trans.get("LaunchLugCfg.lbl.Posrelativeto"))); // (note re-uses the label from LaunchLug, because they're the same
-
- final EnumModel axialMethodModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods );
- final JComboBox axialMethodCombo = new JComboBox( axialMethodModel );
- panel.add(axialMethodCombo, "spanx, growx, wrap");
- order.add(axialMethodCombo);
+ primary.add(panel, "grow, gapright 50lp");
- //// plus
- panel.add(new JLabel(trans.get("LaunchLugCfg.lbl.plus")), "right");
-
- final DoubleModel axialOffsetModel = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
- spin = new JSpinner(axialOffsetModel.getSpinnerModel());
- spin.setEditor(new SpinnerEditor(spin));
- panel.add(spin, "growx");
- order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+ // Separator
+ //primary.add(new JSeparator(SwingConstants.VERTICAL), "growy, gapx 10lp 10lp");
- axialMethodCombo.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- axialOffsetModel.stateChanged(new EventObject(e));
- }
- });
-
- panel.add(new UnitSelector(axialOffsetModel), "growx");
- panel.add(new BasicSlider(axialOffsetModel.getSliderModel(
- new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
- new DoubleModel(component.getParent(), "Length"))),
- "w 100lp, wrap para");
-
-
+ // Right side panel
+ panel = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::][]", ""));
//// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);
- panel.add(materialPanel, "span, wrap");
-
+ panel.add(materialPanel, "span, grow, wrap");
+
+ { //// Placement
+ //// Position relative to:
+ JPanel placementPanel = new PlacementPanel(component, order);
+ panel.add(placementPanel, "span, grow, wrap");
+
+ //// Fin rotation:
+ JLabel label = new JLabel(trans.get("TubeFinSetCfg.lbl.Finrotation"));
+ //// The angle of the first fin in the fin set.
+ label.setToolTipText(trans.get("TubeFinSetCfg.lbl.ttip.Finrotation"));
+ placementPanel.add(label, "newline");
+
+ m = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
+
+ spin = new JSpinner(m.getSpinnerModel());
+ spin.setEditor(new SpinnerEditor(spin));
+ placementPanel.add(spin, "growx");
+ order.add(((SpinnerEditor) spin.getEditor()).getTextField());
+
+ placementPanel.add(new UnitSelector(m), "growx");
+ placementPanel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
+ }
+
primary.add(panel, "grow");
-
+
+
//// General and General properties
tabbedPane.insertTab(trans.get("LaunchLugCfg.tab.General"), null, primary,
trans.get("LaunchLugCfg.tab.Generalprop"), 0);
diff --git a/swing/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java b/swing/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java
index 77b9b687c..3818ebe17 100644
--- a/swing/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java
+++ b/swing/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java
@@ -314,7 +314,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
ncFilledCB = new JCheckBox("Filled");
ncPanel.add(ncFilledCB, "cell 1 1");
- JLabel ncMaterialLabel = new JLabel(trans.get("RocketCompCfg.lbl.Componentmaterial"));
+ JLabel ncMaterialLabel = new JLabel(trans.get("MaterialPanel.lbl.ComponentMaterial"));
ncPanel.add(ncMaterialLabel, "cell 0 1,alignx left");
JLabel ncMassLabel = new JLabel(trans.get("RocketCompCfg.lbl.Componentmass"));