/**************************************************************************** * * wxWindows HTML Applet Package * * Copyright (C) 1991-2001 SciTech Software, Inc. * All rights reserved. * * ====================================================================== * |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW| * | | * |This copyrighted computer code is a proprietary trade secret of | * |SciTech Software, Inc., located at 505 Wall Street, Chico, CA 95928 | * |USA (www.scitechsoft.com). ANY UNAUTHORIZED POSSESSION, USE, | * |VIEWING, COPYING, MODIFICATION OR DISSEMINATION OF THIS CODE IS | * |STRICTLY PROHIBITED BY LAW. Unless you have current, express | * |written authorization from SciTech to possess or use this code, you | * |may be subject to civil and/or criminal penalties. | * | | * |If you received this code in error or you would like to report | * |improper use, please immediately contact SciTech Software, Inc. at | * |530-894-8400. | * | | * |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW| * ====================================================================== * * Language: ANSI C++ * Environment: Any * * Description: Main wxApplet class implementation * ****************************************************************************/ // For compilers that support precompilation #include "wx/wxprec.h" // Include private headers #include "monitorapplet.h" /*---------------------------- Global variables ---------------------------*/ // Implement the dynamic class so it can be constructed dynamically IMPLEMENT_DYNAMIC_CLASS(MonitorApplet, wxApplet); // Event handler table. BEGIN_EVENT_TABLE(MonitorApplet, wxApplet) EVT_LISTBOX(ID_LISTBOX_MFTR, MonitorApplet::OnChange) EVT_LISTBOX(ID_LISTBOX_MDL, MonitorApplet::OnChange) END_EVENT_TABLE() // Include database of known monitors. Normally this would come from a // real database on disk, but for this simple example we hard code all // the values into a table. #include "monitors.c" /*------------------------- Implementation --------------------------------*/ /**************************************************************************** REMARKS: Constructor called during dynamic creation. Simple initialise all internal values for the class so that it can be properly created later via the virtual Create member function. ****************************************************************************/ MonitorApplet::MonitorApplet() { m_Mfr = NULL; m_Model = NULL; m_Data = NULL; } /**************************************************************************** REMARKS: Psuedo virtual constructor for the MonitorApplet class. ****************************************************************************/ bool MonitorApplet::Create( wxHtmlAppletWindow *parent, const wxSize& size, long style) { bool ret = wxApplet::Create(parent, size, style); if (ret) { // Read our cookie or create it if it does not exist if ((m_Data = (MonitorData*)parent->FindCookie(MONITOR_COOKIE_NAME)) == NULL) { m_Data = new MonitorData; memset(&m_Data->m_Monitor,0,sizeof(m_Data->m_Monitor)); parent->RegisterCookie(MONITOR_COOKIE_NAME,m_Data); } // Create all the controls and initialise them MonitorDialogFunc(this,true,true); if ((m_Mfr = new ComboBox(this , ID_LISTBOX_MFTR, ID_TEXTCTRL_MFTR)) == NULL) return false; if ((m_Model = new ComboBox(this , ID_LISTBOX_MDL, ID_TEXTCTRL_MDL)) == NULL) return false; ReadMfrList(); ReadModelList(true); } return ret; } /**************************************************************************** REMARKS: Destructor for the MonitorApplet class. ****************************************************************************/ MonitorApplet::~MonitorApplet() { delete m_Mfr; delete m_Model; } /**************************************************************************** REMARKS: Save the current state for the applet to our cookie ****************************************************************************/ void MonitorApplet::SaveCurrentState() { // Read currently selected strings into cookie strcpy(m_Data->m_Monitor.m_Mfr,m_Mfr->GetStringSelection()); strcpy(m_Data->m_Monitor.m_Model,m_Model->GetStringSelection()); } /**************************************************************************** REMARKS: Handles user navigation away from the applet via an HTML link ****************************************************************************/ void MonitorApplet::OnLinkClicked( const wxHtmlLinkInfo&) { SaveCurrentState(); } /**************************************************************************** REMARKS: Handles user navigation away from the applet via the history forward command ****************************************************************************/ void MonitorApplet::OnHistoryForward() { SaveCurrentState(); } /**************************************************************************** REMARKS: Handles user navigation away from the applet via the history back command ****************************************************************************/ void MonitorApplet::OnHistoryBack() { SaveCurrentState(); } /**************************************************************************** REMARKS: Handles inter applet communication messages ****************************************************************************/ void MonitorApplet::OnMessage( wxEvent& msg) { msg.Skip(true); } /**************************************************************************** REMARKS: ****************************************************************************/ void MonitorApplet::OnChange( wxCommandEvent &evt) { if (evt.GetId() == m_Mfr->GetListBoxId()) { m_Mfr->OnChange(evt); ReadModelList(true); } else if (evt.GetId() == m_Model->GetListBoxId()) { m_Model->OnChange(evt); } } /**************************************************************************** REMARKS: Updates the manufacturer list for the dialog box from the database. ****************************************************************************/ void MonitorApplet::ReadMfrList() { char buf[80] = ""; int i,selected = 0; MonitorEntry *m; m_Mfr->Clear(); for (m = m_Monitors,i = 0; m->m_Mfr[0] != 0; m++) { if (stricmp(buf,m->m_Mfr) != 0) { m_Mfr->Append(m->m_Mfr); if (stricmp(m_Data->m_Monitor.m_Mfr,m->m_Mfr) == 0) selected = i; strcpy(buf,m->m_Mfr); i++; } } m_Mfr->Select(selected); } /**************************************************************************** REMARKS: Updates the model list for the dialog box for the currently selected manufacturer type. ****************************************************************************/ void MonitorApplet::ReadModelList( bool selectCurrent) { int i,selected = 0; MonitorEntry *m; wxString mfrStr; mfrStr = m_Mfr->GetStringSelection(); m_Model->Clear(); for (m = m_Monitors,i = 0; m->m_Mfr[0] != 0; m++) { if (stricmp(mfrStr,m->m_Mfr) == 0) { m_Model->Append(m->m_Model); if (selectCurrent && stricmp(m_Data->m_Monitor.m_Model,m->m_Model) == 0) selected = i; i++; } } m_Model->Select(selected); }