Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/python/api2_2x/Window.c')
-rw-r--r--source/blender/python/api2_2x/Window.c1585
1 files changed, 0 insertions, 1585 deletions
diff --git a/source/blender/python/api2_2x/Window.c b/source/blender/python/api2_2x/Window.c
deleted file mode 100644
index 40f6d52d8da..00000000000
--- a/source/blender/python/api2_2x/Window.c
+++ /dev/null
@@ -1,1585 +0,0 @@
-/*
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * This is a new part of Blender.
- *
- * Contributor(s): Willian P. Germano, Tom Musgrove, Michael Reimpell,
- * Yann Vernier, Ken Hughes
- *
- * ***** END GPL LICENSE BLOCK *****
-*/
-
-#include <Python.h>
-
-#include "BDR_editobject.h" /* enter / leave editmode */
-#include "BKE_global.h"
-#include "BKE_main.h"
-#include "BKE_object.h" /* for during_script() and during_scriptlink() */
-#include "BKE_scene.h" /* scene_find_camera() */
-#include "BIF_mywindow.h"
-#include "BIF_imasel.h"
-#include "BSE_headerbuttons.h"
-#include "BSE_filesel.h"
-#include "BIF_editmesh.h" /* for undo_push_mesh() */
-#include "BIF_screen.h"
-#include "BIF_space.h"
-#include "BIF_drawtext.h"
-#include "BIF_poseobject.h"
-#include "BIF_toolbox.h" /* for error() */
-#include "DNA_view3d_types.h"
-#include "DNA_space_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_text_types.h"
-#include "DNA_object_types.h"
-#include "mydevice.h"
-#include "blendef.h" /* OBACT */
-#include "windowTheme.h"
-#include "Mathutils.h"
-#include "constant.h"
-#include "gen_utils.h"
-#include "Armature.h"
-
-/* Pivot Types
--0 for Bounding Box Center; \n\
--1 for 3D Cursor\n\
--2 for Individual Centers\n\
--3 for Median Point\n\
--4 for Active Object"; */
-
-#define PIVOT_BOUNDBOX 0
-#define PIVOT_CURSOR 1
-#define PIVOT_INDIVIDUAL 2
-#define PIVOT_MEDIAN 3
-#define PIVOT_ACTIVE 4
-
-/* See Draw.c */
-extern int EXPP_disable_force_draw;
-extern void setcameratoview3d(void);
-
-/*****************************************************************************/
-/* Python API function prototypes for the Window module. */
-/*****************************************************************************/
-PyObject *M_Window_Redraw( PyObject * self, PyObject * args );
-static PyObject *M_Window_RedrawAll( PyObject * self, PyObject * args );
-static PyObject *M_Window_QRedrawAll( PyObject * self, PyObject * args );
-static PyObject *M_Window_DrawProgressBar( PyObject * self, PyObject * args );
-static PyObject *M_Window_GetCursorPos( PyObject * self );
-static PyObject *M_Window_SetCursorPos( PyObject * self, PyObject * args );
-static PyObject *M_Window_WaitCursor( PyObject * self, PyObject * args );
-static PyObject *M_Window_GetViewVector( PyObject * self );
-static PyObject *M_Window_GetActiveLayer( PyObject * self );
-static PyObject *M_Window_SetActiveLayer( PyObject * self, PyObject * args );
-static PyObject *M_Window_GetViewQuat( PyObject * self );
-static PyObject *M_Window_SetViewQuat( PyObject * self, PyObject * args );
-static PyObject *M_Window_GetViewOffset( PyObject * self );
-static PyObject *M_Window_SetViewOffset( PyObject * self, PyObject * args );
-static PyObject *M_Window_GetViewMatrix( PyObject * self );
-static PyObject *M_Window_GetPerspMatrix( PyObject * self );
-static PyObject *M_Window_FileSelector( PyObject * self, PyObject * args );
-static PyObject *M_Window_ImageSelector( PyObject * self, PyObject * args );
-static PyObject *M_Window_EditMode( PyObject * self, PyObject * args );
-static PyObject *M_Window_PoseMode( PyObject * self, PyObject * args );
-static PyObject *M_Window_ViewLayers( PyObject * self, PyObject * args );
-static PyObject *M_Window_CameraView( PyObject * self, PyObject * args );
-static PyObject *M_Window_QTest( PyObject * self );
-static PyObject *M_Window_QRead( PyObject * self );
-static PyObject *M_Window_QAdd( PyObject * self, PyObject * args );
-static PyObject *M_Window_QHandle( PyObject * self, PyObject * args );
-static PyObject *M_Window_TestBreak( PyObject * self );
-static PyObject *M_Window_GetMouseCoords( PyObject * self );
-static PyObject *M_Window_SetMouseCoords( PyObject * self, PyObject * args );
-static PyObject *M_Window_GetMouseButtons( PyObject * self );
-static PyObject *M_Window_GetKeyQualifiers( PyObject * self );
-static PyObject *M_Window_SetKeyQualifiers( PyObject * self, PyObject * args );
-static PyObject *M_Window_GetAreaSize( PyObject * self );
-static PyObject *M_Window_GetAreaID( PyObject * self );
-static PyObject *M_Window_GetScreenSize( PyObject * self );
-static PyObject *M_Window_GetScreens( PyObject * self );
-static PyObject *M_Window_SetScreen( PyObject * self, PyObject * value );
-static PyObject *M_Window_GetScreenInfo( PyObject * self, PyObject * args,
- PyObject * kwords );
-static PyObject *M_Window_GetPivot( PyObject * self );
-static PyObject *M_Window_SetPivot( PyObject * self, PyObject * value );
-
-PyObject *Window_Init( void );
-
-
-/*****************************************************************************/
-/* The following string definitions are used for documentation strings. */
-/* In Python these will be written to the console when doing a */
-/* Blender.Window.__doc__ */
-/*****************************************************************************/
-static char M_Window_doc[] = "The Blender Window module\n\n";
-
-static char M_Window_Redraw_doc[] =
- "() - Force a redraw of a specific Window Type (see Window.Types)";
-
-static char M_Window_RedrawAll_doc[] = "() - Redraw all windows";
-
-static char M_Window_QRedrawAll_doc[] =
- "() - Redraw all windows by queue event";
-
-static char M_Window_FileSelector_doc[] =
- "(callback [, title, filename]) - Open a file selector window.\n\
-The selected file name is used as argument to a function callback f(name)\n\
-that you must provide. 'title' is optional and defaults to 'SELECT FILE'.\n\
-'filename' is optional and defaults to Blender.Get('filename').\n\n\
-Example:\n\n\
-import Blender\n\n\
-def my_function(filename):\n\
- print 'The selected file was: ', filename\n\n\
-Blender.Window.FileSelector(my_function, 'SAVE FILE')\n";
-
-static char M_Window_ImageSelector_doc[] =
- "(callback [, title, filename]) - Open an image selector window.\n\
-The selected file name is used as argument to a function callback f(name)\n\
-that you must provide. 'title' is optional and defaults to 'SELECT IMAGE'.\n\
-'filename' is optional and defaults to Blender.Get('filename').\n\n\
-Example:\n\n\
-import Blender\n\n\
-def my_function(filename):\n\
- print 'The selected image file was: ', filename\n\n\
-Blender.Window.ImageSelector(my_function, 'LOAD IMAGE')\n";
-
-static char M_Window_DrawProgressBar_doc[] =
- "(done, text) - Draw a progress bar.\n\
-'done' is a float value <= 1.0, 'text' contains info about what is\n\
-currently being done.";
-
-static char M_Window_GetCursorPos_doc[] =
- "() - Get the current 3d cursor position as a list of three floats.";
-
-static char M_Window_SetCursorPos_doc[] =
- "([f,f,f]) - Set the current 3d cursor position from a list of three floats.";
-
-static char M_Window_WaitCursor_doc[] =
- "(bool) - Set cursor to wait mode (nonzero bool) or normal mode (0).";
-
-static char M_Window_GetViewVector_doc[] =
- "() - Get the current 3d view vector as a list of three floats [x,y,z].";
-
-static char M_Window_GetActiveLayer_doc[] =
- "() - Get the current 3d views active layer where new objects are created.";
-
-static char M_Window_SetActiveLayer_doc[] =
- "(int) - Set the current 3d views active layer where new objects are created.";
-
-static char M_Window_GetViewMatrix_doc[] =
- "() - Get the current 3d view matrix.";
-
-static char M_Window_GetPerspMatrix_doc[] =
- "() - Get the current 3d Persp matrix.";
-
-static char M_Window_EditMode_doc[] =
- "() - Get the current status -- 0: not in edit mode; 1: in edit mode.\n\
-(status) - if 1: enter edit mode; if 0: leave edit mode.\n\
-Returns the current status. This function is mostly useful to leave\n\
-edit mode before applying changes to a mesh (otherwise the changes will\n\
-be lost) and then returning to it upon leaving.";
-static char M_Window_PoseMode_doc[] =
- "() - Get the current status -- 0: not in pose mode; 1: in edit mode";
-
-static char M_Window_ViewLayers_doc[] =
- "(layers = [], winid = None) - Get/set active layers in all 3d View windows.\n\
-() - Make no changes, only return currently visible layers.\n\
-(layers = []) - a list of integers, each in the range [1, 20].\n\
-(layers = [], winid = int) - layers as above, winid is an optional.\n\
-arg that makes the function only set layers for that view.\n\
-This function returns the currently visible layers as a list of ints.";
-
-static char M_Window_GetViewQuat_doc[] =
- "() - Get the current VIEW3D view quaternion values.";
-
-static char M_Window_SetViewQuat_doc[] =
- "(quat) - Set the current VIEW3D view quaternion values.\n\
-(quat) - [f,f,f,f] or f,f,f,f: the new float values.";
-
-static char M_Window_GetViewOffset_doc[] =
- "() - Get the current VIEW3D view offset values.";
-
-static char M_Window_SetViewOffset_doc[] =
- "(ofs) - Set the current VIEW3D view offset values.\n\
-(ofs) - [f,f,f] or f,f,f: the new float values.";
-
-static char M_Window_CameraView_doc[] =
- "(camtov3d = 0) - Set the current VIEW3D view to the active camera's view.\n\
-(camtov3d = 0) - bool: if nonzero it's the camera that gets positioned at the\n\
-current view, instead of the view being changed to that of the camera.\n\n\
-If no camera is the active object, the active camera for the current scene\n\
-is used.";
-
-static char M_Window_QTest_doc[] =
- "() - Check if there are pending events in the event queue.";
-
-static char M_Window_QRead_doc[] =
- "() - Get the next pending event from the event queue.\n\
-This function returns a list [event, val], where:\n\
-event - int: the key or mouse event (see Blender.Draw module);\n\
-val - int: if 1 it's a key or mouse button press, if 0 a release. For\n\
- mouse movement events 'val' returns the new coordinates in x or y.";
-
-static char M_Window_QAdd_doc[] =
- "(win, evt, val, after = 0) - Add an event to some window's event queue.\n\
-(win) - int: the win id, see Blender.Window.GetScreenInfo();\n\
-(evt) - int: the event number, see events in Blender.Draw;\n\
-(val) - bool: 1 for a key press, 0 for a release;\n\
-(after) - bool: if 1 the event is put after the current queue and added later.";
-
-static char M_Window_QHandle_doc[] =
- "(win) - Process all events for the given window (area) now.\n\
-(win) - int: the window id, see Blender.Window.GetScreenInfo().\n\n\
-See Blender.Window.QAdd() for how to send events to a particular window.";
-
-static char M_Window_TestBreak_doc[] =
- "() - Returns true if the user has pressed escape.";
-
-static char M_Window_GetMouseCoords_doc[] =
- "() - Get mouse pointer's current screen coordinates.";
-
-static char M_Window_SetMouseCoords_doc[] =
- "(x, y) - Set mouse pointer's current screen coordinates.\n\
-(x,y) - ints ([x, y] also accepted): the new x, y coordinates.";
-
-static char M_Window_GetMouseButtons_doc[] =
- "() - Get the current mouse button state (see Blender.Window.MButs dict).";
-
-static char M_Window_GetKeyQualifiers_doc[] =
- "() - Get the current qualifier keys state.\n\
-An int is returned: or'ed combination of values in Blender.Window.Qual's dict.";
-
-static char M_Window_SetKeyQualifiers_doc[] =
- "(qual) - Fake qualifier keys state.\n\
-(qual) - int: an or'ed combination of the values in Blender.Window.Qual dict.\n\
-Note: remember to reset to 0 after handling the related event (see QAdd()).";
-
-static char M_Window_GetAreaID_doc[] =
- "() - Get the current window's (area) ID.";
-
-static char M_Window_GetAreaSize_doc[] =
- "() - Get the current window's (area) size as [width, height].";
-
-static char M_Window_GetScreenSize_doc[] =
- "() - Get the screen's size as [width, height].";
-
-static char M_Window_GetScreens_doc[] =
- "() - Get a list with the names of all available screens.";
-
-static char M_Window_SetScreen_doc[] =
- "(name) - Set current screen to the one with the given 'name'.";
-
-static char M_Window_GetScreenInfo_doc[] =
- "(type = -1, rect = 'win', screen = None)\n\
-- Get info about the the areas in the current screen setup.\n\
-(type = -1) - int: the space type (Blender.Window.Types) to restrict the\n\
- results to, all if -1;\n\
-(rect = 'win') - str: the rectangle of interest. This defines if the corner\n\
- coordinates returned will refer to:\n\
- - the whole area: 'total';\n\
- - only the header: 'header';\n\
- - only the window content (default): 'win'.\n\
-(screen = None) - str: the screen name, current if not given.\n\n\
-A list of dictionaries (one for each area) is returned.\n\
-Each dictionary has keys:\n\
-'vertices': [xmin, ymin, xmax, ymax] area corners;\n\
-'win': window type, see Blender.Window.Types dict;\n\
-'id': area's id.";
-
-static char M_Window_SetPivot_doc[] =
- "(Pivot) - Set Pivot Mode for 3D Viewport:\n\
-Options are: \n\
--PivotTypes.BOUNDBOX for Bounding Box Center; \n\
--PivotTypes.CURSOR for 3D Cursor\n\
--PivotTypes.INDIVIDUAL for Individual Centers\n\
--PivotTypes.MEDIAN for Median Point\n\
--PivotTypes.ACTIVE for Active Object";
-
-static char M_Window_GetPivot_doc[] =
- "Return the pivot for the active 3d window";
-
-/*****************************************************************************/
-/* Python method structure definition for Blender.Window module: */
-/*****************************************************************************/
-struct PyMethodDef M_Window_methods[] = {
- {"Redraw", M_Window_Redraw, METH_VARARGS, M_Window_Redraw_doc},
- {"RedrawAll", M_Window_RedrawAll, METH_VARARGS,
- M_Window_RedrawAll_doc},
- {"QRedrawAll", M_Window_QRedrawAll, METH_VARARGS,
- M_Window_QRedrawAll_doc},
- {"FileSelector", M_Window_FileSelector, METH_VARARGS,
- M_Window_FileSelector_doc},
- {"ImageSelector", ( PyCFunction ) M_Window_ImageSelector, METH_VARARGS,
- M_Window_ImageSelector_doc},
- {"DrawProgressBar", M_Window_DrawProgressBar, METH_VARARGS,
- M_Window_DrawProgressBar_doc},
- {"drawProgressBar", M_Window_DrawProgressBar, METH_VARARGS,
- M_Window_DrawProgressBar_doc},
- {"GetCursorPos", ( PyCFunction ) M_Window_GetCursorPos, METH_NOARGS,
- M_Window_GetCursorPos_doc},
- {"SetCursorPos", M_Window_SetCursorPos, METH_VARARGS,
- M_Window_SetCursorPos_doc},
- {"WaitCursor", M_Window_WaitCursor, METH_VARARGS,
- M_Window_WaitCursor_doc},
- {"GetViewVector", ( PyCFunction ) M_Window_GetViewVector, METH_NOARGS,
- M_Window_GetViewVector_doc},
- {"GetActiveLayer", ( PyCFunction ) M_Window_GetActiveLayer, METH_NOARGS,
- M_Window_GetActiveLayer_doc},
- {"SetActiveLayer", ( PyCFunction ) M_Window_SetActiveLayer, METH_VARARGS,
- M_Window_SetActiveLayer_doc},
- {"GetViewQuat", ( PyCFunction ) M_Window_GetViewQuat, METH_NOARGS,
- M_Window_GetViewQuat_doc},
- {"SetViewQuat", ( PyCFunction ) M_Window_SetViewQuat, METH_VARARGS,
- M_Window_SetViewQuat_doc},
- {"GetViewOffset", ( PyCFunction ) M_Window_GetViewOffset, METH_NOARGS,
- M_Window_GetViewOffset_doc},
- {"SetViewOffset", ( PyCFunction ) M_Window_SetViewOffset, METH_VARARGS,
- M_Window_SetViewOffset_doc},
- {"GetViewMatrix", ( PyCFunction ) M_Window_GetViewMatrix, METH_NOARGS,
- M_Window_GetViewMatrix_doc},
- {"GetPerspMatrix", ( PyCFunction ) M_Window_GetPerspMatrix, METH_NOARGS,
- M_Window_GetPerspMatrix_doc},
- {"EditMode", ( PyCFunction ) M_Window_EditMode, METH_VARARGS,
- M_Window_EditMode_doc},
- {"PoseMode", ( PyCFunction ) M_Window_PoseMode, METH_VARARGS,
- M_Window_PoseMode_doc},
- {"ViewLayers", ( PyCFunction ) M_Window_ViewLayers, METH_VARARGS,
- M_Window_ViewLayers_doc},
- /* typo, deprecate someday: */
- {"ViewLayer", ( PyCFunction ) M_Window_ViewLayers, METH_VARARGS,
- M_Window_ViewLayers_doc},
- {"CameraView", ( PyCFunction ) M_Window_CameraView, METH_VARARGS,
- M_Window_CameraView_doc},
- {"QTest", ( PyCFunction ) M_Window_QTest, METH_NOARGS,
- M_Window_QTest_doc},
- {"QRead", ( PyCFunction ) M_Window_QRead, METH_NOARGS,
- M_Window_QRead_doc},
- {"QAdd", ( PyCFunction ) M_Window_QAdd, METH_VARARGS,
- M_Window_QAdd_doc},
- {"QHandle", ( PyCFunction ) M_Window_QHandle, METH_VARARGS,
- M_Window_QHandle_doc},
- {"TestBreak", ( PyCFunction ) M_Window_TestBreak, METH_NOARGS,
- M_Window_TestBreak_doc},
- {"GetMouseCoords", ( PyCFunction ) M_Window_GetMouseCoords,
- METH_NOARGS,
- M_Window_GetMouseCoords_doc},
- {"SetMouseCoords", ( PyCFunction ) M_Window_SetMouseCoords,
- METH_VARARGS,
- M_Window_SetMouseCoords_doc},
- {"GetMouseButtons", ( PyCFunction ) M_Window_GetMouseButtons,
- METH_NOARGS,
- M_Window_GetMouseButtons_doc},
- {"GetKeyQualifiers", ( PyCFunction ) M_Window_GetKeyQualifiers,
- METH_NOARGS,
- M_Window_GetKeyQualifiers_doc},
- {"SetKeyQualifiers", ( PyCFunction ) M_Window_SetKeyQualifiers,
- METH_VARARGS,
- M_Window_SetKeyQualifiers_doc},
- {"GetAreaSize", ( PyCFunction ) M_Window_GetAreaSize, METH_NOARGS,
- M_Window_GetAreaSize_doc},
- {"GetAreaID", ( PyCFunction ) M_Window_GetAreaID, METH_NOARGS,
- M_Window_GetAreaID_doc},
- {"GetScreenSize", ( PyCFunction ) M_Window_GetScreenSize, METH_NOARGS,
- M_Window_GetScreenSize_doc},
- {"GetScreens", ( PyCFunction ) M_Window_GetScreens, METH_NOARGS,
- M_Window_GetScreens_doc},
- {"SetScreen", ( PyCFunction ) M_Window_SetScreen, METH_O,
- M_Window_SetScreen_doc},
- {"GetScreenInfo", ( PyCFunction ) M_Window_GetScreenInfo,
- METH_VARARGS | METH_KEYWORDS, M_Window_GetScreenInfo_doc},
- {"GetPivot", ( PyCFunction ) M_Window_GetPivot, METH_NOARGS,
- M_Window_GetPivot_doc},
- {"SetPivot", ( PyCFunction ) M_Window_SetPivot, METH_O,
- M_Window_SetPivot_doc},
- {NULL, NULL, 0, NULL}
-};
-
-/*****************************************************************************/
-/* Function: M_Window_Redraw */
-/* Python equivalent: Blender.Window.Redraw */
-/*****************************************************************************/
-/* not static so py_slider_update in Draw.[ch] can use it */
-PyObject *M_Window_Redraw( PyObject * self, PyObject * args )
-{
- ScrArea *tempsa, *sa;
- int wintype = SPACE_VIEW3D;
- short redraw_all = 0;
-
- if( !PyArg_ParseTuple( args, "|i", &wintype ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected int argument (or nothing)" ) );
-
- if( wintype < 0 )
- redraw_all = 1;
-
- if( !during_script( ) && !G.background ) {
- tempsa = curarea;
- sa = G.curscreen->areabase.first;
-
- while( sa ) {
-
- if( sa->spacetype == wintype || redraw_all ) {
- if (sa->spacetype == SPACE_SCRIPT && EXPP_disable_force_draw) {
- scrarea_queue_redraw(sa);
- }
- else {
- /* do not call fancy hacks here like pop_space_text(st); (ton) */
- scrarea_do_windraw( sa );
- if( sa->headwin ) scrarea_do_headdraw( sa );
- }
- }
- sa = sa->next;
- }
-
- if( curarea != tempsa )
- areawinset( tempsa->win );
-
- if( curarea ) { /* is null if Blender is in bg mode */
- if( curarea->headwin )
- scrarea_do_headdraw( curarea );
- screen_swapbuffers( );
- }
- }
-
- Py_RETURN_NONE;
-}
-
-/*****************************************************************************/
-/* Function: M_Window_RedrawAll */
-/* Python equivalent: Blender.Window.RedrawAll */
-/*****************************************************************************/
-static PyObject *M_Window_RedrawAll( PyObject * self, PyObject * args )
-{
- PyObject *arg = Py_BuildValue( "(i)", -1 );
- PyObject *ret = M_Window_Redraw( self, arg );
- Py_DECREF(arg);
- return ret;
-}
-
-/*****************************************************************************/
-/* Function: M_Window_QRedrawAll */
-/* Python equivalent: Blender.Window.QRedrawAll */
-/*****************************************************************************/
-static PyObject *M_Window_QRedrawAll( PyObject * self, PyObject * args )
-{
- EXPP_allqueue( REDRAWALL, 0 );
- Py_RETURN_NONE;
-}
-
-/*****************************************************************************/
-/* Function: M_Window_FileSelector */
-/* Python equivalent: Blender.Window.FileSelector */
-/*****************************************************************************/
-
-/* This is the callback to "activate_fileselect" below. It receives the
- * selected filename and (using it as argument) calls the Python callback
- * provided by the script writer and stored in EXPP_FS_PyCallback. */
-
-static void getSelectedFile( char *name )
-{
- PyObject *pycallback;
- PyObject *result;
- Script *script;
-
- /* let's find the script that owns this callback */
- script = G.main->script.first;
- while (script) {
- if (script->flags & SCRIPT_RUNNING) break;
- script = script->id.next;
- }
-
- if (!script) {
- if (curarea->spacetype == SPACE_SCRIPT) {
- SpaceScript *sc = curarea->spacedata.first;
- script = sc->script;
- }
- }
- /* If 'script' is null,
- * The script must have had an error and closed,
- * but the fileselector was left open, show an error and exit */
- if (!script) {
- error("Python script error: script quit, cannot run callback");
- return;
- }
-
-
- pycallback = script->py_browsercallback;
-
- if (pycallback) {
- PyGILState_STATE gilstate = PyGILState_Ensure();
-
- result = PyObject_CallFunction( pycallback, "s", name );
-
- if (!result) {
- if (G.f & G_DEBUG)
- fprintf(stderr, "BPy error: Callback call failed!\n");
- }
- else Py_DECREF(result);
-
-
-
- if (script->py_browsercallback == pycallback) {
- if (script->flags & SCRIPT_GUI) {
- script->py_browsercallback = NULL;
- } else {
- SCRIPT_SET_NULL(script);
- }
- }
-
- /* else another call to selector was made inside pycallback */
-
- Py_DECREF(pycallback);
-
- PyGILState_Release(gilstate);
- }
-
- return;
-}
-
-/* Use for file and image selector */
-static PyObject * FileAndImageSelector(PyObject * self, PyObject * args, int type)
-{
- char *title = (type==0 ? "SELECT FILE" : "SELECT IMAGE");
- char *filename = G.sce;
- SpaceScript *sc;
- Script *script = NULL;
- PyObject *pycallback = NULL;
- int startspace = 0;
-
- if (during_scriptlink())
- return EXPP_ReturnPyObjError(PyExc_RuntimeError,
- "script links can't call the file/image selector");
-
- if (G.background)
- return EXPP_ReturnPyObjError(PyExc_RuntimeError,
- "the file/image selector is not available in background mode");
-
- if((!PyArg_ParseTuple( args, "O|ss", &pycallback, &title, &filename))
- || (!PyCallable_Check(pycallback)))
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "\nexpected a callback function (and optionally one or two strings) "
- "as argument(s)" );
-
-/* trick: we move to a spacescript because then the fileselector will properly
- * unset our SCRIPT_FILESEL flag when the user chooses a file or cancels the
- * selection. This is necessary because when a user cancels, the
- * getSelectedFile function above doesn't get called and so couldn't unset the
- * flag. */
- startspace = curarea->spacetype;
- if( startspace != SPACE_SCRIPT )
- newspace( curarea, SPACE_SCRIPT );
-
- sc = curarea->spacedata.first;
-
- /* let's find the script that called us */
- script = G.main->script.first;
- while (script) {
- if (script->flags & SCRIPT_RUNNING) break;
- script = script->id.next;
- }
-
- if( !script ) {
- /* if not running, then we were already on a SpaceScript space, executing
- * a registered callback -- aka: this script has a gui */
- script = sc->script; /* this is the right script */
- } else { /* still running, use the trick */
- script->lastspace = startspace;
- sc->script = script;
- }
-
- if (!script) {
- /* should never happen unless we are executed
- * from the BGE or somthing really strange like that */
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "Could not allocate a screen for an unknown reason." );
- }
-
- Py_INCREF(pycallback);
-
- script->flags |= SCRIPT_FILESEL;
-
- /* clear any previous callback (nested calls to selector) */
- if (script->py_browsercallback) {
- Py_DECREF((PyObject *)script->py_browsercallback);
- }
- script->py_browsercallback = pycallback;
-
- /* if were not running a script GUI here alredy, then dont make this script persistant */
- if ((script->flags & SCRIPT_GUI)==0) {
- script->scriptname[0] = '\0';
- script->scriptarg[0] = '\0';
- }
- if (type==0) {
- activate_fileselect( FILE_BLENDER, title, filename, getSelectedFile );
- } else {
- activate_imageselect( FILE_BLENDER, title, filename, getSelectedFile );
- }
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_FileSelector( PyObject * self, PyObject * args )
-{
- return FileAndImageSelector( self, args, 0 );
-}
-
-static PyObject *M_Window_ImageSelector( PyObject * self, PyObject * args )
-{
- return FileAndImageSelector( self, args, 1 );
-}
-
-/*****************************************************************************/
-/* Function: M_Window_DrawProgressBar */
-/* Python equivalent: Blender.Window.DrawProgressBar */
-/*****************************************************************************/
-static PyObject *M_Window_DrawProgressBar( PyObject * self, PyObject * args )
-{
- float done;
- char *info = NULL;
- int retval = 0;
- ScrArea *sa = curarea;
-
- if (G.background)
- return EXPP_ReturnPyObjError(PyExc_RuntimeError,
- "the progress bar is not available in background mode");
-
- if( !PyArg_ParseTuple( args, "fs", &done, &info ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected a float and a string as arguments" ) );
-
- retval = progress_bar( done, info );
-
- areawinset(sa->win);
-
- return Py_BuildValue( "i", retval );
-}
-
-/*****************************************************************************/
-/* Function: M_Window_GetCursorPos */
-/* Python equivalent: Blender.Window.GetCursorPos */
-/*****************************************************************************/
-static PyObject *M_Window_GetCursorPos( PyObject * self )
-{
- float *cursor = NULL;
- PyObject *pylist;
-
- if( G.vd && G.vd->localview )
- cursor = G.vd->cursor;
- else
- cursor = G.scene->cursor;
-
- pylist = Py_BuildValue( "[fff]", cursor[0], cursor[1], cursor[2] );
-
- if( !pylist )
- return ( EXPP_ReturnPyObjError( PyExc_MemoryError,
- "GetCursorPos: couldn't create pylist" ) );
-
- return pylist;
-}
-
-/*****************************************************************************/
-/* Function: M_Window_SetCursorPos */
-/* Python equivalent: Blender.Window.SetCursorPos */
-/*****************************************************************************/
-static PyObject *M_Window_SetCursorPos( PyObject * self, PyObject * args )
-{
- int ok = 0;
- float val[3];
-
- if( PyObject_Length( args ) == 3 )
- ok = PyArg_ParseTuple( args, "fff", &val[0], &val[1],
- &val[2] );
- else
- ok = PyArg_ParseTuple( args, "(fff)", &val[0], &val[1],
- &val[2] );
-
- if( !ok )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected [f,f,f] or f,f,f as arguments" );
-
- if( G.vd && G.vd->localview ) {
- G.vd->cursor[0] = val[0];
- G.vd->cursor[1] = val[1];
- G.vd->cursor[2] = val[2];
- } else {
- G.scene->cursor[0] = val[0];
- G.scene->cursor[1] = val[1];
- G.scene->cursor[2] = val[2];
- }
-
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_WaitCursor( PyObject * self, PyObject * args )
-{
- int bool;
-
- if( !PyArg_ParseTuple( args, "i", &bool ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected bool (0 or 1) or nothing as argument" );
-
- waitcursor( bool ); /* nonzero bool sets, zero unsets */
-
- Py_RETURN_NONE;
-}
-
-/*****************************************************************************/
-/* Function: M_Window_GetViewVector */
-/* Python equivalent: Blender.Window.GetViewVector */
-/*****************************************************************************/
-static PyObject *M_Window_GetViewVector( PyObject * self )
-{
- float *vec = NULL;
-
- if( !G.vd )
- Py_RETURN_NONE;
-
- vec = G.vd->viewinv[2];
-
- return Py_BuildValue( "[fff]", vec[0], vec[1], vec[2] );
-}
-
-/*****************************************************************************/
-/* Function: M_Window_GetActiveLayer */
-/* Python equivalent: Blender.Window.GetActiveLayer */
-/*****************************************************************************/
-static PyObject *M_Window_GetActiveLayer( PyObject * self )
-{
- if (!G.vd) {
- return PyInt_FromLong(0);
- } else {
- return PyInt_FromLong( G.vd->layact );
- }
-}
-
-static PyObject *M_Window_SetActiveLayer( PyObject * self, PyObject * args )
-{
- int layer, bit=1;
- if( !PyArg_ParseTuple( args, "i", &layer ) )
- return ( EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected an int" ) );
-
- if (!G.vd)
- Py_RETURN_FALSE;
-
- bit= 0;
- while(bit<32) {
- if(layer & (1<<bit)) {
- G.vd->layact= 1<<bit;
- G.vd->lay |= G.vd->layact;
-
- if (G.vd->scenelock) {
- G.scene->lay |= G.vd->layact;
- }
- bit = -1; /* no error */
- break;
- }
- bit++;
- }
-
- if (bit != -1)
- return ( EXPP_ReturnPyObjError( PyExc_ValueError,
- "The flag could not be used for the active layer" ) );
-
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_GetViewQuat( PyObject * self )
-{
- float *vec = NULL;
-
- if( !G.vd )
- Py_RETURN_NONE;
-
- vec = G.vd->viewquat;
-
- return Py_BuildValue( "[ffff]", vec[0], vec[1], vec[2], vec[3] );
-}
-
-static PyObject *M_Window_SetViewQuat( PyObject * self, PyObject * args )
-{
- int ok = 0;
- float val[4];
-
- if( !G.vd )
- Py_RETURN_NONE;
-
- if( PyObject_Length( args ) == 4 )
- ok = PyArg_ParseTuple( args, "ffff", &val[0], &val[1], &val[2],
- &val[3] );
- else
- ok = PyArg_ParseTuple( args, "(ffff)", &val[0], &val[1],
- &val[2], &val[3] );
-
- if( !ok )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected [f,f,f,f] or f,f,f,f as arguments" );
-
- G.vd->viewquat[0] = val[0];
- G.vd->viewquat[1] = val[1];
- G.vd->viewquat[2] = val[2];
- G.vd->viewquat[3] = val[3];
-
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_GetViewOffset( PyObject * self )
-{
- if( !G.vd )
- Py_RETURN_NONE;
- return Py_BuildValue( "[fff]", G.vd->ofs[0], G.vd->ofs[1], G.vd->ofs[2] );
-}
-
-static PyObject *M_Window_SetViewOffset( PyObject * self, PyObject * args )
-{
- int ok = 0;
- float val[3];
-
- if( !G.vd )
- Py_RETURN_NONE;
-
- if( PyObject_Length( args ) == 3 )
- ok = PyArg_ParseTuple( args, "fff", &val[0], &val[1],
- &val[2] );
- else
- ok = PyArg_ParseTuple( args, "(fff)", &val[0], &val[1],
- &val[2] );
-
- if( !ok )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected [f,f,f] or f,f,f as arguments" );
-
- G.vd->ofs[0] = val[0];
- G.vd->ofs[1] = val[1];
- G.vd->ofs[2] = val[2];
-
- Py_RETURN_NONE;
-}
-
-
-/*****************************************************************************/
-/* Function: M_Window_GetViewMatrix */
-/* Python equivalent: Blender.Window.GetViewMatrix */
-/*****************************************************************************/
-static PyObject *M_Window_GetViewMatrix( PyObject * self )
-{
- if( !G.vd )
- Py_RETURN_NONE;
-
- return newMatrixObject( ( float * ) G.vd->viewmat, 4, 4, Py_WRAP );
-}
-
-/*****************************************************************************/
-/* Function: M_Window_GetPerspMatrix */
-/* Python equivalent: Blender.Window.GetPerspMatrix */
-/*****************************************************************************/
-static PyObject *M_Window_GetPerspMatrix( PyObject * self )
-{
- if( !G.vd )
- Py_RETURN_NONE;
-
- return newMatrixObject( ( float * ) G.vd->persmat, 4, 4, Py_WRAP );
-}
-
-
-/* update_armature_weakrefs()
- * helper function used in M_Window_EditMode.
- * rebuilds list of Armature weakrefs in __main__
- */
-
-static int update_armature_weakrefs()
-{
- /* stuff for armature weak refs */
- char *list_name = ARM_WEAKREF_LIST_NAME;
- PyObject *maindict = NULL, *armlist = NULL;
- PyObject *pyarmature = NULL;
- int x;
-
- maindict= PyModule_GetDict(PyImport_AddModule( "__main__"));
- armlist = PyDict_GetItemString(maindict, list_name);
- if( !armlist){
- printf("Oops - update_armature_weakrefs()\n");
- return 0;
- }
-
- for (x = 0; x < PySequence_Size(armlist); x++){
- pyarmature = PyWeakref_GetObject(PySequence_GetItem( armlist, x));
- if (pyarmature != Py_None)
- Armature_RebuildEditbones(pyarmature);
- }
- return 1;
-}
-
-
-static PyObject *M_Window_EditMode( PyObject * self, PyObject * args )
-{
- short status = -1;
- char *undo_str = "From script";
- int undo_str_len = 11;
- int do_undo = 1;
-
- if( !PyArg_ParseTuple( args,
- "|hs#i", &status, &undo_str, &undo_str_len, &do_undo ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected optional int (bool), string and int (bool) as arguments" );
-
- if( status >= 0 ) {
- if( status ) {
- if( !G.obedit ){
-
- //update armatures
- if(! update_armature_weakrefs()){
- return EXPP_ReturnPyObjError(
- PyExc_RuntimeError,
- "internal error - update_armature_weakrefs");
- }
-
- //enter editmode
- enter_editmode(0);
- }
- } else if( G.obedit ) {
- if( undo_str_len > 63 )
- undo_str[63] = '\0'; /* 64 is max */
- BIF_undo_push( undo_str ); /* This checks user undo settings */
- exit_editmode( EM_FREEDATA );
-
- //update armatures
- if(! update_armature_weakrefs()){
- return EXPP_ReturnPyObjError(
- PyExc_RuntimeError,
- "internal error - update_armature_weakrefs");
- }
-
- }
- }
-
- return Py_BuildValue( "h", G.obedit ? 1 : 0 );
-}
-
-static PyObject *M_Window_PoseMode( PyObject * self, PyObject * args )
-{
- short status = -1;
- short is_posemode = 0;
- Base *base;
-
- if( !PyArg_ParseTuple( args, "|h", &status ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected optional int (bool) as argument" );
-
- if( status >= 0 ) {
- if( status ) {
- enter_posemode();
- } else if( G.obedit ) {
- exit_posemode();
- }
- }
-
- base= BASACT;
- if (base && base->object->flag & OB_POSEMODE) {
- is_posemode = 1;
- }
-
- return Py_BuildValue( "h", is_posemode );
-}
-
-static PyObject *M_Window_ViewLayers( PyObject * self, PyObject * args )
-{
- PyObject *item = NULL;
- PyObject *list = NULL, *resl = NULL;
- int val, i, bit = 0, layer = 0, len_list;
- short winid = -1;
-
- if( !G.scene ) {
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "can't get pointer to global scene" );
- }
-
- /* Pase Args, Nothing, One list, Or a list and an int */
- if (PyTuple_GET_SIZE(args)!=0) {
- if( !PyArg_ParseTuple ( args, "O!|h", &PyList_Type, &list, &winid) ) {
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "nothing or a list and optionaly a window ID argument" );
- }
- }
-
- if( list ) {
- len_list = PyList_Size(list);
-
- if (len_list == 0)
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "list can't be empty, at list one layer must be set" );
-
- for( i = 0; i < len_list; i++ ) {
- item = PyList_GetItem( list, i );
- if( !PyInt_Check( item ) )
- return EXPP_ReturnPyObjError
- ( PyExc_AttributeError,
- "list must contain only integer numbers" );
-
- val = ( int ) PyInt_AsLong( item );
- if( val < 1 || val > 20 )
- return EXPP_ReturnPyObjError
- ( PyExc_AttributeError,
- "layer values must be in the range [1, 20]" );
-
- layer |= 1 << ( val - 1 );
- }
-
- if (winid==-1) {
- /* set scene and viewport */
- G.scene->lay = layer;
- if (G.vd) {
- G.vd->lay = layer;
-
- while( bit < 20 ) {
- val = 1 << bit;
- if( layer & val ) {
- G.vd->layact = val;
- break;
- }
- bit++;
- }
- }
- } else {
- /* only set the windows layer */
- ScrArea *sa;
- SpaceLink *sl;
- View3D *vd;
-
- if (G.curscreen) { /* can never be too careful */
- for (sa=G.curscreen->areabase.first; sa; sa= sa->next) {
- if (winid == sa->win) {
-
- for (sl= sa->spacedata.first; sl; sl= sl->next)
- if(sl->spacetype==SPACE_VIEW3D)
- break;
-
- if (!sl)
- return EXPP_ReturnPyObjError( PyExc_ValueError,
- "The window matching the winid has no 3d viewport" );
-
- vd= (View3D *) sl;
- vd->lay = layer;
-
- for(bit= 0; bit < 20; bit++) {
- val = 1 << bit;
- if( layer & val ) {
- vd->layact = val;
- break;
- }
- }
-
- winid = -1; /* so we know its done */
- break;
- }
- }
- if (winid!=-1)
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "The winid argument did not match any window" );
- }
- }
- }
-
- resl = PyList_New( 0 );
- if( !resl )
- return ( EXPP_ReturnPyObjError( PyExc_MemoryError,
- "couldn't create pylist!" ) );
-
- layer = G.scene->lay;
-
- bit = 0;
- while( bit < 20 ) {
- val = 1 << bit;
- if( layer & val ) {
- item = Py_BuildValue( "i", bit + 1 );
- PyList_Append( resl, item );
- Py_DECREF( item );
- }
- bit++;
- }
-
- return resl;
-}
-
-static PyObject *M_Window_CameraView( PyObject * self, PyObject * args )
-{
- short camtov3d = 0;
-
- if( !PyArg_ParseTuple( args, "|i", &camtov3d ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected an int (from Window.Views) as argument" );
-
- if( !G.vd )
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "this function can only be used after a 3d View has been initialized" );
-
- if( !G.vd->camera ) {
- if( BASACT && OBACT->type == OB_CAMERA )
- G.vd->camera = OBACT;
- else
- G.vd->camera = scene_find_camera( G.scene );
- handle_view3d_lock( );
- }
-
- G.vd->persp = 2;
- G.vd->view = 0;
-
- if( camtov3d )
- setcameratoview3d( );
-
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_QTest( PyObject * self )
-{
- return Py_BuildValue( "h", qtest( ) );
-}
-
-static PyObject *M_Window_QRead( PyObject * self )
-{
- short val = 0;
- unsigned short event;
-
- if (G.background)
- return EXPP_ReturnPyObjError(PyExc_RuntimeError,
- "QRead is not available in background mode");
-
- event = extern_qread( &val );
-
- return Py_BuildValue( "ii", event, val );
-}
-
-static PyObject *M_Window_QAdd( PyObject * self, PyObject * args )
-{
- short win;
- short evt; /* unsigned, we check below */
- short val;
- short after = 0;
-
- if (G.background)
- return EXPP_ReturnPyObjError(PyExc_RuntimeError,
- "QAdd is not available in background mode");
-
- if( !PyArg_ParseTuple( args, "hhh|h", &win, &evt, &val, &after ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected three or four ints as arguments" );
-
- if( evt < 0 ) /* evt is unsigned short */
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "event value must be a positive int, check events in Blender.Draw" );
-
- if( after )
- addafterqueue( win, evt, val );
- else
- addqueue( win, evt, val );
-
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_QHandle( PyObject * self, PyObject * args )
-{
- short win;
- ScrArea *sa;
- ScrArea *oldsa = NULL;
-
- if (G.background)
- return EXPP_ReturnPyObjError(PyExc_RuntimeError,
- "QHandle is not available in background mode");
-
- if (!G.curscreen)
- return EXPP_ReturnPyObjError(PyExc_RuntimeError,
- "No screens available");
-
- if( !PyArg_ParseTuple( args, "h", &win ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected an int as argument" );
-
- for (sa= G.curscreen->areabase.first; sa; sa= sa->next)
- if( sa->win == win )
- break;
-
- if( sa ) {
- BWinEvent evt;
- short do_redraw = 0;
-
- if( sa != curarea || sa->win != mywinget( ) ) {
- oldsa = curarea;
- areawinset( sa->win );
- set_g_activearea( sa );
- }
- while( bwin_qread( sa->win, &evt ) ) {
- if( evt.event == REDRAW ) {
- do_redraw = 1;
- } else if( evt.event == CHANGED ) {
- sa->win_swap = 0;
- do_redraw = 1;
- } else {
- scrarea_do_winhandle( sa, &evt );
- }
- }
- }
-
- if( oldsa ) {
- areawinset( oldsa->win );
- set_g_activearea( oldsa );
- }
-
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_TestBreak( PyObject * self )
-{
- if (blender_test_break()) {
- G.afbreek= 0;
- Py_RETURN_TRUE;
- } else {
- Py_RETURN_FALSE;
- }
-}
-
-static PyObject *M_Window_GetMouseCoords( PyObject * self )
-{
- short mval[2] = {0, 0};
-
- if (!G.background)
- getmouse( mval );
-
- return Py_BuildValue( "hh", mval[0], mval[1] );
-}
-
-static PyObject *M_Window_SetMouseCoords( PyObject * self, PyObject * args )
-{
- int ok, x, y;
-
- if( !G.curscreen )
- return EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "no current screen to retrieve info from!" );
-
- x = G.curscreen->sizex / 2;
- y = G.curscreen->sizey / 2;
-
- if( PyObject_Length( args ) == 2 )
- ok = PyArg_ParseTuple( args, "hh", &x, &y );
- else
- ok = PyArg_ParseTuple( args, "|(hh)", &x, &y );
-
- if( !ok )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected [i, i] or i,i as arguments (or nothing)." );
-
- warp_pointer( x, y );
-
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_GetMouseButtons( PyObject * self )
-{
- return PyInt_FromLong(G.background ? 0 : (int)get_mbut() );
-}
-
-static PyObject *M_Window_GetKeyQualifiers( PyObject * self )
-{
- return PyInt_FromLong( (int)get_qual() );
-}
-
-static PyObject *M_Window_SetKeyQualifiers( PyObject * self, PyObject * args )
-{
- short qual = 0;
-
- if( !PyArg_ParseTuple( args, "|h", &qual ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected nothing or an int (or'ed flags) as argument" );
-
- if( qual < 0 )
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "value must be a positive int, check Blender.Window.Qual" );
-
- G.qual = qual;
-
- return Py_BuildValue( "h", qual );
-}
-
-static PyObject *M_Window_GetAreaSize( PyObject * self )
-{
- ScrArea *sa = curarea;
-
- if( !sa )
- Py_RETURN_NONE;
-
- return Py_BuildValue( "hh", sa->winx, sa->winy );
-}
-
-static PyObject *M_Window_GetAreaID( PyObject * self )
-{
- ScrArea *sa = curarea;
-
- if( !sa )
- Py_RETURN_NONE;
-
- return Py_BuildValue( "h", sa->win );
-}
-
-static PyObject *M_Window_GetScreenSize( PyObject * self )
-{
- bScreen *scr = G.curscreen;
-
- if( !scr )
- Py_RETURN_NONE;
-
- return Py_BuildValue( "hh", scr->sizex, scr->sizey );
-}
-
-
-static PyObject *M_Window_SetScreen( PyObject * self, PyObject * value )
-{
- bScreen *scr = G.main->screen.first;
- char *name = PyString_AsString(value);
-
- if( !name )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected string as argument" );
-
- while( scr ) {
- if( !strcmp( scr->id.name + 2, name ) ) {
- setscreen( scr );
- break;
- }
- scr = scr->id.next;
- }
-
- if( !scr )
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "no such screen, check Window.GetScreens() for valid names" );
-
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_GetScreens( PyObject * self )
-{
- bScreen *scr = G.main->screen.first;
- PyObject *list = PyList_New( 0 );
- PyObject *str = NULL;
-
- if( !list )
- return EXPP_ReturnPyObjError( PyExc_MemoryError,
- "couldn't create py list!" );
-
- while( scr ) {
- str = PyString_FromString( scr->id.name + 2 );
-
- if( !str ) {
- Py_DECREF( list );
- return EXPP_ReturnPyObjError( PyExc_MemoryError,
- "couldn't create py string!" );
- }
-
- PyList_Append( list, str ); /* incref's str */
- Py_DECREF( str );
-
- scr = scr->id.next;
- }
-
- return list;
-}
-
-static PyObject *M_Window_GetScreenInfo( PyObject * self, PyObject * args,
- PyObject * kwords )
-{
- ScrArea *sa = G.curscreen->areabase.first;
- bScreen *scr = G.main->screen.first;
- PyObject *item, *list;
- rcti *rct;
- int type = -1;
- char *rect = "win";
- char *screen = "";
- static char *kwlist[] = { "type", "rect", "screen", NULL };
- int rctype = 0;
-
- if( !PyArg_ParseTupleAndKeywords( args, kwords, "|iss", kwlist, &type,
- &rect, &screen ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected nothing or an int and two strings as arguments" );
-
- if( !strcmp( rect, "win" ) )
- rctype = 0;
- else if( !strcmp( rect, "total" ) )
- rctype = 1;
- else if( !strcmp( rect, "header" ) )
- rctype = 2;
- else
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "requested invalid type for area rectangle coordinates." );
-
- list = PyList_New( 0 );
-
- if( screen && screen[0] != '\0' ) {
- while( scr ) {
- if( !strcmp( scr->id.name + 2, screen ) ) {
- sa = scr->areabase.first;
- break;
- }
- scr = scr->id.next;
- }
- }
-
- if( !scr ) {
- Py_DECREF( list );
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "no such screen, see existing ones with Window.GetScreens." );
- }
-
- while( sa ) {
- if( type != -1 && sa->spacetype != type ) {
- sa = sa->next;
- continue;
- }
-
- switch ( rctype ) {
- case 0:
- rct = &sa->winrct;
- break;
- case 1:
- rct = &sa->totrct;
- break;
- case 2:
- default:
- rct = &sa->headrct;
- }
-
- item = Py_BuildValue( "{s:[h,h,h,h],s:h,s:h}",
- "vertices", rct->xmin, rct->ymin,
- rct->xmax, rct->ymax, "type",
- ( short ) sa->spacetype, "id",
- ( short ) sa->win );
- PyList_Append( list, item );
- Py_DECREF( item );
-
- sa = sa->next;
- }
-
- return list;
-}
-
-static PyObject *M_Window_GetPivot( PyObject * self )
-{
- if (G.vd) {
- return PyInt_FromLong( G.vd->around );
- }
- Py_RETURN_NONE;
-}
-
-static PyObject *M_Window_SetPivot( PyObject * self, PyObject * value)
-
-{
- short pivot;
- if (G.vd) {
- pivot = (short)PyInt_AsLong( value );
-
- if ( pivot > 4 || pivot < 0 )
- return EXPP_ReturnPyObjError( PyExc_AttributeError,
- "Expected a constant from Window.PivotTypes" );
-
- G.vd->around = pivot;
- }
- Py_RETURN_NONE;
-}
-
-
-/*****************************************************************************/
-/* Function: Window_Init */
-/*****************************************************************************/
-PyObject *Window_Init( void )
-{
- PyObject *submodule, *Types, *Qual, *MButs, *PivotTypes, *dict;
-
- submodule =
- Py_InitModule3( "Blender.Window", M_Window_methods,
- M_Window_doc );
-
- dict = PyModule_GetDict( submodule );
- if( dict )
- PyDict_SetItemString( dict, "Theme", Theme_Init( ) );
-
- Types = PyConstant_New( );
- Qual = PyConstant_New( );
- MButs = PyConstant_New( );
- PivotTypes = PyConstant_New( );
-
- if( Types ) {
- BPy_constant *d = ( BPy_constant * ) Types;
-
- PyConstant_Insert( d, "VIEW3D", PyInt_FromLong( SPACE_VIEW3D ) );
- PyConstant_Insert( d, "IPO", PyInt_FromLong( SPACE_IPO ) );
- PyConstant_Insert( d, "OOPS", PyInt_FromLong( SPACE_OOPS ) );
- PyConstant_Insert( d, "BUTS", PyInt_FromLong( SPACE_BUTS ) );
- PyConstant_Insert( d, "FILE", PyInt_FromLong( SPACE_FILE ) );
- PyConstant_Insert( d, "IMAGE", PyInt_FromLong( SPACE_IMAGE ) );
- PyConstant_Insert( d, "INFO", PyInt_FromLong( SPACE_INFO ) );
- PyConstant_Insert( d, "SEQ", PyInt_FromLong( SPACE_SEQ ) );
- PyConstant_Insert( d, "IMASEL", PyInt_FromLong( SPACE_IMASEL ) );
- PyConstant_Insert( d, "SOUND", PyInt_FromLong( SPACE_SOUND ) );
- PyConstant_Insert( d, "ACTION", PyInt_FromLong( SPACE_ACTION ) );
- PyConstant_Insert( d, "TEXT", PyInt_FromLong( SPACE_TEXT ) );
- PyConstant_Insert( d, "NLA", PyInt_FromLong( SPACE_NLA ) );
- PyConstant_Insert( d, "SCRIPT", PyInt_FromLong( SPACE_SCRIPT ) );
- PyConstant_Insert( d, "TIME", PyInt_FromLong( SPACE_TIME ) );
- PyConstant_Insert( d, "NODE", PyInt_FromLong( SPACE_NODE ) );
-
- PyModule_AddObject( submodule, "Types", Types );
- }
-
- if( Qual ) {
- BPy_constant *d = ( BPy_constant * ) Qual;
-
- PyConstant_Insert( d, "LALT", PyInt_FromLong( L_ALTKEY ) );
- PyConstant_Insert( d, "RALT", PyInt_FromLong( R_ALTKEY ) );
- PyConstant_Insert( d, "ALT", PyInt_FromLong( LR_ALTKEY ) );
- PyConstant_Insert( d, "LCTRL", PyInt_FromLong( L_CTRLKEY ) );
- PyConstant_Insert( d, "RCTRL", PyInt_FromLong( R_CTRLKEY ) );
- PyConstant_Insert( d, "CTRL", PyInt_FromLong( LR_CTRLKEY ) );
- PyConstant_Insert( d, "LSHIFT", PyInt_FromLong( L_SHIFTKEY ) );
- PyConstant_Insert( d, "RSHIFT", PyInt_FromLong( R_SHIFTKEY ) );
- PyConstant_Insert( d, "SHIFT", PyInt_FromLong( LR_SHIFTKEY ) );
-
- PyModule_AddObject( submodule, "Qual", Qual );
- }
-
- if( MButs ) {
- BPy_constant *d = ( BPy_constant * ) MButs;
-
- PyConstant_Insert( d, "L", PyInt_FromLong( L_MOUSE ) );
- PyConstant_Insert( d, "M", PyInt_FromLong( M_MOUSE ) );
- PyConstant_Insert( d, "R", PyInt_FromLong( R_MOUSE ) );
-
- PyModule_AddObject( submodule, "MButs", MButs );
- }
-
- if( PivotTypes ) {
- BPy_constant *d = ( BPy_constant * ) PivotTypes;
-
- PyConstant_Insert(d, "BOUNDBOX", PyInt_FromLong( PIVOT_BOUNDBOX ) );
- PyConstant_Insert(d, "CURSOR", PyInt_FromLong( PIVOT_CURSOR ) );
- PyConstant_Insert(d, "MEDIAN", PyInt_FromLong( PIVOT_MEDIAN ) );
- PyConstant_Insert(d, "ACTIVE", PyInt_FromLong( PIVOT_ACTIVE ) );
- PyConstant_Insert(d, "INDIVIDUAL", PyInt_FromLong( PIVOT_INDIVIDUAL ) );
-
- PyModule_AddObject( submodule, "PivotTypes", PivotTypes );
- }
- return submodule;
-}