WndGraphProc.c

Go to the documentation of this file.
00001 /*-----------------------------------------------------------------------------------*/
00002 /* INRIA 2005 */
00003 /* Allan CORNET */
00004 /*-----------------------------------------------------------------------------------*/
00005 #include "WndGraphProc.h"
00006 #include "Actions.h"
00007 
00008 /*-----------------------------------------------------------------------------------*/
00009 extern int GetEventKeyboardAndMouse(  UINT message, WPARAM wParam, LPARAM lParam,struct BCG *ScilabGC);
00010 extern void SendGraphMacro (struct BCG *ScilabGC, UINT m);
00011 extern int StoreCommand ( char *command);
00012 extern void ShowGraphToolBar(struct BCG * ScilabGC);
00013 extern void HideGraphToolBar(struct BCG * ScilabGC);
00014 extern void ScilabPaint (HWND hwnd, struct BCG *ScilabGC);
00015 extern int sciGetScrollInfo(struct BCG *Scilabgc, int sb_ctl, SCROLLINFO *si);
00016 extern int sciSetScrollInfo(struct BCG *Scilabgc, int sb_ctl, SCROLLINFO *si, BOOLEAN bRedraw);
00017 extern int ScilabGResize (HWND hwnd, struct BCG *ScilabGC, WPARAM wParam);
00018 extern void DragFunc (LPTW lptw, HDROP hdrop);
00019 extern int C2F (deletewin) (integer * number);
00020 extern int PushClickQueue(int win,int x,int y,int ibut,int motion,int release) ;
00021 extern void set_wait_click(val);
00022 extern BOOL SendMacroEntityPicker(struct BCG * ScilabGC,int id);
00023 /*-----------------------------------------------------------------------------------*/
00024 BOOL ON_WND_GRAPH_WM_CLOSE(HWND hwnd);
00025 BOOL ON_WND_GRAPH_WM_DESTROY(HWND hwnd);
00026 BOOL ON_WND_GRAPH_WM_DROPFILES(HWND hwnd,HDROP hDrop);
00027 void ON_WND_GRAPH_WM_VSCROLL(HWND hwnd, HWND hwndCtl, UINT code, int pos);
00028 void ON_WND_GRAPH_WM_HSCROLL(HWND hwnd, HWND hwndCtl, UINT code, int pos);
00029 BOOL ON_WND_GRAPH_WM_SIZE(HWND hwnd,UINT state,int cx,int cy);
00030 BOOL ON_WND_GRAPH_WM_PAINT(HWND hwnd);
00031 BOOL ON_WND_GRAPH_WM_CREATE(HWND hwnd,LPCREATESTRUCT lpCreateStruct);
00032 void ON_WND_GRAPH_WM_KEY(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags);
00033 BOOL ON_WND_GRAPH_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
00034 /*-----------------------------------------------------------------------------------*/
00035 /* The Event Handler for the graphic windows  */
00036 EXPORT LRESULT CALLBACK WndGraphProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
00037 {
00038         struct BCG *ScilabGC = (struct BCG *) NULL;
00039         ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00040         GetEventKeyboardAndMouse(message,wParam,lParam,ScilabGC);
00041 
00042         switch (message)
00043         {
00044                 HANDLE_MSG(hwnd,WM_COMMAND,ON_WND_GRAPH_WM_COMMAND);
00045                 HANDLE_MSG(hwnd,WM_KEYDOWN,ON_WND_GRAPH_WM_KEY);
00046                 HANDLE_MSG(hwnd,WM_CREATE,ON_WND_GRAPH_WM_CREATE);
00047                 HANDLE_MSG(hwnd,WM_PAINT,ON_WND_GRAPH_WM_PAINT);
00048                 HANDLE_MSG(hwnd,WM_SIZE,ON_WND_GRAPH_WM_SIZE);
00049                 HANDLE_MSG(hwnd,WM_HSCROLL,ON_WND_GRAPH_WM_HSCROLL);
00050                 HANDLE_MSG(hwnd,WM_VSCROLL,ON_WND_GRAPH_WM_VSCROLL);
00051                 HANDLE_MSG(hwnd,WM_DROPFILES,ON_WND_GRAPH_WM_DROPFILES);
00052                 HANDLE_MSG(hwnd,WM_DESTROY,ON_WND_GRAPH_WM_DESTROY);
00053                 HANDLE_MSG(hwnd,WM_CLOSE,ON_WND_GRAPH_WM_CLOSE);
00054         }
00055         return DefWindowProc (hwnd, message, wParam, lParam);
00056 }
00057 /*-----------------------------------------------------------------------------------*/
00058 BOOL ON_WND_GRAPH_WM_CLOSE(HWND hwnd)
00059 {
00060         struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00061 
00062         int curWindowNum = ScilabGC->CurWindow ; /* save it before it the GC will be destroyed */
00063 
00064         PostQuitMessage (0);
00065         C2F (deletewin) (&(curWindowNum));
00066         SetWindowLong (hwnd, 0, (LONG) 0L);
00067 
00068         PushClickQueue (curWindowNum,0,0,-100, 0, -1);
00069         set_wait_click(0);
00070 
00071         /* Ajout pour probleme fermeture fenetre scicos
00072         si une boite de dialogue TK est presente */
00073         TextMessage1 (0);
00074 
00075         return TRUE;
00076 }
00077 /*-----------------------------------------------------------------------------------*/
00078 BOOL ON_WND_GRAPH_WM_DESTROY(HWND hwnd)
00079 {
00080         PostQuitMessage (0);
00081         DragAcceptFiles (hwnd, FALSE);
00082         return TRUE;
00083 }
00084 /*-----------------------------------------------------------------------------------*/
00085 BOOL ON_WND_GRAPH_WM_DROPFILES(HWND hwnd,HDROP hDrop)
00086 {
00087         struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00088         if (ScilabGC->lpgw->lptw) DragFunc (ScilabGC->lpgw->lptw, hDrop);
00089         return TRUE;
00090 }
00091 /*-----------------------------------------------------------------------------------*/
00092 void ON_WND_GRAPH_WM_VSCROLL(HWND hwnd, HWND hwndCtl, UINT code, int pos)
00093 {
00094         SCROLLINFO vertsi;
00095         int deltay = 0;
00096         struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00097         /* initialisation de SCROLLINFs */
00098         sciGetScrollInfo (ScilabGC, SB_VERT, &vertsi);
00099         switch (code)
00100         {
00101                 /* deltay = 0; */
00102         case SB_PAGEUP:
00103                 deltay = vertsi.nPos;
00104                 vertsi.nPos = max (vertsi.nMin, vertsi.nPos - 50);
00105                 deltay = deltay - vertsi.nPos;
00106                 break;
00107         case SB_PAGEDOWN:
00108                 deltay = vertsi.nPos;
00109                 vertsi.nPos = min (vertsi.nMax - (int) vertsi.nPage, vertsi.nPos +50);
00110                 deltay = deltay - vertsi.nPos;
00111                 break;
00112         case SB_LINEUP:
00113                 deltay = vertsi.nPos;
00114                 vertsi.nPos = max (vertsi.nMin, vertsi.nPos - 5);
00115                 deltay = deltay - vertsi.nPos;
00116                 break;
00117         case SB_LINEDOWN:
00118                 deltay = vertsi.nPos;
00119                 vertsi.nPos = min (vertsi.nMax - (int) vertsi.nPage, vertsi.nPos +5);
00120                 deltay = deltay - vertsi.nPos;
00121                 break;
00122         case SB_THUMBTRACK:
00123                 deltay = vertsi.nPos;
00124                 vertsi.nPos = min (vertsi.nMax, max (vertsi.nMin, pos));
00125                 deltay = deltay - vertsi.nPos;
00126                 break; 
00127         default:
00128                 deltay = 0;
00129                 break;
00130         }
00131         sciSetScrollInfo (ScilabGC, SB_VERT, &vertsi, TRUE);
00132         InvalidateRect (ScilabGC->CWindow, (LPRECT) NULL, FALSE);
00133         /* UpdateWindow (ScilabGC->CWindow); */ 
00134 
00135 }
00136 /*-----------------------------------------------------------------------------------*/
00137 void ON_WND_GRAPH_WM_HSCROLL(HWND hwnd, HWND hwndCtl, UINT code, int pos)
00138 {
00139         SCROLLINFO horzsi;
00140         int deltax = 0;
00141 
00142         struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00143         /* initialisation de SCROLLINFOs */
00144         sciGetScrollInfo (ScilabGC, SB_HORZ, &horzsi);
00145         switch (code)
00146         {
00147                 /* deltax = 0;*/
00148         case SB_PAGEUP:
00149                 deltax = horzsi.nPos;
00150                 horzsi.nPos = max (horzsi.nMin, horzsi.nPos - 50);
00151                 deltax = deltax - horzsi.nPos;
00152                 break;
00153         case SB_PAGEDOWN:
00154                 deltax = horzsi.nPos;
00155                 horzsi.nPos = min (horzsi.nMax - (int)horzsi.nPage, horzsi.nPos + 50);
00156                 deltax = deltax - horzsi.nPos;
00157                 break;
00158         case SB_LINEUP:
00159                 deltax = horzsi.nPos;
00160                 horzsi.nPos = max (horzsi.nMin, horzsi.nPos - 5);
00161                 deltax = deltax - horzsi.nPos;
00162                 break;
00163         case SB_LINEDOWN:
00164                 deltax = horzsi.nPos;
00165                 horzsi.nPos = min (horzsi.nMax - (int) horzsi.nPage, horzsi.nPos + 5);
00166                 deltax = deltax - horzsi.nPos;
00167                 break;
00168         case SB_THUMBTRACK:
00169                 deltax = horzsi.nPos;
00170                 horzsi.nPos = max (horzsi.nMin, min (horzsi.nMax,pos));
00171                 deltax = deltax - horzsi.nPos;
00172                 break;
00173         default:
00174                 deltax=0;
00175                 break;
00176         }
00177         sciSetScrollInfo (ScilabGC, SB_HORZ, &horzsi, TRUE);
00178         InvalidateRect (ScilabGC->CWindow, (LPRECT) NULL, FALSE);
00179 
00180 }
00181 /*-----------------------------------------------------------------------------------*/
00182 BOOL ON_WND_GRAPH_WM_SIZE(HWND hwnd,UINT state,int cx,int cy)
00183 {
00184         struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00185         int deltax = 0;
00186         int deltay = 0;
00187         SCROLLINFO vertsi;
00188         SCROLLINFO horzsi;
00189 
00190         /* initialisation de SCROLLINFs */
00191         sciGetScrollInfo (ScilabGC, SB_HORZ, &horzsi);
00192         sciGetScrollInfo (ScilabGC, SB_VERT, &vertsi);
00193         /* MAJ D.ABDEMOUCHE*/
00194         if (ScilabGC->CurResizeStatus == 0)
00195         {
00196                 horzsi.nPage = cx;
00197                 vertsi.nPage = cy;
00198                 /* on recupere la veritable position des scroll bar
00199                 * on a ainsi la possibilite de tirer le graphe
00200                 * quand on agrandi la fenetre 
00201                 */
00202                 horzsi.nPos = GetScrollPos (ScilabGC->CWindow, SB_HORZ);
00203                 vertsi.nPos = GetScrollPos (ScilabGC->CWindow, SB_VERT);
00204         }
00205         else
00206         {
00207                 /* eventually resize the pixmap size */
00208                 if (  ScilabGC->CurPixmapStatus  == 1 )
00209                 {
00210                         ScilabGResize (hwnd, ScilabGC, state); 
00211                 }
00212                 horzsi.nMax = cx;
00213                 vertsi.nMax = cy;
00214                 horzsi.nPage = horzsi.nMax;
00215                 vertsi.nPage = vertsi.nMax;
00216         }
00217         sciSetScrollInfo (ScilabGC, SB_HORZ, &(horzsi), TRUE);
00218         sciSetScrollInfo (ScilabGC, SB_VERT, &(vertsi), TRUE);
00219         /* on force le reclacule les positions des scrollbars
00220         et leur validation */
00221         sciGetScrollInfo (ScilabGC, SB_HORZ, &horzsi);
00222         sciGetScrollInfo (ScilabGC, SB_VERT, &vertsi);
00223         InvalidateRect (ScilabGC->CWindow, (LPRECT) NULL,FALSE);
00224 
00225         return TRUE;
00226 }
00227 /*-----------------------------------------------------------------------------------*/
00228 BOOL ON_WND_GRAPH_WM_PAINT(HWND hwnd)
00229 {
00230         struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00231         ScilabPaint (hwnd, ScilabGC);
00232         return TRUE;
00233 }
00234 /*-----------------------------------------------------------------------------------*/
00235 BOOL ON_WND_GRAPH_WM_CREATE(HWND hwnd,LPCREATESTRUCT lpCreateStruct)
00236 {
00237         struct BCG *ScilabGC = lpCreateStruct->lpCreateParams;
00238 
00239         SetWindowLong (hwnd, 0, (LONG) ScilabGC);
00240         ScilabGC->CWindow = hwnd;
00241         if (ScilabGC->lpgw->lptw) DragAcceptFiles (hwnd, TRUE);
00242 
00243         return TRUE;
00244 }
00245 /*-----------------------------------------------------------------------------------*/
00246 void ON_WND_GRAPH_WM_KEY(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
00247 {
00248         switch (vk)
00249         {
00250                 case VK_F3:
00251                 {
00252                         struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00253                         if (ScilabGC->lpmw.LockToolBar == FALSE)
00254                         {
00255                                 if (ScilabGC->lpmw.ShowToolBar) HideGraphToolBar(ScilabGC);
00256                                 else ShowGraphToolBar(ScilabGC);
00257                         }
00258 
00259                 }
00260                 break;
00261 
00262                 default:
00263                 break;
00264         }
00265 }
00266 /*-----------------------------------------------------------------------------------*/
00267 BOOL ON_WND_GRAPH_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
00268 {
00269   struct BCG *ScilabGC = (struct BCG *) GetWindowLong (hwnd, 0);
00270 
00271   if (id < NUMMENU) 
00272   {
00273     if (!SendMacroEntityPicker(ScilabGC, id)) SendGraphMacro (ScilabGC, id);
00274   }
00275   else
00276   {
00277     switch (id)
00278     {
00279     case TOOLBAR_ROTATE3D:
00280       scig_3drot (ScilabGC->CurWindow);
00281       break;
00282 
00283     case TOOLBAR_ZOOM:
00284       scig_2dzoom (ScilabGC->CurWindow);
00285       break;
00286 
00287     case TOOLBAR_UNZOOM:
00288       scig_unzoom (ScilabGC->CurWindow);
00289       break;
00290 
00291     case TOOLBAR_GED:
00292       {
00293 
00294         char command[1024];
00295         wsprintf(command,"ged(8,%d);",ScilabGC->CurWindow);
00296         StoreCommand(command);
00297       }
00298       break;
00299 
00300     case TOOLBAR_PICKER:
00301       {
00302         LRESULT lResult;
00303 
00304         HWND hwndPicker=NULL;
00305         hwndPicker=GetDlgItem(ScilabGC->CWindow,TOOLBAR_PICKER);
00306 
00307         lResult=SendMessage(hwndPicker,(UINT) BM_GETCHECK,0,0);  
00308 
00309         if (lResult == BST_CHECKED)
00310         {
00311           char command[1024];
00312           wsprintf(command,"ged(10,%d);",ScilabGC->CurWindow);
00313           StoreCommand(command);
00314 
00315         }
00316         else
00317         {
00318           char command[1024];
00319           wsprintf(command,"ged(11,%d);",ScilabGC->CurWindow);
00320           StoreCommand(command);
00321         }
00322 
00323       }
00324       break;
00325 
00326     case TOOLBAR_LINE:
00327       {
00328 
00329         char command[1024];
00330         wsprintf(command,"ged_insert(1,%d);",ScilabGC->CurWindow);
00331         StoreCommand(command);
00332       }
00333       break;
00334 
00335     case TOOLBAR_POLYLINE:
00336       {
00337 
00338         char command[1024];
00339         wsprintf(command,"ged_insert(2,%d);",ScilabGC->CurWindow);
00340         StoreCommand(command);
00341       }
00342       break;
00343 
00344     case TOOLBAR_ARROW:
00345       {
00346         char command[1024];
00347         wsprintf(command,"ged_insert(3,%d);",ScilabGC->CurWindow);
00348         StoreCommand(command);
00349       }
00350       break;
00351 
00352       /* Disable Double Arrow */
00353       /*
00354       case TOOLBAR_DOUBLEARROW:
00355       {
00356       char command[1024];
00357       wsprintf(command,"ged_insert(4,%d);",ScilabGC->CurWindow);
00358       StoreCommand(command);
00359       }
00360       break;
00361       */
00362 
00363     case TOOLBAR_TEXT:
00364       {
00365 
00366         char command[1024];
00367         wsprintf(command,"ged_insert(4,%d);",ScilabGC->CurWindow);
00368         StoreCommand(command);
00369       }
00370       break;
00371 
00372     case TOOLBAR_RECTANGLE:
00373       {
00374         char command[1024];
00375         wsprintf(command,"ged_insert(5,%d);",ScilabGC->CurWindow);
00376         StoreCommand(command);
00377       }
00378       break;
00379 
00380     case TOOLBAR_CIRCLE:
00381       {
00382         char command[1024];
00383         wsprintf(command,"ged_insert(6,%d);",ScilabGC->CurWindow);
00384         StoreCommand(command);
00385       }
00386       break;
00387     }
00388     SetFocus(ScilabGC->CWindow);
00389     SetActiveWindow(ScilabGC->CWindow);
00390   }
00391 
00392 
00393   return TRUE;
00394 }
00395 /*-----------------------------------------------------------------------------------*/

Generated on Sun Mar 4 15:03:55 2007 for Scilab [trunk] by  doxygen 1.5.1