File: wmen_choose.c

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (134 lines) | stat: -rw-r--r-- 3,596 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* Copyright ENPC */
/* wchoose.c 
 * Scilab [ gcwin32 and WIN32 ] 
 *   Jean-Philipe Chancelier 
 *   Bugs and mail : Scilab@inria.fr 
 * modeless version 
 */

#include "wmen_scilab.h"

static HWND ChooseModeless = (HWND) 0 ; /* the modeless Choose Window */
static ChooseMenu *Ch ;

/****************************************************
 * Scilab Choose Menu (Windows part )
 ****************************************************/

EXPORT BOOL CALLBACK 
ChooseDlgProc(HWND hdlg, UINT wmsg, WPARAM wparam, LPARAM lparam)
{
  int i;
  /** Ch = (ChooseMenu * )GetWindowLong(GetParent(hdlg), 4); **/
  switch (wmsg) 
  {
  case WM_INITDIALOG:
		if ( SciMenusRect.left != -1) 
			SetWindowPos(hdlg,HWND_TOP,SciMenusRect.left,SciMenusRect.top,0,0,
				         SWP_NOSIZE | SWP_NOZORDER );
		for (i=0; i < Ch->nstrings  ; i++)
		{
			SendDlgItemMessage(hdlg, CHOOSE_LINENUM, LB_ADDSTRING, 0, 
								(LPARAM)((LPSTR) Ch->strings[i]));
		}
		SendDlgItemMessage(hdlg, CHOOSE_LINENUM, LB_SETCURSEL,Ch->choice, 0L);
		SetDlgItemText(hdlg, CHOOSE_TEXT, Ch->description);
		/* Change le nom du bouton */
		SetDlgItemText(hdlg, IDCANCEL,Ch->buttonname[0]);
  return TRUE;
  case WM_COMMAND:
		Ch->choice = (UINT)SendDlgItemMessage(hdlg,CHOOSE_LINENUM,LB_GETCURSEL,0,0L);
		switch (LOWORD(wparam)) 
		{

			case CHOOSE_LINENUM:
				/* Ajout Gestion double-click */
				if ( HIWORD( wparam ) == LBN_DBLCLK )
				{
					GetWindowRect(hdlg,&SciMenusRect);
					DestroyWindow(hdlg);
					ChooseModeless = (HWND)0;
					Ch->status = TRUE;
					return TRUE;
				}
			return FALSE;
			case IDOK:
				GetWindowRect(hdlg,&SciMenusRect);
				DestroyWindow(hdlg);
				ChooseModeless = (HWND)0;
				Ch->status = TRUE;
			return TRUE;
			case IDCANCEL:
				GetWindowRect(hdlg,&SciMenusRect);
				DestroyWindow(hdlg);
				ChooseModeless = (HWND)0;
				Ch->status = FALSE;
			return TRUE;
		}
  break;
  case WM_CLOSE:
		/** sciprint("OK fini sur close : \r\n");**/
		GetWindowRect(hdlg,&SciMenusRect);
		DestroyWindow(hdlg);
		ChooseModeless = (HWND)0;
		Ch->status = FALSE;
		return TRUE;
  break ;
  case WM_DRAWITEM:
    {
      LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT)lparam;
      DrawIcon(lpdis->hDC, 0, 0, 
	       (HICON)GetClassLong(GetParent(hdlg), GCL_HICON));
      Ch->choice = (UINT)SendDlgItemMessage(hdlg, CHOOSE_LINENUM, LB_GETCURSEL,
					    (WPARAM)0, (LPARAM)0);
    }
  return FALSE;
  }
  return FALSE;
}

/****************************************************
 * Activate the Menu 
 ****************************************************/


int ExposeChooseWindow( ChooseMenu *PCh)
{
  MSG msg;
  DLGPROC   MyChooseDlgProc ;
  PCh->status = -1;
  /** SetWindowLong(textwin.hWndParent, 4, (LONG) PCh); **/
  Ch = PCh;
  MyChooseDlgProc = (DLGPROC) MyGetProcAddress("ChooseDlgProc",
					       ChooseDlgProc);

  if (ChooseModeless  == (HWND)0 )
    ChooseModeless= CreateDialog(hdllInstance,"SciChooseDlgBox",
				 NULL,
				 /** NULL or textwin.hWndParent, **/
				 MyChooseDlgProc) ;
  else
    {
      sciprint("You cannot open more than one choose dialog at a time \r\n");
      return  FALSE;
    }
  while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE) || PCh->status == -1 )
    {
	  Sleep(1);
      if ( CtrlCHit(&textwin) == 1) 
		{
			if ( ChooseModeless != (HWND) 0) DestroyWindow( ChooseModeless) ;
			ChooseModeless = (HWND)0;
			PCh->status = FALSE;
			break;
		}
      if (  ChooseModeless ==0 || ! IsDialogMessage(ChooseModeless,&msg)) 
		{
	      TranslateMessage(&msg);
	      DispatchMessage(&msg);
		}
    }
  SetWindowLong(textwin.hWndParent, 4, (LONG)(0L));
  return PCh->status;
}