/**************************************************************************** * * wxWindows HTML Applet Package * * Copyright (C) 1991-2001 SciTech Software, Inc. * All rights reserved. * * ======================================================================== * * The contents of this file are subject to the wxWindows License * Version 3.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.wxwindows.org/licence3.txt * * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * ======================================================================== * * Language: ANSI C++ * Environment: Any * * Description: Main wxApplet class implementation * ****************************************************************************/ // For compilers that support precompilation #include "wx/wxprec.h" // Include private headers #include "wx/wx.h" #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 (wxStricmp(buf,m->m_Mfr) != 0) { m_Mfr->Append(m->m_Mfr); if (wxStricmp(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 (wxStricmp(mfrStr,m->m_Mfr) == 0) { m_Model->Append(m->m_Model); if (selectCurrent && wxStricmp(m_Data->m_Monitor.m_Model,m->m_Model) == 0) selected = i; i++; } } m_Model->Select(selected); }