From a0358325e93b1229a5609b8b99a46db489fd3abe Mon Sep 17 00:00:00 2001 From: Justin Marshall Date: Sat, 4 Apr 2020 10:39:05 -0700 Subject: [PATCH] IceStudio: XY Window tabs are now on top, and the XY Window tab now displays the map name, the editor window title no longer displays the map name. --- code/framework/Licensee.h | 2 +- code/tools/radiant.net/Editor.cs | 6 + .../radiant.net/Forms/XYWndDialog.Designer.cs | 139 +++++++++--------- code/tools/radiant.net/Forms/XYWndDialog.cs | 10 ++ code/tools/radiant.net/Forms/XYWndDialog.resx | 3 + code/tools/radiant.net/Radiant.Net.csproj | 3 +- .../Radiant.Net.csprojAssemblyReference.cache | Bin 5831 -> 4468 bytes code/tools/radiant/QE3.H | 4 + code/tools/radiant/Radiant.cpp | 1 + code/tools/radiant/WIN_QE3.CPP | 11 +- radiant.net.dll | Bin 25088 -> 24064 bytes 11 files changed, 106 insertions(+), 73 deletions(-) diff --git a/code/framework/Licensee.h b/code/framework/Licensee.h index 421b2c21..2eaac129 100644 --- a/code/framework/Licensee.h +++ b/code/framework/Licensee.h @@ -92,7 +92,7 @@ If you have questions concerning this license or the applicable additional terms // editor info #define EDITOR_DEFAULT_PROJECT "doom.qe4" #define EDITOR_REGISTRY_KEY "DOOMRadiant" -#define EDITOR_WINDOWTEXT "iceStudio" +#define EDITOR_WINDOWTEXT "iceStudio64" // win32 info #define WIN32_CONSOLE_CLASS "DOOM 3 WinConsole" diff --git a/code/tools/radiant.net/Editor.cs b/code/tools/radiant.net/Editor.cs index 58188ad3..894d56ed 100644 --- a/code/tools/radiant.net/Editor.cs +++ b/code/tools/radiant.net/Editor.cs @@ -47,6 +47,12 @@ public static void InitRadiant(IntPtr ParentWindow) // inspectorDialog.Show(nativeWindow); } + [DllExport(CallingConvention = CallingConvention.Cdecl)] + public unsafe static void SetMapName(string mapName) + { + xyWndDialog.SetMapName(mapName); + } + [DllExport(CallingConvention = CallingConvention.Cdecl)] public unsafe static IntPtr GetTexWndHandle() { diff --git a/code/tools/radiant.net/Forms/XYWndDialog.Designer.cs b/code/tools/radiant.net/Forms/XYWndDialog.Designer.cs index 3973697c..664ee590 100644 --- a/code/tools/radiant.net/Forms/XYWndDialog.Designer.cs +++ b/code/tools/radiant.net/Forms/XYWndDialog.Designer.cs @@ -28,93 +28,63 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.topToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.sideToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.RenderPanel = new System.Windows.Forms.Panel(); - this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabControl = new System.Windows.Forms.TabControl(); this.xyWndTab = new System.Windows.Forms.TabPage(); this.texturesTab = new System.Windows.Forms.TabPage(); this.texWndPanel = new System.Windows.Forms.Panel(); - this.menuStrip1.SuspendLayout(); - this.tabControl1.SuspendLayout(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.topToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.sideToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.RenderPanel.SuspendLayout(); + this.tabControl.SuspendLayout(); this.xyWndTab.SuspendLayout(); this.texturesTab.SuspendLayout(); + this.menuStrip1.SuspendLayout(); this.SuspendLayout(); // - // menuStrip1 - // - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.viewToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(800, 24); - this.menuStrip1.TabIndex = 0; - this.menuStrip1.Text = "menuStrip1"; - // - // viewToolStripMenuItem - // - this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.topToolStripMenuItem, - this.sideToolStripMenuItem}); - this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; - this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); - this.viewToolStripMenuItem.Text = "&View"; - // - // topToolStripMenuItem - // - this.topToolStripMenuItem.Name = "topToolStripMenuItem"; - this.topToolStripMenuItem.Size = new System.Drawing.Size(96, 22); - this.topToolStripMenuItem.Text = "&Top"; - // - // sideToolStripMenuItem - // - this.sideToolStripMenuItem.Name = "sideToolStripMenuItem"; - this.sideToolStripMenuItem.Size = new System.Drawing.Size(96, 22); - this.sideToolStripMenuItem.Text = "&Side"; - // // RenderPanel // this.RenderPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.RenderPanel.Controls.Add(this.menuStrip1); this.RenderPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.RenderPanel.Location = new System.Drawing.Point(3, 3); this.RenderPanel.Name = "RenderPanel"; - this.RenderPanel.Size = new System.Drawing.Size(786, 388); + this.RenderPanel.Size = new System.Drawing.Size(786, 412); this.RenderPanel.TabIndex = 1; // - // tabControl1 + // tabControl // - this.tabControl1.Alignment = System.Windows.Forms.TabAlignment.Bottom; - this.tabControl1.Controls.Add(this.xyWndTab); - this.tabControl1.Controls.Add(this.texturesTab); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 24); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.Padding = new System.Drawing.Point(6, 6); - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(800, 426); - this.tabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; - this.tabControl1.TabIndex = 2; + this.tabControl.Controls.Add(this.xyWndTab); + this.tabControl.Controls.Add(this.texturesTab); + this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl.Location = new System.Drawing.Point(0, 0); + this.tabControl.Name = "tabControl"; + this.tabControl.Padding = new System.Drawing.Point(6, 6); + this.tabControl.SelectedIndex = 0; + this.tabControl.Size = new System.Drawing.Size(800, 450); + this.tabControl.SizeMode = System.Windows.Forms.TabSizeMode.FillToRight; + this.tabControl.TabIndex = 2; // // xyWndTab // this.xyWndTab.Controls.Add(this.RenderPanel); - this.xyWndTab.Location = new System.Drawing.Point(4, 4); + this.xyWndTab.Location = new System.Drawing.Point(4, 28); this.xyWndTab.Name = "xyWndTab"; this.xyWndTab.Padding = new System.Windows.Forms.Padding(3); - this.xyWndTab.Size = new System.Drawing.Size(792, 394); + this.xyWndTab.Size = new System.Drawing.Size(792, 418); this.xyWndTab.TabIndex = 0; - this.xyWndTab.Text = "XY Window"; + this.xyWndTab.Text = "World Edit: "; this.xyWndTab.UseVisualStyleBackColor = true; // // texturesTab // this.texturesTab.Controls.Add(this.texWndPanel); - this.texturesTab.Location = new System.Drawing.Point(4, 4); + this.texturesTab.Location = new System.Drawing.Point(4, 28); this.texturesTab.Name = "texturesTab"; this.texturesTab.Padding = new System.Windows.Forms.Padding(3); - this.texturesTab.Size = new System.Drawing.Size(792, 394); + this.texturesTab.Size = new System.Drawing.Size(792, 418); this.texturesTab.TabIndex = 1; this.texturesTab.Text = "Textures"; this.texturesTab.UseVisualStyleBackColor = true; @@ -124,43 +94,72 @@ private void InitializeComponent() this.texWndPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.texWndPanel.Location = new System.Drawing.Point(3, 3); this.texWndPanel.Name = "texWndPanel"; - this.texWndPanel.Size = new System.Drawing.Size(786, 388); + this.texWndPanel.Size = new System.Drawing.Size(786, 412); this.texWndPanel.TabIndex = 0; // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.viewToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(784, 24); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // viewToolStripMenuItem + // + this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.topToolStripMenuItem, + this.sideToolStripMenuItem}); + this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.viewToolStripMenuItem.Text = "&View"; + // + // topToolStripMenuItem + // + this.topToolStripMenuItem.Name = "topToolStripMenuItem"; + this.topToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.topToolStripMenuItem.Text = "&Top"; + // + // sideToolStripMenuItem + // + this.sideToolStripMenuItem.Name = "sideToolStripMenuItem"; + this.sideToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.sideToolStripMenuItem.Text = "Side"; + // // XYWndDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); - this.Controls.Add(this.tabControl1); - this.Controls.Add(this.menuStrip1); - this.MainMenuStrip = this.menuStrip1; + this.Controls.Add(this.tabControl); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "XYWndDialog"; this.ShowIcon = false; this.ShowInTaskbar = false; this.Text = "XY Window"; - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.tabControl1.ResumeLayout(false); + this.RenderPanel.ResumeLayout(false); + this.RenderPanel.PerformLayout(); + this.tabControl.ResumeLayout(false); this.xyWndTab.ResumeLayout(false); this.texturesTab.ResumeLayout(false); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); this.ResumeLayout(false); - this.PerformLayout(); } #endregion - - private System.Windows.Forms.MenuStrip menuStrip1; - private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem topToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem sideToolStripMenuItem; private System.Windows.Forms.Panel RenderPanel; - private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabControl tabControl; private System.Windows.Forms.TabPage xyWndTab; private System.Windows.Forms.TabPage texturesTab; private System.Windows.Forms.Panel texWndPanel; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem topToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem sideToolStripMenuItem; } } \ No newline at end of file diff --git a/code/tools/radiant.net/Forms/XYWndDialog.cs b/code/tools/radiant.net/Forms/XYWndDialog.cs index a39ccd59..6b5590f4 100644 --- a/code/tools/radiant.net/Forms/XYWndDialog.cs +++ b/code/tools/radiant.net/Forms/XYWndDialog.cs @@ -119,5 +119,15 @@ public IntPtr GetTexWndHWND() { return texWndPanel.Handle; } + + private void fileToolStripMenuItem_Click(object sender, EventArgs e) + { + + } + + public void SetMapName(string mapName) + { + xyWndTab.Text = "World Edit: " + mapName; + } } } diff --git a/code/tools/radiant.net/Forms/XYWndDialog.resx b/code/tools/radiant.net/Forms/XYWndDialog.resx index d5494e30..b77504be 100644 --- a/code/tools/radiant.net/Forms/XYWndDialog.resx +++ b/code/tools/radiant.net/Forms/XYWndDialog.resx @@ -120,4 +120,7 @@ 17, 17 + + 17, 17 + \ No newline at end of file diff --git a/code/tools/radiant.net/Radiant.Net.csproj b/code/tools/radiant.net/Radiant.Net.csproj index 6f1b8848..7ef40217 100644 --- a/code/tools/radiant.net/Radiant.Net.csproj +++ b/code/tools/radiant.net/Radiant.Net.csproj @@ -42,13 +42,14 @@ true - bin\x64\Release\ + ..\..\..\ TRACE true pdbonly x64 prompt MinimumRecommendedRules.ruleset + true true diff --git a/code/tools/radiant.net/obj/Release/Radiant.Net.csprojAssemblyReference.cache b/code/tools/radiant.net/obj/Release/Radiant.Net.csprojAssemblyReference.cache index 99cf210e5da546434af853982a6d6482616038d7..a776d48c5cddba2bbf2efbc3997f8db83d0cf0d2 100644 GIT binary patch delta 680 zcmZuv%}Z2K6n|%Y_r1CAz43iay&OyDLjxt71~Fz61T9*~sOSSR2nKW^LZMW+5W`vu zLW{F))vircg8m7u0-=osQBXT)>CVM;e$$N3fCtX+o_9We_ndRzm)obMkGqt=ZWxB+ z+!WL%KnVn}Qlgf{J1QZYzp2%$0YdQVG(ZceG}rA#eyyh+M?M`vrCY9B&dZ{UG!Kvw zu=x>-csYe&f z9g%SQ>GPHKXHV9a9X*O{{0SW)ESP?@mjEw)?^*($TPnr`6nf=5@dUq%M{7QqTCE;# dJzmUB{oWcS6rmNm6(5~iZ)fiA4m&%u%*?hF zNo-6^)cC-JKmITwny5cajEPaB{E(Lcc+TvDvP>GPtirVO z&7Iw|_ndp~ch5QZGAzR|m*B!DUiChJM+P*-GHo;ENZSgUu1dqi&e~GKv}ki^AGK`F zG`gd4DJn&zNOLGr(4B%syA4`!ETT7u_7ui-P1!}KhRrNBy2m3esd%bA6^*L#2x%ca zDqHQXBROR|G?#RULs3dhX*zY^>Q)rL0xNW#Dh`-nOZ~*oIAmO>Xth`ez#+^k8UTUd zZj-2eL~%?jP#TYrFmrigQL7O^LRYReVp%6%YDCrv9WOM}~oFTYK+N^Me9E*bb>PM1_&_oH(r zYN@D~I7C87QfK=?hZ@Kw+tn?A?o2Ip;~;ly#sOEG2-?(IYI8@5J`IAVTrD*{pc$$; zX-j>kl`Fb(9;i&$Qf042CN(4Nda@prk(wyW*@|iD+PJF*7eYRLME$O;6t>!+v*6lpc_P$hUtiDZUY z#R*ve>T0@PF}tA$8!_}E*~D8B79uP{Sd6d)VJX5ggyjggA*?`HiEul@DgYik*m!v~ zGjnN?1#V{Bh|%0_Vf3xbnJNc&)<+CZrFq+LV-B==%bB2-FJ&-{&*x(qQD8CYF;BHl zkDNO#V6qGbgZ>acA+|@PmPkvqlVQ<*w4+*Zb+sUl(MxbmwIKSzOYn|rLG+cE;M!_I z^rx2~ro$@+gFg2Xyt7&m=fz9#u4+M?J1@cYRf0UuZw=;>gUN)sY_4Vr5}&G4DWy*h zLK3f}OPu%O>OHu-VNBvigk}K$ zJpjRp7_dAZX^*utEUr1PX_Q>S8Os6JrI%p1N{~l)&S|U|p!f{2dj>fJX3Lk)*5$KK z9V}WtrIWNBQ1S(0DH)VW?DQ#G02-MdJuQNWTQE8TM(A;3(?FI^<%wqT#7;U^K(mub zfFS-dU+95OL@k#qxRtM9(HzO=smic{02aScn6khr2ovy_U&=P+B3EFAcSJoc^vsTQO!o(;@h%tl~ z0E}wx{WvtZuVA0@&#cEj0uxxckBu<`Hw~SA37!4BL0!=&YVfxKWHDNIg~Q?At}vAA zZVnDta&Q=DI9yKlVee!ghGZXxWFMZ*Q<$n?wZl5#adF(dR7KC-fK+V=w-SG8)$`Su&&^R_5m1gYeaYKJCTl$VvJf?QE zC{YrNsi`=w+F$_VbHxwboEVAmO56g_gz+7(2JG_~+&%{C1#X&Qj>3x{1>t=t*%M`8 zd(6V$$wkLT-}pUw`0ZUy?1>+_MgGs;T=;y7{9$JsN3sw9bm?g9`1IZ-g?GQ7|I3-r z&#pZA-TA&X-~2iK%BsW7PbN0+S(Vto?!vvPk+(YZ{tp&^v_L$u=eI9jKJf8H`M##t zzdrKZONqenxvjg*$0lEVRX)`{@a(q_oj4LaYV`kn{;yLP->*O2fZ+-^uf7+C&TLw~ z=7+r;#;&T+3&t}3u>rE*wBVr`_;3qCacqcAXt)gq2}Xbmc{1~AK&Bmo`^I+#E{7{z z!Q$E|hjM6EuKKOe9IRxOnI}t_uCIxO+-+5RYPq U;H1M!1Hh4Q9~9NaZ4f)}Z)Oqn6#xJL diff --git a/code/tools/radiant/QE3.H b/code/tools/radiant/QE3.H index 6f2fe116..6e3c5f55 100644 --- a/code/tools/radiant/QE3.H +++ b/code/tools/radiant/QE3.H @@ -80,6 +80,8 @@ const float HUGE_DISTANCE = 100000; struct RadiantNetInterface_t { void(__cdecl *InitRadiant)(void *hwnd); void(__cdecl *ShowEntitySelection)(const char *list); + void(__cdecl* SetMapName)(const char* list); + void(__cdecl *ToggleProgressDialog)(bool showDialog, const char *mapName, const char * workString, float completedPercent); bool(__cdecl *ProgressBarUserCancaled)(void); void(__cdecl *RedrawCameraWindow)(); @@ -90,6 +92,8 @@ struct RadiantNetInterface_t { HWND(__cdecl *GetXYDialogHandle)(); HDC(__cdecl *GetTexWndHandle)(); + + }; extern RadiantNetInterface_t radiantNetInterface; diff --git a/code/tools/radiant/Radiant.cpp b/code/tools/radiant/Radiant.cpp index 2fc9d469..0f100816 100644 --- a/code/tools/radiant/Radiant.cpp +++ b/code/tools/radiant/Radiant.cpp @@ -347,6 +347,7 @@ void RadiantDotNetInit(void) { radiantNetInterface.GetXYDialogHandle = (HWND(__cdecl *)(void))sys->DLL_GetProcAddress(g_radiant_net_dll, "GetXYDialogHandle"); radiantNetInterface.GetTexWndHandle = (HDC(__cdecl *)(void))sys->DLL_GetProcAddress(g_radiant_net_dll, "GetTexWndHandle"); + radiantNetInterface.SetMapName = (void(__cdecl*)(const char *))sys->DLL_GetProcAddress(g_radiant_net_dll, "SetMapName"); HWND hwnd = g_pParentWnd->GetSafeHwnd(); radiantNetInterface.InitRadiant((void *)hwnd); diff --git a/code/tools/radiant/WIN_QE3.CPP b/code/tools/radiant/WIN_QE3.CPP index 41656278..af59dd76 100644 --- a/code/tools/radiant/WIN_QE3.CPP +++ b/code/tools/radiant/WIN_QE3.CPP @@ -61,7 +61,16 @@ void Sys_MarkMapModified(void) { ======================================================================================================================= */ void Sys_SetTitle(const char *text) { - g_pParentWnd->SetWindowText(va("%s: %s", EDITOR_WINDOWTEXT, text)); + idStr mapName = text; + + g_pParentWnd->SetWindowText(EDITOR_WINDOWTEXT); + + if(mapName == "unnamed.map") { + radiantNetInterface.SetMapName("unnamed.map"); + } + else { + radiantNetInterface.SetMapName(fileSystem->OSPathToRelativePath(text)); + } } /* diff --git a/radiant.net.dll b/radiant.net.dll index 0f290f0ea6b1fbea67475933714cb5f1acab663a..ac444d31742619268a703bceba15f6da9559e1e3 100644 GIT binary patch literal 24064 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 F{{lTuTyFpX literal 25088 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