⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpform.cxx

📁 pwlib源码库
💻 CXX
📖 第 1 页 / 共 5 页
字号:
      if (validValues.GetSize() > 0) {        PINDEX valid;        for (valid = 0; valid < validValues.GetSize(); valid++) {          if (thisValue == validValues[valid])            break;        }        if (valid >= validValues.GetSize()) {          text.Delete(pos, len);          selpos = P_MAX_INDEX;          if (finishAdjust != P_MAX_INDEX)            finishAdjust -= len;          if (end != P_MAX_INDEX)            end -= len;          len = 0;        }      }      if (selpos != P_MAX_INDEX) {        selpos += pos;        PINDEX sellen = 8;        if (text[selpos-1] == ' ') {          selpos--;          sellen++;        }        text.Delete(selpos, sellen);        if (finishAdjust != P_MAX_INDEX)          finishAdjust -= sellen;        if (end != P_MAX_INDEX)          end -= sellen;        len -= sellen;      }    }  }}PString PHTTPField::GetHTMLSelect(const PString & selection) const{  PString text = selection;  PStringList dummy1;  PINDEX dummy2 = P_MAX_INDEX;  AdjustSelectOptions(text, 0, P_MAX_INDEX, GetValue(FALSE), dummy1, dummy2);  return text;}void PHTTPField::GetHTMLHeading(PHTML &) const{}static int SplitConfigKey(const PString & fullName,                          PString & section, PString & key){  if (fullName.IsEmpty())    return 0;  PINDEX slash = fullName.FindLast('\\');  if (slash == 0 || slash >= fullName.GetLength()-1) {    key = fullName;    return 1;  }  section = fullName.Left(slash);  key = fullName.Mid(slash+1);  if (section.IsEmpty() || key.IsEmpty())    return 0;  return 2;}void PHTTPField::LoadFromConfig(PConfig & cfg){  PString section, key;  switch (SplitConfigKey(fullName, section, key)) {    case 1 :      SetValue(cfg.GetString(key, GetValue(TRUE)));      break;    case 2 :      SetValue(cfg.GetString(section, key, GetValue(TRUE)));  }}void PHTTPField::SaveToConfig(PConfig & cfg) const{  PString section, key;  switch (SplitConfigKey(fullName, section, key)) {    case 1 :      cfg.SetString(key, GetValue());      break;    case 2 :      cfg.SetString(section, key, GetValue());  }}BOOL PHTTPField::Validated(const PString &, PStringStream &) const{  return TRUE;}void PHTTPField::GetAllNames(PStringList & list) const{  list.AppendString(fullName);}void PHTTPField::SetAllValues(const PStringToString & data){  if (!baseName && data.Contains(fullName))    SetValue(data[fullName]);}BOOL PHTTPField::ValidateAll(const PStringToString & data, PStringStream & msg) const{  if (data.Contains(fullName))    return Validated(data[fullName], msg);  return TRUE;}//////////////////////////////////////////////////////////////////////////////// PHTTPCompositeFieldPHTTPCompositeField::PHTTPCompositeField(const char * nam,                                         const char * titl,                                         const char * hlp)  : PHTTPField(nam, titl, hlp){}void PHTTPCompositeField::SetName(const PString & newName){  if (fullName.IsEmpty() || newName.IsEmpty())    return;  for (PINDEX i = 0; i < fields.GetSize(); i++) {    PHTTPField & field = fields[i];    PString firstPartOfName = psprintf(fullName, i+1);    PString subFieldName;    if (field.GetName().Find(firstPartOfName) == 0)      subFieldName = field.GetName().Mid(firstPartOfName.GetLength());    else      subFieldName = field.GetName();    firstPartOfName = psprintf(newName, i+1);    if (subFieldName[0] == '\\' || firstPartOfName[firstPartOfName.GetLength()-1] == '\\')      field.SetName(firstPartOfName + subFieldName);    else      field.SetName(firstPartOfName & subFieldName);  }  PHTTPField::SetName(newName);}const PHTTPField * PHTTPCompositeField::LocateName(const PString & name) const{  if (fullName == name)    return this;  for (PINDEX i = 0; i < fields.GetSize(); i++) {    const PHTTPField * field = fields[i].LocateName(name);    if (field != NULL)      return field;  }  return NULL;}PHTTPField * PHTTPCompositeField::NewField() const{  PHTTPCompositeField * fld = new PHTTPCompositeField(baseName, title, help);  for (PINDEX i = 0; i < fields.GetSize(); i++)    fld->Append(fields[i].NewField());  return fld;}void PHTTPCompositeField::GetHTMLTag(PHTML & html) const{  for (PINDEX i = 0; i < fields.GetSize(); i++) {    if (i != 0 && html.Is(PHTML::InTable))      html << PHTML::TableData("NOWRAP ALIGN=CENTER");    fields[i].GetHTMLTag(html);  }}PString PHTTPCompositeField::GetHTMLInput(const PString & input) const{  return input;}void PHTTPCompositeField::ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const{  static PRegularExpression FieldName( "!--#form[ \t\r\n]+(-?[^-])+[ \t\r\n]+(-?[^-])+--"                                       "|"                                       "<[a-z]*[ \t\r\n][^>]*name[ \t\r\n]*=[ \t\r\n]*\"[^\"]*\"[^>]*>",                                       PRegularExpression::IgnoreCase);  PString name;  PINDEX pos, len;  while (start < finish && FindSpliceFieldName(text, start, pos, len, name)) {    if (pos > finish)      break;    for (PINDEX fld = 0; fld < fields.GetSize(); fld++) {      if (fields[fld].GetBaseName() *= name) {        SpliceAdjust(fields[fld].GetName(), text, pos, len, finish);        break;      }    }    start = pos + len;  }}void PHTTPCompositeField::GetHTMLHeading(PHTML & html) const{  html << PHTML::TableRow();  for (PINDEX i = 0; i < fields.GetSize(); i++)    html << PHTML::TableHeader() << fields[i].GetTitle();}PString PHTTPCompositeField::GetValue(BOOL dflt) const{  PStringStream value;  for (PINDEX i = 0; i < fields.GetSize(); i++)    value << fields[i].GetValue(dflt) << '\n';  return value;}void PHTTPCompositeField::SetValue(const PString &){  PAssertAlways(PLogicError);}void PHTTPCompositeField::LoadFromConfig(PConfig & cfg){  SetName(fullName);  for (PINDEX i = 0; i < GetSize(); i++)    fields[i].LoadFromConfig(cfg);}void PHTTPCompositeField::SaveToConfig(PConfig & cfg) const{  for (PINDEX i = 0; i < GetSize(); i++)    fields[i].SaveToConfig(cfg);}void PHTTPCompositeField::GetAllNames(PStringList & list) const{  for (PINDEX i = 0; i < GetSize(); i++)    fields[i].GetAllNames(list);}void PHTTPCompositeField::SetAllValues(const PStringToString & data){  for (PINDEX i = 0; i < fields.GetSize(); i++)    fields[i].SetAllValues(data);}BOOL PHTTPCompositeField::ValidateAll(const PStringToString & data,                                      PStringStream & msg) const{  for (PINDEX i = 0; i < fields.GetSize(); i++)    if (!fields[i].ValidateAll(data, msg))      return FALSE;  return TRUE;}PINDEX PHTTPCompositeField::GetSize() const{  return fields.GetSize();}void PHTTPCompositeField::Append(PHTTPField * fld){  fields.Append(fld);}//////////////////////////////////////////////////////////////////////////////// PHTTPSubFormPHTTPSubForm::PHTTPSubForm(const PString & subForm,                           const char * name,                           const char * title,                           PINDEX prim,                           PINDEX sec)  : PHTTPCompositeField(name, title, NULL),    subFormName(subForm){  primary = prim;  secondary = sec;}PHTTPField * PHTTPSubForm::NewField() const{  PHTTPCompositeField * fld = new PHTTPSubForm(subFormName, baseName, title, primary, secondary);  for (PINDEX i = 0; i < fields.GetSize(); i++)    fld->Append(fields[i].NewField());  return fld;}void PHTTPSubForm::GetHTMLTag(PHTML & html) const{  PString value = fields[primary].GetValue();  if (value.IsEmpty())    value = "New";  html << PHTML::HotLink(subFormName +            "?subformprefix=" + PURL::TranslateString(fullName, PURL::QueryTranslation))       << value << PHTML::HotLink();  if (secondary != P_MAX_INDEX)    html << PHTML::TableData("NOWRAP") << fields[secondary].GetValue();}void PHTTPSubForm::GetHTMLHeading(PHTML &) const{}//////////////////////////////////////////////////////////////////////////////// PHTTPFieldArrayPHTTPFieldArray::PHTTPFieldArray(PHTTPField * fld, BOOL ordered, PINDEX fixedSize)  : PHTTPCompositeField(fld->GetName(), fld->GetTitle(), fld->GetHelp()),    baseField(fld){  orderedArray = ordered;  canAddElements = fixedSize == 0;  SetSize(fixedSize);}PHTTPFieldArray::~PHTTPFieldArray(){  delete baseField;}void PHTTPFieldArray::SetSize(PINDEX newSize){  while (fields.GetSize() > newSize)    fields.RemoveAt(fields.GetSize()-1);  while (fields.GetSize() < newSize)    AddBlankField();  if (canAddElements)    AddBlankField();}PHTTPField * PHTTPFieldArray::NewField() const{  return new PHTTPFieldArray(baseField->NewField(), orderedArray);}static const char ArrayControlBox[] = " Array Control";static const char ArrayControlKeep[] = "Keep";static const char ArrayControlRemove[] = "Remove";static const char ArrayControlMoveUp[] = "Move Up";static const char ArrayControlMoveDown[] = "Move Down";static const char ArrayControlToTop[] = "To Top";static const char ArrayControlToBottom[] = "To Bottom";static const char ArrayControlIgnore[] = "Ignore";static const char ArrayControlAddTop[] = "Add Top";static const char ArrayControlAddBottom[] = "Add Bottom";static const char ArrayControlAdd[] = "Add";static PStringList GetArrayControlOptions(PINDEX fld, PINDEX size, BOOL orderedArray){  PStringList options;  if (fld >= size) {    options.AppendString(ArrayControlIgnore);    if (size == 0 || !orderedArray)      options.AppendString(ArrayControlAdd);    else {      options.AppendString(ArrayControlAddTop);      options.AppendString(ArrayControlAddBottom);    }  }  else {    options.AppendString(ArrayControlKeep);    options.AppendString(ArrayControlRemove);    if (orderedArray) {      if (fld > 0)        options.AppendString(ArrayControlMoveUp);      if (fld < size-1)        options.AppendString(ArrayControlMoveDown);      if (fld > 0)        options.AppendString(ArrayControlToTop);      if (fld < size-1)        options.AppendString(ArrayControlToBottom);    }  }  return options;}void PHTTPFieldArray::AddArrayControlBox(PHTML & html, PINDEX fld) const{  PStringList options = GetArrayControlOptions(fld, fields.GetSize()-1, orderedArray);  html << PHTML::Select(fields[fld].GetName() + ArrayControlBox);  for (PINDEX i = 0; i < options.GetSize(); i++)    html << PHTML::Option(i == 0 ? PHTML::Selected : PHTML::NotSelected) << options[i];  html << PHTML::Select();}void PHTTPFieldArray::GetHTMLTag(PHTML & html) const{  html << PHTML::TableStart("border=1 cellspacing=0 cellpadding=8");  baseField->GetHTMLHeading(html);  for (PINDEX i = 0; i < fields.GetSize(); i++) {    html << PHTML::TableRow() << PHTML::TableData("NOWRAP");    fields[i].GetHTMLTag(html);    html << PHTML::TableData("NOWRAP");    if (canAddElements)      AddArrayControlBox(html, i);  }  html << PHTML::TableEnd();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -