]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/dialog.cxx
fix a typo
[flightgear.git] / src / GUI / dialog.cxx
index 9db2e77eb58a79586c787e2dd57c59b782c03604..b5289a2e2a3691a1f3c6167da929cd62c7a624ae 100644 (file)
@@ -17,6 +17,8 @@
 
 enum format_type { f_INVALID, f_INT, f_LONG, f_FLOAT, f_DOUBLE, f_STRING };
 static const int FORMAT_BUFSIZE = 255;
+static const int RESIZE_MARGIN = 7;
+
 
 /**
  * Makes sure the format matches '%[ -+#]?\d*(\.\d*)?(l?[df]|s)', with
@@ -181,7 +183,8 @@ puObject *fgPopup::getActiveInputField(puObject *object)
             if ((ret = getActiveInputField(obj)))
                 return ret;
 
-    if (object->getType() & PUCLASS_INPUT && ((puInput *)object)->isAcceptingInput())
+    if (object->getType() & (PUCLASS_INPUT|PUCLASS_LARGEINPUT)
+            && ((puInput *)object)->isAcceptingInput())
         return object;
 
     return 0;
@@ -192,7 +195,7 @@ puObject *fgPopup::getActiveInputField(puObject *object)
  */
 int fgPopup::checkHit(int button, int updown, int x, int y)
 {
-    int result = 1;
+    int result = 0;
     if (updown != PU_DRAG && !_dragging)
         result = puPopup::checkHit(button, updown, x, y);
 
@@ -214,7 +217,8 @@ int fgPopup::checkHit(int button, int updown, int x, int y)
         int hit = getHitObjects(this, x, y);
         if (hit & PUCLASS_LIST)  // ctrl-click in property browser (toggle bool)
             return result;
-        if (!global_resize && hit & (PUCLASS_BUTTON|PUCLASS_ONESHOT|PUCLASS_INPUT|PUCLASS_LARGEINPUT))
+        if (!global_resize && hit & (PUCLASS_BUTTON|PUCLASS_ONESHOT|PUCLASS_INPUT
+                |PUCLASS_LARGEINPUT|PUCLASS_SCROLLBAR))
             return result;
 
         getPosition(&_dlgX, &_dlgY);
@@ -232,9 +236,9 @@ int fgPopup::checkHit(int button, int updown, int x, int y)
         };
 
         _resizing = 0;
-        if (!global_drag) {
-            int hmargin = global_resize ? _dlgW / 3 : 10;
-            int vmargin = global_resize ? _dlgH / 3 : 10;
+        if (!global_drag && _resizable) {
+            int hmargin = global_resize ? _dlgW / 3 : RESIZE_MARGIN;
+            int vmargin = global_resize ? _dlgH / 3 : RESIZE_MARGIN;
 
             if (y - _dlgY < vmargin)
                 _resizing |= BOTTOM;
@@ -466,7 +470,8 @@ FGDialog::FGDialog (SGPropertyNode *props) :
         if (open) {
             const char *s = open->getStringValue();
             FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal");
-            nas->createModule(_module.c_str(), _module.c_str(), s, strlen(s), props);
+            if (nas)
+                nas->createModule(_module.c_str(), _module.c_str(), s, strlen(s), props);
         }
     }
     display(props);
@@ -480,11 +485,13 @@ FGDialog::~FGDialog ()
     _props->setIntValue("lasty", y);
 
     FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal");
-    if (_nasal_close) {
-        const char *s = _nasal_close->getStringValue();
-        nas->createModule(_module.c_str(), _module.c_str(), s, strlen(s), _props);
+    if (nas) {
+        if (_nasal_close) {
+            const char *s = _nasal_close->getStringValue();
+            nas->createModule(_module.c_str(), _module.c_str(), s, strlen(s), _props);
+        }
+        nas->deleteModule(_module.c_str());
     }
-    nas->deleteModule(_module.c_str());
 
     puDeleteObject(_object);
 
@@ -757,6 +764,11 @@ FGDialog::makeObject (SGPropertyNode *props, int parentWidth, int parentHeight)
         puSlider *obj = new puSlider(x, y, (vertical ? height : width), vertical);
         obj->setMinValue(props->getFloatValue("min", 0.0));
         obj->setMaxValue(props->getFloatValue("max", 1.0));
+        obj->setStepSize(props->getFloatValue("step"));
+        obj->setSliderFraction(props->getFloatValue("fraction"));
+#if PLIB_VERSION > 185
+        obj->setPageStepSize(props->getFloatValue("pagestep"));
+#endif
         setupObject(obj, props);
         if (presetSize)
             obj->setSize(width, height);
@@ -775,8 +787,13 @@ FGDialog::makeObject (SGPropertyNode *props, int parentWidth, int parentHeight)
     } else if (type == "textbox") {
         int slider_width = props->getIntValue("slider", 20);
         int wrap = props->getBoolValue("wrap", true);
-        puaLargeInput * obj = new puaLargeInput(x, y,
+#if PLIB_VERSION > 185
+        puaLargeInput *obj = new puaLargeInput(x, y,
+                x + width, x + height, 11, slider_width, wrap);
+#else
+        puaLargeInput *obj = new puaLargeInput(x, y,
                 x + width, x + height, 2, slider_width, wrap);
+#endif
 
         if (props->getBoolValue("editable"))
             obj->enableInput();
@@ -787,6 +804,9 @@ FGDialog::makeObject (SGPropertyNode *props, int parentWidth, int parentHeight)
             obj->setSize(width, height);
         setupObject(obj, props);
         setColor(obj, props, FOREGROUND|LABEL);
+
+        int top = props->getIntValue("top-line", 0);
+        obj->setTopLineInWindow(top < 0 ? unsigned(-1) >> 1 : top);
         return obj;
 
     } else if (type == "select") {
@@ -831,6 +851,22 @@ FGDialog::setupObject (puObject *object, SGPropertyNode *props)
        object->setLabelFont(*_font);
     }
 
+    string type = props->getName();
+    if (type == "input" && props->getBoolValue("live"))
+        object->setDownCallback(action_callback);
+
+    if (type == "text") {
+        const char *format = props->getStringValue("format", 0);
+        if (format) {
+            info->fmt_type = validate_format(format);
+            if (info->fmt_type != f_INVALID)
+                info->format = format;
+            else
+                SG_LOG(SG_GENERAL, SG_ALERT, "DIALOG: invalid <format> '"
+                        << format << '\'');
+        }
+    }
+
     if (props->hasValue("property")) {
         const char *name = props->getStringValue("name");
         if (name == 0)
@@ -868,22 +904,6 @@ FGDialog::setupObject (puObject *object, SGPropertyNode *props)
         }
         object->setCallback(action_callback);
     }
-
-    string type = props->getName();
-    if (type == "input" && props->getBoolValue("live"))
-        object->setDownCallback(action_callback);
-
-    if (type == "text") {
-        const char *format = props->getStringValue("format", 0);
-        if (format) {
-            info->fmt_type = validate_format(format);
-            if (info->fmt_type != f_INVALID)
-                info->format = format;
-            else
-                SG_LOG(SG_GENERAL, SG_ALERT, "DIALOG: invalid <format> '"
-                        << format << '\'');
-        }
-    }
 }
 
 void