DEADSOFTWARE

GUI: backspace clears keybinding (sorry, it is Teh Hack)
[d2df-sdl.git] / src / game / g_gui.pas
index 973def68744420d3359986567bba3bc8808ed8cc..fbab591b37059bcbad512a6615e9f4f88067c78d 100644 (file)
@@ -1,10 +1,25 @@
+(* Copyright (C)  DooM 2D:Forever Developers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *)
 {$MODE DELPHI}
 unit g_gui;
 
 interface
 
 uses
-  e_graphics, e_input, g_playermodel, g_basic, MAPSTRUCT, wadreader;
+  e_graphics, e_input, e_log, g_playermodel, g_basic, MAPSTRUCT, wadreader;
 
 const
   MAINMENU_HEADER_COLOR: TRGB = (R:255; G:255; B:255);
@@ -1481,7 +1496,7 @@ begin
             if FItems[FIndex].Control <> nil then
               FItems[FIndex].Control.OnMessage(Msg);
         end;
-        IK_RETURN, IK_KPRETURN:
+        IK_RETURN, IK_KPRETURN, IK_BACKSPACE:
         begin
           if FIndex <> -1 then
           begin
@@ -2228,6 +2243,15 @@ begin
 end;
 
 procedure TGUIKeyRead.OnMessage(var Msg: TMessage);
+  procedure actDefCtl ();
+  begin
+    with FWindow do
+      if FDefControl <> '' then
+        SetActive(GetControl(FDefControl))
+      else
+        SetActive(nil);
+  end;
+
 begin
   inherited;
 
@@ -2240,13 +2264,7 @@ begin
         case wParam of
           IK_ESCAPE:
             begin
-              if FIsQuery then
-                with FWindow do
-                  if FDefControl <> '' then
-                    SetActive(GetControl(FDefControl))
-                  else
-                    SetActive(nil);
-
+              if FIsQuery then actDefCtl();
               FIsQuery := False;
             end;
           IK_RETURN, IK_KPRETURN:
@@ -2263,28 +2281,34 @@ begin
                 begin
                   FKey := IK_ENTER; // <Enter>
                   FIsQuery := False;
-
-                  with FWindow do
-                    if FDefControl <> '' then
-                      SetActive(GetControl(FDefControl))
-                    else
-                      SetActive(nil);
+                  actDefCtl();
                 end;
             end;
+          IK_BACKSPACE: // clear keybinding if we aren't waiting for a key
+            begin
+              if not FIsQuery then
+              begin
+                FKey := 0;
+                actDefCtl();
+              end;
+            end;
         end;
 
       MESSAGE_DIKEY:
-        if FIsQuery and (wParam <> IK_ENTER) and (wParam <> IK_KPRETURN) then // Not <Enter
         begin
-          if e_KeyNames[wParam] <> '' then
-            FKey := wParam;
-          FIsQuery := False;
-
-          with FWindow do
-            if FDefControl <> '' then
-              SetActive(GetControl(FDefControl))
-            else
-              SetActive(nil);
+          if not FIsQuery and (wParam = IK_BACKSPACE) then
+          begin
+            FKey := 0;
+            actDefCtl();
+          end
+          else if FIsQuery and (wParam <> IK_ENTER) and (wParam <> IK_KPRETURN) then // Not <Enter
+          begin
+            e_WriteLog(Format('HIT! %s', ['3']), MSG_WARNING);
+            if e_KeyNames[wParam] <> '' then
+              FKey := wParam;
+            FIsQuery := False;
+            actDefCtl();
+          end;
         end;
     end;
 end;
@@ -2469,12 +2493,12 @@ var
   panels: TPanelsRec1Array;
   header: TMapHeaderRec_1;
   a: Integer;
-  FileName, SectionName, ResName: string;
+  FileName: string;
   Data: Pointer;
   Len: Integer;
   rX, rY: Single;
 begin
-  g_ProcessResourceStr(Res, FileName, SectionName, ResName);
+  FileName := g_ExtractWadName(Res);
 
   WAD := TWADFile.Create();
   if not WAD.ReadFile(FileName) then
@@ -2483,7 +2507,8 @@ begin
     Exit;
   end;
 
-  if not WAD.GetResource('', ResName, Data, Len) then
+  //k8: ignores path again
+  if not WAD.GetMapResource(g_ExtractFileName(Res), Data, Len) then
   begin
     WAD.Free();
     Exit;