home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-17 | 15.2 KB | 521 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: Content.cpp
- // Release Version: $ ODF 2 $
- //
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #include "Form.hpp"
-
- #ifndef CONTENT_H
- #include "Content.h"
- #endif
-
- #ifndef DEFINES_K
- #include "Defines.k"
- #endif
-
- // ----- Framework Includes -----
-
- #ifndef FWPART_H
- #include "FWPart.h"
- #endif
-
- #ifndef FWFRAME_H
- #include "FWFrame.h"
- #endif
-
- #ifndef FWKIND_H
- #include "FWKind.h"
- #endif
-
- #ifndef FWEDVIEW_H
- #include "FWEdView.h"
- #endif
-
- #ifndef FWBUTTON_H
- #include "FWButton.h"
- #endif
-
- #ifndef FWPOPUP_H
- #include "FWPopup.h"
- #endif
-
- #ifndef FWSUSINK_H
- #include "FWSUSink.h"
- #endif
-
- #ifndef FWSUUTIL_H
- #include "FWSUUtil.h"
- #endif
-
- // ----- Foundation Includes -----
-
- #ifndef FWSTREAM_H
- #include "FWStream.h"
- #endif
-
-
-
- //========================================================================================
- // Runtime Information
- //========================================================================================
-
- #ifdef FW_BUILD_MAC
- #pragma segment odfform
- #endif
-
- //========================================================================================
- // class CFormContent
- //========================================================================================
-
- FW_DEFINE_CLASS_M2(CFormContent, FW_CContent, FW_MReceiver)
- FW_DEFINE_AUTO(CFormContent)
-
- //----------------------------------------------------------------------------------------
- // CFormContent::CFormContent
- //----------------------------------------------------------------------------------------
-
- CFormContent::CFormContent(Environment* ev, FW_CPart* formPart) :
- FW_CContent(ev, formPart),
- fFirstName(),
- fLastName(),
- fMemberName(),
- fEMailAddress(),
- fComments(),
- fSubscribeCheckboxState(1),
- f14400RadioState(1),
- f28800RadioState(0),
- fFasterRadioState(0),
- fBrowseMenuItem(0),
- fOnlineMenuItem(0),
- fWordOfMouthRadioState(1),
- fHyperLinkRadioState(0),
- fMacTechRadioState(0),
- fMagazineRadioState(0),
- fOtherRadioState(0),
- fYesRadioState(1),
- fNoRadioState(0)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::ExternalizeKind
- //----------------------------------------------------------------------------------------
-
- void CFormContent::ExternalizeKind(Environment* ev,
- ODStorageUnit* storageUnit,
- FW_CKind* kind,
- FW_StorageKinds storageKind,
- FW_CPromise* promise,
- FW_CCloneInfo* cloneInfo)
- {
- FW_UNUSED(storageKind);
- FW_UNUSED(promise);
- FW_UNUSED(cloneInfo);
- if (kind->IsPartKind(ev))
- {
- FW_PStorageUnitSink sink(ev, storageUnit, kODPropContents, kind->GetType(ev));
- FW_CWritableStream stream(sink);
-
- stream << fFirstName << fLastName << fMemberName << fEMailAddress << fComments
- << fSubscribeCheckboxState << f14400RadioState << f28800RadioState
- << fFasterRadioState << fBrowseMenuItem << fOnlineMenuItem
- << fWordOfMouthRadioState << fHyperLinkRadioState << fMacTechRadioState
- << fMagazineRadioState << fOtherRadioState;
-
- FW_SUDeleteEndOfFocusedValue(ev, storageUnit);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::InternalizeKind
- //----------------------------------------------------------------------------------------
-
- FW_Boolean CFormContent::InternalizeKind(Environment* ev,
- ODStorageUnit* storageUnit,
- FW_CKind* kind,
- FW_StorageKinds storageKind,
- FW_CCloneInfo* cloneInfo)
- {
- FW_UNUSED(cloneInfo);
- FW_Boolean result = false;
-
- if (kind->IsPartKind(ev))
- {
- FW_PStorageUnitSink sink(ev, storageUnit, kODPropContents, kind->GetType(ev));
- FW_CReadableStream stream(sink);
-
- stream >> fFirstName >> fLastName >> fMemberName >> fEMailAddress >> fComments
- >> fSubscribeCheckboxState >> f14400RadioState >> f28800RadioState
- >> fFasterRadioState >> fBrowseMenuItem >> fOnlineMenuItem
- >> fWordOfMouthRadioState >> fHyperLinkRadioState >> fMacTechRadioState
- >> fMagazineRadioState >> fOtherRadioState;
-
- ExportToViews(ev, GetPart(ev)->GetLastActiveFrame(ev));
- result = true;
- }
- else
- FW_DEBUG_MESSAGE("CFormContent::InternalizeKind - Unknown type");
-
- if (result && storageKind != FW_kPartStorage)
- GetPart(ev)->Changed(ev);
-
- return result;
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::HandleNotification
- //----------------------------------------------------------------------------------------
-
- void CFormContent::HandleNotification(Environment* ev, const FW_CNotification& notification)
- {
- FW_MNotifier* notifier = notification.GetNotifier();
-
- switch (notification.GetMessage())
- {
- case FW_kChangedMsg:
- {
- FW_CEditView* editView = FW_DYNAMIC_CAST(FW_CEditView, notifier);
- FW_ASSERT(editView);
- GetEditViewText(ev, editView->GetFrame(ev), editView->GetViewID(ev));
- }
- break;
-
- case FW_kButtonPressedMsg:
- case FW_kRadioClusterMsg:
- case FW_kPopupClickedMsg:
- {
- FW_CControl* control = FW_DYNAMIC_CAST(FW_CControl, notifier);
- FW_ASSERT(control);
- GetControlValue(ev, control->GetFrame(ev), control->GetViewID(ev));
- }
- break;
-
- default:
- break;
- }
- }
-
-
- //----------------------------------------------------------------------------------------
- // CFormContent::AddViewInterests
- //----------------------------------------------------------------------------------------
-
- void CFormContent::AddViewInterests(Environment* ev, FW_CFrame* frame)
- {
- FW_CEditView* editView;
- FW_CButton* buttonView;
- FW_CPopupMenu* popupMenu;
-
- editView = FW_DYNAMIC_CAST(FW_CEditView, frame->FindViewByID(ev, kFirstNameEdViewID));
- FW_ASSERT(editView);
- AddInterest(FW_CInterest(editView, FW_kChangedMsg));
-
- editView = FW_DYNAMIC_CAST(FW_CEditView, frame->FindViewByID(ev, kLastNameEdViewID));
- FW_ASSERT(editView);
- AddInterest(FW_CInterest(editView, FW_kChangedMsg));
-
- editView = FW_DYNAMIC_CAST(FW_CEditView, frame->FindViewByID(ev, kMemberNameEdViewID));
- FW_ASSERT(editView);
- AddInterest(FW_CInterest(editView, FW_kChangedMsg));
-
- editView = FW_DYNAMIC_CAST(FW_CEditView, frame->FindViewByID(ev, kEMailEdViewID));
- FW_ASSERT(editView);
- AddInterest(FW_CInterest(editView, FW_kChangedMsg));
-
- editView = FW_DYNAMIC_CAST(FW_CEditView, frame->FindViewByID(ev, kCommentsEdViewID));
- FW_ASSERT(editView);
- AddInterest(FW_CInterest(editView, FW_kChangedMsg));
-
- buttonView = FW_DYNAMIC_CAST(FW_CButton, frame->FindViewByID(ev, k14400RadioID));
- FW_ASSERT(buttonView);
- AddInterest(FW_CInterest(buttonView, FW_kRadioClusterMsg));
-
- buttonView = FW_DYNAMIC_CAST(FW_CButton, frame->FindViewByID(ev, k28800RadioID));
- FW_ASSERT(buttonView);
- AddInterest(FW_CInterest(buttonView, FW_kRadioClusterMsg));
-
- buttonView = FW_DYNAMIC_CAST(FW_CButton, frame->FindViewByID(ev, kFasterRadioID));
- FW_ASSERT(buttonView);
- AddInterest(FW_CInterest(buttonView, FW_kRadioClusterMsg));
-
- popupMenu = FW_DYNAMIC_CAST(FW_CPopupMenu, frame->FindViewByID(ev, kBrowseTimePopupID));
- FW_ASSERT(popupMenu);
- AddInterest(FW_CInterest(popupMenu, FW_kPopupClickedMsg));
-
- popupMenu = FW_DYNAMIC_CAST(FW_CPopupMenu, frame->FindViewByID(ev, kOnlineTimePopupID));
- FW_ASSERT(popupMenu);
- AddInterest(FW_CInterest(popupMenu, FW_kPopupClickedMsg));
-
- buttonView = FW_DYNAMIC_CAST(FW_CButton, frame->FindViewByID(ev, kWordOfMouthRadioID));
- FW_ASSERT(buttonView);
- AddInterest(FW_CInterest(buttonView, FW_kRadioClusterMsg));
-
- buttonView = FW_DYNAMIC_CAST(FW_CButton, frame->FindViewByID(ev, kHyperLinkRadioID));
- FW_ASSERT(buttonView);
- AddInterest(FW_CInterest(buttonView, FW_kRadioClusterMsg));
-
- buttonView = FW_DYNAMIC_CAST(FW_CButton, frame->FindViewByID(ev, kMacTechRadioID));
- FW_ASSERT(buttonView);
- AddInterest(FW_CInterest(buttonView, FW_kRadioClusterMsg));
-
- buttonView = FW_DYNAMIC_CAST(FW_CButton, frame->FindViewByID(ev, kMagazineRadioID));
- FW_ASSERT(buttonView);
- AddInterest(FW_CInterest(buttonView, FW_kRadioClusterMsg));
-
- buttonView = FW_DYNAMIC_CAST(FW_CButton, frame->FindViewByID(ev, kOtherRadioID));
- FW_ASSERT(buttonView);
- AddInterest(FW_CInterest(buttonView, FW_kRadioClusterMsg));
-
- // we're not interested in the state of the yes/no buttons...yes is always
- // on and no is always off.
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::ImportFromViews
- //----------------------------------------------------------------------------------------
-
- void CFormContent::ImportFromViews(Environment* ev, FW_CFrame* frame)
- {
- FW_ASSERT(false);
- FW_ASSERT(frame != NULL);
- // may not have views if the frame is in limbo and views have been deleted
- if (frame->HasSubViews(ev))
- {
- GetEditViewText(ev, frame, kFirstNameEdViewID);
- GetEditViewText(ev, frame, kLastNameEdViewID);
- GetEditViewText(ev, frame, kMemberNameEdViewID);
- GetEditViewText(ev, frame, kEMailEdViewID);
- GetEditViewText(ev, frame, kCommentsEdViewID);
- GetEditViewText(ev, frame, kFirstNameEdViewID);
- GetEditViewText(ev, frame, kFirstNameEdViewID);
- GetEditViewText(ev, frame, kFirstNameEdViewID);
-
- GetControlValue(ev, frame, kSubscribeCheckID);
- GetControlValue(ev, frame, k14400RadioID);
- GetControlValue(ev, frame, k28800RadioID);
- GetControlValue(ev, frame, kFasterRadioID);
- GetControlValue(ev, frame, kBrowseTimePopupID);
- GetControlValue(ev, frame, kOnlineTimePopupID);
- GetControlValue(ev, frame, kWordOfMouthRadioID);
- GetControlValue(ev, frame, kHyperLinkRadioID);
- GetControlValue(ev, frame, kMacTechRadioID);
- GetControlValue(ev, frame, kMagazineRadioID);
- GetControlValue(ev, frame, kOtherRadioID);
- // we don't import the yes/no buttons...their values don't change
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::ExportToViews
- //----------------------------------------------------------------------------------------
-
- void CFormContent::ExportToViews(Environment* ev, FW_CFrame* frame)
- {
- if (frame && frame->HasSubViews(ev))
- {
- SetEditViewText(ev, frame, kFirstNameEdViewID);
- SetEditViewText(ev, frame, kLastNameEdViewID);
- SetEditViewText(ev, frame, kMemberNameEdViewID);
- SetEditViewText(ev, frame, kEMailEdViewID);
- SetEditViewText(ev, frame, kCommentsEdViewID);
- SetEditViewText(ev, frame, kFirstNameEdViewID);
- SetEditViewText(ev, frame, kFirstNameEdViewID);
- SetEditViewText(ev, frame, kFirstNameEdViewID);
-
- SetControlValue(ev, frame, kSubscribeCheckID);
- SetControlValue(ev, frame, k14400RadioID);
- SetControlValue(ev, frame, k28800RadioID);
- SetControlValue(ev, frame, kFasterRadioID);
- SetControlValue(ev, frame, kBrowseTimePopupID);
- SetControlValue(ev, frame, kOnlineTimePopupID);
- SetControlValue(ev, frame, kWordOfMouthRadioID);
- SetControlValue(ev, frame, kHyperLinkRadioID);
- SetControlValue(ev, frame, kMacTechRadioID);
- SetControlValue(ev, frame, kMagazineRadioID);
- SetControlValue(ev, frame, kOtherRadioID);
- SetControlValue(ev, frame, kYesRadioID);
- SetControlValue(ev, frame, kNoRadioID);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::GetEditViewText
- //----------------------------------------------------------------------------------------
-
- void CFormContent::GetEditViewText(Environment* ev,
- FW_CFrame* frame,
- ODID viewID)
- {
- FW_CString* string = ViewIDToStringAddress(viewID);
- FW_CEditView* editView = FW_DYNAMIC_CAST(FW_CEditView, frame->FindViewByID(ev, viewID));
- FW_ASSERT(editView);
-
- FW_CString editViewText = editView->GetText(ev);
- if (*string != editViewText)
- {
- *string = editViewText;
- GetPart(ev)->Changed(ev);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::SetEditViewText
- //----------------------------------------------------------------------------------------
-
- void CFormContent::SetEditViewText(Environment* ev,
- FW_CFrame* frame,
- ODID viewID)
- {
- FW_CString* string = ViewIDToStringAddress(viewID);
- FW_CEditView* editView = FW_DYNAMIC_CAST(FW_CEditView, frame->FindViewByID(ev, viewID));
- FW_ASSERT(editView);
- editView->SetText(ev, *string);
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::GetControlValue
- //----------------------------------------------------------------------------------------
-
- void CFormContent::GetControlValue(Environment* ev,
- FW_CFrame* frame,
- ODID viewID)
- {
- FW_ControlValue* value = ViewIDToControlValueAddress(viewID);
- FW_CControl* control = FW_DYNAMIC_CAST(FW_CControl, frame->FindViewByID(ev, viewID));
- FW_ASSERT(control);
- FW_ControlValue controlViewValue = control->GetValue(ev);
-
- if (*value != controlViewValue)
- {
- *value = controlViewValue;
- GetPart(ev)->Changed(ev);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::SetControlValue
- //----------------------------------------------------------------------------------------
-
- void CFormContent::SetControlValue(Environment* ev,
- FW_CFrame* frame,
- ODID viewID)
- {
- FW_ControlValue value = *(ViewIDToControlValueAddress(viewID));
- FW_CControl* control = FW_DYNAMIC_CAST(FW_CControl, frame->FindViewByID(ev, viewID));
- FW_ASSERT(control);
- control->SetValue(ev, value);
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::ViewIDToStringAddress
- //----------------------------------------------------------------------------------------
-
- FW_CString* CFormContent::ViewIDToStringAddress(ODID viewID)
- {
- FW_CString* string;
-
- switch (viewID)
- {
- case kFirstNameEdViewID:
- string = &fFirstName;
- break;
-
- case kLastNameEdViewID:
- string = &fLastName;
- break;
-
- case kMemberNameEdViewID:
- string = &fMemberName;
- break;
-
- case kEMailEdViewID:
- string = &fEMailAddress;
- break;
-
- case kCommentsEdViewID:
- string = &fComments;
- break;
-
- default:
- string = NULL;
- break;
- }
-
- FW_ASSERT(string);
- return string;
- }
-
- //----------------------------------------------------------------------------------------
- // CFormContent::ViewIDToControlValueAddress
- //----------------------------------------------------------------------------------------
-
- FW_ControlValue* CFormContent::ViewIDToControlValueAddress(ODID viewID)
- {
- FW_ControlValue* value;
-
- switch (viewID)
- {
- case kSubscribeCheckID:
- value = &fSubscribeCheckboxState;
- break;
-
- case k14400RadioID:
- value = &f14400RadioState;
- break;
-
- case k28800RadioID:
- value = &f28800RadioState;
- break;
-
- case kFasterRadioID:
- value = &fFasterRadioState;
- break;
-
- case kBrowseTimePopupID:
- value = &fBrowseMenuItem;
- break;
-
- case kOnlineTimePopupID:
- value = &fOnlineMenuItem;
- break;
-
- case kWordOfMouthRadioID:
- value = &fWordOfMouthRadioState;
- break;
-
- case kHyperLinkRadioID:
- value = &fHyperLinkRadioState;
- break;
-
- case kMacTechRadioID:
- value = &fMacTechRadioState;
- break;
-
- case kMagazineRadioID:
- value = &fMagazineRadioState;
- break;
-
- case kOtherRadioID:
- value = &fOtherRadioState;
- break;
-
- case kYesRadioID:
- value = &fYesRadioState;
- break;
-
- case kNoRadioID:
- value = &fNoRadioState;
- break;
-
- default:
- value = NULL;
- break;
- }
- FW_ASSERT(value);
- return value;
- }
-