home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / contrib / utils / wxrcedit / pe_adv.cpp < prev    next >
C/C++ Source or Header  |  2001-06-09  |  7KB  |  264 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Author:      Vaclav Slavik
  3. // Created:     2000/05/05
  4. // RCS-ID:      $Id: pe_adv.cpp,v 1.6 2001/06/09 22:16:40 VS Exp $
  5. // Copyright:   (c) 2000 Vaclav Slavik
  6. // Licence:     wxWindows licence
  7. /////////////////////////////////////////////////////////////////////////////
  8.  
  9. #ifdef __GNUG__
  10.     #pragma implementation "pe_adv.h"
  11. #endif
  12.  
  13. // For compilers that support precompilation, includes "wx/wx.h".
  14. #include "wx/wxprec.h"
  15.  
  16. #ifdef __BORLANDC__
  17.     #pragma hdrstop
  18. #endif
  19.  
  20. #include "wx/wx.h"
  21. #include "wx/xrc/xml.h"
  22. #include "wx/tokenzr.h"
  23. #include "wx/wx.h"
  24. #include "wx/dialog.h"
  25. #include "wx/checklst.h"
  26. #include "pe_basic.h"
  27. #include "pe_adv.h"
  28. #include "xmlhelpr.h"
  29. #include "editor.h"
  30. #include "preview.h"
  31. #include "wx/colordlg.h"
  32. #include "wx/config.h"
  33.  
  34.  
  35.  
  36. wxWindow* PropEditCtrlFont::CreateEditCtrl()
  37. {
  38.     PropEditCtrlTxt::CreateEditCtrl();
  39.     m_TextCtrl->Enable(FALSE);
  40.     return m_TextCtrl;
  41. }
  42.  
  43.  
  44.  
  45. wxTreeItemId PropEditCtrlFont::CreateTreeEntry(wxTreeItemId parent, const PropertyInfo& pinfo)
  46. {
  47.     wxTreeItemId ti = PropEditCtrlTxt::CreateTreeEntry(parent, pinfo);
  48.     m_PropFrame->AddSingleProp(PropertyInfo(_T("integer"), pinfo.Name + _T("/size"), wxEmptyString), &ti);
  49.     m_PropFrame->AddSingleProp(PropertyInfo(_T("text"), pinfo.Name + _T("/face"), wxEmptyString), &ti);
  50.     m_PropFrame->AddSingleProp(PropertyInfo(_T("choice"), pinfo.Name + _T("/style"), _T("normal,italic,slant")), &ti);
  51.     m_PropFrame->AddSingleProp(PropertyInfo(_T("choice"), pinfo.Name + _T("/weight"), _T("normal,light,bold")), &ti);
  52.     m_PropFrame->AddSingleProp(PropertyInfo(_T("choice"), pinfo.Name + _T("/family"), _T("default,decorative,roman,script,swiss,modern")), &ti);
  53.     m_PropFrame->AddSingleProp(PropertyInfo(_T("bool"), pinfo.Name + _T("/underlined"), wxEmptyString), &ti);
  54.     m_PropFrame->AddSingleProp(PropertyInfo(_T("text"), pinfo.Name + _T("/encoding"), wxEmptyString), &ti);
  55.     return ti;
  56. }
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63. BEGIN_EVENT_TABLE(PropEditCtrlChoice, PropEditCtrl)
  64.     EVT_CHOICE(-1, PropEditCtrlChoice::OnChoice)
  65. END_EVENT_TABLE()
  66.  
  67. wxWindow* PropEditCtrlChoice::CreateEditCtrl()
  68. {
  69.     m_Choice = new wxChoice(this, -1);
  70.     
  71.     return m_Choice;
  72. }
  73.  
  74.  
  75.         
  76. void PropEditCtrlChoice::ReadValue()
  77. {
  78.     wxStringTokenizer tkn(m_PropInfo->MoreInfo, _T(","));
  79.     m_Choice->Clear();
  80.     while (tkn.HasMoreTokens())
  81.         m_Choice->Append(tkn.GetNextToken());
  82.  
  83.     wxString sel =  XmlReadValue(GetNode(), m_PropInfo->Name);
  84.     if (!!sel) m_Choice->SetStringSelection(sel);
  85. }
  86.  
  87.  
  88.  
  89. void PropEditCtrlChoice::WriteValue()
  90. {
  91.     XmlWriteValue(GetNode(), m_PropInfo->Name,
  92.                   m_Choice->GetStringSelection());
  93. }
  94.  
  95.  
  96.  
  97. void PropEditCtrlChoice::OnChoice(wxCommandEvent& event)
  98. {
  99.     if (CanSave()) 
  100.     {
  101.         WriteValue();
  102.         EditorFrame::Get()->NotifyChanged(CHANGED_PROPS);    
  103.     }
  104. }
  105.  
  106.  
  107.  
  108.  
  109.  
  110. void PropEditCtrlColor::OnDetails()
  111. {
  112.     wxColour clr;
  113.     wxString txt = m_TextCtrl->GetValue();
  114.     long unsigned tmp;
  115.     
  116.     if (txt.Length() == 7 && txt[0u] == _T('#') &&
  117.         wxSscanf(txt.c_str(), _T("#%lX"), &tmp) == 1)
  118.         clr = wxColour((tmp & 0xFF0000) >> 16, 
  119.                        (tmp & 0x00FF00) >> 8, 
  120.                        (tmp & 0x0000FF));
  121.     clr = wxGetColourFromUser(NULL, clr);
  122.     if (clr.Ok())
  123.     {
  124.         txt.Printf(_T("#%02X%02X%02X"), clr.Red(), clr.Green(), clr.Blue());
  125.         m_TextCtrl->SetValue(txt);
  126.         WriteValue();
  127.     }
  128. }
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139. void PropEditCtrlFlags::OnDetails()
  140. {
  141.     wxString t,txt = m_TextCtrl->GetValue();
  142.     wxArrayString arr;
  143.     size_t i;
  144.     int j;
  145.     
  146.     wxStringTokenizer tkn(m_PropInfo->MoreInfo, _T(","));
  147.     while (tkn.HasMoreTokens())
  148.         arr.Add(tkn.GetNextToken());
  149.  
  150.     wxConfigBase *cfg = wxConfigBase::Get();
  151.     
  152.     wxDialog dlg(m_PropFrame, -1, _("Flags"), 
  153.             wxPoint(cfg->Read(_T("flagsdlg_x"), -1), cfg->Read(_T("flagsdlg_y"), -1)),
  154.             wxSize(cfg->Read(_T("flagsdlg_w"), 300), cfg->Read(_T("flagsdlg_h"), 300)),
  155.             wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
  156.     wxSizer *sz = new wxBoxSizer(wxVERTICAL);
  157.     wxCheckListBox *lbox = new wxCheckListBox(&dlg, -1);
  158.     sz->Add(lbox, 1, wxEXPAND | wxALL, 10);
  159.     wxSizer *sz2 = new wxBoxSizer(wxHORIZONTAL);
  160.     wxButton *btnok = new wxButton(&dlg, wxID_OK, _("OK"));
  161.     btnok->SetDefault();
  162.     sz2->Add(btnok);
  163.     sz2->Add(new wxButton(&dlg, wxID_CANCEL, _("Cancel")), 0, wxLEFT, 10);
  164.     sz->Add(sz2, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, 10);
  165.  
  166.     dlg.SetSizer(sz);
  167.     dlg.SetAutoLayout(TRUE);
  168.     dlg.Layout();
  169.     
  170.     for (i = 0; i < arr.GetCount(); i++)
  171.         lbox->Append(arr[i]);
  172.   
  173.     tkn.SetString(txt, _T("| "));
  174.     while (tkn.HasMoreTokens())
  175.     {
  176.         t = tkn.GetNextToken();
  177.         j = arr.Index(t);
  178.         if (j != wxNOT_FOUND) lbox->Check(j);
  179.     }
  180.             
  181.     
  182.     if (dlg.ShowModal() != wxID_OK) return;
  183.     
  184.     txt.Empty();
  185.     
  186.     for (i = 0; i < arr.GetCount(); i++)
  187.         if (lbox->IsChecked(i))
  188.             txt << arr[i] << _T('|');
  189.     if (!txt.IsEmpty()) txt.RemoveLast();
  190.  
  191.     m_TextCtrl->SetValue(txt);
  192.     WriteValue();
  193.  
  194.     cfg->Write(_T("flagsdlg_x"), (long)dlg.GetPosition().x);
  195.     cfg->Write(_T("flagsdlg_y"), (long)dlg.GetPosition().y);
  196.     cfg->Write(_T("flagsdlg_w"), (long)dlg.GetSize().x);
  197.     cfg->Write(_T("flagsdlg_h"), (long)dlg.GetSize().y);
  198. }
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207. wxString PropEditCtrlFile::GetFileTypes()
  208. {
  209.     return m_PropInfo->MoreInfo;
  210. }
  211.  
  212.  
  213.  
  214. void PropEditCtrlFile::OnDetails()
  215. {
  216.     wxString txt = m_TextCtrl->GetValue();
  217.     txt = wxPathOnly(EditorFrame::Get()->GetFileName()) + _T("/") + txt;
  218.     wxString name = wxFileSelector(_("Choose file"), 
  219.                                    wxPathOnly(txt),
  220.                                    wxFileNameFromPath(txt),
  221.                                    _T(""),
  222.                                    GetFileTypes(),
  223.                                    wxOPEN | wxFILE_MUST_EXIST);
  224.     if (!name) return;
  225.     
  226.     // compute relative path:
  227.     wxArrayString axrc, afile;
  228.     wxStringTokenizer tkn;
  229.     tkn.SetString(name, _T("/\\"));
  230.     while (tkn.HasMoreTokens()) afile.Add(tkn.GetNextToken());
  231.     tkn.SetString(EditorFrame::Get()->GetFileName(), _T("/\\"));
  232.     while (tkn.HasMoreTokens()) axrc.Add(tkn.GetNextToken());
  233.     
  234.     if (afile.GetCount() == 0 || axrc.GetCount() == 0)
  235.         txt = name;
  236.     else
  237.     {
  238.         while (axrc[0] == afile[0])
  239.         {
  240.             afile.Remove(0u);
  241.             axrc.Remove(0u);
  242.         }
  243.         size_t i;
  244.         txt.Empty();
  245.         for (i = 0; i < axrc.GetCount()-1/*w/o filename*/; i++) txt << _T("../");
  246.         for (i = 0; i < afile.GetCount(); i++) txt << afile[i] << _T("/");
  247.         txt.RemoveLast();
  248.     }
  249.  
  250.     m_TextCtrl->SetValue(txt);
  251.     WriteValue();
  252. }
  253.  
  254.  
  255.  
  256. wxString PropEditCtrlImageFile::GetFileTypes()
  257. {
  258.     return _("GIF files (*.gif)|*.gif|"
  259.              "JPEG files (*.jpg)|*.jpg|"
  260.              "PNG files (*.png)|*.png|"
  261.              "BMP files (*.bmp)|*.bmp|"
  262.              "All files (*)|*");
  263. }
  264.