]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/applet/monitorapplet.cpp
Initial check in of wxApplet code to CVS
[wxWidgets.git] / samples / applet / monitorapplet.cpp
diff --git a/samples/applet/monitorapplet.cpp b/samples/applet/monitorapplet.cpp
new file mode 100644 (file)
index 0000000..266de3a
--- /dev/null
@@ -0,0 +1,221 @@
+/****************************************************************************
+*
+*                                              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);
+}
+