00001
00002 #include "ExClass.h"
00003
00004
00005 using namespace jbxl;
00006 using namespace jbxwl;
00007
00008
00009
00011
00012
00013
00014
00015
00016 bool jbxwl::SetExLink(CExDocument* pdoc, CExFrame* pfrm, CExView* pviw, CAppCallBack* papp)
00017 {
00018 if (pdoc==NULL) return false;
00019 if (pfrm==NULL) return false;
00020 if (pviw==NULL) return false;
00021
00022 pdoc->pView = pfrm->pView = pviw;
00023 pdoc->pFrame = pviw->pFrame = pfrm;
00024 pviw->pDoc = pfrm->pDoc = pdoc;
00025 pviw->pApp = pfrm->pApp = pdoc->pApp = papp;
00026 return true;
00027 }
00028
00029
00030
00031 CExFrame* jbxwl::CreateDocFrmView(CMultiDocTemplate* pDocTempl, CAppCallBack* papp)
00032 {
00033
00034 CExDocument* pdoc = (CExDocument*)pDocTempl->CreateNewDocument();
00035 CExFrame* pfrm = (CExFrame*)pDocTempl->CreateNewFrame(pdoc, NULL);
00036 CExView* pviw = (CExView*)pdoc->GetView();
00037
00038 bool rslt = SetExLink(pdoc, pfrm, pviw, papp);
00039 if (!rslt) {
00040 if (pdoc!=NULL) {
00041 DEBUG_ERROR("jbxwl::CreateDocFrmView(): ERROR: Document is NULL\n");
00042 deleteNull(pdoc);
00043 }
00044 if (pviw!=NULL) {
00045 DEBUG_ERROR("jbxwl::CreateDocFrmView(): ERROR: View is NULL\n");
00046 deleteNull(pviw);
00047 }
00048 if (pfrm!=NULL) {
00049 DEBUG_ERROR("jbxwl::CreateDocFrmView(): ERROR: Frame is NULL\n");
00050 deleteNull(pfrm);
00051 }
00052 return NULL;
00053 }
00054
00055 pfrm->pTempl = pDocTempl;
00056 return pfrm;
00057 }
00058
00059
00060
00061
00062
00063
00064 BOOL jbxwl::InitialDocView(CExFrame* pfrm, LPCTSTR fname)
00065 {
00066 BOOL rslt;
00067
00068
00069 if (fname==NULL) {
00070 rslt = pfrm->pDoc->OnNewDocument();
00071 }
00072 else {
00073 rslt = pfrm->pDoc->OnOpenDocument(fname);
00074 }
00075 if (!rslt) return FALSE;
00076
00077
00078 pfrm->pView->OnInitialUpdate();
00079 if (!pfrm->pView->hasViewData) return FALSE;
00080 return TRUE;
00081 }
00082
00083
00084
00085
00086
00087
00088 int jbxwl::ExecDocFrmView(CExFrame* pfrm, LPCTSTR fname)
00089 {
00090 if (pfrm ==NULL) return 1;
00091 if (fname!=NULL) pfrm->pDoc->Title = get_file_name_t(fname);
00092
00093
00094 BOOL rslt = InitialDocView(pfrm, fname);
00095 if (!rslt) {
00096 int ret;
00097
00098 if ( pfrm->doneErrorMessage) ret = MSG_DFV_NOT_DISP;
00099 else if ( pfrm->cancelOperation) ret = MSG_DFV_CANCEL;
00100 else if (!pfrm->pDoc->hasReadData) ret = MSG_DFV_ERR_READ;
00101 else if (!pfrm->pDoc->hasViewData) ret = MSG_DFV_UNVISIBLE;
00102 else if (!pfrm->pView->hasViewData) ret = MSG_DFV_FAIL_VIEW;
00103
00104 delete pfrm;
00105 return ret;
00106 }
00107
00108 pfrm->ShowWindow(SW_SHOW);
00109 pfrm->SetFocus();
00110 pfrm->pView->SetFocus();
00111
00112
00113 if (pfrm->Title.IsEmpty()) {
00114 pfrm->pView->SetTitle(pfrm->pDoc->Title);
00115
00116
00117
00118
00119 }
00120 return 0;
00121 }
00122
00123
00124
00125 void jbxwl::ExecDocFrmViewError(HWND hwnd, int ret)
00126 {
00127 if (ret>0) {
00128 CString mesg;
00129 int err_flag = false;
00130
00131 if (ret==MSG_DFV_FR_NULL) {
00132 mesg.LoadString(IDS_STR_NULLPT_FRM);
00133 err_flag = true;
00134 }
00135 else if (ret==MSG_DFV_CANCEL){
00136 mesg.LoadString(IDS_STR_CANCEL_OPRTN);
00137 err_flag = true;
00138 }
00139 else if (ret==MSG_DFV_ERR_READ) {
00140 mesg.LoadString(IDS_STR_ERR_OPEN_FILE);
00141 err_flag = true;
00142 }
00143 else if (ret==MSG_DFV_UNVISIBLE) {
00144 mesg.LoadString(IDS_STR_ERR_UNDISP);
00145 err_flag = true;
00146 }
00147 else if (ret==MSG_DFV_FAIL_VIEW) {
00148 mesg.LoadString(IDS_STR_ERR_PREDISP);
00149 err_flag = true;
00150 }
00151 if (err_flag) MessageBox(hwnd, mesg, NULL, MB_OK);
00152 }
00153 return;
00154 }
00155
00156
00157
00166 int jbxwl::ExecTemplate(CMultiDocTemplate* ptemp, ExMSGraph<sWord>* pmsGraph, ExCmnHead* pcmnHead, CExFrame* prntFrm, int viewPoint)
00167 {
00168 int ret, color = GRAPH_COLOR_MONO;
00169 BOOL hasReadData = FALSE;
00170 BOOL hasViewData = FALSE;
00171 HWND hWnd = NULL;
00172 CExFrame* pfrm = NULL;
00173 CExDocument* prntDoc = NULL;
00174
00175 if (prntFrm!=NULL) {
00176 hWnd = prntFrm->m_hWnd;
00177 prntDoc = prntFrm->pDoc;
00178 color = prntFrm->colorMode;
00179 }
00180
00181 if (pmsGraph!=NULL) {
00182 if (!pmsGraph->isNull()) hasReadData = TRUE;
00183 }
00184 if (pcmnHead!=NULL) {
00185 if (!pcmnHead->isNull()) hasViewData = TRUE;
00186 }
00187
00188 if (hasViewData) {
00189 pfrm = CreateDocFrmView(ptemp, NULL);
00190 pfrm->pDoc->hasReadData = TRUE;
00191 pfrm->pDoc->hasViewData = TRUE;
00192 pfrm->pDoc->cmnHead = *pcmnHead;
00193 pfrm->pDoc->colorMode = color;
00194 pfrm->pDoc->preTitle = _T("");
00195 pfrm->pDoc->Title = prntFrm->pDoc->Title;
00196 pfrm->pDoc->pstTitle = prntFrm->pDoc->pstTitle;
00197 if (prntDoc!=NULL) pfrm->pDoc->ctrlCntrst = prntDoc->ctrlCntrst;
00198 pfrm->pView->vSBpos = viewPoint;
00199 ret = ExecDocFrmView(pfrm);
00200 }
00201
00202 else if (hasReadData) {
00203 pfrm = CreateDocFrmView(ptemp, NULL);
00204 pfrm->pDoc->hasReadData = TRUE;
00205 pfrm->pDoc->msGraph = *pmsGraph;
00206 pfrm->pDoc->colorMode = color;
00207 pfrm->pDoc->preTitle = _T("");
00208 pfrm->pDoc->Title = prntFrm->pDoc->Title;
00209 pfrm->pDoc->pstTitle = prntFrm->pDoc->pstTitle;
00210 if (prntDoc!=NULL) pfrm->pDoc->ctrlCntrst = prntDoc->ctrlCntrst;
00211 pfrm->pView->vSBpos = viewPoint;
00212 ret = ExecDocFrmView(pfrm);
00213 }
00214
00215 else {
00216 CString mesg;
00217 mesg.LoadString(IDS_STR_OPEN_FILE);
00218 CString fname = EasyGetOpenFileName(mesg, hWnd);
00219 if (fname.IsEmpty()) return -1;
00220
00221 pfrm = CreateDocFrmView(ptemp, NULL);
00222 pfrm->pDoc->multiSliceData = TRUE;
00223 pfrm->pDoc->colorMode = color;
00224 if (prntDoc!=NULL) pfrm->pDoc->ctrlCntrst = prntDoc->ctrlCntrst;
00225 ret = ExecDocFrmView(pfrm, fname);
00226 }
00227
00228 ExecDocFrmViewError(hWnd, ret);
00229
00230 return ret;
00231 }
00232
00233
00234
00235 CString jbxwl::EasyGetOpenFileName(LPCTSTR title, HWND hWnd)
00236 {
00237 OPENFILENAME ofn;
00238 TCHAR fn[LMESG];
00239 CString str = _T("");
00240
00241 memset(fn, 0, LMESG);
00242 memset(&ofn, 0, sizeof(OPENFILENAME));
00243
00244 ofn.lStructSize = sizeof(OPENFILENAME);
00245 ofn.hwndOwner = hWnd;
00246 ofn.Flags = OFN_HIDEREADONLY;
00247 ofn.lpstrFile = fn;
00248 ofn.nMaxFile = LMESG;
00249 ofn.lpstrTitle = title;
00250
00251
00252 BOOL ret = GetOpenFileName(&ofn);
00253
00254 if (ret) str = fn;
00255
00256 return str;
00257 }
00258
00259
00260
00261 CString jbxwl::EasyGetSaveFileName(LPCTSTR title, LPCTSTR extnt, HWND hWnd)
00262 {
00263 OPENFILENAME ofn;
00264 TCHAR fn[LNAME];
00265 CString str = _T("");
00266
00267 memset(fn, 0, LNAME);
00268 memset(&ofn, 0, sizeof(OPENFILENAME));
00269
00270 ofn.lStructSize = sizeof(OPENFILENAME);
00271 ofn.hwndOwner = hWnd;
00272 ofn.Flags = 0;
00273 ofn.lpstrFile = fn;
00274 ofn.nMaxFile = LNAME;
00275 ofn.lpstrDefExt = extnt;
00276 ofn.lpstrTitle = title;
00277
00278 BOOL ret = GetSaveFileName(&ofn);
00279 if (ret) str = fn;
00280
00281 return str;
00282 }
00283
00284
00285
00286 CString jbxwl::EasyGetSaveFolderName(LPCTSTR folder, LPCTSTR title, HWND hWnd)
00287 {
00288 BROWSEINFO bri;
00289 LPITEMIDLIST pilst;
00290
00291 TCHAR fldr[LNAME];
00292 CString str = _T("");
00293
00294 memset(fldr, 0, LNAME);
00295 memset(&bri, 0, sizeof(BROWSEINFO));
00296
00297 bri.hwndOwner = hWnd;
00298 bri.lpszTitle = title;
00299 bri.ulFlags = BIF_RETURNONLYFSDIRS;
00300
00301 bri.lpfn = &EasyGetSaveFolderNameCallBack;
00302 bri.lParam = (LPARAM)folder;
00303
00304 pilst = SHBrowseForFolderW(&bri);
00305 if (pilst!=NULL) {
00306 SHGetPathFromIDListW(pilst, fldr);
00307 str = fldr;
00308 CoTaskMemFree(pilst);
00309 }
00310 return str;
00311 }
00312
00313
00314
00315 int CALLBACK jbxwl::EasyGetSaveFolderNameCallBack(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
00316 {
00317 if(uMsg==BFFM_INITIALIZED){
00318 SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE, lpData);
00319 }
00320 return 0;
00321 }
00322