Ver código fonte

Added moveable component without frame as a component viewer

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6804 8c9fc860-2736-0410-a75d-ab315db34111
felixf 9 anos atrás
pai
commit
1a333b042e
2 arquivos alterados com 37 adições e 4 exclusões
  1. 36 3
      source/ComponentViewer.Mod
  2. 1 1
      source/Repositories.Mod

+ 36 - 3
source/ComponentViewer.Mod

@@ -8,13 +8,15 @@ CONST
 	DefaultWidth = 320;
 	DefaultWidth = 320;
 	DefaultHeight = 240;
 	DefaultHeight = 240;
 	InvalidPosition* =MIN(LONGINT);
 	InvalidPosition* =MIN(LONGINT);
-
+	FlagMoveable = 20; 
+	
 TYPE
 TYPE
 
 
 	KillerMsg = OBJECT
 	KillerMsg = OBJECT
 	END KillerMsg;
 	END KillerMsg;
 
 
 	Window* = OBJECT(WMComponents.FormWindow)
 	Window* = OBJECT(WMComponents.FormWindow)
+	VAR dragging: BOOLEAN; lastX, lastY: LONGINT;
 
 
 		PROCEDURE RestoreWindow*(c : WMRestorable.Context);
 		PROCEDURE RestoreWindow*(c : WMRestorable.Context);
 		BEGIN
 		BEGIN
@@ -56,7 +58,35 @@ TYPE
 			ELSE Handle^(m);
 			ELSE Handle^(m);
 			END;
 			END;
 		END Handle;
 		END Handle;
+		
+		PROCEDURE PointerDown(x, y:LONGINT; keys:SET);
+		BEGIN
+			lastX := bounds.l + x; lastY:=bounds.t + y;
+			IF (keys = {0}) & (FlagMoveable IN flags) THEN
+				dragging := TRUE
+			ELSE
+				PointerDown^(x,y,keys); 
+			END;
+		END PointerDown;
 
 
+		PROCEDURE PointerMove(x,y:LONGINT; keys:SET);
+		VAR dx, dy, width, height : LONGINT;
+		BEGIN
+			IF dragging THEN
+				x := bounds.l + x; y := bounds.t + y; dx := x - lastX; dy := y - lastY;
+				lastX := lastX + dx; lastY := lastY + dy;
+				IF (dx # 0) OR (dy # 0) THEN
+					manager.SetWindowPos(SELF, bounds.l + dx, bounds.t + dy);
+				END;
+			END;
+		END PointerMove;
+
+		PROCEDURE PointerUp(x, y:LONGINT; keys:SET);
+		BEGIN
+			dragging := FALSE;
+			PointerDown^(x,y,keys);
+		END PointerUp;
+		
 	END Window;
 	END Window;
 
 
 VAR
 VAR
@@ -186,6 +216,7 @@ BEGIN
 	options.Add("n","noFocus", Options.Flag);
 	options.Add("n","noFocus", Options.Flag);
 	options.Add("t","onTop", Options.Flag);
 	options.Add("t","onTop", Options.Flag);
 	options.Add("F","noFrame",Options.Flag);
 	options.Add("F","noFrame",Options.Flag);
+	options.Add("m","moveable",Options.Flag);
 	IF options.Parse(context.arg, context.error) & context.arg.GetString(filename) THEN
 	IF options.Parse(context.arg, context.error) & context.arg.GetString(filename) THEN
 		IF ~options.GetInteger("width",width) THEN width := 0 END;
 		IF ~options.GetInteger("width",width) THEN width := 0 END;
 		IF ~options.GetInteger("height",height) THEN height := 0 END;
 		IF ~options.GetInteger("height",height) THEN height := 0 END;
@@ -193,6 +224,7 @@ BEGIN
 		IF ~options.GetInteger("y",y) THEN y := InvalidPosition END;
 		IF ~options.GetInteger("y",y) THEN y := InvalidPosition END;
 		IF options.GetFlag("fullscreen") THEN flags := {} ELSE flags := {WMWindowManager.FlagFrame, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize} END;
 		IF options.GetFlag("fullscreen") THEN flags := {} ELSE flags := {WMWindowManager.FlagFrame, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize} END;
 		IF options.GetFlag("noFrame") THEN flags := {} ELSE flags := {WMWindowManager.FlagFrame, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize} END;
 		IF options.GetFlag("noFrame") THEN flags := {} ELSE flags := {WMWindowManager.FlagFrame, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize} END;
+		IF options.GetFlag("moveable") THEN flags := {FlagMoveable} ELSE flags := {WMWindowManager.FlagFrame, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize} END;
 		IF options.GetFlag("noFocus") THEN INCL(flags, WMWindowManager.FlagNoFocus) END;
 		IF options.GetFlag("noFocus") THEN INCL(flags, WMWindowManager.FlagNoFocus) END;
 		IF options.GetFlag("onTop") THEN INCL(flags, WMWindowManager.FlagStayOnTop) END;
 		IF options.GetFlag("onTop") THEN INCL(flags, WMWindowManager.FlagStayOnTop) END;
 		c := DoOpen(filename, context.error, x , y, width, height, options.GetFlag("client"), options.GetFlag("alpha"), options.GetFlag("fullscreen"), flags);
 		c := DoOpen(filename, context.error, x , y, width, height, options.GetFlag("client"), options.GetFlag("alpha"), options.GetFlag("fullscreen"), flags);
@@ -277,7 +309,8 @@ BEGIN
 	Modules.InstallTermHandler(Cleanup)
 	Modules.InstallTermHandler(Cleanup)
 END ComponentViewer.
 END ComponentViewer.
 
 
-SystemTools.Free ComponentViewer ~
+SystemTools.FreeDownTo  ComponentViewer ~
 ComponentViewer.Open FractalDemo.XML ~
 ComponentViewer.Open FractalDemo.XML ~
 
 
-ComponentViewer.Open --width=128 --height=64 --client WMStandardComponents.GenButton ~
+ComponentViewer.Open ComponentHelper:Panel:1 ~
+ComponentViewer.Open TLEmulator:Panel:1 ~

+ 1 - 1
source/Repositories.Mod

@@ -1167,7 +1167,7 @@ TYPE
 							KernelLog.Boolean(element # NIL); KernelLog.Ln;
 							KernelLog.Boolean(element # NIL); KernelLog.Ln;
 						END;
 						END;
 					ELSE
 					ELSE
-						KernelLog.String("Repository not found"); KernelLog.Ln;
+						KernelLog.String("Repository not found:"); KernelLog.String(repositoryName); KernelLog.Ln;
 					END;
 					END;
 				ELSIF (componentName = "Properties") THEN
 				ELSIF (componentName = "Properties") THEN
 					NEW(properties,SELF.repository);
 					NEW(properties,SELF.repository);