Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/CSimpleDialog.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download) (as text)
Sun Aug 15 01:53:13 2010 UTC (13 years, 9 months ago) by okadu
File MIME type: text/x-c++src
File size: 6992 byte(s)


1 #include "stdafx.h"
2 #include "CSimpleDialog.h"
3 #include "CPopMenu.h"
4
5 // 内部定数
6 const int SIMPLE_DIALOG_WIDTH = TILE_UNIT*12; // ダイアログ幅
7 const int SIMPLE_DIALOG_HEIGHT = 96; // ダイアログ高
8
9 // 外部グローバル
10 list<CWindowCtrl *> g_DialogQueue;
11
12 /*
13 * コンストラクタ
14 */
15 CSimpleDialog::CSimpleDialog(
16 char *label, // ラベル
17 char *title // ウィンドウタイトル
18 ){
19 ResetTabHead();
20 int tw = g_StrTex->DrawString(label, 0)->GetWidth()+TILE_UNIT*3, tw2;
21 if(tw<(tw2 = g_StrTex->DrawString(title, 0)->GetWidth()+TILE_UNIT*2)) tw = tw2;
22 if(tw<SIMPLE_DIALOG_WIDTH) tw = SIMPLE_DIALOG_WIDTH;
23 Init((g_DispWidth-tw)/2, (g_DispHeight-SIMPLE_DIALOG_HEIGHT)/2,
24 tw, SIMPLE_DIALOG_HEIGHT, title, NULL, false);
25 m_Label.Init(TILE_UNIT, TILE_UNIT*2,
26 m_Width-TILE_UNIT*2, TILE_UNIT, label, this, 1, 1);
27 m_OKButton.Init((m_Width-TILE_UNIT*4)/2, TILE_UNIT*4,
28 TILE_UNIT*4, TILE_UNIT, "OK", this);
29 m_OKButton.GiveFocus(false);
30 }
31
32 ////////////////////////////////////////////////////////////////////////////////
33 ////////////////////////////////////////////////////////////////////////////////
34
35 /*
36 * コンストラクタ
37 */
38 CYesNoDialog::CYesNoDialog(
39 char *label, // ラベル
40 char *title, // ウィンドウタイトル
41 bool def // デフォルト (true: yes)
42 ){
43 ResetTabHead();
44 int tw = g_StrTex->DrawString(label, 0)->GetWidth()+TILE_UNIT*3, tw2;
45 if(tw<(tw2 = g_StrTex->DrawString(title, 0)->GetWidth()+TILE_UNIT*2)) tw = tw2;
46 if(tw<SIMPLE_DIALOG_WIDTH) tw = SIMPLE_DIALOG_WIDTH;
47 Init((g_DispWidth-tw)/2, (g_DispHeight-SIMPLE_DIALOG_HEIGHT)/2,
48 tw, SIMPLE_DIALOG_HEIGHT, title, NULL, false);
49 m_Label.Init(TILE_UNIT, TILE_UNIT*2,
50 m_Width-TILE_UNIT*2, TILE_UNIT, label, this, 1, 1);
51 m_YesButton.Init(m_Width/2-TILE_UNIT*5, TILE_UNIT*4,
52 TILE_UNIT*4, TILE_UNIT, FlashIn("%s (Y)", lang(Yes)), this);
53 m_NoButton.Init(m_Width/2+TILE_UNIT, TILE_UNIT*4,
54 TILE_UNIT*4, TILE_UNIT, FlashIn("%s (N)", lang(No)), this);
55 if(def) m_YesButton.GiveFocus(false);
56 else m_NoButton.GiveFocus(false);
57 m_YesCommand = m_NoCommand = NULL;
58 }
59
60 /*
61 * デストラクタ
62 */
63 CYesNoDialog::~CYesNoDialog(){
64 DELETE_V(m_YesCommand);
65 DELETE_V(m_NoCommand);
66 }
67
68 /*
69 * 入力チェック
70 */
71 bool CYesNoDialog::ScanInputWindow(){
72 if(CheckShift() || CheckCtrl() || CheckAlt()) return false;
73 if(GetKey(DIK_Y)==S_PULL) m_YesButton.SetPush(true);
74 else if(GetKey(DIK_N)==S_PULL) m_NoButton.SetPush(true);
75 if(m_YesButton.IsPushed() && m_YesCommand){
76 m_YesCommand->Exec();
77 DELETE_V(m_YesCommand);
78 }else if(m_NoButton.IsPushed() && m_NoCommand){
79 m_NoCommand->Exec();
80 DELETE_V(m_NoCommand);
81 }
82 return false;
83 }
84
85 ////////////////////////////////////////////////////////////////////////////////
86 ////////////////////////////////////////////////////////////////////////////////
87
88 /*
89 * コンストラクタ
90 */
91 CInputDialog::CInputDialog(
92 char *label, // ラベル
93 char *title, // ウィンドウタイトル
94 char *def, // デフォルト
95 int maxlen // 最大文字数
96 ){
97 ResetTabHead();
98 int tw = g_StrTex->DrawString(label, 0)->GetWidth()+TILE_UNIT*3, tw2;
99 if(tw<(tw2 = g_StrTex->DrawString(title, 0)->GetWidth()+TILE_UNIT*2)) tw = tw2;
100 if(tw<(tw2 = maxlen*FONT_WIDTH+TILE_UNIT*3)) tw = tw2;
101 if(tw<SIMPLE_DIALOG_WIDTH) tw = SIMPLE_DIALOG_WIDTH;
102 Init((g_DispWidth-tw)/2, (g_DispHeight-SIMPLE_DIALOG_HEIGHT)/2,
103 tw, SIMPLE_DIALOG_HEIGHT+TILE_UNIT, title, NULL, false);
104 m_Label.Init(TILE_UNIT, TILE_UNIT*2,
105 m_Width-TILE_UNIT*2, TILE_UNIT, label, this, 0, 0);
106 m_Edit.Init(TILE_UNIT, TILE_UNIT*3, m_Width-TILE_UNIT*2, TILE_UNIT, def, this, maxlen);
107 m_OKButton.Init(m_Width-TILE_UNIT*10, TILE_UNIT*5,
108 TILE_UNIT*4, TILE_UNIT, "OK", this);
109 m_CancelButton.Init(m_Width-TILE_UNIT*5, TILE_UNIT*5,
110 TILE_UNIT*4, TILE_UNIT, lang(Cancel), this);
111 m_Edit.GiveFocus(false);
112 }
113
114 /*
115 * 入力チェック
116 */
117 bool CInputDialog::ScanInputWindow(){
118 if(m_Edit.IsFocus() && !m_Edit.IsComp()
119 && (GetKey(DIK_RETURN)|GetKey(DIK_NUMPADENTER))==S_PUSH){
120 m_OKButton.SetPush(true);
121 return true;
122 }else if(!m_Edit.IsComp() && GetKey(DIK_ESCAPE)==S_PUSH){
123 m_CancelButton.SetPush(true);
124 return true;
125 }
126 return false;
127 }
128
129 ////////////////////////////////////////////////////////////////////////////////
130 ////////////////////////////////////////////////////////////////////////////////
131
132 /*
133 * コンストラクタ
134 */
135 CMultiInputDialog::CMultiInputDialog(
136 char *title, // ウィンドウタイトル
137 int itemnum, // アイテム数
138 char **label, // ラベルリスト
139 char **def, // デフォルトリスト
140 int *maxlen // 最大文字数リスト
141 ){
142 ResetTabHead();
143 m_ItemNumber = itemnum;
144 int tw = g_StrTex->DrawString(title, 0)->GetWidth()+TILE_UNIT*3, tw2;
145 int i;
146 for(i = 0; i<m_ItemNumber; i++){
147 if(tw<(tw2 = g_StrTex->DrawString(label[i], 0)->GetWidth()+TILE_UNIT*2)) tw = tw2;
148 if(tw<(tw2 = maxlen[i]*FONT_WIDTH+TILE_UNIT*3)) tw = tw2;
149 }
150 if(tw<SIMPLE_DIALOG_WIDTH) tw = SIMPLE_DIALOG_WIDTH;
151 int item_itv = TILE_UNIT*2+TILE_HALF;
152 int th = SIMPLE_DIALOG_HEIGHT+item_itv*(m_ItemNumber-1)+TILE_UNIT;
153 Init((g_DispWidth-tw)/2, (g_DispHeight-th)/2, tw, th, title, NULL, false);
154 m_Label = new CStaticCtrl[m_ItemNumber];
155 m_Edit = new CEditCtrl[m_ItemNumber];
156 for(i = 0; i<m_ItemNumber; i++){
157 m_Label[i].Init(TILE_UNIT, TILE_UNIT*2+item_itv*i,
158 m_Width-TILE_UNIT*2, TILE_UNIT, label[i], this, 0, 0);
159 m_Edit[i].Init(TILE_UNIT, TILE_UNIT*3+item_itv*i,
160 m_Width-TILE_UNIT*2, TILE_UNIT, def[i], this, maxlen[i]);
161 }
162 int ty = TILE_UNIT*5+item_itv*(m_ItemNumber-1);
163 m_OKButton.Init(m_Width-TILE_UNIT*10, ty,
164 TILE_UNIT*4, TILE_UNIT, "OK", this);
165 m_CancelButton.Init(m_Width-TILE_UNIT*5, ty,
166 TILE_UNIT*4, TILE_UNIT, lang(Cancel), this);
167 m_Edit[0].GiveFocus(false);
168 }
169
170 /*
171 * デストラクタ
172 */
173 CMultiInputDialog::~CMultiInputDialog(){
174 DELETE_A(m_Label);
175 DELETE_A(m_Edit);
176 }
177
178 /*
179 * 入力チェック
180 */
181 bool CMultiInputDialog::ScanInputWindow(){
182 int i;
183 bool is_comp = false;
184 for(i = 0; i<m_ItemNumber; i++){
185 if(m_Edit[i].IsFocus() && !m_Edit[i].IsComp()
186 && (GetKey(DIK_RETURN)|GetKey(DIK_NUMPADENTER))==S_PUSH){
187 m_OKButton.SetPush(true);
188 return true;
189 }else if(m_Edit[i].IsComp()){
190 is_comp = true;
191 }
192 }
193 if(!is_comp && GetKey(DIK_ESCAPE)==S_PUSH){
194 m_CancelButton.SetPush(true);
195 return true;
196 }
197 return false;
198 }
199
200 ////////////////////////////////////////////////////////////////////////////////
201 ////////////////////////////////////////////////////////////////////////////////
202
203 /*
204 * 共通ダイアログにエンキュー
205 */
206 void EnqueueCommonDialog(
207 CWindowCtrl *dlg // ダイアログ
208 ){
209 g_DialogQueue.push_back(dlg);
210 g_ModalDialog = *g_DialogQueue.begin();
211 }
212
213 /*
214 * 共通ダイアログ処理
215 */
216 void ProcessCommonDialog(){
217 if(g_DialogQueue.size() && g_ModalDialog==*g_DialogQueue.begin()
218 && (*g_DialogQueue.begin())->GetWindowState()){
219 DELETE_V(g_ModalDialog);
220 g_DialogQueue.pop_front();
221 if(g_DialogQueue.size()) g_ModalDialog = *g_DialogQueue.begin();
222 }
223 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26