Blender  V2.59
GHOST_EventPrinter.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id: GHOST_EventPrinter.cpp 38351 2011-07-13 06:04:54Z campbellbarton $
00003  * ***** BEGIN GPL LICENSE BLOCK *****
00004  *
00005  * This program is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU General Public License
00007  * as published by the Free Software Foundation; either version 2
00008  * of the License, or (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software Foundation,
00017  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00018  *
00019  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
00020  * All rights reserved.
00021  *
00022  * The Original Code is: all of this file.
00023  *
00024  * Contributor(s): none yet.
00025  *
00026  * ***** END GPL LICENSE BLOCK *****
00027  */
00028 
00034 #include "GHOST_EventPrinter.h"
00035 #include <iostream>
00036 #include "GHOST_EventKey.h"
00037 #include "GHOST_EventDragnDrop.h"
00038 #include "GHOST_Debug.h"
00039 
00040 #include <stdio.h>
00041 
00042 bool GHOST_EventPrinter::processEvent(GHOST_IEvent* event)
00043 {
00044         bool handled = true;
00045         
00046         GHOST_ASSERT(event, "event==0");
00047 
00048         if (event->getType() == GHOST_kEventWindowUpdate) return false;
00049 
00050         std::cout << "\nGHOST_EventPrinter::processEvent, time: " << (GHOST_TInt32)event->getTime() << ", type: ";
00051         switch (event->getType()) {
00052         case GHOST_kEventUnknown:
00053                 std::cout << "GHOST_kEventUnknown"; handled = false;    
00054                 break;
00055 
00056         case GHOST_kEventButtonUp:
00057                 {
00058                 GHOST_TEventButtonData* buttonData = (GHOST_TEventButtonData*)((GHOST_IEvent*)event)->getData();
00059                 std::cout << "GHOST_kEventCursorButtonUp, button: " << buttonData->button;
00060                 }
00061                 break;
00062         case GHOST_kEventButtonDown:
00063                 {
00064                 GHOST_TEventButtonData* buttonData = (GHOST_TEventButtonData*)((GHOST_IEvent*)event)->getData();
00065                 std::cout << "GHOST_kEventButtonDown, button: " << buttonData->button;
00066                 }
00067                 break;
00068 
00069         case GHOST_kEventWheel:
00070                 {
00071                 GHOST_TEventWheelData* wheelData = (GHOST_TEventWheelData*)((GHOST_IEvent*)event)->getData();
00072                 std::cout << "GHOST_kEventWheel, z: " << wheelData->z;
00073                 }
00074                 break;
00075 
00076         case GHOST_kEventCursorMove:
00077                 {
00078                 GHOST_TEventCursorData* cursorData = (GHOST_TEventCursorData*)((GHOST_IEvent*)event)->getData();
00079                 std::cout << "GHOST_kEventCursorMove, (x,y): (" << cursorData->x << "," << cursorData->y << ")";
00080                 }
00081                 break;
00082 
00083         case GHOST_kEventKeyUp:
00084                 {
00085                 GHOST_TEventKeyData* keyData = (GHOST_TEventKeyData*)((GHOST_IEvent*)event)->getData();
00086                 char str[32]= {'\0'};
00087                 getKeyString(keyData->key, str);
00088                 std::cout << "GHOST_kEventKeyUp, key: " << str;
00089                 }
00090                 break;
00091         case GHOST_kEventKeyDown:
00092                 {
00093                 GHOST_TEventKeyData* keyData = (GHOST_TEventKeyData*)((GHOST_IEvent*)event)->getData();
00094                 char str[32]= {'\0'};
00095                 getKeyString(keyData->key, str);
00096                 std::cout << "GHOST_kEventKeyDown, key: " << str;
00097                 }
00098                 break;
00099                         
00100         case GHOST_kEventDraggingEntered:
00101                 {
00102                         GHOST_TEventDragnDropData* dragnDropData = (GHOST_TEventDragnDropData*)((GHOST_IEvent*)event)->getData();
00103                         std::cout << "GHOST_kEventDraggingEntered, dragged object type : " << dragnDropData->dataType;
00104                         std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
00105                 }
00106                 break;
00107                         
00108         case GHOST_kEventDraggingUpdated:
00109                 {
00110                         GHOST_TEventDragnDropData* dragnDropData = (GHOST_TEventDragnDropData*)((GHOST_IEvent*)event)->getData();
00111                         std::cout << "GHOST_kEventDraggingUpdated, dragged object type : " << dragnDropData->dataType;
00112                         std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
00113                 }
00114                 break;
00115 
00116         case GHOST_kEventDraggingExited:
00117                 {
00118                         GHOST_TEventDragnDropData* dragnDropData = (GHOST_TEventDragnDropData*)((GHOST_IEvent*)event)->getData();
00119                         std::cout << "GHOST_kEventDraggingExited, dragged object type : " << dragnDropData->dataType;
00120                 }
00121                 break;
00122         
00123         case GHOST_kEventDraggingDropDone:
00124                 {
00125                         GHOST_TEventDragnDropData* dragnDropData = (GHOST_TEventDragnDropData*)((GHOST_IEvent*)event)->getData();
00126                         std::cout << "GHOST_kEventDraggingDropDone,";
00127                         std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
00128                         switch (dragnDropData->dataType) {
00129                                 case GHOST_kDragnDropTypeString:
00130                                         std::cout << " type : GHOST_kDragnDropTypeString,";
00131                                         std::cout << "\n  String received = " << (char*)dragnDropData->data;
00132                                         break;
00133                                 case GHOST_kDragnDropTypeFilenames:
00134                                 {
00135                                         GHOST_TStringArray *strArray = (GHOST_TStringArray*)dragnDropData->data;
00136                                         int i;
00137                                         std::cout << " type : GHOST_kDragnDropTypeFilenames,";
00138                                         std::cout << "\n  Received " << strArray->count << " filename" << (strArray->count > 1 ? "s:" : ":");
00139                                         for (i=0;i<strArray->count;i++)
00140                                                 std::cout << "\n        File[" << i << "] : " << strArray->strings[i];
00141                                 }
00142                                         break;
00143                                 default:
00144                                         break;
00145                         }
00146                 }
00147                 break;
00148 
00149         case GHOST_kEventOpenMainFile:
00150                 {
00151                         GHOST_TEventDataPtr eventData = ((GHOST_IEvent*)event)->getData();
00152                         
00153                         if (eventData)
00154                                 std::cout << "GHOST_kEventOpenMainFile for path : " << (char*)eventData;
00155                         else
00156                                 std::cout << "GHOST_kEventOpenMainFile with no path specified!!";
00157                 }
00158                 break;
00159                         
00160         case GHOST_kEventQuit:
00161                 std::cout << "GHOST_kEventQuit"; 
00162                 break;
00163         case GHOST_kEventWindowClose:
00164                 std::cout << "GHOST_kEventWindowClose"; 
00165                 break;
00166         case GHOST_kEventWindowActivate:
00167                 std::cout << "GHOST_kEventWindowActivate"; 
00168                 break;
00169         case GHOST_kEventWindowDeactivate:
00170                 std::cout << "GHOST_kEventWindowDeactivate"; 
00171                 break;
00172         case GHOST_kEventWindowUpdate:
00173                 std::cout << "GHOST_kEventWindowUpdate"; 
00174                 break;
00175         case GHOST_kEventWindowSize:
00176                 std::cout << "GHOST_kEventWindowSize"; 
00177                 break;
00178 
00179         default:
00180                 std::cout << "not found"; handled = false; 
00181                 break;
00182         }
00183         return handled;
00184 }
00185 
00186 
00187 void GHOST_EventPrinter::getKeyString(GHOST_TKey key, char str[32]) const
00188 {
00189         if ((key >= GHOST_kKeyComma) && (key <= GHOST_kKeyRightBracket)) {
00190                 sprintf(str, "%c", (char)key);
00191         } else if ((key >= GHOST_kKeyNumpad0) && (key <= GHOST_kKeyNumpad9)) {
00192                 sprintf(str, "Numpad %d", (key - GHOST_kKeyNumpad0));
00193 #if defined(__sun__) || defined(__sun)
00194         } else if (key == 268828432) { /* solaris keyboards are messed up */
00195                  /* This should really test XK_F11 but that doesn't work */
00196                 strcpy(str, "F11");
00197         } else if (key == 268828433) { /* solaris keyboards are messed up */
00198                  /* This should really test XK_F12 but that doesn't work */
00199                 strcpy(str, "F12");
00200 #endif
00201         } else if ((key >= GHOST_kKeyF1) && (key <= GHOST_kKeyF24)) {
00202                 sprintf(str, "F%d", key - GHOST_kKeyF1 + 1);
00203         } else {
00204                 const char *tstr= NULL;
00205                 switch (key) {
00206                 case GHOST_kKeyBackSpace:
00207                         tstr = "BackSpace";
00208                         break;
00209                 case GHOST_kKeyTab:
00210                         tstr = "Tab";
00211                         break;
00212                 case GHOST_kKeyLinefeed:
00213                         tstr = "Linefeed";
00214                         break;
00215                 case GHOST_kKeyClear:
00216                         tstr = "Clear";
00217                         break;
00218                 case GHOST_kKeyEnter:
00219                         tstr = "Enter";
00220                         break;
00221                 case GHOST_kKeyEsc:
00222                         tstr = "Esc";
00223                         break;
00224                 case GHOST_kKeySpace:
00225                         tstr = "Space";
00226                         break;
00227                 case GHOST_kKeyQuote:
00228                         tstr = "Quote";
00229                         break;
00230                 case GHOST_kKeyBackslash:
00231                         tstr = "\\";
00232                         break;
00233                 case GHOST_kKeyAccentGrave:
00234                         tstr = "`";
00235                         break;
00236                 case GHOST_kKeyLeftShift:
00237                         tstr = "LeftShift";
00238                         break;
00239                 case GHOST_kKeyRightShift:
00240                         tstr = "RightShift";
00241                         break;
00242                 case GHOST_kKeyLeftControl:
00243                         tstr = "LeftControl";
00244                         break;
00245                 case GHOST_kKeyRightControl:
00246                         tstr = "RightControl";
00247                         break;
00248                 case GHOST_kKeyLeftAlt:
00249                         tstr = "LeftAlt";
00250                         break;
00251                 case GHOST_kKeyRightAlt:
00252                         tstr = "RightAlt";
00253                         break;
00254                 case GHOST_kKeyOS:
00255                         tstr = "OS";
00256                         break;
00257                 case GHOST_kKeyGrLess:
00258             // PC german!
00259                         tstr = "GrLess";
00260                         break;
00261                 case GHOST_kKeyCapsLock:
00262                         tstr = "CapsLock";
00263                         break;
00264                 case GHOST_kKeyNumLock:
00265                         tstr = "NumLock";
00266                         break;
00267                 case GHOST_kKeyScrollLock:
00268                         tstr = "ScrollLock";
00269                         break;
00270                 case GHOST_kKeyLeftArrow:
00271                         tstr = "LeftArrow";
00272                         break;
00273                 case GHOST_kKeyRightArrow:
00274                         tstr = "RightArrow";
00275                         break;
00276                 case GHOST_kKeyUpArrow:
00277                         tstr = "UpArrow";
00278                         break;
00279                 case GHOST_kKeyDownArrow:
00280                         tstr = "DownArrow";
00281                         break;
00282                 case GHOST_kKeyPrintScreen:
00283                         tstr = "PrintScreen";
00284                         break;
00285                 case GHOST_kKeyPause:
00286                         tstr = "Pause";
00287                         break;
00288                 case GHOST_kKeyInsert:
00289                         tstr = "Insert";
00290                         break;
00291                 case GHOST_kKeyDelete:
00292                         tstr = "Delete";
00293                         break;
00294                 case GHOST_kKeyHome:
00295                         tstr = "Home";
00296                         break;
00297                 case GHOST_kKeyEnd:
00298                         tstr = "End";
00299                         break;
00300                 case GHOST_kKeyUpPage:
00301                         tstr = "UpPage";
00302                         break;
00303                 case GHOST_kKeyDownPage:
00304                         tstr = "DownPage";
00305                         break;
00306                 case GHOST_kKeyNumpadPeriod:
00307                         tstr = "NumpadPeriod";
00308                         break;
00309                 case GHOST_kKeyNumpadEnter:
00310                         tstr = "NumpadEnter";
00311                         break;
00312                 case GHOST_kKeyNumpadPlus:
00313                         tstr = "NumpadPlus";
00314                         break;
00315                 case GHOST_kKeyNumpadMinus:
00316                         tstr = "NumpadMinus";
00317                         break;
00318                 case GHOST_kKeyNumpadAsterisk:
00319                         tstr = "NumpadAsterisk";
00320                         break;
00321                 case GHOST_kKeyNumpadSlash:
00322                         tstr = "NumpadSlash";
00323                         break;
00324                 case GHOST_kKeyMediaPlay:
00325                         tstr = "MediaPlayPause";
00326                         break;
00327                 case GHOST_kKeyMediaStop:
00328                         tstr = "MediaStop";
00329                         break;
00330                 case GHOST_kKeyMediaFirst:
00331                         tstr = "MediaFirst";
00332                         break;
00333                 case GHOST_kKeyMediaLast:
00334                         tstr = "MediaLast";
00335                         break;
00336                 default:
00337                         tstr = "unknown";
00338                         break;
00339                 }
00340 
00341                 sprintf(str, "%s", tstr);
00342         }
00343 }
00344