From 960cdf29197bc3f5922110cf26627aa9709ac79b Mon Sep 17 00:00:00 2001 From: cvs2svn Date: Fri, 10 Jun 2005 10:29:11 +0000 Subject: This commit was manufactured by cvs2svn to create branch 'bogue40'. --- zinclib.d/src/Zinc.cpp | 4540 ------------------------------------------------ 1 file changed, 4540 deletions(-) delete mode 100644 zinclib.d/src/Zinc.cpp (limited to 'zinclib.d/src/Zinc.cpp') diff --git a/zinclib.d/src/Zinc.cpp b/zinclib.d/src/Zinc.cpp deleted file mode 100644 index 4c60acf..0000000 --- a/zinclib.d/src/Zinc.cpp +++ /dev/null @@ -1,4540 +0,0 @@ -/** Zinc.cpp - * zinclib - * - * This software is the property of IntuiLab SA, France. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Here is the definition of the Zinc object - * - * 08/03/05 - * - * Contributors: - * Benoit Peccatte - * David Thevenin - * - */ -#include "Zinc.hpp" -#include "ZincInternal.hpp" -#include -#include -#include - -/** - * How To call Zinc or Tcl functions: - * - * All arguments of the function are Tcl_Obj. To accelerate their call, there - * is a pool of preconstructed Tcl_Obj and some often used constant Tcl_Obj. - * p1 and p2 are tables of pointers to be used for arguments. - * Fill p1 using either predefined objects like ZITM_* or a pool objet that - * you can fill with the value you want. - * Ex : p1[1] = ZFCT_add; - * Macros have been defined to fill and use a pool object - * Ex : p1[2] = Z_INT_POOL (1, 200); - * Do not use twice the same pool index for the same function call. - * p2 is used to construct and argument which is a list of Tcl_Obj. - * To call the function use z_tcl_call which automaticly handle error return - * codes or z_command to call a Zinc command which handle all arguments too. - */ - -//predeclare private function -#ifdef _WIN32 -int __cdecl tclCallback (ClientData client_data, Tcl_Interp *interp, - int argc, Tcl_Obj *CONST args[]); -#else -int tclCallback (ClientData client_data, Tcl_Interp *interp, - int argc, Tcl_Obj *CONST args[]) __attribute__((cdecl)); -#endif - -/******************************************************* - ZINC OBJECT -*******************************************************/ - - -int Zinc::znCount = 0; ///< count to create unique ids -Tcl_Interp *Zinc::interp; ///< the tcl interpreter -Tcl_CmdInfo Zinc::topCmdInfo; ///< the command associated with toplevel -Tcl_CmdInfo Zinc::zncCmdInfo; ///< the command associated with zinc -Tcl_CmdInfo Zinc::imgCmdInfo; ///< the command associated with image -Tcl_CmdInfo Zinc::fntCmdInfo; ///< the command associated with font -Tcl_CmdInfo Zinc::focCmdInfo; ///< the command associated with focus -Tcl_CmdInfo Zinc::bndCmdInfo; ///< the command associated with bind -Tcl_Obj* Zinc::pool[ZINC_POOL_COUNT];///< a pool of tclobj ready to be used -Tcl_Obj* Zinc::p1[ZINC_PARAM_COUNT]; ///< a table of pointeurs use for parameters -Tcl_Obj* Zinc::p2[ZINC_PARAM_COUNT]; ///< a table of pointeurs use for parameters - -static Tcl_Obj *DEFAULT_GROUP_OBJ = Tcl_NewIntObj (DEFAULT_GROUP); - -//option constants -//Tcl_Obj* Z_render = Tcl_NewStringObj ("-render", -1); -Z_DEFINE_ZOPT (render); ///< the "-render" option -Z_DEFINE_ZOPT (firstend); ///< the "-firstend" option -Z_DEFINE_ZOPT (lastend); ///< the "-lastend" option -Z_DEFINE_ZOPT (position); ///< the "-position" option -Z_DEFINE_ZOPT (tags); ///< the "-tags" option -Z_DEFINE_ZOPT (backcolor); ///< the "-backcolor" option -Z_DEFINE_ZOPT (forecolor); ///< the "-forecolor" option -Z_DEFINE_ZOPT (height); ///< the "-height" option -Z_DEFINE_ZOPT (borderwidth); ///< the "-borderwidth" option - - -//autogenerated constants -Z_DEFINE_ZOPT (closed); ///< the "-closed" option -Z_DEFINE_ZOPT (composealpha); ///< the "-composealpha" option -Z_DEFINE_ZOPT (composerotation); ///< the "-composerotation" option -Z_DEFINE_ZOPT (composescale); ///< the "-composescale" option -Z_DEFINE_ZOPT (extent); ///< the "-extent" option -Z_DEFINE_ZOPT (fillcolor); ///< the "-fillcolor" option -Z_DEFINE_ZOPT (filled); ///< the "-filled" option -Z_DEFINE_ZOPT (fillpattern); ///< the "-fillpattern" option -Z_DEFINE_ZOPT (linecolor); ///< the "-linecolor" option -Z_DEFINE_ZOPT (linepattern); ///< the "-linepattern" option -Z_DEFINE_ZOPT (linestyle); ///< the "-linestyle" option -Z_DEFINE_ZOPT (linewidth); ///< the "-linewidth" option -Z_DEFINE_ZOPT (pieslice); ///< the "-pieslice" option -Z_DEFINE_ZOPT (priority); ///< the "-priority" option -Z_DEFINE_ZOPT (sensitive); ///< the "-sensitive" option -Z_DEFINE_ZOPT (startangle); ///< the "-startangle" option -Z_DEFINE_ZOPT (tile); ///< the "-tile" option -Z_DEFINE_ZOPT (visible); ///< the "-visible" option -Z_DEFINE_ZOPT (capstyle); ///< the "-capstyle" option -Z_DEFINE_ZOPT (fillrule); ///< the "-fillrule" option -Z_DEFINE_ZOPT (joinstyle); ///< the "-joinstyle" option -Z_DEFINE_ZOPT (marker); ///< the "-marker" option -Z_DEFINE_ZOPT (markercolor); ///< the "-markercolor" option -Z_DEFINE_ZOPT (relief); ///< the "-relief" option -Z_DEFINE_ZOPT (smoothrelief); ///< the "-smoothrelief" option -Z_DEFINE_ZOPT (alpha); ///< the "-alpha" option -Z_DEFINE_ZOPT (atomic); ///< the "-atomic" option -Z_DEFINE_ZOPT (clip); ///< the "-clip" option -Z_DEFINE_ZOPT (anchor); ///< the "-anchor" option -Z_DEFINE_ZOPT (color); ///< the "-color" option -Z_DEFINE_ZOPT (connecteditem); ///< the "-connecteditem" option -Z_DEFINE_ZOPT (connectionanchor); ///< the "-connectionanchor" option -Z_DEFINE_ZOPT (image); ///< the "-image" option -Z_DEFINE_ZOPT (mask); ///< the "-mask" option -Z_DEFINE_ZOPT (alignment); ///< the "-alignment" option -Z_DEFINE_ZOPT (font); ///< the "-font" option -Z_DEFINE_ZOPT (overstriked); ///< the "-overstriked" option -Z_DEFINE_ZOPT (spacing); ///< the "-spacing" option -Z_DEFINE_ZOPT (text); ///< the "-text" option -Z_DEFINE_ZOPT (underlined); ///< the "-underlined" option -Z_DEFINE_ZOPT (width); ///< the "-width" option - -//other constants -Z_DEFINE_ZFCT (device); ///< the "device" keyword - -///< function constants -Z_DEFINE_ZFCT (add); ///< the "add" function -Z_DEFINE_ZFCT (addtag); ///< the "addtag" function -Z_DEFINE_ZFCT (bind); ///< the "bind" function -Z_DEFINE_ZFCT (bbox); ///< the "bbox" function -Z_DEFINE_ZFCT (cget); ///< the "cget" function -Z_DEFINE_ZFCT (chggroup); ///< the "chggroup" function -Z_DEFINE_ZFCT (clone); ///< the "clone" function -Z_DEFINE_ZFCT (configure); ///< the "configure" function -Z_DEFINE_ZFCT (contour); ///< the "contour" function -Z_DEFINE_ZFCT (coords); ///< the "coords" function -Z_DEFINE_ZFCT (dtag); ///< the "dtag" function -Z_DEFINE_ZFCT (focus); ///< the "focus" function -Z_DEFINE_ZFCT (gettags); ///< the "gettags" function -Z_DEFINE_ZFCT (gname); ///< the "gname" function -Z_DEFINE_ZFCT (group); ///< the "group" function -Z_DEFINE_ZFCT (itemconfigure); ///< the "itemconfigure" function -Z_DEFINE_ZFCT (itemcget); ///< the "itemcget" function -Z_DEFINE_ZFCT (lower); ///< the "lower" function -Z_DEFINE_ZFCT (raise); ///< the "raise" function -Z_DEFINE_ZFCT (remove); ///< the "remove" function -Z_DEFINE_ZFCT (rotate); ///< the "rotate" function -Z_DEFINE_ZFCT (scale); ///< the "scale" function -Z_DEFINE_ZFCT (skew); ///< the "skew" function -Z_DEFINE_ZFCT (tget); ///< the "tget" function -Z_DEFINE_ZFCT (translate); ///< the "translate" function -Z_DEFINE_ZFCT (transform); ///< the "transform" function -Z_DEFINE_ZFCT (treset); ///< the "treset" function -Z_DEFINE_ZFCT (tset); ///< the "tset" function -Z_DEFINE_ZFCT (type); ///< the "type" function - -//Item constants -Z_DEFINE_ZITM (add); ///< the "add" constant -Z_DEFINE_ZITM (arc); ///< the "arc" constant -Z_DEFINE_ZITM (curve); ///< the "curve" constant -Z_DEFINE_ZITM (icon); ///< the "icon" constant -Z_DEFINE_ZITM (group); ///< the "group" constant -Z_DEFINE_ZITM (rectangle); ///< the "rectangle" constant -Z_DEFINE_ZITM (text); ///< the "text" constant -Z_DEFINE_ZITM (withtag); ///< the "withtag" constant - -/********************************************* - Prepare enum Tcl_Obj -*********************************************/ - -//lineStyles strings -const char* lineStylesStrings [] = -{ "simple", "dashed", "mixed", "dotted" }; -//lineStyles Tcl_Obj -Tcl_Obj* lineStyles [] = -{ - Tcl_NewStringObj ("simple", -1), - Tcl_NewStringObj ("dashed", -1), - Tcl_NewStringObj ("mixed", -1), - Tcl_NewStringObj ("dotted", -1), -}; - -//capStyles strings -const char* capStylesStrings [] = -{ "butt", "projecting", "round" }; -//capStyles Tcl_Obj -Tcl_Obj* capStyles [] = -{ - Tcl_NewStringObj ("butt", -1), - Tcl_NewStringObj ("projecting", -1), - Tcl_NewStringObj ("round", -1), -}; - -// fillRules strings -const char* fillRulesStrings [] = -{ "odd", "nonzero", "positive", "negative", "abs_geq_2" }; -//fillRules Tcl_Obj -Tcl_Obj* fillRules [] = -{ - Tcl_NewStringObj ("odd", -1), - Tcl_NewStringObj ("nonzero", -1), - Tcl_NewStringObj ("positive", -1), - Tcl_NewStringObj ("negative", -1), - Tcl_NewStringObj ("abs_geq_2", -1), -}; - -// joinStyle strings -const char* joinStylesStrings [] = -{ "bevel", "miter", "round" }; -// joinStyles Tcl_Obj -Tcl_Obj* joinStyles [] = -{ - Tcl_NewStringObj ("bevel", -1), - Tcl_NewStringObj ("miter", -1), - Tcl_NewStringObj ("round", -1), -}; - -// reliefs strings -const char* reliefsStrings [] = -{ "flat", "raised", "sunken", "ridge", "groove", "roundraised", - "roundsunken", "roundridge", "roundgroove", "raisedrule", "sunkenrule" }; -// reliefs Tcl_Obj -Tcl_Obj* reliefs [] = -{ - Tcl_NewStringObj ("flat", -1), - Tcl_NewStringObj ("raised", -1), - Tcl_NewStringObj ("sunken", -1), - Tcl_NewStringObj ("ridge", -1), - Tcl_NewStringObj ("groove", -1), - Tcl_NewStringObj ("roundraised", -1), - Tcl_NewStringObj ("roundsunken", -1), - Tcl_NewStringObj ("roundridge", -1), - Tcl_NewStringObj ("roundgroove", -1), - Tcl_NewStringObj ("raisedrule", -1), - Tcl_NewStringObj ("sunkenrule", -1), -}; - -// alignments strings -const char* alignmentsStrings [] = -{ "left", "right", "center" }; -// alignments Tcl_obj -Tcl_Obj* alignments [] = -{ - Tcl_NewStringObj ("left", -1), - Tcl_NewStringObj ("right", -1), - Tcl_NewStringObj ("center", -1), -}; - -// anchors strings -const char* anchorsStrings [] = -{ "nw", "n", "ne", "e", "se", "s", "sw", "w", "center" }; -// anchors Tcl_Obj -Tcl_Obj* anchors [] = -{ - Tcl_NewStringObj ("nw", -1), - Tcl_NewStringObj ("n", -1), - Tcl_NewStringObj ("ne", -1), - Tcl_NewStringObj ("e", -1), - Tcl_NewStringObj ("se", -1), - Tcl_NewStringObj ("s", -1), - Tcl_NewStringObj ("sw", -1), - Tcl_NewStringObj ("w", -1), - Tcl_NewStringObj ("center", -1), -}; - -// itemType strings -const char* itemTypeStrings [] = -{ - "group", - "arc", - "text", - "rectangle", - "curve", - "icon", - NULL -}; -//no need for Tcl_Objs because they are only used as return values - - -/********************************** - Zinc Object -**********************************/ - -/** - * The public constructor - * - * @param renderingMode ZINC_BACKEND_X11 or ZINC_BACKEND_OPENGL - */ -Zinc::Zinc (int renderingMode) -{ - String theId; - - //preparating id (.zn and a unique number) - znCount++; - theId = ".zn"; - theId += itos(znCount); - window = "."; - - //create a new window for each other widget - if (znCount != 1) - { - window = ".zwin"; - window += itos (znCount); - - //create a new toplevel window - const char* para[2]; - para[0] = "toplevel"; - para[1] = window.c_str(); - //call the toplevel Tk function with 2 arguments - z_tcl_call ((*topCmdInfo.proc)(topCmdInfo.clientData, interp, 2, para), - "toplevel Failed : "); - - //adapt the zinc id to the window path - theId = window + theId; - } - - // String noResizeCommand = String ("wm resizable ") + window + " 0 0"; - //Tcl_Eval (interp, noResizeCommand.c_str ()); - - //use a tcl_obj for the id - id = Tcl_NewStringObj (theId.c_str (), theId.length ()); - Tcl_IncrRefCount (id); - - //get top windows for zinc widget - Tk_Window top_w = Tk_MainWindow (interp); - - //creation of the zinc item - // call "Zinc id -render mode - Tcl_ResetResult (interp); - p1[0] = NULL; - p1[1] = id; - p1[2] = ZOPT_render; - p1[3] = Z_INT_POOL (0, renderingMode); - // call the function with 4 arguments and check non error - z_tcl_call ((*zncCmdInfo.objProc) (ClientData (top_w), interp, 4, p1), - "ZincObjCmd failed :"); - - // get back ZnWInfo *wi and WidgetObjCmd - Tcl_CmdInfo cmdInfo; - int result = Tcl_GetCommandInfo (interp, theId.c_str (), &cmdInfo); - if (!result) - { - throw ZincException (String ("zinclib: Tcl command not found") + - Tcl_GetStringResult (interp), __FILE__, __LINE__); - } - - //get informations necessary to call WidgetObjCmd - wi = cmdInfo.objClientData; - objCmd = (WidgetObjCmd)cmdInfo.objProc; - - //call the Tk function pack - String packCmd = String ("pack ") + theId + " -expand 1 -fill both"; - Tcl_Eval (interp, packCmd.c_str ()); - - // Prepare for binding with callback (create a Tcl function) - tclCb = String (Z_TCLCB) + itos(znCount); - Tcl_CreateObjCommand(interp, tclCb.c_str (), tclCallback, - (ClientData) this, (Tcl_CmdDeleteProc *) NULL); - - //give focus to the window - const char* para[2]; - para[0] = "focus"; - para[1] = theId.c_str(); - // call the function with 4 arguments - z_tcl_call ((*focCmdInfo.proc)(focCmdInfo.clientData, interp, 2, para), - "focus Failed : "); -} - -/** - * The public destructor - */ -Zinc::~Zinc () -{ - //delete the Tcl function - Tcl_DeleteCommand (interp, tclCb.c_str ()); - // delete the tcl_obj - Tcl_DecrRefCount (id); -} - -/** - * Change window title - * - * @param title the title string - */ -void Zinc::setTitle (String title) -{ - //use tcl interpreter directly since this won't be called often - String command = String ("wm title ") + window + " \"" + title + "\""; - Tcl_Eval (interp, command.c_str ()); -} - -/***************************************** - WIDGET PROPERTIES -*****************************************/ -/** - * How To call Zinc or Tcl functions: - * - * All arguments of the function are Tcl_Obj. To accelerate their call, there - * is a pool of preconstructed Tcl_Obj and some often used constant Tcl_Obj. - * p1 and p2 are tables of pointers to be used for arguments. - * Fill p1 using either predefined objects like ZITM_* or a pool objet that - * you can fill with the value you want. - * Ex : p1[1] = ZFCT_add; - * Macros have been defined to fill and use a pool object - * Ex : p1[2] = Z_INT_POOL(1, 200); - * Do not use twice the same pool index for the same function call. - * p2 is used to construct and argument which is a list of Tcl_Obj. - * To call the function use z_tcl_call which automaticly handle error return - * codes or z_command to call a Zinc command which handle all arguments too. - */ - -/** - * Call zinc->configure ( -backcolor ) - * - * @param value the backcolor to set - */ -void Zinc::setBackcolor (String value) -{ - //call .zinc configure -backcolor value - p1[0] = id; - p1[1] = ZFCT_configure; - p1[2] = ZOPT_backcolor; - p1[3] = Z_STR_POOL (0, value.c_str(), value.length()); - // call the function with 4 arguments - z_command (4, "setBackcolor Failed : "); -} - -/** - * Call zinc->cget ( -backcolor ) - * - * @return backcolor value - */ -String Zinc::getBackcolor () -{ - Tcl_Obj* tmp; - //discard old results - Tcl_ResetResult (interp); - //call .zinc cget -backcolor - p1[0] = id; - p1[1] = ZFCT_cget; - p1[2] = ZOPT_backcolor; - // call the function with 3 arguments - z_command (3, "getBackcolor Failed : "); - - //retreive the result as a string - tmp = Tcl_GetObjResult (interp); - return String (Tcl_GetStringFromObj (tmp, NULL)); -} - -/** - * Call zinc->configure ( -forecolor ) - * - * @param value the forecolor to set - */ -void Zinc::setForecolor (String value) -{ - //call .zinc configure -forecolor value - p1[0] = id; - p1[1] = ZFCT_configure; - p1[2] = ZOPT_forecolor; - p1[3] = Z_STR_POOL (0, value.c_str(), value.length()); - // call the function with 4 arguments - z_command (4, "setForecolor Failed : "); -} - -/** - * Call zinc->cget ( -forecolor ) - * - * @return forecolor value - */ -String Zinc::getForecolor () -{ - Tcl_Obj* tmp; - //discard old results - Tcl_ResetResult (interp); - //call .zinc cget -forecolor - p1[0] = id; - p1[1] = ZFCT_cget; - p1[2] = ZOPT_forecolor; - // call the function with 3 arguments - z_command (3, "getForecolor Failed : "); - - //retreive the result as a string - tmp = Tcl_GetObjResult (interp); - return String (Tcl_GetStringFromObj (tmp, NULL)); -} - -/** - * Call zinc->configure ( -width ) - * - * @param value the width to set - */ -void Zinc::setWidth (int value) -{ - //call .zinc configure -width value - p1[0] = id; - p1[1] = ZFCT_configure; - p1[2] = ZOPT_width; - p1[3] = Z_INT_POOL (0, value); - // call the function with 4 arguments - z_command (4, "setWidth Failed : "); - - char *strid = Tcl_GetString(id); - //call the Tk function pack - String packCmd = String ("pack ") + strid + " -expand 1 -fill both"; - Tcl_Eval (interp, packCmd.c_str ()); -} - -/** - * Call zinc->cget ( -width ) - * - * @return width value - */ -int Zinc::getWidth () -{ - Tcl_Obj* tmp; - //discard old results - Tcl_ResetResult (interp); - //call .zinc cget -width - p1[0] = id; - p1[1] = ZFCT_cget; - p1[2] = ZOPT_width; - // call the function with 3 arguments - z_command (3, "getWidth Failed : "); - - //retreive the result as an integer - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "getWidth Failed : "); - return value; -} - -/** - * Call zinc->configure ( -height ) - * - * @param value the height to set - */ -void Zinc::setHeight (int value) -{ - //call .zinc configure -height value - p1[0] = id; - p1[1] = ZFCT_configure; - p1[2] = ZOPT_height; - p1[3] = Z_INT_POOL (0, value); - // call the function with 4 arguments - z_command (4, "setHeight Failed : "); - - char *strid = Tcl_GetString(id); - //call the Tk function pack - String packCmd = String ("pack ") + strid + " -expand 1 -fill both"; - Tcl_Eval (interp, packCmd.c_str ()); -} - -/** - * Call zinc->cget ( -height ) - * - * @return height value - */ -int Zinc::getHeight () -{ - Tcl_Obj* tmp; - //discard old results - Tcl_ResetResult (interp); - //call .zinc cget -height - p1[0] = id; - p1[1] = ZFCT_cget; - p1[2] = ZOPT_height; - // call the function with 3 arguments - z_command (3, "getHeight Failed : "); - - //retreive the result as an integer - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "getHeight Failed : "); - return value; -} - -/** - * Call zinc->configure ( -borderwidth ) - * - * @param value the borderwidth to set - */ -void Zinc::setBorderwidth (int value) -{ - //call .zinc configure -borderwidth value - p1[0] = id; - p1[1] = ZFCT_configure; - p1[2] = ZOPT_borderwidth; - p1[3] = Z_INT_POOL (0, value); - // call the function with 4 arguments - z_command (4, "setBorderwidth Failed : "); -} - -/** - * Call zinc->cget ( -borderwidth ) - * - * @return borderwidth value - */ -int Zinc::getBorderwidth () -{ - Tcl_Obj* tmp; - //discard old results - Tcl_ResetResult (interp); - //call .zinc cget -borderwidth - p1[0] = id; - p1[1] = ZFCT_cget; - p1[2] = ZOPT_borderwidth; - // call the function with 3 arguments - z_command (3, "getBorderwidth Failed : "); - - //retreive the result as an integer - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "getBorderwidth Failed : "); - return value; -} - -/** - * Call zinc->configure ( -font ) - * - * @param value the font to set - */ -void Zinc::setFont (ZincFont* value) -{ - //call .zinc configure -font value - p1[0] = id; - p1[1] = ZFCT_configure; - p1[2] = ZOPT_font; - p1[3] = Z_STR_POOL (0, value->name.c_str(), value->name.length()); - // call the function with 4 arguments - z_command (4, "setFont Failed : "); -} - -/** - * Call zinc->cget ( -font ) - * - * @return font value - */ -ZincFont* Zinc::getFont () -{ - //discard old results - Tcl_ResetResult (interp); - //call .zinc cget -font - p1[0] = id; - p1[1] = ZFCT_cget; - p1[2] = ZOPT_font; - // call the function with 3 arguments - z_command (3, "getFont Failed : "); - - //retreive the result as a string - return new ZincFont (Tcl_GetStringResult (interp)); -} - - -/***************************************** - WIDGET METHODS -*****************************************/ -/** - * How To call Zinc or Tcl functions: - * - * All arguments of the function are Tcl_Obj. To accelerate their call, there - * is a pool of preconstructed Tcl_Obj and some often used constant Tcl_Obj. - * p1 and p2 are tables of pointers to be used for arguments. - * Fill p1 using either predefined objects like ZITM_* or a pool objet that - * you can fill with the value you want. - * Ex : p1[1] = ZFCT_add; - * Macros have been defined to fill and use a pool object - * Ex : p1[2] = Z_INT_POOL(1, 200); - * Do not use twice the same pool index for the same function call. - * p2 is used to construct and argument which is a list of Tcl_Obj. - * To call the function use z_tcl_call which automaticly handle error return - * codes or z_command to call a Zinc command which handle all arguments too. - */ - -/** - * Get the bounding box of an item - * - * @param item the item to get bbox - * @param bbox a table where we'll put the bounding box - * bbox[0] = x0, bbox[1] = y0, bbox[2] = xc, bbox[3] = yc - */ -void Zinc::bbox (ZincItem* item, double _bbox[4]) -{ - Tcl_Obj* tmp; - Tcl_Obj** list; - int count; - //discard old results - Tcl_ResetResult (interp); - // call .zinc bbox item - p1[0] = id; - p1[1] = ZFCT_bbox; - p1[2] = item->object; - - // call the function with 3 arguments - z_command (3, "bbox Failed : "); - - //retreive the result as a list - tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_ListObjGetElements (interp, tmp, &count, &list), - "bbox Failed : "); - //extract 4 double from the list - if (count != 4) - { - throw ZincException (String ("bbox Failed count=") + itos(count), - __FILE__, __LINE__); - } - z_tcl_call (Tcl_GetDoubleFromObj (interp, list[0], &_bbox[0]), - "bbox Failed"); - z_tcl_call (Tcl_GetDoubleFromObj (interp, list[1], &_bbox[1]), - "bbox Failed"); - z_tcl_call (Tcl_GetDoubleFromObj (interp, list[2], &_bbox[2]), - "bbox Failed"); - z_tcl_call (Tcl_GetDoubleFromObj (interp, list[3], &_bbox[3]), - "bbox Failed"); -} - - -/** - * Get the bounding box of an item in its parent group - * - * @param item the item to get bbox in its parent group - * @param bbox a table where we'll put the bounding box - * bbox[0] = x0, bbox[1] = y0, bbox[2] = xc, bbox[3] = yc - */ -void Zinc::relativeBbox (ZincItem* item, double _bbox[4]) -{ - //1) get bounding bbox - double tempBbox[4]; - this->bbox (item, tempBbox); - - //2) call transform - Tcl_Obj* tmp; - Tcl_Obj** list; - int count; - //discard old results - Tcl_ResetResult (interp); - // call .zinc transform device parentGroup {_bbox[0] _bbox[1] _bbox[2] _bbox[3]} - p1[0] = id; - p1[1] = ZFCT_transform; - p1[2] = ZFCT_device; - p1[3] = item->object; - - //coordinates as a list - p2[0] = Z_DBL_POOL (0, tempBbox[0]); - p2[1] = Z_DBL_POOL (1, tempBbox[1]); - p2[2] = Z_DBL_POOL (2, tempBbox[2]); - p2[3] = Z_DBL_POOL (3, tempBbox[3]); - p1[4] = Z_LST_POOL (4, p2, 4); - - // call the function with 5 arguments - z_command (5, "relativeBbox z_command Failed : "); - //free the list in pool No 4 - Z_CLEANLIST (4); - - //retreive the result as a list - tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_ListObjGetElements (interp, tmp, &count, &list), - "relativeBbox z_tcl_call Failed : "); - - //3) extract 4 double from the list - if (count != 4) - { - throw ZincException (String ("relativeBbox Failed count=") + itos(count), - __FILE__, __LINE__); - } - z_tcl_call (Tcl_GetDoubleFromObj (interp, list[0], &_bbox[0]), - "relativeBbox Failed"); - z_tcl_call (Tcl_GetDoubleFromObj (interp, list[1], &_bbox[1]), - "relativeBbox Failed"); - z_tcl_call (Tcl_GetDoubleFromObj (interp, list[2], &_bbox[2]), - "relativeBbox Failed"); - z_tcl_call (Tcl_GetDoubleFromObj (interp, list[3], &_bbox[3]), - "bbox Failed"); -} - - - - -/** - * Change the group of an item - * - * @param item the item to move - * @param parentGroup new group for the item - */ -void Zinc::chggroup (ZincItem *item, ZincItem *parentGroup) -{ - // call .zinc chggroup item parentGroup - p1[0] = id; - p1[1] = ZFCT_chggroup; - p1[2] = item->object; - p1[3] = Z_PARENTGROUP (parentGroup); - // call the function with 4 arguments - z_command (4, "chggroup Failed : "); -} - -/** - * Clone an item - * - * @param item the item to clone - * @return the cloned item - */ -ZincItem* Zinc::clone (ZincItem *item) -{ - // call .zinc clone item - p1[0] = id; - p1[1] = ZFCT_clone; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "clone Failed: "); - - //retreive the result as a tcl_obj - return new ZincItem (Tcl_GetObjResult (interp)); -} - -/** - * Get the number of contour of an item - * - * @return number of contour - */ -int Zinc::contour (ZincItem *item) -{ - Tcl_Obj* tmp; - int result; - // call .zinc contour item - p1[0] = id; - p1[1] = ZFCT_contour; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "contour Failed: "); - - //retreive the result as an int - tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &result), - "contour Failed: "); - return result; -} - -/** - * Set the contour of an item to the one of an other - * - * @param item the item on which we set the contour - * @param flag the operation to do on the contour - * @param reference the item to set contour from - * @return the number of contour - */ -int Zinc::contour (ZincItem *item, itemOperator flag, ZincItem *reference) -{ - Tcl_Obj* tmp; - int result; - //discard old results - Tcl_ResetResult (interp); - // call .zinc contour item flag reference - p1[0] = id; - p1[1] = ZFCT_contour; - p1[2] = item->object; - - //different possible actions depending on the flag - switch (flag) - { - case item_add_clockwise: - p1[3] = ZFCT_add; - p1[4] = Z_INT_POOL (0, -1); //add clockwise (-1) - break; - case item_add_counterclockwise: - p1[3] = ZFCT_add; - p1[4] = Z_INT_POOL (0, 1); //add counterclockwise (1) - break; - default: - p1[3] = ZFCT_remove; - p1[4] = Z_INT_POOL (0, 0); //no meaning (0) - } - // contour index (0) - p1[5] = Z_INT_POOL (1, 0); - // item reference - p1[6] = reference->object; - - // call the function with 7 arguments - z_command (7, "contour Failed: "); - - // retreive the result as an int - tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &result), - "contour Failed: "); - return result; -} - -/** - * Set the contour of an item - * - * @param item the item on which we set the contour - * @param add true to add a path, false to remove - * @param reference the new contour - * @return the number of contour - */ -int Zinc::contour (ZincItem *item, bool add, ZincPath *_contour) -{ - Tcl_Obj* tmp; - int result; - //discard old results - Tcl_ResetResult (interp); - // call .zinc contour item flag contour - p1[0] = id; - p1[1] = ZFCT_contour; - p1[2] = item->object; - - //different possible actions depending on the add flag - if (add) - { - p1[3] = ZFCT_add; - p1[4] = Z_INT_POOL (0, 0); //add contour (0) - } - else - { - p1[3] = ZFCT_remove; - p1[4] = Z_INT_POOL (0, 0); //no meaning (0) - } - // contour index - p1[5] = Z_INT_POOL (1, 0); - //contour - p1[6] = _contour->getTable (); - - // call the function with 7 arguments - z_command (7, "contour Failed: "); - - // retreive the result as an integer - tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &result), - "contour Failed: "); - return result; -} - -/** - * Set or modify the coordinates of an item - * - * @param item the item to modify - * @param contour new coords for the item - * @param add true to add coords, false to replace - * @param contourIndex the contour do modify - * @param coordIndex the coordinate to modify (WARNING, path must be one - * point if the is not the default) - */ -void Zinc::coords (ZincItem *item, ZincPath *_contour, bool add, - int contourIndex, int coordIndex) -{ - int i; - // call .zinc contour item ?flag? ?contourIndex? ?coordIndex? _contour - p1[0] = id; - p1[1] = ZFCT_coords; - p1[2] = item->object; - - // use i as a variable index for parameters - i = 3; // last parameter is p1[2] - // do we add or not - if (add) - { - p1[i++] = ZFCT_add; - } - - //ith there a contour - if (contourIndex != -1) - { - p1[i++] = Z_INT_POOL (1, contourIndex); - - //is there a coord index - if (coordIndex != -1) - { - p1[i++] = Z_INT_POOL (1, coordIndex); - } - } - - p1[i++] = _contour->getTable (); - - // call the function with i arguments - z_command (i, "coords Failed: "); -} - -/** - * Remove coords of an item - * - * @param item the item to modify - * @param coordIndex the coordinate to rmove - * @param contourIndex the contour on which we remove - */ -void Zinc::coordsRemove (ZincItem *item, int coordIndex, int contourIndex) -{ - int i; - // call .zinc coords item remove ?contourIndex? - p1[0] = id; - p1[1] = ZFCT_coords; - p1[2] = item->object; - p1[3] = ZFCT_remove; - - i = 4; - // is there a contourIndex - if (contourIndex != -1) - { - p1[i++] = Z_INT_POOL (1, contourIndex); - } - p1[i++] = Z_INT_POOL (1, coordIndex); - - // call the function with i arguments - z_command (i, "coordsRemove Failed: "); -} - -/** - * Add a tag to an item - * - * @param item the item to add tag to - * @param tag a tag to add - */ -void Zinc::addTag (ZincItem *item, String tag) -{ - // call .zinc addtag tag withtag - p1[0] = id; - p1[1] = ZFCT_addtag; - p1[2] = Z_STR_POOL (0, tag.c_str (), tag.length ()); - p1[3] = ZITM_withtag; - p1[4] = item->object; - // call the function with 5 arguments - z_command (5, "addTag Failed: "); -} - -/** - * Remove a tag from an item - * - * @param item the item to remove tag from - * @param tag a tag to remove - */ -void Zinc::dTag (ZincItem *item, String tag) -{ - // call .zinc dtag item tag - p1[0] = id; - p1[1] = ZFCT_dtag; - p1[2] = item->object; - - int i = 3; - //create a tg if nexessary - if (tag != "") - { - p1[i++] = Z_STR_POOL (0, tag.c_str (), tag.length ()); - } - - // call the function with i arguments - z_command (i, "dTag Failed: "); -} - -/** - * List all tags of an item - * It's up to the caller to delete the resulting table - * - * @param item the item to list tag from - * @param lagList a pointer to a table of String containing tags - * @return the number of tags - */ -int Zinc::getTags (ZincItem *item, String*** tagList) -{ - Tcl_Obj* tmp; - Tcl_Obj** list; - int count; - - //discard old results - Tcl_ResetResult (interp); - // call .zinc gettags item - p1[0] = id; - p1[1] = ZFCT_gettags; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "getTags Failed : "); - - //retreive the result as a list - tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_ListObjGetElements (interp, tmp, &count, &list), - "bbox Failed : "); - - // put strings into a new table - char *str; - //store the table into tagList - (*tagList) = new String* [count]; - - // fill the table - for (int i (0) ; i < count ; i++) - { - str = Tcl_GetString (list[i]); - (*tagList)[i] = new String (str); - } - return count; -} - -/** - * Set the focus to an item - * - * @param item the item to set the focus to - */ -void Zinc::focus (ZincItem *item) -{ - // .zinc focus item - p1[0] = id; - p1[1] = ZFCT_focus; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "focus Failed: "); -} - -/** - * Tell if the name is a gradient name - * - * @param gname a gradient name - * @return true if the name is a gradient name, false otherwise - */ -bool Zinc::isGname (String _gname) -{ - Tcl_Obj* tmp; - int result; - //discard old results - Tcl_ResetResult (interp); - // call .zinc gname _gname - p1[0] = id; - p1[1] = ZFCT_gname; - p1[2] = Z_STR_POOL (0, _gname.c_str (), _gname.length ()); - // call the function with 3 arguments - z_command (3, "isGname Failed: "); - - //retreive the result as a boolean - tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &result), - "isGname Failed: "); - return bool (result); -} - -/** - * Create a named gradient - * - * @param gradient a gradient - * @param gname a gradient name - */ -void Zinc::gname (String gradient, String _gname) -{ - // call .zinc gname gradient gname - p1[0] = id; - p1[1] = ZFCT_gname; - p1[2] = Z_STR_POOL (0, gradient.c_str (), gradient.length ()); - p1[3] = Z_STR_POOL (1, _gname.c_str (), _gname.length ()); - // call the function with 4 arguments - z_command (4, "gname Failed: "); -} - -/** - * Retreive the group of an item - * - * @param item the item to get the group from - * @return the group - */ -ZincItem* Zinc::group (ZincItem *item) -{ - Tcl_Obj* tmp; - //discard old results - Tcl_ResetResult (interp); - // call .zinc group item - p1[0] = id; - p1[1] = ZFCT_group; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "group Failed: "); - - //retreive the result as a tcl_obj - tmp = Tcl_GetObjResult (interp); - return new ZincItem (tmp); -} - -/** - * Reorder items to lower one - * - * @param item the item to lower - */ -void Zinc::lower (ZincItem *item) -{ - // call .zinc lower item - p1[0] = id; - p1[1] = ZFCT_lower; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "lower Failed: "); -} - -/** - * Reorder items to lower one - * - * @param item the item to lower - * @param belowThis and item that will be over item - */ -void Zinc::lower (ZincItem *item, ZincItem *belowThis) -{ - // call .zinc lower item belowThis - p1[0] = id; - p1[1] = ZFCT_lower; - p1[2] = item->object; - p1[3] = belowThis->object; - // call the function with 4 arguments - z_command (4, "lower Failed: "); -} - -/** - * Reorder items to raise one - * - * @param item the item to raise - */ -void Zinc::raise (ZincItem *item) -{ - // call .zinc raise item - p1[0] = id; - p1[1] = ZFCT_raise; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "raise Failed: "); -} - -/** - * Reorder items to raise one - * - * @param item the item to raise - * @param aboveThis an item that will be under item - */ -void Zinc::raise (ZincItem *item, ZincItem *aboveThis) -{ - // call .zinc raise item aboveThis - p1[0] = id; - p1[1] = ZFCT_raise; - p1[2] = item->object; - p1[3] = aboveThis->object; - // call the function with 4 arguments - z_command (4, "raise Failed: "); -} - -/** - * Return the type of an item - * - * @param item an item - * @return the type of the item - */ -itemType Zinc::type (ZincItem *item) -{ - Tcl_Obj *tmp; - //discard old results - Tcl_ResetResult (interp); - // call .zinc type item - p1[0] = id; - p1[1] = ZFCT_type; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "type Failed: "); - - //retreive the result as a string - tmp = Tcl_GetObjResult (interp); - - // convert the string to the right enum value - int value; - z_tcl_call (Tcl_GetIndexFromObj (interp, tmp, - itemTypeStrings, - "itemType", - 0, &value), - "type Failed : "); - return itemType (value); -} - -/** - * Create a Zinc Tag that can be used in place of any item - * for zinc functions that must be called using tagOrId - * - * @param tag the text of the tag - * @return a tag item - */ -ZincItem* Zinc::createTag(String tag) -{ - //just create an item - return new ZincItem (Tcl_NewStringObj (tag.c_str (), tag.length ())); -} - -/******************************************************* - ITEM MANIPULATION -*******************************************************/ -/** - * How To call Zinc or Tcl functions: - * - * All arguments of the function are Tcl_Obj. To accelerate their call, there - * is a pool of preconstructed Tcl_Obj and some often used constant Tcl_Obj. - * p1 and p2 are tables of pointers to be used for arguments. - * Fill p1 using either predefined objects like ZITM_* or a pool objet that - * you can fill with the value you want. - * Ex : p1[1] = ZFCT_add; - * Macros have been defined to fill and use a pool object - * Ex : p1[2] = Z_INT_POOL(1, 200); - * Do not use twice the same pool index for the same function call. - * p2 is used to construct and argument which is a list of Tcl_Obj. - * To call the function use z_tcl_call which automaticly handle error return - * codes or z_command to call a Zinc command which handle all arguments too. - */ - -/** - * Suppress an item - * - * @param item the item to suppress - */ -void Zinc::itemRemove (ZincItem *item) -{ - //call .zinc remove item - p1[0] = id; - p1[1] = ZFCT_remove; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "itemRemove failed :"); -} - -/** - * Create a group item - * - * @param parentGroup group where we'll put the new group, if NULL we create - * in the defaults group - * @return the group item - */ -ZincItem *Zinc::itemCreateGroup (ZincItem *parentGroup) -{ - //call .zinc add group parentGroup - p1[0] = id; - p1[1] = ZFCT_add; - p1[2] = ZITM_group; - p1[3] = Z_PARENTGROUP (parentGroup); - // call the function with 4 arguments - z_command (4, "itemCreateGroup failed :"); - - return new ZincItem (Tcl_GetObjResult (interp)); -} - -/** - * Create a rectangle item - * - * @param parentGroup group where we'll put it - * @param x y width height the coordinates of the new rectangle - * @return the rectangle item - */ -ZincItem* Zinc::itemCreateRectangle (ZincItem *parentGroup, double x, double y, - double width, double height) -{ - //call .zinc add rectangle parentGroup {coords} - p1[0] = id; - p1[1] = ZFCT_add; - p1[2] = ZITM_rectangle; - p1[3] = Z_PARENTGROUP (parentGroup); - //coordinates as a list - p2[0] = Z_DBL_POOL (0, x); - p2[1] = Z_DBL_POOL (1, y); - p2[2] = Z_DBL_POOL (2, width + x); - p2[3] = Z_DBL_POOL (3, height + y); - p1[4] = Z_LST_POOL (4, p2, 4); // a list with 4 items - // call the function with 4 arguments - z_command (5, "itemCreateRectangle failed :"); - - //clear the list in the pool No 4 - Z_CLEANLIST (4); - - return new ZincItem (Tcl_GetObjResult (interp)); -} - -/** - * Create an arc item - * - * @param parentGroup group where we'll put it - * @param x y width height the coordinates of the new rectangle - * @return the arc item - */ -ZincItem *Zinc::itemCreateArc (ZincItem *parentGroup, double x, double y, - double width, double height) -{ - //call .zinc add arc parentGroup {coords} - p1[0] = id; - p1[1] = ZFCT_add; - p1[2] = ZITM_arc; - p1[3] = Z_PARENTGROUP (parentGroup); - //coordinates as a list - p2[0] = Z_DBL_POOL (0, x); - p2[1] = Z_DBL_POOL (1, y); - p2[2] = Z_DBL_POOL (2, width + x); - p2[3] = Z_DBL_POOL (3, height + y); - p1[4] = Z_LST_POOL (4, p2, 4); - // call the function with 5 arguments - z_command (5, "itemCreateArc failed :"); - - //clear the list in the pool No 4 to reuse it later - Z_CLEANLIST (4); - - return new ZincItem (Tcl_GetObjResult (interp)); -} - -/** - * Create a text item - * - * @param parentGroup group where we'll put it - * @return the text item - */ -ZincItem *Zinc::itemCreateText (ZincItem *parentGroup) -{ - //call .zinc add text parentGroup - p1[0] = id; - p1[1] = ZFCT_add; - p1[2] = ZITM_text; - p1[3] = Z_PARENTGROUP (parentGroup); - // call the function with 4 arguments - z_command (4, "itemCreateText failed :"); - - return new ZincItem (Tcl_GetObjResult (interp)); -} - -/** - * Create a curve item - * - * @param parentGroup group where we'll put it - * @param path the path to display - * @return the curve item - */ -ZincItem *Zinc::itemCreateCurve (ZincItem *parentGroup, ZincPath *path) -{ - Tcl_Obj *table; - table = path->getTable (); - //call .zinc add curve parentGroup {path} - p1[0] = id; - p1[1] = ZFCT_add; - p1[2] = ZITM_curve; - p1[3] = Z_PARENTGROUP (parentGroup); - p1[4] = table; - // call the function with 5 arguments - z_command (5, "itemCreateCurve failed :"); - return new ZincItem (Tcl_GetObjResult (interp)); -} - - -/** - * Create an icon item - * - * @param parentGroup group where we'll put it - * @param image a zincImage to display - * @return the icon item - */ -ZincItem *Zinc::itemCreateIcon (ZincItem *parentGroup, ZincImage* image) -{ - //call .zinc add icon parentGroup - p1[0] = id; - p1[1] = ZFCT_add; - p1[2] = ZITM_icon; - p1[3] = Z_PARENTGROUP (parentGroup); - // call the function with 4 arguments - z_command (4, "itemCreateIcon failed :"); - - //retreive the result - ZincItem *result = new ZincItem (Tcl_GetObjResult (interp)); - //to be able to set the image - itemSetImage (result, image); - - return result; -} - -/************************************************** - TRANSFORMATION METHODS -**************************************************/ - -/** - * How To call Zinc or Tcl functions: - * - * All arguments of the function are Tcl_Obj. To accelerate their call, there - * is a pool of preconstructed Tcl_Obj and some often used constant Tcl_Obj. - * p1 and p2 are tables of pointers to be used for arguments. - * Fill p1 using either predefined objects like ZITM_* or a pool objet that - * you can fill with the value you want. - * Ex : p1[1] = ZFCT_add; - * Macros have been defined to fill and use a pool object - * Ex : p1[2] = Z_INT_POOL(1, 200); - * Do not use twice the same pool index for the same function call. - * p2 is used to construct and argument which is a list of Tcl_Obj. - * To call the function use z_tcl_call which automaticly handle error return - * codes or z_command to call a Zinc command which handle all arguments too. - */ - -/** - * Translate the item - * - * @param item the item to which we apply the transform - * @param dx dy translation vector - */ -void Zinc::itemTranslate (ZincItem * item, double dx, double dy) -{ - // call .zinc translate item dx dy - p1[0] = id; - p1[1] = ZFCT_translate; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, dx); - p1[4] = Z_DBL_POOL (1, dy); - // call the function with 5 arguments - z_command (5, "itemTranslateRelative Failed : "); -} - -/** - * Translate the item - * - * @param item the item to which we apply the transform - * @param x y translation vector - * @param absolute true if the translation is absolute - */ -void Zinc::itemTranslate (ZincItem * item, double x, double y, bool absolute) -{ - // call .zinc translate item x y absolute - p1[0] = id; - p1[1] = ZFCT_translate; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, x); - p1[4] = Z_DBL_POOL (1, y); - p1[5] = Z_BOO_POOL (2, absolute); - // call the function with 6 arguments - z_command (6, "itemTranslateAbsolute Failed : "); -} - -/** - * Rotate an item - * - * @param item the item to which we apply the transform - * @param angle the angle to rotate in radian - */ -void Zinc::itemRotate (ZincItem * item, double angle) -{ - // call .zinc rotate item angle - p1[0] = id; - p1[1] = ZFCT_rotate; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, angle); - // call the function with 4 arguments - z_command (4, "itemRotate (angle) Failed : "); -} - -/** - * Rotate an item - * - * @param item the item to which we apply the transform - * @param angle the angle to rotate in radian - * @param x y the center of the rotation - */ -void Zinc::itemRotate (ZincItem * item, double angle, double x, double y) -{ - // call .zinc rotate item angle x y - p1[0] = id; - p1[1] = ZFCT_rotate; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, angle); - p1[4] = Z_DBL_POOL (1, x); - p1[5] = Z_DBL_POOL (2, y); - // call the function with 6 arguments - z_command (6, "itemRotateDegree (angle,center) Failed : "); -} - -/** - * Rotate an item - * - * @param item the item to which we apply the transform - * @param angle the angle to rotate - * @param degree true for an angle in degree, false for an angle in radians - */ -void Zinc::itemRotate (ZincItem * item, double angle, bool degree) -{ - // call .zinc rotate item angle degree - p1[0] = id; - p1[1] = ZFCT_rotate; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, angle); - p1[4] = Z_BOO_POOL (1, degree); - // call the function with 5 arguments - z_command (5, "itemRotate (angle,degree) Failed : "); -} - -/** - * Rotate an item - * - * @param item the item to which we apply the transform - * @param angle the angle to rotate in radian - * @param x y the center of the rotation - * @param degree true for an angle in degree, false for an angle in radians - */ -void Zinc::itemRotate (ZincItem * item, double angle, double x, double y, - bool degree) -{ - // call .zinc rotate item angle degree x y - p1[0] = id; - p1[1] = ZFCT_rotate; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, angle); - p1[4] = Z_BOO_POOL (1, degree); - p1[5] = Z_DBL_POOL (2, x); - p1[6] = Z_DBL_POOL (3, y); - // call the function with 7 arguments - z_command (7, "itemRotate (angle,center,degree) Failed : "); -} - -/** - * Scale an item - * - * @param item the item to which we apply the transform - * @param ax horizontal scale - * @param ay vertical scale - */ -void Zinc::itemScale (ZincItem * item, double ax, double ay) -{ - // call .zinc scale item ax ay - p1[0] = id; - p1[1] = ZFCT_scale; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, ax); - p1[4] = Z_DBL_POOL (1, ay); - // call the function with 5 arguments - z_command (5, "itemScale Failed : "); -} - -/** - * Scale an item using a specified center - * - * @param item the item to which we apply the transform - * @param ax horizontal scale - * @param ay vertical scale - * @param cx cy center of the scale - */ -void Zinc::itemScale (ZincItem * item, double ax, double ay, double cx, double cy) -{ - // call .zinc scale item ax ay cx cy - p1[0] = id; - p1[1] = ZFCT_scale; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, ax); - p1[4] = Z_DBL_POOL (1, ay); - p1[5] = Z_DBL_POOL (2, cx); - p1[6] = Z_DBL_POOL (3, cy); - // call the function with 7 arguments - z_command (7, "itemScale (center) Failed : "); -} - -/** - * Skew an item - * - * @param item the item to which we apply the transform - * @param sx horizontal skew - * @param sy vertical skew - */ -void Zinc::itemSkew (ZincItem * item, double sx, double sy) -{ - // call .zinc skew item sx sy - p1[0] = id; - p1[1] = ZFCT_skew; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, sx); - p1[4] = Z_DBL_POOL (1, sy); - // call the function with 5 arguments - z_command (5, "itemSkew Failed : "); -} - -/** - * Skew an item horizontaly - * - * @param item the item to which we apply the transform - * @param sx horizontal skew - */ -void Zinc::itemSkewX (ZincItem * item, double sx) -{ - // call .zinc skew item sx 0 - p1[0] = id; - p1[1] = ZFCT_skew; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, sx); - p1[4] = Z_DBL_POOL (1, 0); - // call the function with 5 arguments - z_command (5, "itemSkewX Failed : "); -} - -/** - * Skew an item verticaly - * - * @param item the item to which we apply the transform - * @param sy vertical skew - */ -void Zinc::itemSkewY (ZincItem * item, double sy) -{ - // call .zinc skew item 0 sy - p1[0] = id; - p1[1] = ZFCT_skew; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, 0); - p1[4] = Z_DBL_POOL (1, sy); - // call the function with 5 arguments - z_command (5, "itemSkewY Failed : "); -} - -/** - * Reset all transformations associated with the item - * - * @param item the item to which we apply the transform - */ -void Zinc::itemResetTransformation (ZincItem * item) -{ - // call .zinc treset item - p1[0] = id; - p1[1] = ZFCT_treset; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "itemResetTransformation Failed : "); -} - -/** - * Replace current transform by a matrix - * - * @param item the item to which we apply the transform - * @param a,b,c,d,e,f the new transform matrix - */ -void Zinc::itemSetTransformation (ZincItem * item, - double a, double b, double c, - double d, double e, double f) -{ - // call .zinc tset item a b c d e f - p1[0] = id; - p1[1] = ZFCT_tset; - p1[2] = item->object; - p1[3] = Z_DBL_POOL (0, a); - p1[4] = Z_DBL_POOL (1, b); - p1[5] = Z_DBL_POOL (2, c); - p1[6] = Z_DBL_POOL (3, d); - p1[7] = Z_DBL_POOL (4, e); - p1[8] = Z_DBL_POOL (5, f); - // call the function with 9 arguments - z_command (9, "itemSetTransformation Failed : "); -} - -/** - * Get current transform matrix - * @param item the item to which we apply the transform - * @param a,b,c,d,e,f places where we'll put the transform matrix - */ -void Zinc::itemGetTransformation (ZincItem * item, - double *a, double *b, double *c, - double *d, double *e, double *f) -{ - // bug in zinc (or not?), it doesn't reset result for the tget function - // or apennd a result instead of replacing it - Tcl_ResetResult (interp); - // call .zinc tget item - p1[0] = id; - p1[1] = ZFCT_tget; - p1[2] = item->object; - // call the function with 3 arguments - z_command (3, "itemGetTransformation Failed : "); - - //retreive the result as a list object - Tcl_Obj* tmp = Tcl_GetObjResult (interp); - int num; - Tcl_Obj** elems; - z_tcl_call (Tcl_ListObjGetElements (interp, tmp, &num, &elems), - "itemGetTransformation Failed : "); - - //num is necessarily 6, extract 6 double - z_tcl_call (Tcl_GetDoubleFromObj(interp, elems[0], a), - "itemGetTransformation Failed : "); - z_tcl_call (Tcl_GetDoubleFromObj(interp, elems[1], b), - "itemGetTransformation Failed : "); - z_tcl_call (Tcl_GetDoubleFromObj(interp, elems[2], c), - "itemGetTransformation Failed : "); - z_tcl_call (Tcl_GetDoubleFromObj(interp, elems[3], d), - "itemGetTransformation Failed : "); - z_tcl_call (Tcl_GetDoubleFromObj(interp, elems[4], e), - "itemGetTransformation Failed : "); - z_tcl_call (Tcl_GetDoubleFromObj(interp, elems[5], f), - "itemGetTransformation Failed : "); -} - - -/** - * Multiply current transform by a matrix - * - * @param item the item to which we apply the transform - * @param a,b,c,d,e,f transform matrix - */ -void Zinc::itemMatrix (ZincItem * item, - double a, double b, double c, - double d, double e, double f) -{ - double a0,b0,c0,d0,e0,f0; - double a1,b1,c1,d1,e1,f1; - // get current transform - itemGetTransformation (item, &a0, &b0, &c0, &d0, &e0, &f0); - - //multiply - a1 = a * a0 + d * b0; - b1 = b * a0 + e * b0; - c1 = c * a0 + f * b0 + c0; - d1 = a * d0 + d * e0; - e1 = b * d0 + e * e0; - f1 = c * d0 + f * e0 + f0; - - // set to new transform - itemSetTransformation (item, a1, b1, c1, d1, e1, f1); -} - -/************************************************** - BINDING -**************************************************/ - -/** - * How To call Zinc or Tcl functions: - * - * All arguments of the function are Tcl_Obj. To accelerate their call, there - * is a pool of preconstructed Tcl_Obj and some often used constant Tcl_Obj. - * p1 and p2 are tables of pointers to be used for arguments. - * Fill p1 using either predefined objects like ZITM_* or a pool objet that - * you can fill with the value you want. - * Ex : p1[1] = ZFCT_add; - * Macros have been defined to fill and use a pool object - * Ex : p1[2] = Z_INT_POOL(1, 200); - * Do not use twice the same pool index for the same function call. - * p2 is used to construct and argument which is a list of Tcl_Obj. - * To call the function use z_tcl_call which automaticly handle error return - * codes or z_command to call a Zinc command which handle all arguments too. - */ - -//number of elements in the ZincEvent structure -#define EVENT_COUNT 10 -//number of basic parameters to a widget callback -#define WIDGETCB_COUNT 3 -//number of basic parameters to an item callback -#define ITEMCB_COUNT 4 - -//the equivalent of z_tcl_call able to be called in a callback -#define z_tcl_call2(fct,msg) \ - { \ - int result = (fct); \ - if (result != TCL_OK) \ - { \ - Tcl_AppendResult (Zinc::interp, msg, NULL); \ - return TCL_ERROR; \ - } \ - } - -/** - * Real callback used by zinc TCL - * - * @param client_data the Zinc object - * @param interp current interpreter - * @param argc number of arguments - * @param args table of arguments - */ -int tclCallback (ClientData client_data, Tcl_Interp *interp, - int argc, Tcl_Obj *CONST args[]) -{ - Zinc *zinc = (Zinc*) client_data; - int cb; - ZincItem *item; - void *userData; - ZincEvent *ev; - long value; - - //count arguments - if ((argc != WIDGETCB_COUNT + EVENT_COUNT) && (argc != ITEMCB_COUNT + EVENT_COUNT)) - { - Tcl_SetResult (Zinc::interp, "Zinclib: Invalid argument count in tclCallback", NULL); - return TCL_ERROR; - } - // skip the bind name - args++; - - // get the item if this is an item bind - if (argc == ITEMCB_COUNT + EVENT_COUNT) - { - // retreive item - z_tcl_call2 (Tcl_GetLongFromObj (interp, args[0], &value), - "Zinclib: No item in tclCallback"); - item = (ZincItem*) value; - args++; - } - - // retreive callback - z_tcl_call2 (Tcl_GetLongFromObj (interp, args[0], &value), - "Zinclib: No callback in tclCallback"); - cb = value; - - // retreive userdata - args++; - z_tcl_call2 (Tcl_GetLongFromObj (interp, args[0], &value), - "Zinclib: No userData in tclCallback"); - userData = (void*) value; - - // point args to events values - args++; - //fill event structure with all avent values we support - ev = new ZincEvent; - // x position of the mouse - if (Tcl_GetIntFromObj (interp, args[0], &(ev->x)) != TCL_OK) - { - ev->x = 0; - } - // y position of the mouse - if (Tcl_GetIntFromObj (interp, args[1], &(ev->y)) != TCL_OK) - { - ev->y = 0; - } - // keycode - if (Tcl_GetIntFromObj (interp, args[2], &(ev->k)) != TCL_OK) - { - ev->k = 0; - } - // timestamp - if (Tcl_GetLongFromObj (interp, args[3], &(ev->t)) != TCL_OK) - { - ev->t = 0; - } - // keysyms - ev->K = String (Tcl_GetString (args[4])); - // window height - if (Tcl_GetIntFromObj (interp, args[5], &(ev->h)) != TCL_OK) - { - ev->h = 0; - } - // window width - if (Tcl_GetIntFromObj (interp, args[6], &(ev->w)) != TCL_OK) - { - ev->w = 0; - } - // x position of the mouse within display - if (Tcl_GetIntFromObj (interp, args[7], &(ev->X)) != TCL_OK) - { - ev->X = 0; - } - // y position of the mouse within display - if (Tcl_GetIntFromObj (interp, args[8], &(ev->Y)) != TCL_OK) - { - ev->Y = 0; - } - // button pressed - if (Tcl_GetIntFromObj (interp, args[9], &(ev->b)) != TCL_OK) - { - ev->b = 0; - } - - // Call the callback - if (argc == ITEMCB_COUNT + EVENT_COUNT) - { - // this is a callback on an item - ZincItemCallback itemCb = (ZincItemCallback)cb; - (*itemCb) (zinc, item, ev, userData); - } - else - { - // this is a callback on the zinc widget - ZincWidgetCallback zincCb = (ZincWidgetCallback)cb; - (*zincCb) (zinc, ev, userData); - } - - delete ev; - return TCL_OK; -} - -/** - * Bind a function to an event on the zinc widget - * - * @param eventSpecification tcl style event specicication - * @param callBack the function which will be called back - * @param userData data we will give back to the callback when called - * @param add false to replace existing bind or true to add - */ -void Zinc::bind (String eventSpecification, - ZincWidgetCallback callBack, void *userData, bool add) -{ - // call bind .zinc eventSpec script - const char* para[4]; - para[0] = "bind"; - para[1] = window.c_str (); - para[2] = eventSpecification.c_str (); - - //create callback script - // this script is a call to the tclCallback function using all arguments we need - String script; - // do we add or replace the callback - if (add) - { - script = String("+"); - } - script += tclCb + " "; // name of the tcl function we created - script += ltos ((long)callBack) + " "; // the real callback (as a pointer) - script += ltos ((long)userData) + " "; // the user data (as a pointer) - script += "%x %y %k %t %K %h %w %X %Y %b";// arguments for the event structure - para[3] = script.c_str (); - - //call the command with 4 arguments - z_tcl_call ((*bndCmdInfo.proc)(bndCmdInfo.clientData, interp, 4, para), - "bind Failed : "); -} - -/** - * Annulate a binding - * - * @param eventSpecification tcl style event specicication - */ -void Zinc::unbind (String eventSpecification) -{ - // call bind .zinc eventSpec "" - const char* para[4];; - para[0] = "bind"; - para[1] = window.c_str (); - para[2] = eventSpecification.c_str (); - para[3] = ""; - - //call the command with 4 arguments - z_tcl_call ((*bndCmdInfo.proc)(bndCmdInfo.clientData, interp, 4, para), - "unbind Failed : "); -} - -/** - * Bind a function to an event on an item - * - * @param item the item on which to bind - * @param eventSpecification tcl style event specicication - * @param callBack the function which will be called back - * @param userData data we will give back to the callback when called - */ -void Zinc::itemBind (ZincItem *item, String eventSpec, - ZincItemCallback callBack, void *userData, bool add) -{ - // call .zinc bind item eventSpec script - p1[0] = id; - p1[1] = ZFCT_bind; - p1[2] = item->object; - p1[3] = Z_STR_POOL (0, eventSpec.c_str (), eventSpec.length ()); - - //create callback script - // this script is a call to the tclCallback function using all arguments we need - String script; - // do we add or replace the callback - if (add) - { - script = String("+"); - } - script += tclCb + " "; // name of the tcl function we created - script += ltos ((long)item) + " "; // the item (as a pointer) - script += ltos ((long)callBack) + " "; // the real callback (as a pointer) - script += ltos ((long)userData) + " "; // the user data (as a pointer) - script += "%x %y %k %t %K %h %w %X %Y %b"; // arguments for the event structure - p1[4] = Z_STR_POOL (1, script.c_str (), script.length ()); - - // call the widget command with 5 arguments - z_command (5, "itemBind Failed : "); -} - -/** - * Annulate a binding - * - * @param item the item on which to unbind - * @param eventSpecification tcl style event specicication - */ -void Zinc::itemUnbind (ZincItem *item, String eventSpec) -{ - // call .zinc bind item eventSpec "" - p1[0] = id; - p1[1] = ZFCT_bind; - p1[2] = item->object; - p1[3] = Z_STR_POOL (0, eventSpec.c_str (), eventSpec.length ()); - p1[4] = Z_STR_POOL (1, "", -1); - - //call the command with 5 arguments - z_command (5, "itemUnbind Failed : "); -} - -/******************************************************* - STATIC PROCEDURES -*******************************************************/ - -/** - * How To call Zinc or Tcl functions: - * - * All arguments of the function are Tcl_Obj. To accelerate their call, there - * is a pool of preconstructed Tcl_Obj and some often used constant Tcl_Obj. - * p1 and p2 are tables of pointers to be used for arguments. - * Fill p1 using either predefined objects like ZITM_* or a pool objet that - * you can fill with the value you want. - * Ex : p1[1] = ZFCT_add; - * Macros have been defined to fill and use a pool object - * Ex : p1[2] = Z_INT_POOL(1, 200); - * Do not use twice the same pool index for the same function call. - * p2 is used to construct and argument which is a list of Tcl_Obj. - * To call the function use z_tcl_call which automaticly handle error return - * codes or z_command to call a Zinc command which handle all arguments too. - */ - -/** - * Loads the zinc library and initialize tcl and tk - * - * @param argv0 the name of the executable as passed in argv[0] - */ -void Zinc::loadZinc (char *argv0) throw (ZincException) -{ - //Initialise internal TCL structure - Tcl_FindExecutable (argv0); - //Create an interpreter - interp = Tcl_CreateInterp(); - if (interp == NULL) - { - throw ZincException("Tcl_CreateInterp Error", __FILE__, __LINE__); - } - - // set display - Tcl_SetVar(interp, "env", "DISPLAY", TCL_GLOBAL_ONLY); - //remove prompt - Tcl_SetVar(interp, "tcl_interactive", "0", TCL_GLOBAL_ONLY); - - // needed for Default system startup file for Tcl-based applications - z_tcl_call (Tcl_Init(interp), "Tcl_Init failed : "); - - //Initialize Tk -// Tk_Init(interp); - - z_tcl_call (Tk_Init (interp), "Tk_Init failed : "); - - //Initialize Zinc - z_tcl_call (Tkzinc_Init (interp), "Tkzinc_Init failed :"); - - // Load Img package in order to handle PNG, JPEG, .. - z_tcl_call (Tcl_GlobalEval (interp, "package require Img"), "Package Img not found"); - - //Initialize objects pool - for (int i(0); iitemconfigure ( -closed ) - * - * @param item the item to configure - * @param value the closed to set - */ -void Zinc::itemSetClosed (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_closed; - p1[4] = Z_BOO_POOL (1, value); - - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetClosed Failed : "); -} - -/** - * Call zinc->itemcget ( -closed ) - * - * @param item the item to get closed from - * @return closed value - */ -bool Zinc::itemGetClosed (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_closed; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetClosed Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetClosed Failed : "); - return bool (value); -} - -/** - * Call zinc->itemconfigure ( -composealpha ) - * - * @param item the item to configure - * @param value the composealpha to set - */ -void Zinc::itemSetComposealpha (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_composealpha; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetComposealpha Failed : "); -} - -/** - * Call zinc->itemcget ( -composealpha ) - * - * @param item the item to get composealpha from - * @return composealpha value - */ -bool Zinc::itemGetComposealpha (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_composealpha; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetComposealpha Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetComposealpha Failed : "); - return bool (value); -} - -/** - * Call zinc->itemconfigure ( -composerotation ) - * - * @param item the item to configure - * @param value the composerotation to set - */ -void Zinc::itemSetComposerotation (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_composerotation; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetComposerotation Failed : "); -} - -/** - * Call zinc->itemcget ( -composerotation ) - * - * @param item the item to get composerotation from - * @return composerotation value - */ -bool Zinc::itemGetComposerotation (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_composerotation; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetComposerotation Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetComposerotation Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -composescale ) - * - * @param item the item to configure - * @param value the composescale to set - */ -void Zinc::itemSetComposescale (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_composescale; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetComposescale Failed : "); -} - -/** - * Call zinc->itemcget ( -composescale ) - * - * @param item the item to get composescale from - * @return composescale value - */ -bool Zinc::itemGetComposescale (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_composescale; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetComposescale Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetComposescale Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -extent ) - * - * @param item the item to configure - * @param value the extent to set - */ -void Zinc::itemSetExtent (ZincItem * item, unsigned int value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_extent; - p1[4] = Z_INT_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetExtent Failed : "); -} - -/** - * Call zinc->itemcget ( -extent ) - * - * @param item the item to get extent from - * @return extent value - */ -unsigned int Zinc::itemGetExtent (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_extent; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetExtent Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "itemGetExtent Failed : "); - return (unsigned int)value; -} - -/** - * Call zinc->itemconfigure ( -fillcolor ) - * - * @param item the item to configure - * @param value the fillcolor to set - */ -void Zinc::itemSetFillcolor (ZincItem * item, String value) -{ - //Warning, weird bug workaround - // here is a deep copy - // without this, on frequent calls, tcl mays segfault - String tmp = String(value.c_str ()); - - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_fillcolor; - p1[4] = Z_STR_POOL (1, tmp.c_str (), -1); - //call the zinc function in with 5 arguments internal form - z_command (5, "itemSetFillcolor Failed : "); -} - -/** - * Call zinc->itemcget ( -fillcolor ) - * - * @param item the item to get fillcolor from - * @return fillcolor value - */ -String Zinc::itemGetFillcolor (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_fillcolor; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetFillcolor Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return String (Tcl_GetStringFromObj (tmp, NULL)); -} - -/** - * Call zinc->itemconfigure ( -filled ) - * - * @param item the item to configure - * @param value the filled to set - */ -void Zinc::itemSetFilled (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_filled; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetFilled Failed : "); -} - -/** - * Call zinc->itemcget ( -filled ) - * - * @param item the item to get filled from - * @return filled value - */ -bool Zinc::itemGetFilled (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_filled; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetFilled Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetFilled Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -fillpattern ) - * - * @param item the item to configure - * @param value the fillpattern to set - */ -void Zinc::itemSetFillpattern (ZincItem * item, ZincBitmap *value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_fillpattern; - p1[4] = value->object; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetFillpattern Failed : "); -} - -/** - * Call zinc->itemcget ( -fillpattern ) - * - * @param item the item to get fillpattern from - * @return fillpattern value - */ -ZincBitmap * Zinc::itemGetFillpattern (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_fillpattern; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetFillpattern Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return new ZincBitmap (tmp, true); -} - -/** - * Call zinc->itemconfigure ( -linecolor ) - * - * @param item the item to configure - * @param value the linecolor to set - */ -void Zinc::itemSetLinecolor (ZincItem * item, String value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_linecolor; - p1[4] = Z_STR_POOL (1, value.c_str (), value.length ()); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetLinecolor Failed : "); -} - -/** - * Call zinc->itemcget ( -linecolor ) - * - * @param item the item to get linecolor from - * @return linecolor value - */ -String Zinc::itemGetLinecolor (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_linecolor; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetLinecolor Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return String (Tcl_GetStringFromObj (tmp, NULL)); -} - -/** - * Call zinc->itemconfigure ( -linepattern ) - * - * @param item the item to configure - * @param value the linepattern to set - */ -void Zinc::itemSetLinepattern (ZincItem * item, ZincBitmap * value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_linepattern; - p1[4] = value->object; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetLinepattern Failed : "); -} - -/** - * Call zinc->itemcget ( -linepattern ) - * - * @param item the item to get linepattern from - * @return linepattern value - */ -ZincBitmap * Zinc::itemGetLinepattern (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_linepattern; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetLinepattern Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return new ZincBitmap (tmp, true); -} - -/** - * Call zinc->itemconfigure ( -linestyle ) - * - * @param item the item to configure - * @param value the linestyle to set - */ -void Zinc::itemSetLinestyle (ZincItem * item, lineStyle value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_linestyle; - p1[4] = lineStyles[value]; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetLinestyle Failed : "); -} - -/** - * Call zinc->itemcget ( -linestyle ) - * - * @param item the item to get linestyle from - * @return linestyle value - */ -lineStyle Zinc::itemGetLinestyle (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_linestyle; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetLinestyle Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIndexFromObj (interp, tmp, - lineStylesStrings, - "lineStyles", - 0, &value), - "itemGetLinestyle Failed : "); - return (lineStyle)value; -} - -/** - * Call zinc->itemconfigure ( -linewidth ) - * - * @param item the item to configure - * @param value the linewidth to set - */ -void Zinc::itemSetLinewidth (ZincItem * item, double value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_linewidth; - p1[4] = Z_DBL_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetLinewidth Failed : "); -} - -/** - * Call zinc->itemcget ( -linewidth ) - * - * @param item the item to get linewidth from - * @return linewidth value - */ -double Zinc::itemGetLinewidth (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_linewidth; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetLinewidth Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - double value; - z_tcl_call (Tcl_GetDoubleFromObj (interp, tmp, &value), - "itemGetLinewidth Failed : "); - return (double)value; -} - -/** - * Call zinc->itemconfigure ( -pieslice ) - * - * @param item the item to configure - * @param value the pieslice to set - */ -void Zinc::itemSetPieslice (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_pieslice; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetPieslice Failed : "); -} - -/** - * Call zinc->itemcget ( -pieslice ) - * - * @param item the item to get pieslice from - * @return pieslice value - */ -bool Zinc::itemGetPieslice (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_pieslice; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetPieslice Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetPieslice Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -priority ) - * - * @param item the item to configure - * @param value the priority to set - */ -void Zinc::itemSetPriority (ZincItem * item, unsigned int value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_priority; - p1[4] = Z_INT_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetPriority Failed : "); -} - -/** - * Call zinc->itemcget ( -priority ) - * - * @param item the item to get priority from - * @return priority value - */ -unsigned int Zinc::itemGetPriority (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_priority; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetPriority Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "itemGetPriority Failed : "); - return (unsigned int)value; -} - -/** - * Call zinc->itemconfigure ( -sensitive ) - * - * @param item the item to configure - * @param value the sensitive to set - */ -void Zinc::itemSetSensitive (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_sensitive; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetSensitive Failed : "); -} - -/** - * Call zinc->itemcget ( -sensitive ) - * - * @param item the item to get sensitive from - * @return sensitive value - */ -bool Zinc::itemGetSensitive (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_sensitive; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetSensitive Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetSensitive Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -startangle ) - * - * @param item the item to configure - * @param value the startangle to set - */ -void Zinc::itemSetStartangle (ZincItem * item, unsigned int value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_startangle; - p1[4] = Z_INT_POOL (1, value); - //call the zinc function with 5 argumentsin internal form - z_command (5, "itemSetStartangle Failed : "); -} - -/** - * Call zinc->itemcget ( -startangle ) - * - * @param item the item to get startangle from - * @return startangle value - */ -unsigned int Zinc::itemGetStartangle (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_startangle; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetStartangle Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "itemGetStartangle Failed : "); - return (unsigned int)value; -} - -/** - * Call zinc->itemconfigure ( -tile ) - * - * @param item the item to configure - * @param value the tile to set - */ -void Zinc::itemSetTile (ZincItem * item, ZincBitmap * value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_tile; - p1[4] = value->object; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetTile Failed : "); -} - -/** - * Call zinc->itemcget ( -tile ) - * - * @param item the item to get tile from - * @return tile value - */ -ZincBitmap * Zinc::itemGetTile (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_tile; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetTile Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return new ZincBitmap (tmp, true); -} - -/** - * Call zinc->itemconfigure ( -visible ) - * - * @param item the item to configure - * @param value the visible to set - */ -void Zinc::itemSetVisible (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_visible; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetVisible Failed : "); -} - -/** - * Call zinc->itemcget ( -visible ) - * - * @param item the item to get visible from - * @return visible value - */ -bool Zinc::itemGetVisible (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_visible; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetVisible Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetVisible Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -capstyle ) - * - * @param item the item to configure - * @param value the capstyle to set - */ -void Zinc::itemSetCapstyle (ZincItem * item, capStyle value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_capstyle; - p1[4] = capStyles[value]; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetCapstyle Failed : "); -} - -/** - * Call zinc->itemcget ( -capstyle ) - * - * @param item the item to get capstyle from - * @return capstyle value - */ -capStyle Zinc::itemGetCapstyle (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_capstyle; - //call the zinc function with 4 argumentsin internal form - z_command (4, "itemGetCapstyle Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIndexFromObj (interp, tmp, - capStylesStrings, - "capStyles", - 0, &value), - "itemGetCapstyle Failed : "); - return (capStyle)value; -} - -/** - * Call zinc->itemconfigure ( -fillrule ) - * - * @param item the item to configure - * @param value the fillrule to set - */ -void Zinc::itemSetFillrule (ZincItem * item, fillRule value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_fillrule; - p1[4] = fillRules[value]; - //call the zinc function with 5 argumentsin internal form - z_command (5, "itemSetFillrule Failed : "); -} - -/** - * Call zinc->itemcget ( -fillrule ) - * - * @param item the item to get fillrule from - * @return fillrule value - */ -fillRule Zinc::itemGetFillrule (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_fillrule; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetFillrule Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIndexFromObj (interp, tmp, - fillRulesStrings, - "fillRules", - 0, &value), - "itemGetFillrule Failed : "); - return (fillRule)value; -} - -/** - * Call zinc->itemconfigure ( -joinstyle ) - * - * @param item the item to configure - * @param value the joinstyle to set - */ -void Zinc::itemSetJoinstyle (ZincItem * item, joinStyle value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_joinstyle; - p1[4] = joinStyles[value]; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetJoinstyle Failed : "); -} - -/** - * Call zinc->itemcget ( -joinstyle ) - * - * @param item the item to get joinstyle from - * @return joinstyle value - */ -joinStyle Zinc::itemGetJoinstyle (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_joinstyle; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetJoinstyle Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIndexFromObj (interp, tmp, - joinStylesStrings, - "joinStyles", - 0, &value), - "itemGetJoinstyle Failed : "); - return (joinStyle)value; -} - -/** - * Call zinc->itemconfigure ( -relief ) - * - * @param item the item to configure - * @param value the relief to set - */ -void Zinc::itemSetRelief (ZincItem * item, relief value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_relief; - p1[4] = reliefs[value]; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetRelief Failed : "); -} - -/** - * Call zinc->itemcget ( -relief ) - * - * @param item the item to get relief from - * @return relief value - */ -relief Zinc::itemGetRelief (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_relief; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetRelief Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIndexFromObj (interp, tmp, - reliefsStrings, - "reliefs", - 0, &value), - "itemGetRelief Failed : "); - return (relief)value; -} - -/** - * Call zinc->itemconfigure ( -smoothrelief ) - * - * @param item the item to configure - * @param value the smoothrelief to set - */ -void Zinc::itemSetSmoothrelief (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_smoothrelief; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetSmoothrelief Failed : "); -} - -/** - * Call zinc->itemcget ( -smoothrelief ) - * - * @param item the item to get smoothrelief from - * @return smoothrelief value - */ -bool Zinc::itemGetSmoothrelief (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_smoothrelief; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetSmoothrelief Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetSmoothrelief Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -alpha ) - * - * @param item the item to configure - * @param value the alpha to set - */ -void Zinc::itemSetAlpha (ZincItem * item, unsigned int value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_alpha; - p1[4] = Z_INT_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetAlpha Failed : "); -} - -/** - * Call zinc->itemcget ( -alpha ) - * - * @param item the item to get alpha from - * @return alpha value - */ -unsigned int Zinc::itemGetAlpha (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_alpha; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetAlpha Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "itemGetAlpha Failed : "); - return (unsigned int)value; -} - -/** - * Call zinc->itemconfigure ( -atomic ) - * - * @param item the item to configure - * @param value the atomic to set - */ -void Zinc::itemSetAtomic (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_atomic; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function in with 5 arguments internal form - z_command (5, "itemSetAtomic Failed : "); -} - -/** - * Call zinc->itemcget ( -atomic ) - * - * @param item the item to get atomic from - * @return atomic value - */ -bool Zinc::itemGetAtomic (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_atomic; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetAtomic Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetAtomic Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -clip ) - * - * @param item the item to configure - * @param value the clip to set - */ -void Zinc::itemSetClip (ZincItem * item, ZincItem * value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_clip; - p1[4] = value->object; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetClip Failed : "); -} - -/** - * Call zinc->itemcget ( -clip ) - * - * @param item the item to get clip from - * @return clip value - */ -ZincItem * Zinc::itemGetClip (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_clip; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetClip Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return new ZincItem(tmp); -} - -/** - * Call zinc->itemconfigure ( -anchor ) - * - * @param item the item to configure - * @param value the anchor to set - */ -void Zinc::itemSetAnchor (ZincItem * item, anchor value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_anchor; - p1[4] = anchors[value]; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetAnchor Failed : "); -} - -/** - * Call zinc->itemcget ( -anchor ) - * - * @param item the item to get anchor from - * @return anchor value - */ -anchor Zinc::itemGetAnchor (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_anchor; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetAnchor Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIndexFromObj (interp, tmp, - anchorsStrings, - "anchors", - 0, &value), - "itemGetAnchor Failed : "); - return (anchor)value; -} - -/** - * Call zinc->itemconfigure ( -color ) - * - * @param item the item to configure - * @param value the color to set - */ -void Zinc::itemSetColor (ZincItem * item, String value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_color; - p1[4] = Z_STR_POOL (1, value.c_str (), value.length ()); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetColor Failed : "); -} - -/** - * Call zinc->itemcget ( -color ) - * - * @param item the item to get color from - * @return color value - */ -String Zinc::itemGetColor (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_color; - //call the zinc function with 4 argument in internal form - z_command (4, "itemGetColor Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return String (Tcl_GetStringFromObj (tmp, NULL)); -} - -/** - * Call zinc->itemconfigure ( -connecteditem ) - * - * @param item the item to configure - * @param value the connecteditem to set - */ -void Zinc::itemSetConnecteditem (ZincItem * item, ZincItem * value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_connecteditem; - p1[4] = value->object; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetConnecteditem Failed : "); -} - -/** - * Call zinc->itemcget ( -connecteditem ) - * - * @param item the item to get connecteditem from - * @return connecteditem value - */ -ZincItem * Zinc::itemGetConnecteditem (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_connecteditem; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetConnecteditem Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return new ZincItem(tmp); -} - -/** - * Call zinc->itemconfigure ( -connectionanchor ) - * - * @param item the item to configure - * @param value the connectionanchor to set - */ -void Zinc::itemSetConnectionanchor (ZincItem * item, anchor value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_connectionanchor; - p1[4] = anchors[value]; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetConnectionanchor Failed : "); -} - -/** - * Call zinc->itemcget ( -connectionanchor ) - * - * @param item the item to get connectionanchor from - * @return connectionanchor value - */ -anchor Zinc::itemGetConnectionanchor (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_connectionanchor; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetConnectionanchor Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIndexFromObj (interp, tmp, - anchorsStrings, - "anchors", - 0, &value), - "itemGetConnectionanchor Failed : "); - return (anchor)value; -} - -/** - * Call zinc->itemconfigure ( -image ) - * - * @param item the item to configure - * @param value the image to set - */ -void Zinc::itemSetImage (ZincItem * item, ZincImage * value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_image; - p1[4] = value->object; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetImage Failed : "); -} - -/** - * Call zinc->itemcget ( -image ) - * - * @param item the item to get image from - * @return image value - */ -ZincImage * Zinc::itemGetImage (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_image; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetImage Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return new ZincImage(tmp, true); -} - -/** - * Call zinc->itemconfigure ( -mask ) - * - * @param item the item to configure - * @param value the mask to set - */ -void Zinc::itemSetMask (ZincItem * item, ZincBitmap * value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_mask; - p1[4] = value->object; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetMask Failed : "); -} - -/** - * Call zinc->itemcget ( -mask ) - * - * @param item the item to get mask from - * @return mask value - */ -ZincBitmap * Zinc::itemGetMask (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_mask; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetMask Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return new ZincBitmap (tmp, true); -} - -/** - * Call zinc->itemconfigure ( -alignment ) - * - * @param item the item to configure - * @param value the alignment to set - */ -void Zinc::itemSetAlignment (ZincItem * item, alignment value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_alignment; - p1[4] = alignments[value]; - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetAlignment Failed : "); -} - -/** - * Call zinc->itemcget ( -alignment ) - * - * @param item the item to get alignment from - * @return alignment value - */ -alignment Zinc::itemGetAlignment (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_alignment; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetAlignment Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIndexFromObj (interp, tmp, - alignmentsStrings, - "alignments", - 0, &value), - "itemGetAlignment Failed : "); - return (alignment)value; -} - -/** - * Call zinc->itemconfigure ( -font ) - * - * @param item the item to configure - * @param value the font to set - */ -void Zinc::itemSetFont (ZincItem * item, ZincFont * value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_font; - p1[4] = Z_STR_POOL (0, value->name.c_str(), value->name.length()); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetFont Failed : "); -} - -/** - * Call zinc->itemcget ( -font ) - * - * @param item the item to get font from - * @return font value - */ -ZincFont * Zinc::itemGetFont (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_font; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetFont Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return new ZincFont (Tcl_GetStringResult (interp)); -} - -/** - * Call zinc->itemconfigure ( -overstriked ) - * - * @param item the item to configure - * @param value the overstriked to set - */ -void Zinc::itemSetOverstriked (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_overstriked; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetOverstriked Failed : "); -} - -/** - * Call zinc->itemcget ( -overstriked ) - * - * @param item the item to get overstriked from - * @return overstriked value - */ -bool Zinc::itemGetOverstriked (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_overstriked; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetOverstriked Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetOverstriked Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -spacing ) - * - * @param item the item to configure - * @param value the spacing to set - */ -void Zinc::itemSetSpacing (ZincItem * item, short value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_spacing; - p1[4] = Z_INT_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetSpacing Failed : "); -} - -/** - * Call zinc->itemcget ( -spacing ) - * - * @param item the item to get spacing from - * @return spacing value - */ -short Zinc::itemGetSpacing (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_spacing; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetSpacing Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "itemGetSpacing Failed : "); - return (short)value; -} - -/** - * Call zinc->itemconfigure ( -text ) - * - * @param item the item to configure - * @param value the text to set - */ -void Zinc::itemSetText (ZincItem * item, String value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_text; - p1[4] = Z_STR_POOL (1, value.c_str (), value.length ()); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetText Failed : "); -} - -/** - * Call zinc->itemcget ( -text ) - * - * @param item the item to get text from - * @return text value - */ -String Zinc::itemGetText (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_text; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetText Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - return String (Tcl_GetStringFromObj (tmp, NULL)); -} - -/** - * Call zinc->itemconfigure ( -underlined ) - * - * @param item the item to configure - * @param value the underlined to set - */ -void Zinc::itemSetUnderlined (ZincItem * item, bool value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_underlined; - p1[4] = Z_BOO_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetUnderlined Failed : "); -} - -/** - * Call zinc->itemcget ( -underlined ) - * - * @param item the item to get underlined from - * @return underlined value - */ -bool Zinc::itemGetUnderlined (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_underlined; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetUnderlined Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetBooleanFromObj (interp, tmp, &value), - "itemGetUnderlined Failed : "); - return (bool)value; -} - -/** - * Call zinc->itemconfigure ( -width ) - * - * @param item the item to configure - * @param value the width to set - */ -void Zinc::itemSetWidth (ZincItem * item, unsigned short value) -{ - //prepare arguments : .zinc itemconfigure item attribute value - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_width; - p1[4] = Z_INT_POOL (1, value); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetWidth Failed : "); -} - -/** - * Call zinc->itemcget ( -width ) - * - * @param item the item to get width from - * @return width value - */ -unsigned short Zinc::itemGetWidth (ZincItem * item) -{ - Tcl_Obj* tmp; - //discard all old results - Tcl_ResetResult (interp); - //prepare arguments : .zinc itemcget item - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_width; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetWidth Failed : "); - - //retreive the result trough the tcl interpreter and convert it - tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "itemGetWidth Failed : "); - return (unsigned short)value; -} - - - -/******************************************************* - END OF AUTOGENERATED METHODS -*******************************************************/ - - -/** - * How To call Zinc or Tcl functions: - * - * All arguments of the function are Tcl_Obj. To accelerate their call, there - * is a pool of preconstructed Tcl_Obj and some often used constant Tcl_Obj. - * p1 and p2 are tables of pointers to be used for arguments. - * Fill p1 using either predefined objects like ZITM_* or a pool objet that - * you can fill with the value you want. - * Ex : p1[1] = ZFCT_add; - * Macros have been defined to fill and use a pool object - * Ex : p1[2] = Z_INT_POOL(1, 200); - * Do not use twice the same pool index for the same function call. - * p2 is used to construct and argument which is a list of Tcl_Obj. - * To call the function use z_tcl_call which automaticly handle error return - * codes or z_command to call a Zinc command which handle all arguments too. - */ -/** - * Call zinc->itemconfigure ( -firstend ) - * - * @param item the item to get width from - * @param a,b,c values used to set end - */ -void Zinc::itemSetFirstend (ZincItem * item, double a, double b, double c) -{ - String value = dtos (a) + " " + dtos (b) + " " + dtos (c); - // call .zinc itemconfigure item -firstend "a b c" - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_firstend; - p1[4] = Z_STR_POOL (1, value.c_str (), value.length ()); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetFirstend Failed : "); -} - - -/** - * Call zinc->itemcget ( -firstend ) - * - * @param item the item to get width from - * @param a,b,c values used to sedwhere we'll put end - */ -void Zinc::itemGetFirstend (ZincItem * item, double *a, double *b, double *c) -{ - Tcl_Obj *tmp; - int argc; - char * line; - - //discard old results - Tcl_ResetResult (interp); - // call .zinc itemcget item -firstend - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_firstend; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetFirstend Failed : "); - - //get the result as a string - tmp = Tcl_GetObjResult (interp); - line = Tcl_GetStringFromObj (tmp, NULL); - - //interpret the string a 3 double - argc = sscanf(line, "%lf %lf %lf", a, b, c); - if (argc != 3) - { - throw ZincException (String("itemGetFirstend Failed"), __FILE__, __LINE__); - } -} - -/** - * Call zinc->itemconfigure ( -lastend ) - * - * @param item the item to get width from - * @param a,b,c values used to set end - */ -void Zinc::itemSetLastend (ZincItem * item, double a, double b, double c) -{ - String value = dtos (a) + " " + dtos (b) + " " + dtos (c); - // call .zinc itemconfigure item -lastend "a b c" - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_lastend; - p1[4] = Z_STR_POOL (1, value.c_str (), value.length ()); - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetLastend Failed : "); -} - -/** - * Call zinc->itemcget ( -lastend ) - * - * @param item the item to get width from - * @param a,b,c values used to sedwhere we'll put end - */ -void Zinc::itemGetLastend (ZincItem * item, double *a, double *b, double *c) -{ - Tcl_Obj *tmp; - int argc; - char * line; - - //discard old results - Tcl_ResetResult (interp); - // call .zinc itemcget item -lastend - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_lastend; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetLastend Failed : "); - - //get the result as a string - tmp = Tcl_GetObjResult (interp); - line = Tcl_GetStringFromObj (tmp, NULL); - - //interpret the string a 3 double - argc = sscanf(line, "%lf %lf %lf", a, b, c); - if (argc != 3) - { - throw ZincException (String("itemGetLastend Failed"), __FILE__, __LINE__); - } -} - -/** - * Call zinc->itemconfigure ( -position ) - * - * @param item the item to get width fromset position to - * @param x,y position - */ -void Zinc::itemSetPosition (ZincItem * item, double x, double y) -{ - // call .zinc itemconfigure item -position {x y} - p1[0] = id; - p1[1] = ZFCT_itemconfigure; - p1[2] = item->object; - p1[3] = ZOPT_position; - //make a pair - p2[0] = Z_DBL_POOL (1, x); - p2[1] = Z_DBL_POOL (2, y); - p1[4] = Z_LST_POOL (3, p2, 2); // a list of 2 items - //call the zinc function with 5 arguments in internal form - z_command (5, "itemSetPosition Failed : "); - // clean the list No 3 in the pool - Z_CLEANLIST (3); -} - -/** - * Call zinc->itemcget ( -position ) - * - * @param item the item to get position from - * @param x,y position - */ -void Zinc::itemGetPosition (ZincItem * item, double *x, double *y) -{ - Tcl_Obj *tmp; - int num; - Tcl_Obj** elems; - - //discard old results - Tcl_ResetResult (interp); - // call .zinc itemcget item -position - p1[0] = id; - p1[1] = ZFCT_itemcget; - p1[2] = item->object; - p1[3] = ZOPT_position; - //call the zinc function with 4 arguments in internal form - z_command (4, "itemGetPosition Failed : "); - - //retreive the result as a list - tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_ListObjGetElements (interp, tmp, &num, &elems), - "itemGetPosition Failed : "); - - //num is necessarily 2 extract 2 double - z_tcl_call (Tcl_GetDoubleFromObj(interp, elems[0], x), - "itemGetPosition Failed : "); - z_tcl_call (Tcl_GetDoubleFromObj(interp, elems[0], y), - "itemGetPosition Failed : "); -} - -/** - * Create an image object - * - * @param the image reference (a file name) - * @param isPhoto true for a picture, false for an X11 bitmap - */ -ZincImage* Zinc::createImageFromFile (String image) -{ - const char* para[5]; - //discard old results - Tcl_ResetResult (interp); - // prepare arguments to call : image create (photo|bitmap) -file image - para[0] = "image"; - para[1] = "create"; - para[2] = "photo"; - para[3] = "-file"; - para[4] = image.c_str (); - - // call the function with 5 arguments and check for error - z_tcl_call ((*imgCmdInfo.proc)(imgCmdInfo.clientData, interp, 5, para), - "createImageFromFile Failed : "); - return new ZincImage (Tcl_GetObjResult (interp)); -} - -/** - * Create an image object - * - * @param the image reference (a base64 String or binary data) - * @param isPhoto true for a picture, false for an X11 bitmap - */ -ZincImage* Zinc::createImageFromData (String image) -{ - const char* para[5]; - //discard old results - Tcl_ResetResult (interp); - // prepare arguments to call : image create (photo|bitmap) -data image - para[0] = "image"; - para[1] = "create"; - para[2] = "photo"; - para[3] = "-data"; - para[4] = image.c_str (); - - // call the function with 5 arguments and check for error - z_tcl_call ((*imgCmdInfo.proc)(imgCmdInfo.clientData, interp, 5, para), - "createImageFromData Failed : "); - return new ZincImage (Tcl_GetObjResult (interp)); -} - -/** - * Create a bitmap object from a file - * - * @param image the bitmap reference (a file name) - */ -ZincBitmap* Zinc::createBitmapFromFile (String image) -{ - const char* para[5]; - //discard old results - Tcl_ResetResult (interp); - // prepare arguments to call : image create (photo|bitmap) -file image - para[0] = "image"; - para[1] = "create"; - para[2] = "bitmap"; - para[3] = "-file"; - para[4] = image.c_str (); - - // call the function with 5 arguments and check for error - z_tcl_call ((*imgCmdInfo.proc)(imgCmdInfo.clientData, interp, 5, para), - "createBitmapFromFile Failed : "); - return new ZincBitmap (Tcl_GetObjResult (interp), false); -} - -/** - * Create a bitmap object base64 data - * - * @param image the bitmap reference (a base64 String or binary data) - */ -ZincBitmap* Zinc::createBitmapFromData (String image) -{ - const char* para[5]; - //discard old results - Tcl_ResetResult (interp); - // prepare arguments to call : image create (photo|bitmap) -data image - para[0] = "image"; - para[1] = "create"; - para[2] = "bitmap"; - para[3] = "-data"; - para[4] = image.c_str (); - - // call the function with 5 arguments and check for error - z_tcl_call ((*imgCmdInfo.proc)(imgCmdInfo.clientData, interp, 5, para), - "createBitmapFromData Failed : "); - return new ZincBitmap (Tcl_GetObjResult (interp), false); -} - -/** - * Create a bitmap object using a predefined name - * - * @param image the bitmap reference (a name) - */ -ZincBitmap* Zinc::createBitmapFromName (String image) -{ - return new ZincBitmap (image); -} - -/** - * Create an image object - * - * @param width Width of image - * @param height Height of image - * @param aggBuffer An AGG buffer - */ -ZincImage* Zinc::createImageFromAGGBuffer (int width, int height, unsigned char *aggBuffer) -{ - const char* para[7]; - //discard old results - Tcl_ResetResult (interp); - - // create a blank offscreen image - para[0] = "image"; - para[1] = "create"; - para[2] = "photo"; - para[3] = "-height"; - para[4] = String(itos (height).c_str ()).c_str (); - para[5] = "-width"; - para[6] = String(itos (width).c_str ()).c_str (); - - // call the function with 7 arguments and check for error - z_tcl_call ((*imgCmdInfo.proc)(imgCmdInfo.clientData, interp, 7, para), - "createImageFromBuffer Failed : "); - // save result - ZincImage *result = new ZincImage (Tcl_GetObjResult (interp)); - - // get tcl PhotoImage handle - Tk_PhotoHandle photo; - photo = Tk_FindPhoto (interp, Tcl_GetString (result->object)); - if (photo == NULL) - { - // todo: error - } - - // create a PhotoImageBlock - Tk_PhotoImageBlock block; - block.pixelPtr = aggBuffer; - block.width = width; - block.height = height; - block.pitch = block.width * 3; - block.pixelSize = 3; - block.offset[0] = 0; - block.offset[1] = 1; - block.offset[2] = 2; - block.offset[3] = 0; - - /* copy block to photo image and leave the rest to tk */ - Tk_PhotoPutBlock(photo, &block, 0, 0, block.width, block.height, TK_PHOTO_COMPOSITE_SET); - - // return result - return result; -} - - - -/** - * Create a font object - * - * @param family the font mamily - * @param size if a positive number, it is in points, if a negative number, - * its absolute value is a size in pixels. - * @param bold 1 for a bold font, 0 for a normal font, -1 for unspecified - * @param italic 1 an italic font, 0 for a roman font, -1 for unspecified - * @param underline 1 for an underlined, 0 for a normal font, -1 for - * unspecified - * @param overstrike 1 for an overstriked font, 0 for a normal font, -1 for unspecified - */ -ZincFont* Zinc::createFont (String family, int size, int bold, int italic, - int underline, int overstrike) -{ - const char* para[14]; - //quote family to avoid problems with spaces - - //discard old results - Tcl_ResetResult (interp); - // prepare arguments to call : font create -family family -size size - // -weight weight -slant slant -underline underline -overstrike overstrike - para[0] = "font"; - para[1] = "create"; - para[2] = "-family"; - para[3] = family.c_str (); - para[4] = "-size"; - //Warning, weird bug workaround - // here is a deep copy - // without this, on one MDK10.1 machine tcl sees an empty string - String tmp = String(itos (size).c_str ()); - para[5] = tmp.c_str (); - - // use i as a variable parameter pointer - int i=6; // last parameter is para[5] - //handle default value for weight - if (bold != -1) - { - para[i++] = "-weight"; - para[i++] = bold == 1 ? "bold" : "normal"; - } - //handle default value for italic - if (italic != -1) - { - para[i++] = "-slant"; - para[i++] = italic == 1 ? "italic" : "roman"; - } - //handle default value for underline - if (underline != -1) - { - para[i++] = "-underline"; - para[i++] = underline == 1 ? "true" : "false"; - } - //handle default value for overstrike - if (overstrike != -1) - { - para[i++] = "-overstrike"; - para[i++] = overstrike == 1 ? "true" : "false"; - } - - // call the function with i arguments and check for error - z_tcl_call ((*fntCmdInfo.proc)(fntCmdInfo.clientData, interp, i, para), - "createFont Failed : "); - return new ZincFont (Tcl_GetStringResult (interp)); -} - -/** - * Get font ascent - * - * @param font the font - * @return the font ascent - */ -int Zinc::getFontAscent (ZincFont* font) -{ - const char* para[4]; - - //discard old results - Tcl_ResetResult (interp); - // prepare arguments to call : font metrics font -ascent - para[0] = "font"; - para[1] = "metrics"; - para[2] = font->name.c_str(); - para[3] = "-ascent"; - - // call the function with 4 arguments and check for error - z_tcl_call ((*fntCmdInfo.proc)(fntCmdInfo.clientData, interp, 4, para), - "getFontAscent Failed : "); - - //retreive the result as an integer - Tcl_Obj *tmp = Tcl_GetObjResult (interp); - int value; - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "getFontAscent Failed : "); - return value; -} - - -/** - * Get Image width - * - * @param ZincImage the image to get width from - * @return the width of the image - */ -int Zinc::getImageWidth (ZincImage *image) -{ - const char* para[3]; - - //discard old results - Tcl_ResetResult (interp); - // prepare arguments to call : image create (photo|bitmap) -data image - para[0] = "image"; - para[1] = "width"; - para[2] = Tcl_GetString (image->object); - - // call the function with 3 arguments and check for error - z_tcl_call ((*imgCmdInfo.proc)(imgCmdInfo.clientData, interp, 3, para), - "getImageWidth Failed : "); - - int value; - // retreive the result as an integer - Tcl_Obj *tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "getImageWidth Failed : "); - return value; -} - -/** - * Get Image height - * - * @param ZincImage the image to get height from - * @return the height of the image - */ -int Zinc::getImageHeight (ZincImage *image) -{ - const char* para[3]; - - //discard old results - Tcl_ResetResult (interp); - // prepare arguments to call : image create (photo|bitmap) -data image - para[0] = "image"; - para[1] = "height"; - para[2] = Tcl_GetString (image->object); - - // call the function with 3 arguments and check for error - z_tcl_call ((*imgCmdInfo.proc)(imgCmdInfo.clientData, interp, 3, para), - "getImageHeight Failed : "); - - int value; - // retreive the result as an integer - Tcl_Obj *tmp = Tcl_GetObjResult (interp); - z_tcl_call (Tcl_GetIntFromObj (interp, tmp, &value), - "getImageHeight Failed : "); - return value; -} - -/** - * This is inline because it is called frequently and needs to be optimized - * Use this when you need to call a function that can return a TCL error code. - * - * @param fct the full function call - * @param msg the error message to throw in case of error - */ -void Zinc::z_tcl_call (int result, char* p_msg) throw (ZincException) -{ - if (result != TCL_OK) - { - const char *r; - String msg = "zinclib: "; - if (p_msg != NULL) - { - msg.append (p_msg); - } - r = Tcl_GetStringResult (interp); - if (r != NULL) - { - msg.append (r); - } - throw ZincException (msg, __FILE__, __LINE__ ); - } -} - -/** - * This is a inline because it is called frequently and needs to be optimized - * Use this to call the zinObjectCommand fuction. The call is made using the - * pre allocated table p1, it must contain Tcl_Obj thar are parameters to - * the zinObjectCommand function. A parameter indicate how many parameters - * are passed to the zinObjectCommand function. - * - * @param count the number of parameters in p1 - * @param msg the error message to throw in case of error - */ -void Zinc::z_command (int count, char* p_msg) throw (ZincException) -{ - int result = (*objCmd) (wi, interp, (count), p1); - if (result != TCL_OK) - { - const char *r; - String msg = "zinclib: "; - if (p_msg != NULL) - { - msg.append (p_msg); - } - r = Tcl_GetStringResult (interp); - if (r != NULL) - { - msg.append (r); - } - throw ZincException (msg, __FILE__, __LINE__ ); - } -} -- cgit v1.1