Skip to content

Commit

Permalink
[V] EDE 0.11.0
Browse files Browse the repository at this point in the history
#47: Refactor "Move Window to next monitor"
#48: Enhanced Windows-Alignment method (Align to border)
  • Loading branch information
hoppfrosch committed Jan 30, 2015
2 parents 0cd6c2c + b8d9560 commit 776adbb
Show file tree
Hide file tree
Showing 46 changed files with 266 additions and 1,458 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@ ForcePull_Local.sh
NCHITTEST.ahk
backup/
*.bak
AHK-EDE.tdl
xx.ahk
gotoCache/
lib/Windy/_WindowHandlerEvent.ahk
lib/Windy/
3 changes: 0 additions & 3 deletions .gitmodules

This file was deleted.

Binary file added AHK-EDE.tdl
Binary file not shown.
30 changes: 3 additions & 27 deletions ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,32 +1,8 @@
#Changelog for AHK-EDE

(on Branch: **master**, since **2014-02-15**)
(on Branch: **master**, since **2014-12-10**)

-----------------------------------------------------------------
* **EDE 0.9.4** (via Commit [e0a17c9](https://github.com/hoppfrosch/AHK_EDE/commit/e0a17c9bc33deb2939822154545cf3da8b078af0))
* *[#35](https://github.com/hoppfrosch/AHK_EDE/issues/35): WindowHandler - Property vscrollable - Getter/Setter - Availability of vertical scrollbar (INTERN)*
* *[#36](https://github.com/hoppfrosch/AHK_EDE/issues/36): WindowHandler - Property hscrollable - Getter/Setter - Availability of horizontal scrollbar (INTERN)*
* *[#38](https://github.com/hoppfrosch/AHK_EDE/issues/38): WindowHandler - Property sizebox - Getter/Setter - Ability to resize window (moved from property resizeable) /INTERN)*
* *[#39](https://github.com/hoppfrosch/AHK_EDE/issues/39): WindowHandler - Property maximizebox - Getter/Setter - Availability of maximizebox (INTERN)*
* *[#40](https://github.com/hoppfrosch/AHK_EDE/issues/40): WindowHandler - Property minimizebox - Getter/Setter - Availability of minimizebox (INTERN)*
* *[#42](https://github.com/hoppfrosch/AHK_EDE/issues/42): WindowHandler - Property owner - Getter/Setter - Get/set Owner of window (INTERN)*
* **EDE 0.9.3** (via Commit [145e021](https://github.com/hoppfrosch/AHK_EDE/commit/145e021911629d4f185a831277201a4cd864c79d))
* *[#25](https://github.com/hoppfrosch/AHK_EDE/issues/25) - WindowHandler - Property rezizeable - Setter - Checks/Sets whether window is resizeable (INTERN)*
* *[#33](https://github.com/hoppfrosch/AHK_EDE/issues/33) - WindowHandler - Property caption - Getter/Setter - Checks/Sets whether window has captionbar (INTERN)*
* *[#34](https://github.com/hoppfrosch/AHK_EDE/issues/34) - WindowHandler - Property windowinfo - Getter - Use API-Call 'GetWindowInfo' to retrieve window information (INTERN)*
* **EDE 0.9.2** (via Commit [4b3ade9](https://github.com/hoppfrosch/AHK_EDE/commit/4b3ade9e6f5914e70ae924204cc882bea59a2460))
* [#9](https://github.com/hoppfrosch/AHK_EDE/issues/9) - WindowHandler - Property transparency - FadeIn/FadeOut when setting transparency
* [#26](https://github.com/hoppfrosch/AHK_EDE/issues/26) / [#32](https://github.com/hoppfrosch/AHK_EDE/issues/32) - Use Constants from winuser.h (Win-SDK) in a separate file (Const_WinUser.ahk)
* [#27](https://github.com/hoppfrosch/AHK_EDE/issues/27) - WindowHandler - property styleExe - Setter
* [#28](https://github.com/hoppfrosch/AHK_EDE/issues/28) - WindowHandler - property styleExe - Setter
* [#29](https://github.com/hoppfrosch/AHK_EDE/issues/29) - WindowHandler - property hangs - Initial (getter only) - checks whether App associated with window is not responding
* [#30](https://github.com/hoppfrosch/AHK_EDE/issues/30) - WindowHandler - property parents - Initial (getter/setter) - get/set parent of current window
* [#31](https://github.com/hoppfrosch/AHK_EDE/issues/31) - WindowHandler - Method redraw - Initial - redraw the window
* **EDE 0.9.1** (via Commit [af11210](https://github.com/hoppfrosch/AHK_EDE/commit/af112102d1a8835cc3bda119f65430a5fb7b245e))
* [#21](https://github.com/hoppfrosch/AHK_EDE/issues/21) -WindowHandler - property hwnd - Initial
* [#22](https://github.com/hoppfrosch/AHK_EDE/issues/22) -WindowHandler - property size - Initial
* [#23](https://github.com/hoppfrosch/AHK_EDE/issues/23) -WindowHandler - property posSize - Renamed from pos
* [#24](https://github.com/hoppfrosch/AHK_EDE/issues/24) - WindowHandler - property pos - Initial
* **EDE 0.9.0** (via Commit [f178e35](https://github.com/hoppfrosch/AHK_EDE/commit/f178e35ea7dde223db65549b3553fd3831f1971b))
* [#20](https://github.com/hoppfrosch/AHK_EDE/issues/20) - Use new property feature from AutoHotkey 1.1.16
* **EDE 0.10.0** (via Commit [0cd6c2c](https://github.com/hoppfrosch/AHK_Windy/commit/0cd6c2ccb9f0960dc39819af145ef28a2b57e508))
* [#44](https://github.com/hoppfrosch/AHK_EDE/issues/44): Made AHK_EDE using AHK_Windy

60 changes: 36 additions & 24 deletions EDE.ahk
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#Persistent
#Persistent
;#Warn All
;#Warn LocalSameAsGlobal, Off
#SingleInstance force
Expand All @@ -14,9 +14,11 @@
#include <Windy\Mousy>
#include <Windy\Windy>
#include <Windy\MultiMony>
#include <Windy\Mony>

SetWorkingDir %A_ScriptDir%


;-------------------------------------------------------------------------------------------------------
;------------------- Global Variables
gEDE := object()
Expand All @@ -39,7 +41,7 @@ gEDE.State.Key.Previous := ""
gEDE.State.Key.Reprise := 0

gEDE.Info.App.Name := "EDE"
gEDE.Info.App.Version := "0.10.0"
gEDE.Info.App.Version := "0.11.0"

gEDE.Info.App.NameVersion := gEDE.Info.App.Name " V" gEDE.Info.App.Version

Expand All @@ -48,11 +50,11 @@ gEDE.Info.App.NameVersion := gEDE.Info.App.Name " V" gEDE.Info.App.Version
LoadConfig()

; Setup various timers
val := gEDE.config.RepeatedKeypress.Timeout.text
val := gEDE.Config.contents.RepeatedKeypress.Timeout.text
SetTimer, lExpireReprisedKeypress, %val%

; Timer to AutoHide-EDE GUI
val := gEDE.config.AutoHide.Timeout.text
val := gEDE.Config.contents.AutoHide.Timeout.text
if (val >= 0 )
SetTimer, lExpireAutoHide, %val%

Expand Down Expand Up @@ -186,11 +188,11 @@ Gui, %tabTmp%:Add, Picture, %pos_NP_ENT3% glTab%tabTmp%
; Contents of tab 2
tabTmp := 2
Gui, %tabTmp%:Add, Picture, %pos_NP_ADD% 0x800000 glTab%tabTmp% HwndhwTab%tabTmp%_Add vAdd,
TT.Add(hwTab%tabTmp%_Add,"Move to next screen","",%tabTmp%)
TT.Add(hwTab%tabTmp%_Add,"Move active window to next screen","",%tabTmp%)
Gui, %tabTmp%:Add, Picture, %pos_NP_ADD3% glTab%tabTmp% , %A_ScriptDir%\res\monitor--arrow.ico
Gui, %tabTmp%:Add, Picture, %pos_NP_ENT% 0x800000 glTab%tabTmp% HwndhwTab%tabTmp%_Ent vEnter,
TT.Add(hwTab%tabTmp%_Ent,"Locate Mousepointer","",%tabTmp%)
Gui, %tabTmp%:Add, Picture, %pos_NP_ENT3% glTab%tabTmp% , %A_ScriptDir%\res\marker.ico
Gui, %tabTmp%:Add, Picture, %pos_NP_ENT% 0x800000 glTab%tabTmp% HwndhwTab%tabTmp%_Ent vEnter,
TT.Add(hwTab%tabTmp%_Ent, "Move mouse to next screen","",%tabTmp%)
Gui, %tabTmp%:Add, Picture, %pos_NP_ENT3% glTab%tabTmp% , %A_ScriptDir%\res\mouse--arrow.ico

; Contents of tab 4
tabTmp := 4
Expand Down Expand Up @@ -245,7 +247,7 @@ $ESC:: ; <--- Hide
OutputDebug % ">[EDE] Activating Tab <" Tab ">"
ShowGui(Tab, 1)
OutputDebug % "<[EDE] " A_ThisHotkey " done"
if (gEDE.config.AutoHide.Timeout.text > 0)
if (gEDE.Config.contents.AutoHide.Timeout.text > 0)
SetTimer, lExpireAutoHide
return

Expand All @@ -269,7 +271,9 @@ $Numpad7:: ; <--- Action on the current activ EDE-Tab
$Numpad8:: ; <--- Action on the current activ EDE-Tab
$Numpad9:: ; <--- Action on the current activ EDE-Tab
id := activeTabId()
Tab%id%(SubStr(A_ThisHotkey,8)) ;
Tab%id%(SubStr(A_ThisHotkey,8))
if (gEDE.Config.contents.AutoHide.Timeout.text > 0)
SetTimer, lExpireAutoHide
Return

; ----------------------------------------------------------------------------
Expand Down Expand Up @@ -368,6 +372,7 @@ HideGui() {
TabId := activeTabId()
Gui, %TabId%:hide
gEde.State.EDEActive := 0
gEde.Temp := Object()
}

NotYetImplemented() {
Expand All @@ -381,11 +386,18 @@ Tab1(GuiControl) {
gEDE.State.Key.Previous := gEDE.State.Key.Current
gEDE.State.Key.Current := GuiControl
OutputDebug % "[EDE-Keypress] Tab: <" gEDE.State.Tab.Current.Id "> - Key: <" gEDE.State.Key.Current "> - Previous: <" gEDE.State.Key.Previous ">"

; if the Configuration contains "Border Movement" and "Original Movement" - the factors do have to be calculated dynamically depending of the current
; size of the active window. Therefore within Windy the methods "border2percent()" and "posSize2percent()" have been implemented
; The calculation has to be done initially when TAB1 is opened - therefore the window can be resized to its original size as long as TAB1 is opened.
if (gEDE.State.Key.Reprise == 0) {
gEDE.Temp.AlignConfig := gEde.Config.transformAlignConfig(gEDE.State.WinList[0])
}

; If a Numpad-Key is pressed repeatedly, cycle through the configuration ....
if (gEDE.State.Key.Previous = gEDE.State.Key.Current) {
gEDE.State.Key.Reprise := gEDE.State.Key.Reprise + 1
if (gEDE.State.Key.Reprise > gEDE.Config.align[gEDE.State.Key.Current].cnt) {
if (gEDE.State.Key.Reprise > gEDE.Temp.AlignConfig[gEDE.State.Key.Current].cnt) {
gEDE.State.Key.Reprise := 1
}
}
Expand All @@ -398,9 +410,9 @@ Tab1(GuiControl) {
TaskDialog(gEDE.State.WinList[0].hwnd, gEDE.Info.App.NameVersion " - WindowsInfo|hWnd: <" gEDE.State.WinList[0].hwnd ">|Title: <" gEDE.State.WinList[0].title ">`nGuiControl: <" gEDE.State.Key.Current ">`n", "", 1, "INFO")
}
else if(gEDE.State.Key.Current >= "1" && gEDE.State.Key.Current <= "9") { ; Any key of Numpad1 to Numpad9 is pressed ...
factors := gEDE.Config.align[gEDE.State.Key.Current].pos[gEDE.State.Key.Reprise]
OutputDebug % "*** Key "gEDE.State.Key.Current "- Reprise:" gEDE.State.Key.Reprise ":" factors.x "-" factors.y "-" factors.width "-" factors.height
gEDE.State.WinList[0].movePercental(factors.x, factors.y, factors.width, factors.height)
factors := gEDE.Temp.AlignConfig[gEDE.State.Key.Current].pos[gEDE.State.Key.Reprise]
OutputDebug % "[EDE-Align] reprise: <" gEDE.State.Key.Reprise "> - factors: " factors.dump()
gEDE.State.WinList[0].movePercental(factors.x, factors.y, factors.w, factors.h)
gEDE.State.waitForReprisedKeyPress := 1
SetTimer, lExpireReprisedKeypress
}
Expand Down Expand Up @@ -439,16 +451,15 @@ Tab2(GuiControl) {

if(gEDE.State.Key.Current == "Add") {
HideGUI()
newID := gEDE.State.WinList[0].monitorID + 1
OutputDebug % "Vor Move: " gEDE.State.WinList[0].monitorID
; Wrap on last monitor
obj := new MultiMony()
if (newID> obj.monitorsCount()) {
newID := 1
}
gEDE.State.WinList[0].monitorID := newID
OutputDebug % "Nach Move: " gEDE.State.WinList[0].monitorID
obj_mon := new Mony(gEDE.State.WinList[0].monitorID)
gEDE.State.WinList[0].monitorID := obj_mon.idNext
}
else if(gEDE.State.Key.Current == "Enter") {
obj_mouse := new Mousy()
currMonId := obj_mouse.monitorID
obj_mon := new Mony(currMonId)
obj_mouse.monitorID := obj_mon.idNext
}
else {
NotYetImplemented()
HideGUI()
Expand Down Expand Up @@ -502,7 +513,8 @@ activeTabID() {
LoadConfig() {
Global gEDE
config := new EDE_XMLConfig(A_ScriptDir "\EDE.xml")
gEde.Config := config.contents
gEde.Config := config
gEde.Temp := Object()
}

ShowgEDE() {
Expand Down
78 changes: 77 additions & 1 deletion EDE.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<Timeout unit="ms">5000</Timeout>
</AutoHide>
</General>
<Align>
<AlignOld>
<!--
Each <Dir>-node represents one direction on the compass and corresponds a key on NUMPAD (e.g. Numpad-8 is identical with north)
Each Childnode <Pos> describes window size/position which should be set, when pressing the corresponding Numpad-key.
Expand Down Expand Up @@ -67,5 +67,81 @@
<Pos x="66.67" y="0.00" width="33.33" height="50.00"/>
<Pos x="33.33" y="0.00" width="66.67" height="50.00"/>
</Dir>
</AlignOld>
<Align>
<!--
Each <Dir>-node represents one direction on the compass and corresponds a key on NUMPAD (e.g. Numpad-8 is identical with north)
Each Childnode <Pos> describes window size/position which should be set, when pressing the corresponding Numpad-key.
Multiple <Pos> children are stepped through in the given order
The value-attributes of each <Pos> are given in percents of the size of the monitor
-->
<Dir kp="1" compass="southwest">
<Pos type="border"><border>l b</border></Pos>
<Pos type="percent"><x>0.00</x><y>50.00</y><w>50.00</w><h>50.00</h></Pos>
<Pos type="percent"><x>0.00</x><y>50.00</y><w>33.33</w><h>50.00</h></Pos>
<Pos type="percent"><x>0.00</x><y>50.00</y><w>66.67</w><h>50.00</h></Pos>
<Pos type="original"></Pos>
</Dir>
<Dir kp="2" compass="south">
<Pos type="border"><border>b</border></Pos>
<Pos type="percent"><x>0.00</x><y>50.00</y><w>100.00</w><h>50.00</h></Pos>
<Pos type="percent"><x>20.00</x><y>50.00</y><w>60.0</w><h>50.00</h></Pos>
<Pos type="percent"><x>33.33</x><y>50.00</y><w>33.33</w><h>50.00</h></Pos>
<Pos type="original"></Pos>
</Dir>
<Dir kp="3" compass="southeast">
<Pos type="border"><border>r b</border></Pos>
<Pos type="percent"><x>50.00</x><y>50.00</y><w>50.00</w><h>50.00</h></Pos>
<Pos type="percent"><x>66.67</x><y>50.00</y><w>33.33</w><h>50.00</h></Pos>
<Pos type="percent"><x>33.33</x><y>50.00</y><w>66.67</w><h>50.00</h></Pos>
<Pos type="original"></Pos>
</Dir >
<Dir kp="4" compass="west">
<Pos type="border"><border>l</border></Pos>
<Pos type="percent"><x>0.00</x><y>0.00</y><w>50.00</w><h>100.00</h></Pos>
<Pos type="percent"><x>0.00</x><y>0.00</y><w>33.33</w><h>100.00</h></Pos>
<Pos type="percent"><x>0.00</x><y>0.00</y><w>66.67</w><h>100.00</h></Pos>
<Pos type="original"></Pos>
</Dir>
<Dir kp="5" compass="center">
<Pos type="border"><border>vc hc</border></Pos>
<Pos type="percent"><x>33.33</x><y>33.33</y><w>33.33</w><h>33.33</h></Pos>
<Pos type="percent"><x>25.00</x><y>25.00</y><w>50.00</w><h>50.00</h></Pos>
<Pos type="percent"><x>16.67</x><y>16.67</y><w>66.67</w><h>66.67</h></Pos>
<Pos type="percent"><x>0.00</x><y>0.00</y><w>100.00</w><h>100.00</h></Pos>
<Pos type="percent"><x>16.67</x><y>0.00</y><w>66.67</w><h>100.00</h></Pos>
<Pos type="percent"><x>33.33</x><y>0.00</y><w>33.33</w><h>100.00</h></Pos>
<Pos type="percent"><x>0.00</x><y>16.67</y><w>100.00</w><h>66.67</h></Pos>
<Pos type="percent"><x>0.00</x><y>33.33</y><w>100.00</w><h>33.33</h></Pos>
<Pos type="original"></Pos>
</Dir>
<Dir kp="6" compass="east">
<Pos type="border"><border>r</border></Pos>
<Pos type="percent"><x>50.00</x><y>0.00</y><w>50.00</w><h>100.00</h></Pos>
<Pos type="percent"><x>66.67</x><y>0.00</y><w>33.33</w><h>100.00</h></Pos>
<Pos type="percent"><x>33.33</x><y>0.00</y><w>66.67</w><h>100.00</h></Pos>
<Pos type="original"></Pos>
</Dir>
<Dir kp="7" compass="northwest">
<Pos type="border"><border>l t</border></Pos>
<Pos type="percent"><x>0.00</x><y>0.00</y><w>50.00</w><h>50.00</h></Pos>
<Pos type="percent"><x>0.00</x><y>0.00</y><w>33.33</w><h>50.00</h></Pos>
<Pos type="percent"><x>0.00</x><y>0.00</y><w>66.67</w><h>50.00</h></Pos>
<Pos type="original"></Pos>
</Dir>
<Dir kp="8" compass="north">
<Pos type="border"><border>t</border></Pos>
<Pos type="percent"><x>0.00</x><y>0.00</y><w>100.00</w><h>50.00</h></Pos>
<Pos type="percent"><x>33.33</x><y>0.00</y><w>33.33</w><h>50.00</h></Pos>
<Pos type="percent"><x>20.00</x><y>0.00</y><w>60.00</w><h>50.00</h></Pos>
<Pos type="original"></Pos>
</Dir>
<Dir kp="9" compass="northeast">
<Pos type="border"><border>r t</border></Pos>
<Pos type="percent"><x>50.00</x><y>0.00</y><w>50.00</w><h>50.00</h></Pos>
<Pos type="percent"><x>66.67</x><y>0.00</y><w>33.33</w><h>50.00</h></Pos>
<Pos type="percent"><x>33.33</x><y>0.00</y><w>66.67</w><h>50.00</h></Pos>
<Pos type="original"></Pos>
</Dir>
</Align>
</EDE_Configuration>
20 changes: 3 additions & 17 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# AHK-EDE - Enhanced Desktop Experience


Functionality for easier work with mouse and windows on desktop. Multi-Monitor support is also provided ...
Tool to handle different actions on Windows and Mouse within a Multi-Desktop-Environment

The idea is based on [WindowPad](http://http://www.autohotkey.com/board/topic/19990-windowpad-window-moving-tool)/[WindowPadX](https://github.com/hoppfrosch/WindowPadX), which basically lacks the ability to provide some windows history. Most of the functionality of [WindowPadX](https://github.com/hoppfrosch/WindowPadX) should be available at the end ...


**Author**: [[email protected]](mailto:[email protected])

----------
Expand All @@ -16,32 +16,18 @@ The idea is based on [WindowPad](http://http://www.autohotkey.com/board/topic/19
- for taking up the development on [AutoHotkey](http://l.autohotkey.net/) (aka. AHK_L)
- [WindowPad](http://http://www.autohotkey.com/board/topic/19990-windowpad-window-moving-tool) as **main inspiration**


### Ideas and libraries
- [Coco](https://gist.github.com/cocobelgica)
- [XML](https://gist.github.com/cocobelgica/4576128)-Library
- [SerDes](https://github.com/cocobelgica/AutoHotkey-SerDes)-Function (Serialize / de-serialize an AutoHotkey object structure)
- [HotKeyIt](http://www.autohotkey.com/board/user/6031-hotkeyit/)
- [TT](http://www.autohotkey.com/board/topic/60605-ahl-lv2-tt-full-blown-tooltip-library/)-Library
- [joedf](http://ahkscript.org/boards/memberlist.php?mode=viewprofile&u=55)
- [Smart WinFade](http://ahkscript.org/boards/viewtopic.php?f=6&t=512)
- [just me](https://github.com/AHK-just-me)
- [GUI Constants](https://github.com/AHK-just-me/AHK_Gui_Constants)
- Function [API_GetWindowInfo()](http://www.autohotkey.com/board/topic/69254-func-api-getwindowinfo-ahk-l/)
- [majkinetor](http://www.autohotkey.com/board/user/1763-majkinetor/)
- [Forms-Framework](https://github.com/maul-esel/FormsFramework)
- [ManaUser](http://www.autohotkey.com/board/user/3558-manauser/)
- Function `__isWindow(`) - taken from [AppsKeys](http://www.autohotkey.com/board/topic/25393-appskeys-a-suite-of-simple-utility-hotkeys/)
- [maul-esel](https://github.com/maul-esel)
- porting [Forms Framework](https://github.com/maul-esel/FormsFramework) to AHK_L
- [Uberi](http://www.autohotkey.com/board/user/12435-uberi/)
- for giving [insights in EventHooks and pointing out errors](https://github.com/Uberi/Yunit/issues/5)
- [Yunit-Framework](https://github.com/Uberi/Yunit)
- [TheGood](http://www.autohotkey.com/board/user/3956-thegood/)
- [TaskDialog](http://www.autohotkey.com/board/topic/54555-taskdialog-stdlib-compatible/)-Library
- [Yusuke Kamiyamane](http://p.yusukekamiyamane.com/)
- All icons used within EDE originate from his fantastic [Fugue-Iconset](http://p.yusukekamiyamane.com/)
- **and to everyone I might have forgotten**
- All functionality except GUI is implemented in [my](https://github.com/hoppfrosch) library [AHK_Windy](https://github.com/hoppfrosch/AHK_Windy)

### Competitors / Inspiration taken from ###

Expand Down
12 changes: 12 additions & 0 deletions Test_EDE_XMLConfig.ahk
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,20 @@
#SingleInstance force

#Include <EDE_XMLConfig>
#include <Windy\Windy>

config := new EDE_XMLConfig()

;MsgBox % strOut
WinWaitClose % "ahk_id " ObjTree(config.contents, "Configuration as AHK-object")

Run, notepad.exe
WinWait, ahk_class Notepad, , 2
WinMove, ahk_class Notepad,, 10, 10, 300, 300
_hWnd := WinExist("ahk_class Notepad")
w := new Windy(_hwnd)
AlignConfig := config.transformAlignConfig(w)
WinWaitClose % "ahk_id " ObjTree(AlignConfig, "Transformed Aligment Configuration")
w.kill()

ExitApp
1 change: 0 additions & 1 deletion YUnit
Submodule YUnit deleted from 1d24d4
Loading

0 comments on commit 776adbb

Please sign in to comment.