wxWidgets/contrib/samples/applet/monitorapplet.cpp
Robert Roebling db157a6cf8 Made the applet code compile under GTK.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10017 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2001-05-06 17:41:54 +00:00

223 lines
7.9 KiB
C++

/****************************************************************************
*
* 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 "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);
}