about summary refs log tree commit diff
path: root/src/game/editor/ed_popups.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/editor/ed_popups.cpp')
-rw-r--r--src/game/editor/ed_popups.cpp80
1 files changed, 77 insertions, 3 deletions
diff --git a/src/game/editor/ed_popups.cpp b/src/game/editor/ed_popups.cpp
index dc239cc9..98b0039a 100644
--- a/src/game/editor/ed_popups.cpp
+++ b/src/game/editor/ed_popups.cpp
@@ -127,7 +127,10 @@ int CEditor::PopupGroup(CEditor *pEditor, CUIRect View)
 					}
 
 					if(!Found)
+					{
 						gl->m_pTiles[y*gl->m_Width+x].m_Index = TILE_AIR;
+						pEditor->m_Map.m_Modified = true;
+					}
 				}
 
 			return 1;
@@ -198,6 +201,9 @@ int CEditor::PopupGroup(CEditor *pEditor, CUIRect View)
 		aProps[PROP_POS_X].m_pName = 0;
 		
 	int Prop = pEditor->DoProperties(&View, aProps, s_aIds, &NewVal);
+	if(Prop != -1)
+		pEditor->m_Map.m_Modified = true;
+
 	if(Prop == PROP_ORDER)
 		pEditor->m_SelectedGroup = pEditor->m_Map.SwapGroups(pEditor->m_SelectedGroup, NewVal);
 		
@@ -261,7 +267,9 @@ int CEditor::PopupLayer(CEditor *pEditor, CUIRect View)
 	
 	static int s_aIds[NUM_PROPS] = {0};
 	int NewVal = 0;
-	int Prop = pEditor->DoProperties(&View, aProps, s_aIds, &NewVal);		
+	int Prop = pEditor->DoProperties(&View, aProps, s_aIds, &NewVal);
+	if(Prop != -1)
+		pEditor->m_Map.m_Modified = true;
 	
 	if(Prop == PROP_ORDER)
 		pEditor->m_SelectedLayer = pCurrentGroup->SwapLayers(pEditor->m_SelectedLayer, NewVal);
@@ -299,6 +307,7 @@ int CEditor::PopupQuad(CEditor *pEditor, CUIRect View)
 		CLayerQuads *pLayer = (CLayerQuads *)pEditor->GetSelectedLayerType(0, LAYERTYPE_QUADS);
 		if(pLayer)
 		{
+			pEditor->m_Map.m_Modified = true;
 			pLayer->m_lQuads.remove_index(pEditor->m_SelectedQuad);
 			pEditor->m_SelectedQuad--;
 		}
@@ -332,6 +341,7 @@ int CEditor::PopupQuad(CEditor *pEditor, CUIRect View)
 			pQuad->m_aPoints[1].x = Right; pQuad->m_aPoints[1].y = Top;
 			pQuad->m_aPoints[2].x = Left; pQuad->m_aPoints[2].y = Top+Height;
 			pQuad->m_aPoints[3].x = Right; pQuad->m_aPoints[3].y = Top+Height;
+			pEditor->m_Map.m_Modified = true;
 			return 1;
 		}
 		View.HSplitBottom(6.0f, &View, &Button);
@@ -360,6 +370,7 @@ int CEditor::PopupQuad(CEditor *pEditor, CUIRect View)
 		pQuad->m_aPoints[1].x = Right; pQuad->m_aPoints[1].y = Top;
 		pQuad->m_aPoints[2].x = Left; pQuad->m_aPoints[2].y = Bottom;
 		pQuad->m_aPoints[3].x = Right; pQuad->m_aPoints[3].y = Bottom;
+		pEditor->m_Map.m_Modified = true;
 		return 1;
 	}
 
@@ -384,7 +395,9 @@ int CEditor::PopupQuad(CEditor *pEditor, CUIRect View)
 	
 	static int s_aIds[NUM_PROPS] = {0};
 	int NewVal = 0;
-	int Prop = pEditor->DoProperties(&View, aProps, s_aIds, &NewVal);		
+	int Prop = pEditor->DoProperties(&View, aProps, s_aIds, &NewVal);
+	if(Prop != -1)
+		pEditor->m_Map.m_Modified = true;
 	
 	if(Prop == PROP_POS_ENV) pQuad->m_PosEnv = clamp(NewVal-1, -1, pEditor->m_Map.m_lEnvelopes.size()-1);
 	if(Prop == PROP_POS_ENV_OFFSET) pQuad->m_PosEnvOffset = NewVal;
@@ -440,6 +453,7 @@ int CEditor::PopupPoint(CEditor *pEditor, CUIRect View)
 				pQuad->m_aColors[v].a = NewVal&0xff;
 			}
 		}
+		pEditor->m_Map.m_Modified = true;
 	}
 	
 	return 0;	
@@ -447,7 +461,7 @@ int CEditor::PopupPoint(CEditor *pEditor, CUIRect View)
 
 int CEditor::PopupNewFolder(CEditor *pEditor, CUIRect View)
 {
-	CUIRect Label, ButtonBar, Origin = View;
+	CUIRect Label, ButtonBar;
 
 	// title
 	View.HSplitTop(10.0f, 0, &View);
@@ -514,6 +528,66 @@ int CEditor::PopupNewFolder(CEditor *pEditor, CUIRect View)
 	return 0;	
 }
 
+int CEditor::PopupEvent(CEditor *pEditor, CUIRect View)
+{
+	CUIRect Label, ButtonBar;
+
+	// title
+	View.HSplitTop(10.0f, 0, &View);
+	View.HSplitTop(30.0f, &Label, &View);
+	if(pEditor->m_PopupEventType == POPEVENT_EXIT)
+		pEditor->UI()->DoLabel(&Label, "Exit the editor", 20.0f, 0);
+	else if(pEditor->m_PopupEventType == POPEVENT_LOAD)
+		pEditor->UI()->DoLabel(&Label, "Load map", 20.0f, 0);
+	else if(pEditor->m_PopupEventType == POPEVENT_NEW)
+		pEditor->UI()->DoLabel(&Label, "New map", 20.0f, 0);
+	else if(pEditor->m_PopupEventType == POPEVENT_SAVE)
+		pEditor->UI()->DoLabel(&Label, "Save map", 20.0f, 0);
+
+	View.HSplitBottom(10.0f, &View, 0);
+	View.HSplitBottom(20.0f, &View, &ButtonBar);	
+
+	// notification text
+	View.HSplitTop(30.0f, 0, &View);
+	View.VMargin(40.0f, &View);
+	View.HSplitTop(20.0f, &Label, &View);
+	if(pEditor->m_PopupEventType == POPEVENT_EXIT)
+		pEditor->UI()->DoLabel(&Label, "The map contains unsaved data, you might want to save it before you exit the editor.\nContinue anyway?", 10.0f, -1, Label.w-10.0f);
+	else if(pEditor->m_PopupEventType == POPEVENT_LOAD)
+		pEditor->UI()->DoLabel(&Label, "The map contains unsaved data, you might want to save it before you load a new map.\nContinue anyway?", 10.0f, -1, Label.w-10.0f);
+	else if(pEditor->m_PopupEventType == POPEVENT_NEW)
+		pEditor->UI()->DoLabel(&Label, "The map contains unsaved data, you might want to save it before you create a new map.\nContinue anyway?", 10.0f, -1, Label.w-10.0f);
+	else if(pEditor->m_PopupEventType == POPEVENT_SAVE)
+		pEditor->UI()->DoLabel(&Label, "The file already exists.\nDo you want to overwrite the map?", 10.0f, -1);
+
+	// button bar
+	ButtonBar.VSplitLeft(30.0f, 0, &ButtonBar);
+	ButtonBar.VSplitLeft(110.0f, &Label, &ButtonBar);
+	static int s_OkButton = 0;
+	if(pEditor->DoButton_Editor(&s_OkButton, "Ok", 0, &Label, 0, 0))
+	{
+		if(pEditor->m_PopupEventType == POPEVENT_EXIT)
+			g_Config.m_ClEditor = 0;
+		else if(pEditor->m_PopupEventType == POPEVENT_LOAD)
+			pEditor->InvokeFileDialog(IStorage::TYPE_ALL, FILETYPE_MAP, "Load map", "Load", "maps", "", pEditor->CallbackOpenMap, pEditor);
+		else if(pEditor->m_PopupEventType == POPEVENT_NEW)
+		{
+			pEditor->Reset();
+			pEditor->m_aFileName[0] = 0;
+		}
+		else if(pEditor->m_PopupEventType == POPEVENT_SAVE)
+			pEditor->CallbackSaveMap(pEditor->m_aFileSaveName, IStorage::TYPE_SAVE, pEditor);
+		return 1;
+	}
+	ButtonBar.VSplitRight(30.0f, &ButtonBar, 0);
+	ButtonBar.VSplitRight(110.0f, &ButtonBar, &Label);
+	static int s_AbortButton = 0;
+	if(pEditor->DoButton_Editor(&s_AbortButton, "Abort", 0, &Label, 0, 0))
+		return 1;
+
+	return 0;
+}
+
 
 static int g_SelectImageSelected = -100;
 static int g_SelectImageCurrent = -100;