]> git.kernelconcepts.de Git - karo-tx-redboot.git/blobdiff - tools/src/tools/configtool/standalone/win32/ViewOptions.cpp
Initial revision
[karo-tx-redboot.git] / tools / src / tools / configtool / standalone / win32 / ViewOptions.cpp
diff --git a/tools/src/tools/configtool/standalone/win32/ViewOptions.cpp b/tools/src/tools/configtool/standalone/win32/ViewOptions.cpp
new file mode 100644 (file)
index 0000000..4af3f05
--- /dev/null
@@ -0,0 +1,341 @@
+//####COPYRIGHTBEGIN####
+//                                                                          
+// ----------------------------------------------------------------------------
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
+//
+// This program is part of the eCos host tools.
+//
+// This program is free software; you can redistribute it and/or modify it 
+// under the terms of the GNU General Public License as published by the Free 
+// Software Foundation; either version 2 of the License, or (at your option) 
+// any later version.
+// 
+// This program is distributed in the hope that it will be useful, but WITHOUT 
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+// more details.
+// 
+// You should have received a copy of the GNU General Public License along with
+// this program; if not, write to the Free Software Foundation, Inc., 
+// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+// ----------------------------------------------------------------------------
+//                                                                          
+//####COPYRIGHTEND####
+// ViewOptions.cpp : implementation file
+//
+//===========================================================================
+//===========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):  sdf
+// Contact(s): sdf
+// Date:               1998/08/11
+// Version:            0.01
+// Purpose:    
+// Description:        This is the implementation of the Configuration -> Options View tab
+// Requires:   
+// Provides:   
+// See also:    
+// Known bugs: 
+// Usage:      
+//
+//####DESCRIPTIONEND####
+//
+//===========================================================================
+
+#include "stdafx.h"
+#include "ConfigTool.h"
+#include "ViewOptions.h"
+#include "ConfigToolDoc.h"
+#include "CellView.h"
+#include "CTUtils.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CViewOptions property page
+
+CViewOptions::CViewOptions() 
+       : CeCosDialog(IDD, NULL)
+{
+  //{{AFX_DATA_INIT(CViewOptions)
+  //}}AFX_DATA_INIT
+  m_FontChosen=CMainFrame::PaneTypeMax;
+}
+
+CViewOptions::~CViewOptions()
+{
+}
+
+void CViewOptions::DoDataExchange(CDataExchange* pDX)
+{
+  CeCosDialog::DoDataExchange(pDX);
+  //{{AFX_DATA_MAP(CViewOptions)
+  //}}AFX_DATA_MAP
+}
+
+
+BEGIN_MESSAGE_MAP(CViewOptions, CeCosDialog)
+//{{AFX_MSG_MAP(CViewOptions)
+ON_BN_CLICKED(IDC_RADIO_ASSOCIATED, OnRadioAssociated)
+ON_BN_CLICKED(IDC_RADIO_CUSTOM, OnRadioCustom)
+ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
+ON_BN_CLICKED(IDC_RADIO_INTERNAL_BROWSER, OnRadioInternalBrowser)
+ON_BN_CLICKED(IDC_RADIO_ASSOCIATED_BROWSER, OnRadioAssociatedBrowser)
+ON_BN_CLICKED(IDC_RADIO_CUSTOM_BROWSER, OnRadioCustomBrowser)
+ON_BN_CLICKED(IDC_BROWSE_BROWSER, OnBrowseBrowser)
+ON_BN_CLICKED(IDC_FONT, OnFont)
+ON_CBN_SELCHANGE(IDC_PANECOMBO, OnSelchangePanecombo)
+//}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CViewOptions message handlers
+
+const CFileName CViewOptions::strHeaderfileAssociation=CViewOptions::HeaderFileAssociation();
+
+void CViewOptions::OnOK() 
+{
+  
+  UpdateData(TRUE);
+  CMainFrame *pMain=CConfigTool::GetMain();
+  if(CMainFrame::PaneTypeMax!=m_FontChosen){
+    pMain->SetPaneFont(m_FontChosen, m_lf);
+  }
+  
+  CConfigToolDoc *pDoc=CConfigTool::GetConfigToolDoc();
+  
+  
+  if(((CButton *)GetDlgItem(IDC_RADIO_CUSTOM_BROWSER))->GetCheck()){
+    CFileName strBrowser;
+    GetDlgItemText(IDC_EDIT_BROWSER,strBrowser);
+    if(strBrowser.IsEmpty() || !strBrowser.Exists()){
+      CUtils::MessageBoxF(_T("If you wish to use a custom browser you must specify a valid executable"));
+      GetDlgItem(IDC_EDIT_BROWSER)->SetFocus();
+      
+      return;
+    }
+    pDoc->m_strBrowser=strBrowser;
+    pDoc->m_eUseCustomBrowser=CConfigToolDoc::CustomExternal;
+  } else if (((CButton *)GetDlgItem(IDC_RADIO_ASSOCIATED_BROWSER))->GetCheck()){
+    pDoc->m_eUseCustomBrowser=CConfigToolDoc::AssociatedExternal;
+  } else {
+    pDoc->m_eUseCustomBrowser=CConfigToolDoc::Internal;
+  }
+
+  pDoc->m_bUseCustomViewer=((CButton *)GetDlgItem(IDC_RADIO_CUSTOM))->GetCheck();
+  if(pDoc->m_bUseCustomViewer){
+    CFileName strViewer;
+    GetDlgItemText(IDC_EDIT,strViewer);
+    if(strViewer.IsEmpty() || !strViewer.IsFile()){
+                   CUtils::MessageBoxF(_T("If you wish to use a custom viewer you must specify a valid executable"));
+        GetDlgItem(IDC_EDIT)->SetFocus();
+        
+        return;
+    }
+    pDoc->m_strViewer=strViewer;
+  }
+  
+  bool bHex=((CButton *)GetDlgItem(IDC_RADIO_HEXADECIMAL))->GetCheck();
+  if(bHex!=pDoc->m_bHex){
+    pDoc->m_bHex=bHex;
+    pDoc->UpdateAllViews(0,CConfigToolDoc::IntFormatChanged);
+  }
+  
+  bool bMacros=((CButton *)GetDlgItem(IDC_RADIO_MACRO_NAMES))->GetCheck();
+  if(bMacros!=pDoc->m_bMacroNames){
+    pDoc->m_bMacroNames=bMacros;
+    pDoc->UpdateAllViews(0,CConfigToolDoc::NameFormatChanged);
+  }
+  
+  CeCosDialog::OnOK();
+}
+
+void CViewOptions::OnRadioAssociated() 
+{
+       
+  GetDlgItem(IDC_EDIT)->EnableWindow(FALSE);
+  GetDlgItem(IDC_BROWSE)->EnableWindow(FALSE);
+}
+
+void CViewOptions::OnRadioCustom() 
+{
+       
+  GetDlgItem(IDC_EDIT)->EnableWindow(TRUE);
+  GetDlgItem(IDC_BROWSE)->EnableWindow(TRUE);
+}
+
+void CViewOptions::OnBrowse() 
+{
+  CFileDialog dlg(TRUE, _T("exe"), _T(""), OFN_HIDEREADONLY | OFN_PATHMUSTEXIST,
+    _T("Executables (*.exe;*.bat;*.com)|*.exe;*.bat;*.com"));
+  if(IDOK==dlg.DoModal()){
+    SetDlgItemText(IDC_EDIT,dlg.GetPathName());
+  }
+}
+
+BOOL CViewOptions::OnInitDialog() 
+{
+  CComboBox *pCombo=(CComboBox *)GetDlgItem(IDC_PANECOMBO);
+  CMainFrame *pMain=CConfigTool::GetMain();
+  for(int i=0;i<CMainFrame::PaneTypeMax;i++){
+    if(i==CMainFrame::Control || i==CMainFrame::Output || i==CMainFrame::ShortDesc){
+      int nIndex=pCombo->AddString(pMain->GetPaneName((CMainFrame::PaneType)i));
+      pCombo->SetItemData(nIndex,i);
+    }
+  }
+  pCombo->SetCurSel(0);
+  
+  CeCosDialog::OnInitDialog();
+  
+  if(!strHeaderfileAssociation.IsEmpty()){
+    CString str1;
+    str1.Format(_T("%s (%s)"),_T("Associated viewer"),strHeaderfileAssociation);
+    SetDlgItemText(IDC_RADIO_ASSOCIATED,str1);
+  } else {
+    SetDlgItemText(IDC_RADIO_ASSOCIATED,_T("Associated viewer"));
+  }
+  
+  // Compute the association with doc (.htm) files
+  
+  if(CConfigToolDoc::DefaultExternalBrowser().IsEmpty()){
+    SetDlgItemText(IDC_RADIO_ASSOCIATED_BROWSER,_T("Associated browser"));
+  } else {
+    CString str1;
+    str1.Format(_T("%s (%s)"),_T("Associated browser"),CConfigToolDoc::DefaultExternalBrowser().Tail());
+    SetDlgItemText(IDC_RADIO_ASSOCIATED_BROWSER,str1);
+  }
+
+  CConfigToolDoc*pDoc=CConfigTool::GetConfigToolDoc();
+  if(strHeaderfileAssociation.IsEmpty()){
+    GetDlgItem(IDC_RADIO_ASSOCIATED)->EnableWindow(FALSE);
+    GetDlgItem(IDC_BROWSE)->EnableWindow(TRUE);
+    ((CButton *)GetDlgItem(IDC_RADIO_CUSTOM))->SetCheck(TRUE);
+  } else {
+    ((CButton *)GetDlgItem(pDoc->m_bUseCustomViewer?IDC_RADIO_CUSTOM:IDC_RADIO_ASSOCIATED))->SetCheck(TRUE);
+    GetDlgItem(IDC_EDIT)->EnableWindow(pDoc->m_bUseCustomViewer);
+    GetDlgItem(IDC_BROWSE)->EnableWindow(pDoc->m_bUseCustomViewer);
+  }
+  SetDlgItemText(IDC_EDIT,pDoc->m_strViewer);
+  
+  if(CConfigToolDoc::DefaultExternalBrowser().IsEmpty()){
+    GetDlgItem(IDC_RADIO_ASSOCIATED_BROWSER)->EnableWindow(FALSE);
+    GetDlgItem(IDC_BROWSE_BROWSER)->EnableWindow(TRUE);
+    if(CConfigToolDoc::AssociatedExternal==pDoc->m_eUseCustomBrowser){
+      pDoc->m_eUseCustomBrowser=CConfigToolDoc::CustomExternal;
+    }
+  }
+  
+  switch(pDoc->m_eUseCustomBrowser){
+               case CConfigToolDoc::Internal:
+      ((CButton *)GetDlgItem(IDC_RADIO_INTERNAL_BROWSER))->SetCheck(TRUE);
+      break;
+    case CConfigToolDoc::AssociatedExternal:
+      ((CButton *)GetDlgItem(IDC_RADIO_ASSOCIATED_BROWSER))->SetCheck(TRUE);
+      break;
+    case CConfigToolDoc::CustomExternal:
+      ((CButton *)GetDlgItem(IDC_RADIO_CUSTOM_BROWSER))->SetCheck(TRUE);
+      GetDlgItem(IDC_EDIT_BROWSER)->EnableWindow(TRUE);
+      GetDlgItem(IDC_BROWSE_BROWSER)->EnableWindow(TRUE);
+      break;
+    default:
+      ASSERT(FALSE);
+  }
+  
+  SetDlgItemText(IDC_EDIT_BROWSER,pDoc->m_strBrowser);
+  
+  ((CButton *)GetDlgItem(IDC_RADIO_DECIMAL))->SetCheck(!pDoc->m_bHex);
+  ((CButton *)GetDlgItem(IDC_RADIO_DESCRIPTIVE_NAMES))->SetCheck(!pDoc->m_bMacroNames);
+  ((CButton *)GetDlgItem(IDC_RADIO_HEXADECIMAL))->SetCheck(pDoc->m_bHex);
+  ((CButton *)GetDlgItem(IDC_RADIO_MACRO_NAMES))->SetCheck(pDoc->m_bMacroNames);
+
+  UpdateData(FALSE);
+  return TRUE;  // return TRUE unless you set the focus to a control
+  // EXCEPTION: OCX Property Pages should return FALSE
+}
+
+void CViewOptions::OnRadioInternalBrowser() 
+{
+       
+  GetDlgItem(IDC_EDIT_BROWSER)->EnableWindow(FALSE);
+  GetDlgItem(IDC_BROWSE_BROWSER)->EnableWindow(FALSE);
+}
+
+void CViewOptions::OnRadioAssociatedBrowser() 
+{
+       
+  GetDlgItem(IDC_EDIT_BROWSER)->EnableWindow(FALSE);
+  GetDlgItem(IDC_BROWSE_BROWSER)->EnableWindow(FALSE);
+}
+
+void CViewOptions::OnRadioCustomBrowser() 
+{
+       
+  GetDlgItem(IDC_EDIT_BROWSER)->EnableWindow(TRUE);
+  GetDlgItem(IDC_BROWSE_BROWSER)->EnableWindow(TRUE);
+}
+
+void CViewOptions::OnBrowseBrowser() 
+{
+  CFileDialog dlg(TRUE, _T("exe"), _T(""), OFN_HIDEREADONLY | OFN_PATHMUSTEXIST,
+    _T("Executables (*.exe;*.bat;*.com)|*.exe;*.bat;*.com"));
+  if(IDOK==dlg.DoModal()){
+    SetDlgItemText(IDC_EDIT_BROWSER,dlg.GetPathName());
+  }
+  
+}
+
+void CViewOptions::OnFont() 
+{
+  LOGFONT lf;
+  CMainFrame *pMain=CConfigTool::GetMain();
+  CComboBox *pCombo=(CComboBox *)GetDlgItem(IDC_PANECOMBO);
+  int nSel=pCombo->GetCurSel();
+  CMainFrame::PaneType pane=(CMainFrame::PaneType)pCombo->GetItemData(nSel);
+  pMain->GetPaneFont(pane).GetLogFont(&lf);
+  CFontDialog dlg(&lf);
+  if(IDOK==dlg.DoModal()){
+    
+    m_FontChosen=pane;
+    memcpy(&m_lf,dlg.m_cf.lpLogFont, sizeof LOGFONT);
+  }
+}
+
+void CViewOptions::OnSelchangePanecombo() 
+{
+  if(CMainFrame::PaneTypeMax!=m_FontChosen){
+    CString str;
+    ((CComboBox *)GetDlgItem(IDC_PANECOMBO))->GetLBText(m_FontChosen,str);
+    if(IDYES==CUtils::MessageBoxFT(MB_YESNO,_T("Apply font changes to %s pane?"),(LPCTSTR)str)){
+      CMainFrame *pMain=CConfigTool::GetMain();
+      pMain->SetPaneFont(m_FontChosen, m_lf);
+    }
+    m_FontChosen=CMainFrame::PaneTypeMax;
+  }
+}
+
+CFileName CViewOptions::HeaderFileAssociation()
+{
+  // Compute the association with header (.h) files
+  const CFileName strFile(CFileName::GetTempPath()+_T("tmp.h"));
+  CFileName strExe;
+  CFile f;
+  if(f.Open(strFile,CFile::modeCreate|CFile::modeWrite)){
+    f.Close();
+    bool rc=((int)FindExecutable(strFile,_T("."),strExe.GetBuffer(MAX_PATH))>32);
+    strExe.ReleaseBuffer();
+    if(rc){
+      strExe=strExe.Tail();
+    } else {
+      strExe=_T("");
+    }
+    ::DeleteFile(strFile);
+  }
+  return strExe;
+
+}