716cd4107b
applet code (with changes copyright headers) as well as updates to the wxImage and dib.cpp modules to use virtual file systems so that we can load these objects from ZIP files correctly. The dib.cpp module was also extensively cleaned up (although the DIB writing code does not presently use file streams as we couldn't figure out if it was possible to write to a ZIP file stream). The code has been tested and functions correctly for both regular files and ZIP files. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10551 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
219 lines
7.2 KiB
C++
219 lines
7.2 KiB
C++
/****************************************************************************
|
|
*
|
|
* 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);
|
|
}
|
|
|