// Pref.cpp : implementation file // #include "stdafx.h" #include "femm.h" #include #include "hd_Pref.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define SelColor clist[0] #define MeshColor clist[1] #define BlockColor clist[2] #define LineColor clist[3] #define GridColor clist[4] #define NodeColor clist[5] #define BackColor clist[6] #define NameColor clist[7] ///////////////////////////////////////////////////////////////////////////// // hdCPref dialog hdCPref::hdCPref(CWnd* pParent /*=NULL*/) : CDialog(hdCPref::IDD, pParent) { //{{AFX_DATA_INIT(hdCPref) m_d_gridsize = 0.25; m_d_pixels = 100.0; m_d_prec = 1.e-8; m_d_minangle = DEFAULT_MINIMUM_ANGLE; m_d_depth = 1.0; m_d_showgrid = TRUE; m_d_snapgrid = FALSE; m_d_showorigin = FALSE; m_d_shownames = TRUE; //}}AFX_DATA_INIT s_action=0; s_coord=0; s_length=0; s_type=0; clist=(COLORREF *)calloc(16,sizeof(COLORREF)); clist[0]= dSelColor; clist[1]= dMeshColor; clist[2]= dBlockColor; clist[3]= dLineColor; clist[4]= dGridColor; clist[5]= dNodeColor; clist[6]= dBackColor; clist[7]= dNameColor; } hdCPref::~hdCPref() { free(clist); } void hdCPref::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(hdCPref) DDX_Control(pDX, IDC_HD_DCOLOR, m_d_color); DDX_Control(pDX, IDC_HD_DTYPE, m_d_type); DDX_Control(pDX, IDC_HD_DLENGTH, m_d_length); DDX_Control(pDX, IDC_HD_DCOORD, m_d_coord); DDX_Control(pDX, IDC_HD_DACTION, m_d_action); DDX_Text(pDX, IDC_HD_DGRIDSIZE, m_d_gridsize); DDX_Text(pDX, IDC_HD_DDEPTH, m_d_depth); DDX_Text(pDX, IDC_HD_DPIXELS, m_d_pixels); DDX_Text(pDX, IDC_HD_DPREC, m_d_prec); DDV_MinMaxDouble(pDX, m_d_prec, 1.e-016, 1.e-008); DDX_Text(pDX, IDC_HD_DMINANGLE, m_d_minangle); DDV_MinMaxDouble(pDX, m_d_minangle, 1., MINANGLE_MAX); DDX_Check(pDX, IDC_HD_DSHOWGRID, m_d_showgrid); DDX_Check(pDX, IDC_HD_DSNAPGRID, m_d_snapgrid); DDX_Check(pDX, IDC_HD_SHOW_ORIGIN, m_d_showorigin); DDX_Check(pDX, IDC_HD_SHOW_NAMES, m_d_shownames); //}}AFX_DATA_MAP DDX_Control(pDX, IDC_HD_DGRIDSIZE, m_IDC_d_gridsize); DDX_Control(pDX, IDC_HD_DPIXELS, m_IDC_d_pixels); DDX_Control(pDX, IDC_HD_DPREC, m_IDC_d_prec); DDX_Control(pDX, IDC_HD_DDEPTH, m_IDC_d_depth); } BEGIN_MESSAGE_MAP(hdCPref, CDialog) //{{AFX_MSG_MAP(hdCPref) ON_BN_CLICKED(IDC_HD_MODBTN, OnModifyButton) ON_BN_CLICKED(IDC_HD_RESTORE, OnRestoreColors) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // hdCPref message handlers void hdCPref::OnModifyButton() { CColorDialog dlg; int i; UpdateData(); i=m_d_color.GetCurSel(); dlg.m_cc.lpCustColors=clist; dlg.m_cc.rgbResult=clist[i]; dlg.m_cc.Flags=dlg.m_cc.Flags | CC_FULLOPEN | CC_RGBINIT; if(dlg.DoModal()==IDOK){ clist[i]=dlg.GetColor(); } else{ } } BOOL hdCPref::OnInitDialog() { CDialog::OnInitDialog(); ScanPrefs(); m_d_action.SetCurSel(s_action); m_d_coord.SetCurSel(s_coord); m_d_length.SetCurSel(s_length); m_d_type.SetCurSel(s_type); m_d_color.SetCurSel(0); UpdateData(FALSE); return TRUE; } void hdCPref::OnOK() { UpdateData(); s_action=m_d_action.GetCurSel(); s_coord=m_d_coord.GetCurSel(); s_length=m_d_length.GetCurSel(); s_type=m_d_type.GetCurSel(); CDialog::OnOK(); } void hdCPref::OnRestoreColors() { if(AfxMessageBox("Reset all color preferences?",MB_OKCANCEL)==IDOK) { clist[0]= dSelColor; clist[1]= dMeshColor; clist[2]= dBlockColor; clist[3]= dLineColor; clist[4]= dGridColor; clist[5]= dNodeColor; clist[6]= dBackColor; clist[7]= dNameColor; } } BOOL hdCPref::PreTranslateMessage(MSG* pMsg) { // Pressing ENTER should reroute message to parent if( (pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_RETURN) ) { GetParent()->PostMessage(WM_KEYDOWN, VK_RETURN, 0); // Message needs no further processing return TRUE; } // Pressing ESC should reroute message to parent if( (pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_ESCAPE) ) { GetParent()->PostMessage(WM_KEYDOWN, VK_ESCAPE, 0); // Message needs no further processing return TRUE; } // Allow default handler otherwise return CDialog::PreTranslateMessage(pMsg); } char* StripKey(char *c); void hdCPref::ScanPrefs() { FILE *fp; CString fname = ((CFemmApp *)AfxGetApp())->GetExecutablePath() + "hdraw.cfg"; fp=fopen(fname,"rt"); if (fp!=NULL) { BOOL flag=FALSE; char s[1024]; char q[1024]; char *v; int cr,cg,cb; // parse the file while (fgets(s,1024,fp)!=NULL) { sscanf(s,"%s",q); if( _strnicmp(q,"",11)==0) { v=StripKey(s); sscanf(v,"%lf",&m_d_prec); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%lf",&m_d_minangle); q[0]=NULL; } if( _strnicmp(q,"",7)==0) { v=StripKey(s); sscanf(v,"%lf",&m_d_depth); q[0]=NULL; } if( _strnicmp(q,"",13)==0) { v=StripKey(s); sscanf(v,"%i",&s_coord); q[0]=NULL; } if( _strnicmp(q,"",13)==0) { v=StripKey(s); sscanf(v,"%i",&s_length); q[0]=NULL; } if( _strnicmp(q,"",13)==0) { v=StripKey(s); sscanf(v,"%i",&s_type); q[0]=NULL; } sscanf(s,"%s",q); if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i %i %i",&cr,&cg,&cb); SelColor=RGB(cr,cg,cb); q[0]=NULL; } if( _strnicmp(q,"",12)==0) { v=StripKey(s); sscanf(v,"%i %i %i",&cr,&cg,&cb); BackColor=RGB(cr,cg,cb); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i %i %i",&cr,&cg,&cb); MeshColor=RGB(cr,cg,cb); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i %i %i",&cr,&cg,&cb); BlockColor=RGB(cr,cg,cb); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i %i %i",&cr,&cg,&cb); LineColor=RGB(cr,cg,cb); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i %i %i",&cr,&cg,&cb); GridColor=RGB(cr,cg,cb); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i %i %i",&cr,&cg,&cb); NodeColor=RGB(cr,cg,cb); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i %i %i",&cr,&cg,&cb); NameColor=RGB(cr,cg,cb); q[0]=NULL; } if( _strnicmp(q,"",12)==0) { v=StripKey(s); sscanf(v,"%i",&s_action); q[0]=NULL; } if( _strnicmp(q,"",15)==0) { v=StripKey(s); sscanf(v,"%lf",&m_d_pixels); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%lf",&m_d_gridsize); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i",&m_d_showgrid); q[0]=NULL; } if( _strnicmp(q,"",12)==0) { v=StripKey(s); sscanf(v,"%i",&m_d_showorigin); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i",&m_d_snapgrid); q[0]=NULL; } if( _strnicmp(q,"",10)==0) { v=StripKey(s); sscanf(v,"%i",&m_d_shownames); q[0]=NULL; } } fclose(fp); } } void WriteColor(char *cname, COLORREF c,FILE *fp); void hdCPref::WritePrefs() { FILE *fp; CString fname; UpdateData(); s_action=m_d_action.GetCurSel(); s_coord=m_d_coord.GetCurSel(); s_length=m_d_length.GetCurSel(); s_type=m_d_type.GetCurSel(); fname=((CFemmApp *)AfxGetApp())->GetExecutablePath()+"hdraw.cfg"; fp=fopen(fname,"wt"); if (fp!=NULL) { WriteColor("SelColor",SelColor,fp); WriteColor("BkgndColor",BackColor,fp); WriteColor("MeshColor",MeshColor,fp); WriteColor("BlockColor",BlockColor,fp); WriteColor("LineColor",LineColor,fp); WriteColor("GridColor",GridColor,fp); WriteColor("NodeColor",NodeColor,fp); WriteColor("NameColor",NameColor,fp); fprintf(fp," = %i\n",s_action); fprintf(fp," = %g\n",m_d_pixels); fprintf(fp," = %g\n",m_d_gridsize); fprintf(fp," = %i\n",m_d_showgrid); fprintf(fp," = %i\n",m_d_snapgrid); fprintf(fp," = %i\n",m_d_shownames); fprintf(fp," = %i\n",m_d_showorigin); fprintf(fp," = %i\n",s_type); fprintf(fp," = %i\n",s_length); fprintf(fp," = %g\n",m_d_prec); fprintf(fp," = %g\n",m_d_minangle); fprintf(fp," = %g\n",m_d_depth); fprintf(fp," = %i\n",s_coord); fclose(fp); } }