1/**************************************************************************** 2* 3* wxWindows HTML Applet Package 4* 5* Copyright (C) 1991-2001 SciTech Software, Inc. 6* All rights reserved. 7* 8* ======================================================================== 9* 10* The contents of this file are subject to the wxWindows License 11* Version 3.0 (the "License"); you may not use this file except in 12* compliance with the License. You may obtain a copy of the License at 13* http://www.wxwindows.org/licence3.txt 14* 15* Software distributed under the License is distributed on an 16* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 17* implied. See the License for the specific language governing 18* rights and limitations under the License. 19* 20* ======================================================================== 21* 22* Language: ANSI C++ 23* Environment: Any 24* 25* Description: Main wxApplet class implementation 26* 27****************************************************************************/ 28 29// For compilers that support precompilation 30#include "wx/wxprec.h" 31 32// Include private headers 33#include "wx/wx.h" 34#include "monitorapplet.h" 35 36/*---------------------------- Global variables ---------------------------*/ 37 38// Implement the dynamic class so it can be constructed dynamically 39IMPLEMENT_DYNAMIC_CLASS(MonitorApplet, wxApplet) 40 41// Event handler table. 42BEGIN_EVENT_TABLE(MonitorApplet, wxApplet) 43 EVT_LISTBOX(ID_LISTBOX_MFTR, MonitorApplet::OnChange) 44 EVT_LISTBOX(ID_LISTBOX_MDL, MonitorApplet::OnChange) 45END_EVENT_TABLE() 46 47// Include database of known monitors. Normally this would come from a 48// real database on disk, but for this simple example we hard code all 49// the values into a table. 50#include "monitors.c" 51 52/*------------------------- Implementation --------------------------------*/ 53 54/**************************************************************************** 55REMARKS: 56Constructor called during dynamic creation. Simple initialise all 57internal values for the class so that it can be properly created later 58via the virtual Create member function. 59****************************************************************************/ 60MonitorApplet::MonitorApplet() 61{ 62 m_Mfr = NULL; 63 m_Model = NULL; 64 m_Data = NULL; 65} 66 67/**************************************************************************** 68REMARKS: 69Psuedo virtual constructor for the MonitorApplet class. 70****************************************************************************/ 71bool MonitorApplet::Create( 72 wxHtmlAppletWindow *parent, 73 const wxSize& size, 74 long style) 75{ 76 bool ret = wxApplet::Create(parent, size, style); 77 if (ret) { 78 // Read our cookie or create it if it does not exist 79 if ((m_Data = (MonitorData*)parent->FindCookie(MONITOR_COOKIE_NAME)) == NULL) { 80 m_Data = new MonitorData; 81 memset(&m_Data->m_Monitor,0,sizeof(m_Data->m_Monitor)); 82 parent->RegisterCookie(MONITOR_COOKIE_NAME,m_Data); 83 } 84 85 // Create all the controls and initialise them 86 MonitorDialogFunc(this,true,true); 87 if ((m_Mfr = new ComboBox(this , ID_LISTBOX_MFTR, ID_TEXTCTRL_MFTR)) == NULL) 88 return false; 89 if ((m_Model = new ComboBox(this , ID_LISTBOX_MDL, ID_TEXTCTRL_MDL)) == NULL) 90 return false; 91 ReadMfrList(); 92 ReadModelList(true); 93 } 94 return ret; 95} 96 97/**************************************************************************** 98REMARKS: 99Destructor for the MonitorApplet class. 100****************************************************************************/ 101MonitorApplet::~MonitorApplet() 102{ 103 delete m_Mfr; 104 delete m_Model; 105} 106 107/**************************************************************************** 108REMARKS: 109Save the current state for the applet to our cookie 110****************************************************************************/ 111void MonitorApplet::SaveCurrentState() 112{ 113 // Read currently selected strings into cookie 114 strcpy(m_Data->m_Monitor.m_Mfr,m_Mfr->GetStringSelection()); 115 strcpy(m_Data->m_Monitor.m_Model,m_Model->GetStringSelection()); 116} 117 118/**************************************************************************** 119REMARKS: 120Handles user navigation away from the applet via an HTML link 121****************************************************************************/ 122void MonitorApplet::OnLinkClicked( 123 const wxHtmlLinkInfo&) 124{ 125 SaveCurrentState(); 126} 127 128/**************************************************************************** 129REMARKS: 130Handles user navigation away from the applet via the history forward command 131****************************************************************************/ 132void MonitorApplet::OnHistoryForward() 133{ 134 SaveCurrentState(); 135} 136 137/**************************************************************************** 138REMARKS: 139Handles user navigation away from the applet via the history back command 140****************************************************************************/ 141void MonitorApplet::OnHistoryBack() 142{ 143 SaveCurrentState(); 144} 145 146/**************************************************************************** 147REMARKS: 148Handles inter applet communication messages 149****************************************************************************/ 150void MonitorApplet::OnMessage( 151 wxEvent& msg) 152{ 153 msg.Skip(true); 154} 155 156/**************************************************************************** 157REMARKS: 158****************************************************************************/ 159void MonitorApplet::OnChange( 160 wxCommandEvent &evt) 161{ 162 if (evt.GetId() == m_Mfr->GetListBoxId()) { 163 m_Mfr->OnChange(evt); 164 ReadModelList(true); 165 } 166 else if (evt.GetId() == m_Model->GetListBoxId()) { 167 m_Model->OnChange(evt); 168 } 169} 170 171/**************************************************************************** 172REMARKS: 173Updates the manufacturer list for the dialog box from the database. 174****************************************************************************/ 175void MonitorApplet::ReadMfrList() 176{ 177 char buf[80] = ""; 178 int i,selected = 0; 179 MonitorEntry *m; 180 181 m_Mfr->Clear(); 182 for (m = m_Monitors,i = 0; m->m_Mfr[0] != 0; m++) { 183 if (wxStricmp(buf,m->m_Mfr) != 0) { 184 m_Mfr->Append(m->m_Mfr); 185 if (wxStricmp(m_Data->m_Monitor.m_Mfr,m->m_Mfr) == 0) 186 selected = i; 187 strcpy(buf,m->m_Mfr); 188 i++; 189 } 190 } 191 m_Mfr->Select(selected); 192} 193 194/**************************************************************************** 195REMARKS: 196Updates the model list for the dialog box for the currently selected 197manufacturer type. 198****************************************************************************/ 199void MonitorApplet::ReadModelList( 200 bool selectCurrent) 201{ 202 int i,selected = 0; 203 MonitorEntry *m; 204 wxString mfrStr; 205 206 mfrStr = m_Mfr->GetStringSelection(); 207 m_Model->Clear(); 208 for (m = m_Monitors,i = 0; m->m_Mfr[0] != 0; m++) { 209 if (wxStricmp(mfrStr,m->m_Mfr) == 0) { 210 m_Model->Append(m->m_Model); 211 if (selectCurrent && wxStricmp(m_Data->m_Monitor.m_Model,m->m_Model) == 0) 212 selected = i; 213 i++; 214 } 215 } 216 m_Model->Select(selected); 217} 218 219