📄 sgrnetworkdialogset.cpp
字号:
#include "SGRNetworkDialogset.hpp"
SGRNetworkDialogSet::SGRNetworkDialogSet(Void) : _source(null), _spp(null), _reference(null), _dialog(null)
{
return;
}
SGRNetworkDialogSet::~SGRNetworkDialogSet(Void)
{
_source = null;
_spp = null;
_reference = null;
_dialog = null;
return;
}
SFCError SGRNetworkDialogSet::Open(SFXAnsiStringConstRef url, Bool isConfirm, NetworkDialogSetSPP procedure, VoidPtr data)
{
SFCError error(SFERR_NO_ERROR);
_url = url;
_spp = procedure;
_reference = data;
if (isConfirm) { // 愙懕妋擣僟僀傾儘僌傪昞帵偡傞側傜
SFRMultiDialog::ParamRec param;
param.text = "僱僢僩儚乕僋愙懕傪奐巒偟傑偡偐丠";
param.ok = "偼偄";
param.cancel = "偄偄偊";
param.another = ""; // 嬻暥帤傪擖傟傞偲儃僞儞側偟
param.focus = SFRMultiDialog::FOCUS_OK, // 僼僅乕僇僗偺埵抲
param.image = SFBImageSmp(null); // 傾僀僐儞偺僀儊乕僕
if ((_dialog = ::new SFRMultiDialog(
SFXGraphics::GetDeviceRectangle().Deflate(20, 0).SetHeight(180).AddY(50),
"愙懕", param)) != null) {
SGRSoftkeyToolbox::OpenStandardDialog(_dialog, HANDLER_FUNCTION(OnDialog1));
// 嫮惂嵞昤夋
SFRApplication::GetInstance()->Invoke(
SFXEvent(SREVT_RESPONDER_RENDER, SRP16_RENDER_INVOKE, false));
}
else {
error = SFERR_NO_MEMORY;
}
} else {
if ((error = _http.Open(HttpNotifyEntry, this)) == SFERR_NO_ERROR) {
_http.SetRequestMethod("GET");
error = _http.Connect(_url.GetCString());
}
_spp(NOTIFY_CONNECT_START, error, _reference);
}
return error;
}
// 僟僀傾儘僌 僴儞僪儔偺掕媊
HANDLER_IMPLEMENT_VOIDDIALOG(SGRNetworkDialogSet, OnDialog1, result, dialog)
{
SFCError error(SFERR_NO_ERROR);
switch (result) {
case SRP16_OK: // OK 儃僞儞偑墴偝傟偨偲偒
SGRSoftkeyToolbox::CloseStandardDialog(dialog);
_dialog = ::new SFRFrameDialog(SFXGraphics::GetDeviceRectangle().Deflate(10, 50).SetHeight(100));
if (_dialog != null) {
// 僟僀傾儘僌偺昤夋僴儞僪儔傪搊榐
error = _dialog->RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT,
HANDLER_BEFORE, HANDLER_FUNCTION(OnDialogRender));
if (error == SFERR_NO_ERROR) {
SGRSoftkeyToolbox::OpenStandardDialog(_dialog, HANDLER_NULL);
}
}
_http.Open(HttpNotifyEntry, this);
_http.SetRequestMethod("GET");
_http.Connect(_url.GetCString());
_spp(NOTIFY_CONNECT_START, error, _reference);
break;
case SRP16_CANCEL: // CANCEL 儃僞儞偑墴偝傟偨偲偒
_spp(NOTIFY_CONNECT_CANCEL, SFERR_NO_ERROR, _reference);
SGRSoftkeyToolbox::CloseStandardDialog(dialog);
break;
}
}
Void SGRNetworkDialogSet::HttpNotify(SFUHttpConnection::NotifyEnum notify,
SFCError error)
{
unused(error);
// HTTP 儗僗億儞僗偑庢摼偱偒偨応崌
if (notify == SFUHttpConnection::NOTIFY_RESPONSE) {
TRACE(">> NOTIFY RESPONSE");
_source = _http.OpenInputStream(SourceNotifyEntry, this);
if (_source != null) {
TRACE(">> pre Fetch...");
_source->Fetch();
}
else {
TRACE(">> Cannot open source");
_spp(NOTIFY_ERROR, error, _reference);
}
}
else {
TRACE(">> HTTP NOTIFY ERROR.");
_spp(NOTIFY_ERROR, error, _reference);
}
TRACE(">> end HTTP NOTIFY");
}
Void SGRNetworkDialogSet::SourceNotify(SFUSourceStream::NotifyEnum notify, SFCError error)
{
unused(error);
TRACE(">> SOURCE NOTIFY");
if (notify == SFUSourceStream::NOTIFY_READ) {
while (_source->Available()) {
SFXAnsiString str;
*_source >> str;
_string << str;
}
// 嵞搙僨乕僞傪庢摼偡傞
if (_source->IsFetchable()) {
TRACE(">> pre Refetch...");
_source->Fetch();
} else {
TRACE(">> Cannot Fetch");
if (_source->IsEOS()) {
TRACE(">> end source");
_http.Close();
SGRSoftkeyToolbox::CloseStandardDialog(_dialog);
SFRApplication::GetInstance()->Invoke(
SFXEvent(SREVT_RESPONDER_RENDER, SRP16_RENDER_INVOKE, true));
_spp(NOTIFY_CONNECT_END, error, _reference);
}
}
}
else {
TRACE(">> SOURCE NOTIFY ERROR");
_spp(NOTIFY_ERROR, error, _reference);
}
TRACE(">> end SOURCE NOTIFY");
}
HANDLER_IMPLEMENT_VOIDRENDER(SGRNetworkDialogSet, OnDialogRender, graphics) {
graphics->FillRectangle(SFXGraphics::GetDeviceRectangle(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00));
graphics->DrawString(
"愙懕拞乧", SFXGraphics::GetDeviceRectangle().Deflate(10, 10), SFXRGBColor(0, 0, 0, 0),
IDF_ALIGN_LEFT | IDF_ALIGN_MIDDLE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -