]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/camera/funchandlers.cpp
more eol-style
[xonotic/netradiant.git] / contrib / camera / funchandlers.cpp
index 97e861ebd16ec21e1afd188db967806ecb3255f4..30f11b5f90627f29111cdb384cc4e54e36880864 100644 (file)
-/*\r
-Copyright (C) 1999-2007 id Software, Inc. and contributors.\r
-For a list of contributors, see the accompanying CONTRIBUTORS file.\r
-\r
-This file is part of GtkRadiant.\r
-\r
-GtkRadiant is free software; you can redistribute it and/or modify\r
-it under the terms of the GNU General Public License as published by\r
-the Free Software Foundation; either version 2 of the License, or\r
-(at your option) any later version.\r
-\r
-GtkRadiant is distributed in the hope that it will be useful,\r
-but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-GNU General Public License for more details.\r
-\r
-You should have received a copy of the GNU General Public License\r
-along with GtkRadiant; if not, write to the Free Software\r
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
-*/\r
-\r
-/*\r
-Camera plugin for GtkRadiant\r
-Copyright (C) 2002 Splash Damage Ltd.\r
-*/\r
-\r
-#include "camera.h"\r
-\r
-extern GtkWidget *g_pEditModeAddRadioButton;\r
-\r
-char* Q_realpath(const char *path, char *resolved_path, size_t size)\r
-{\r
-#if defined  (__linux__) || defined (__APPLE__)\r
-       return realpath(path, resolved_path);\r
-#else\r
-       return _fullpath(resolved_path, path, size);    \r
-#endif\r
-}\r
-\r
-static void DoNewCamera( idCameraPosition::positionType type )\r
-{\r
-       CCamera *cam = AllocCam();\r
-\r
-       if( cam ) {\r
-               char buf[128];\r
-               sprintf( buf, "camera%i", cam->GetCamNum() );\r
-\r
-               cam->GetCam()->startNewCamera( type );\r
-               cam->GetCam()->setName( buf );\r
-               cam->GetCam()->buildCamera();\r
-\r
-               sprintf( buf, "Unsaved Camera %i", cam->GetCamNum() );\r
-               cam->SetFileName( buf, false );\r
-\r
-               SetCurrentCam( cam );\r
-               RefreshCamListCombo();\r
-\r
-               // Go to editmode Add\r
-               gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(g_pEditModeAddRadioButton), TRUE );\r
-\r
-               // Show the camera inspector\r
-               DoCameraInspector();\r
-\r
-               // Start edit mode (if not initiated by DoCameraInspector)\r
-               if( !g_bEditOn )\r
-                       DoStartEdit( GetCurrentCam() );\r
-       } else {\r
-      g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free cameras available.", "Create Camera Error", MB_OK, NULL );\r
-       }\r
-}\r
-\r
-void DoNewFixedCamera()\r
-{\r
-       DoNewCamera( idCameraPosition::FIXED );\r
-}\r
-\r
-void DoNewInterpolatedCamera()\r
-{\r
-       DoNewCamera( idCameraPosition::INTERPOLATED );\r
-}\r
-\r
-void DoNewSplineCamera()\r
-{\r
-       DoNewCamera( idCameraPosition::SPLINE );\r
-}\r
-\r
-void DoCameraInspector()\r
-{\r
-  gtk_widget_show( g_pCameraInspectorWnd );\r
-}\r
-\r
-void DoPreviewCamera()\r
-{\r
-       if( GetCurrentCam() ) {\r
-               g_iPreviewRunning = 1;\r
-               g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );\r
-       }\r
-}\r
-\r
-void DoLoadCamera()\r
-{\r
-  char basepath[PATH_MAX];\r
-\r
-       if( firstCam && firstCam->HasBeenSaved() )\r
-    ExtractFilePath( firstCam->GetFileName(), basepath );\r
-  else\r
-    strcpy( basepath, g_FuncTable.m_pfnGetGamePath() );\r
-\r
-  const gchar *filename = g_FuncTable.m_pfnFileDialog( (GtkWidget *)g_pRadiantWnd, TRUE, "Open Camera File", basepath, "camera");\r
-\r
-  if( filename )\r
-       {\r
-    CCamera *cam = AllocCam();\r
-    char fullpathtofile[PATH_MAX];\r
-\r
-    if( cam ) {\r
-                       Q_realpath(filename, fullpathtofile, PATH_MAX);\r
-\r
-      // see if this camera file was already loaded\r
-      CCamera *checkCam = firstCam->GetNext();  // not the first one as we just allocated it\r
-      while( checkCam ) {\r
-        if( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) {\r
-          char error[PATH_MAX+64];\r
-          FreeCam( cam );\r
-          sprintf( error, "Camera file \'%s\' is already loaded", fullpathtofile );\r
-          g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL );\r
-          //g_free( filename );\r
-          return;\r
-        }\r
-        checkCam = checkCam->GetNext();\r
-      }\r
-\r
-                       if( loadCamera( cam->GetCamNum(), fullpathtofile ) ) {\r
-                               cam->GetCam()->buildCamera();\r
-        cam->SetFileName( filename, true );\r
-        SetCurrentCam( cam );\r
-        RefreshCamListCombo();\r
-        g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );\r
-      } else {\r
-        char error[PATH_MAX+64];\r
-        FreeCam( cam );\r
-        sprintf( error, "An error occured during the loading of \'%s\'", fullpathtofile );\r
-        g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL );\r
-      }\r
-\r
-      //g_free( filename );\r
-    } else {\r
-               g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free camera slots available", "Load error", MB_OK, NULL );\r
-         }\r
-       }\r
-}\r
-\r
-void DoSaveCamera() {\r
-  char basepath[PATH_MAX];\r
-\r
-  if( !GetCurrentCam() )\r
-    return;\r
-\r
-  if( GetCurrentCam()->GetFileName()[0] )\r
-    ExtractFilePath( GetCurrentCam()->GetFileName(), basepath );\r
-  else\r
-    strcpy( basepath, g_FuncTable.m_pfnGetGamePath() );\r
-\r
-  const gchar *filename = g_FuncTable.m_pfnFileDialog( (void *)g_pRadiantWnd, FALSE, "Save Camera File", basepath, "camera");\r
-\r
-  if( filename ) {\r
-    char fullpathtofile[PATH_MAX + 8];\r
-\r
-    Q_realpath(filename, fullpathtofile, PATH_MAX);\r
-\r
-               // File dialog from windows (and maybe the gtk one from radiant) doesn't handle default extensions properly.\r
-               // Add extension and check again if file exists\r
-               if( strcmp( fullpathtofile + (strlen(fullpathtofile) - 7), ".camera" ) ) {\r
-                       strcat( fullpathtofile, ".camera" );\r
-\r
-                       if( FileExists( fullpathtofile ) ) {\r
-                               if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "File already exists.\nOverwrite?", "Save Camera File", MB_YESNO, NULL ) == IDNO ) {\r
-                                       return;\r
-                               }\r
-                       }\r
-               }\r
-\r
-         // see if this camera file was already loaded\r
-    CCamera *checkCam = firstCam;\r
-    while( checkCam ) {\r
-      if( checkCam == GetCurrentCam() ) {\r
-        checkCam = checkCam->GetNext();\r
-                               if( !checkCam ) // we only have one camera file opened so no need to check further\r
-                                       break;\r
-      } else if( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) {\r
-        char error[PATH_MAX+64];\r
-        sprintf( error, "Camera file \'%s\' is currently loaded by GtkRadiant.\nPlease select a different filename.", fullpathtofile );\r
-               g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Save error", MB_OK, NULL );\r
-        return;\r
-      }\r
-      checkCam = checkCam->GetNext();\r
-    }\r
-\r
-    // FIXME: check for existing directory\r
-\r
-    GetCurrentCam()->GetCam()->save( fullpathtofile );\r
-               GetCurrentCam()->SetFileName( fullpathtofile, true );\r
-               RefreshCamListCombo();\r
-  }\r
-}\r
-\r
-void DoUnloadCamera() {\r
-  if( !GetCurrentCam() )\r
-    return;\r
-\r
-       if( !GetCurrentCam()->HasBeenSaved() ) {\r
-               char buf[PATH_MAX+64];\r
-               sprintf( buf, "Do you want to save the changes for camera '%s'?", GetCurrentCam()->GetCam()->getName() );\r
-               if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, buf, "Warning", MB_YESNO, NULL ) == IDYES ) {\r
-                       DoSaveCamera();\r
-               }\r
-       } else if( GetCurrentCam()->HasBeenSaved() == 2 ) {\r
-               char buf[PATH_MAX+64];\r
-               sprintf( buf, "Do you want to save the changes made to camera file '%s'?", GetCurrentCam()->GetFileName() );\r
-               if( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, buf, "Warning", MB_YESNO, NULL ) == IDYES ) {\r
-                       DoSaveCamera();\r
-               }\r
-       }\r
-\r
-  if( g_pCurrentEditCam ) {\r
-    DoStopEdit();\r
-    g_pCurrentEditCam = NULL;\r
-  }\r
-\r
-       FreeCam( GetCurrentCam() );\r
-       SetCurrentCam( NULL );\r
-       RefreshCamListCombo();\r
-}\r
-\r
-CCamera *g_pCurrentEditCam = NULL;\r
-\r
-void DoStartEdit( CCamera *cam ) {\r
-  if( g_pCurrentEditCam ) {\r
-    DoStopEdit();\r
-    g_pCurrentEditCam = NULL;\r
-  }\r
-\r
-  if( cam ) {\r
-    g_bEditOn = true;\r
-\r
-    if( !Listener )\r
-      Listener = new CListener;\r
-\r
-    cam->GetCam()->startEdit( g_iActiveTarget < 0 ? true : false );\r
-\r
-    g_pCurrentEditCam = cam;\r
-\r
-    g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );\r
-  }\r
-}\r
-\r
-void DoStopEdit( void ) {\r
-  g_bEditOn = false;\r
-\r
-  if( Listener ) {\r
-      delete Listener;\r
-      Listener = NULL;\r
-  }\r
-\r
-  if( g_pCurrentEditCam ) {\r
-    // stop editing on the current cam\r
-    g_pCurrentEditCam->GetCam()->stopEdit();\r
-    g_pCurrentEditCam = NULL;\r
-\r
-    g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );\r
-  }\r
-}\r
+/*
+Copyright (C) 1999-2007 id Software, Inc. and contributors.
+For a list of contributors, see the accompanying CONTRIBUTORS file.
+
+This file is part of GtkRadiant.
+
+GtkRadiant 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 2 of the License, or
+(at your option) any later version.
+
+GtkRadiant 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 GtkRadiant; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+/*
+Camera plugin for GtkRadiant
+Copyright (C) 2002 Splash Damage Ltd.
+*/
+
+#include "camera.h"
+
+extern GtkWidget *g_pEditModeAddRadioButton;
+
+char* Q_realpath(const char *path, char *resolved_path, size_t size)
+{
+#if defined  (__linux__) || defined (__APPLE__)
+       return realpath(path, resolved_path);
+#else
+       return _fullpath(resolved_path, path, size);    
+#endif
+}
+
+static void DoNewCamera( idCameraPosition::positionType type )
+{
+       CCamera *cam = AllocCam();
+
+       if( cam ) {
+               char buf[128];
+               sprintf( buf, "camera%i", cam->GetCamNum() );
+
+               cam->GetCam()->startNewCamera( type );
+               cam->GetCam()->setName( buf );
+               cam->GetCam()->buildCamera();
+
+               sprintf( buf, "Unsaved Camera %i", cam->GetCamNum() );
+               cam->SetFileName( buf, false );
+
+               SetCurrentCam( cam );
+               RefreshCamListCombo();
+
+               // Go to editmode Add
+               gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(g_pEditModeAddRadioButton), TRUE );
+
+               // Show the camera inspector
+               DoCameraInspector();
+
+               // Start edit mode (if not initiated by DoCameraInspector)
+               if( !g_bEditOn )
+                       DoStartEdit( GetCurrentCam() );
+       } else {
+      g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free cameras available.", "Create Camera Error", MB_OK, NULL );
+       }
+}
+
+void DoNewFixedCamera()
+{
+       DoNewCamera( idCameraPosition::FIXED );
+}
+
+void DoNewInterpolatedCamera()
+{
+       DoNewCamera( idCameraPosition::INTERPOLATED );
+}
+
+void DoNewSplineCamera()
+{
+       DoNewCamera( idCameraPosition::SPLINE );
+}
+
+void DoCameraInspector()
+{
+  gtk_widget_show( g_pCameraInspectorWnd );
+}
+
+void DoPreviewCamera()
+{
+       if( GetCurrentCam() ) {
+               g_iPreviewRunning = 1;
+               g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
+       }
+}
+
+void DoLoadCamera()
+{
+  char basepath[PATH_MAX];
+
+       if( firstCam && firstCam->HasBeenSaved() )
+    ExtractFilePath( firstCam->GetFileName(), basepath );
+  else
+    strcpy( basepath, g_FuncTable.m_pfnGetGamePath() );
+
+  const gchar *filename = g_FuncTable.m_pfnFileDialog( (GtkWidget *)g_pRadiantWnd, TRUE, "Open Camera File", basepath, "camera");
+
+  if( filename )
+       {
+    CCamera *cam = AllocCam();
+    char fullpathtofile[PATH_MAX];
+
+    if( cam ) {
+                       Q_realpath(filename, fullpathtofile, PATH_MAX);
+
+      // see if this camera file was already loaded
+      CCamera *checkCam = firstCam->GetNext();  // not the first one as we just allocated it
+      while( checkCam ) {
+        if( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) {
+          char error[PATH_MAX+64];
+          FreeCam( cam );
+          sprintf( error, "Camera file \'%s\' is already loaded", fullpathtofile );
+          g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL );
+          //g_free( filename );
+          return;
+        }
+        checkCam = checkCam->GetNext();
+      }
+
+                       if( loadCamera( cam->GetCamNum(), fullpathtofile ) ) {
+                               cam->GetCam()->buildCamera();
+        cam->SetFileName( filename, true );
+        SetCurrentCam( cam );
+        RefreshCamListCombo();
+        g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
+      } else {
+        char error[PATH_MAX+64];
+        FreeCam( cam );
+        sprintf( error, "An error occured during the loading of \'%s\'", fullpathtofile );
+        g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Load error", MB_OK, NULL );
+      }
+
+      //g_free( filename );
+    } else {
+               g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "No free camera slots available", "Load error", MB_OK, NULL );
+         }
+       }
+}
+
+void DoSaveCamera() {
+  char basepath[PATH_MAX];
+
+  if( !GetCurrentCam() )
+    return;
+
+  if( GetCurrentCam()->GetFileName()[0] )
+    ExtractFilePath( GetCurrentCam()->GetFileName(), basepath );
+  else
+    strcpy( basepath, g_FuncTable.m_pfnGetGamePath() );
+
+  const gchar *filename = g_FuncTable.m_pfnFileDialog( (void *)g_pRadiantWnd, FALSE, "Save Camera File", basepath, "camera");
+
+  if( filename ) {
+    char fullpathtofile[PATH_MAX + 8];
+
+    Q_realpath(filename, fullpathtofile, PATH_MAX);
+
+               // File dialog from windows (and maybe the gtk one from radiant) doesn't handle default extensions properly.
+               // Add extension and check again if file exists
+               if( strcmp( fullpathtofile + (strlen(fullpathtofile) - 7), ".camera" ) ) {
+                       strcat( fullpathtofile, ".camera" );
+
+                       if( FileExists( fullpathtofile ) ) {
+                               if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, "File already exists.\nOverwrite?", "Save Camera File", MB_YESNO, NULL ) == IDNO ) {
+                                       return;
+                               }
+                       }
+               }
+
+         // see if this camera file was already loaded
+    CCamera *checkCam = firstCam;
+    while( checkCam ) {
+      if( checkCam == GetCurrentCam() ) {
+        checkCam = checkCam->GetNext();
+                               if( !checkCam ) // we only have one camera file opened so no need to check further
+                                       break;
+      } else if( !strcmp( fullpathtofile, checkCam->GetFileName() ) ) {
+        char error[PATH_MAX+64];
+        sprintf( error, "Camera file \'%s\' is currently loaded by GtkRadiant.\nPlease select a different filename.", fullpathtofile );
+               g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, error, "Save error", MB_OK, NULL );
+        return;
+      }
+      checkCam = checkCam->GetNext();
+    }
+
+    // FIXME: check for existing directory
+
+    GetCurrentCam()->GetCam()->save( fullpathtofile );
+               GetCurrentCam()->SetFileName( fullpathtofile, true );
+               RefreshCamListCombo();
+  }
+}
+
+void DoUnloadCamera() {
+  if( !GetCurrentCam() )
+    return;
+
+       if( !GetCurrentCam()->HasBeenSaved() ) {
+               char buf[PATH_MAX+64];
+               sprintf( buf, "Do you want to save the changes for camera '%s'?", GetCurrentCam()->GetCam()->getName() );
+               if ( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, buf, "Warning", MB_YESNO, NULL ) == IDYES ) {
+                       DoSaveCamera();
+               }
+       } else if( GetCurrentCam()->HasBeenSaved() == 2 ) {
+               char buf[PATH_MAX+64];
+               sprintf( buf, "Do you want to save the changes made to camera file '%s'?", GetCurrentCam()->GetFileName() );
+               if( g_FuncTable.m_pfnMessageBox( (GtkWidget *)g_pRadiantWnd, buf, "Warning", MB_YESNO, NULL ) == IDYES ) {
+                       DoSaveCamera();
+               }
+       }
+
+  if( g_pCurrentEditCam ) {
+    DoStopEdit();
+    g_pCurrentEditCam = NULL;
+  }
+
+       FreeCam( GetCurrentCam() );
+       SetCurrentCam( NULL );
+       RefreshCamListCombo();
+}
+
+CCamera *g_pCurrentEditCam = NULL;
+
+void DoStartEdit( CCamera *cam ) {
+  if( g_pCurrentEditCam ) {
+    DoStopEdit();
+    g_pCurrentEditCam = NULL;
+  }
+
+  if( cam ) {
+    g_bEditOn = true;
+
+    if( !Listener )
+      Listener = new CListener;
+
+    cam->GetCam()->startEdit( g_iActiveTarget < 0 ? true : false );
+
+    g_pCurrentEditCam = cam;
+
+    g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
+  }
+}
+
+void DoStopEdit( void ) {
+  g_bEditOn = false;
+
+  if( Listener ) {
+      delete Listener;
+      Listener = NULL;
+  }
+
+  if( g_pCurrentEditCam ) {
+    // stop editing on the current cam
+    g_pCurrentEditCam->GetCam()->stopEdit();
+    g_pCurrentEditCam = NULL;
+
+    g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
+  }
+}