From 62ef818ff0217d924930fa579d614e54d5d67d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E7=94=9F=E7=9F=B3=E4=B8=8A?= Date: Tue, 5 Sep 2017 11:30:31 +0800 Subject: [PATCH] v6.0.3 --- .../FineUI.Examples/Code/DataSourceUtil.cs | 1093 ++ FineUI_v6/FineUI.Examples/Code/PageBase.cs | 1194 ++ .../FineUI.Examples/FineUI.Examples.csproj | 3481 ++++ FineUI_v6/FineUI.Examples/Global.asax | 1 + FineUI_v6/FineUI.Examples/Global.asax.cs | 52 + .../Properties/AssemblyInfo.cs | 35 + FineUI_v6/FineUI.Examples/Web.config | 85 + .../FineUI.Examples/Web.config_for_VS2013 | 84 + .../FineUI.Examples/accordion/accordion.aspx | 47 + .../accordion/accordion.aspx.cs | 34 + .../accordion/accordion.aspx.designer.cs | 114 + .../accordion/accordion_autopostback.aspx | 43 + .../accordion/accordion_autopostback.aspx.cs | 28 + .../accordion_autopostback.aspx.designer.cs | 105 + .../accordion/accordion_fill.aspx | 47 + .../accordion/accordion_fill.aspx.cs | 34 + .../accordion/accordion_fill.aspx.designer.cs | 114 + .../accordion/accordion_links.aspx | 71 + .../accordion/accordion_links.aspx.cs | 25 + .../accordion_links.aspx.designer.cs | 88 + .../accordion/accordion_links_iframe.htm | 17 + .../accordion/accordion_tree.aspx | 45 + .../accordion/accordion_tree.aspx.cs | 46 + .../accordion/accordion_tree.aspx.designer.cs | 78 + .../accordion/accordion_tree_index.htm | 15 + .../FineUI.Examples/aspnet/TestWindow.aspx | 24 + .../FineUI.Examples/aspnet/TestWindow.aspx.cs | 22 + .../aspnet/TestWindow.aspx.designer.cs | 42 + FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx | 36 + .../FineUI.Examples/aspnet/aspnet.aspx.cs | 48 + .../aspnet/aspnet.aspx.designer.cs | 96 + .../aspnet/aspnet_literal.aspx | 26 + .../aspnet/aspnet_literal.aspx.cs | 30 + .../aspnet/aspnet_literal.aspx.designer.cs | 69 + .../FineUI.Examples/aspnet/ckeditor.aspx | 44 + .../FineUI.Examples/aspnet/ckeditor.aspx.cs | 62 + .../aspnet/ckeditor.aspx.designer.cs | 69 + .../FineUI.Examples/aspnet/fckeditor.aspx | 34 + .../FineUI.Examples/aspnet/fckeditor.aspx.cs | 38 + .../aspnet/fckeditor.aspx.designer.cs | 69 + .../FineUI.Examples/aspnet/fileupload.aspx | 36 + .../FineUI.Examples/aspnet/fileupload.aspx.cs | 29 + .../aspnet/fileupload.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/aspnet/test.aspx | 35 + FineUI_v6/FineUI.Examples/aspnet/test.aspx.cs | 32 + .../aspnet/test.aspx.designer.cs | 78 + FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx | 83 + .../FineUI.Examples/aspnet/ueditor.aspx.cs | 41 + .../aspnet/ueditor.aspx.designer.cs | 60 + .../FineUI.Examples/aspnet/ueditor_two.aspx | 151 + .../aspnet/ueditor_two.aspx.cs | 56 + .../aspnet/ueditor_two.aspx.designer.cs | 87 + .../basic/Captcha/CaptchaImage.cs | 198 + .../basic/Captcha/captcha.ashx | 1 + .../basic/Captcha/captcha.ashx.cs | 53 + FineUI_v6/FineUI.Examples/basic/hello.aspx | 19 + FineUI_v6/FineUI.Examples/basic/hello.aspx.cs | 26 + .../basic/hello.aspx.designer.cs | 51 + .../FineUI.Examples/basic/hello_aspnet.aspx | 13 + .../basic/hello_aspnet.aspx.cs | 21 + .../basic/hello_aspnet.aspx.designer.cs | 33 + FineUI_v6/FineUI.Examples/basic/login.aspx | 46 + FineUI_v6/FineUI.Examples/basic/login.aspx.cs | 31 + .../basic/login.aspx.designer.cs | 96 + .../FineUI.Examples/basic/login_captcha.aspx | 57 + .../basic/login_captcha.aspx.cs | 76 + .../basic/login_captcha.aspx.designer.cs | 123 + .../FineUI.Examples/basic/login_enterkey.aspx | 46 + .../basic/login_enterkey.aspx.cs | 31 + .../basic/login_enterkey.aspx.designer.cs | 96 + FineUI_v6/FineUI.Examples/button/button.aspx | 39 + .../FineUI.Examples/button/button.aspx.cs | 46 + .../button/button.aspx.designer.cs | 105 + .../FineUI.Examples/button/button_click.aspx | 24 + .../button/button_click.aspx.cs | 29 + .../button/button_click.aspx.designer.cs | 60 + .../FineUI.Examples/button/button_custom.aspx | 35 + .../button/button_custom.aspx.cs | 29 + .../button/button_custom.aspx.designer.cs | 51 + .../FineUI.Examples/button/button_icon.aspx | 32 + .../button/button_icon.aspx.cs | 28 + .../button/button_icon.aspx.designer.cs | 96 + .../button/button_linkbutton.aspx | 31 + .../button/button_linkbutton.aspx.cs | 30 + .../button/button_linkbutton.aspx.designer.cs | 69 + .../FineUI.Examples/button/button_menu.aspx | 37 + .../button/button_menu.aspx.cs | 55 + .../button/button_menu.aspx.designer.cs | 51 + .../button/button_menu_menuid.aspx | 38 + .../button/button_menu_menuid.aspx.cs | 22 + .../button_menu_menuid.aspx.designer.cs | 96 + FineUI_v6/FineUI.Examples/common/loading.aspx | 79 + .../FineUI.Examples/common/loading.aspx.cs | 41 + .../common/loading.aspx.designer.cs | 42 + FineUI_v6/FineUI.Examples/common/menu.xml | 823 + FineUI_v6/FineUI.Examples/common/source.aspx | 22 + .../FineUI.Examples/common/source.aspx.cs | 107 + .../common/source.aspx.designer.cs | 42 + .../FineUI.Examples/common/source_file.aspx | 37 + .../common/source_file.aspx.cs | 91 + .../common/source_file.aspx.designer.cs | 33 + FineUI_v6/FineUI.Examples/config/ajax.aspx | 46 + FineUI_v6/FineUI.Examples/config/ajax.aspx.cs | 102 + .../config/ajax.aspx.designer.cs | 33 + .../config/ajax_properties.txt | 360 + .../config/enable_gzip_iis6.htm | 63 + FineUI_v6/FineUI.Examples/config/icons.aspx | 24 + .../FineUI.Examples/config/icons.aspx.cs | 49 + .../config/icons.aspx.designer.cs | 24 + FineUI_v6/FineUI.Examples/config/icons.htm | 10 + .../config/install_toolbox.htm | 33 + FineUI_v6/FineUI.Examples/config/loading.aspx | 39 + .../FineUI.Examples/config/loading.aspx.cs | 41 + .../config/loading.aspx.designer.cs | 42 + .../config/modify_webconfig.htm | 183 + .../config/release_time_chart.htm | 193 + FineUI_v6/FineUI.Examples/default.aspx | 567 + FineUI_v6/FineUI.Examples/default.aspx.cs | 410 + .../FineUI.Examples/default.aspx.designer.cs | 348 + .../databind/dropdownlist_compositelist.aspx | 31 + .../dropdownlist_compositelist.aspx.cs | 93 + ...ropdownlist_compositelist.aspx.designer.cs | 78 + .../databind/dropdownlist_datatable.aspx | 28 + .../databind/dropdownlist_datatable.aspx.cs | 110 + .../dropdownlist_datatable.aspx.designer.cs | 78 + .../databind/dropdownlist_simplelist.aspx | 31 + .../databind/dropdownlist_simplelist.aspx.cs | 64 + .../dropdownlist_simplelist.aspx.designer.cs | 78 + .../dropdownlist/dropdownlist.aspx | 41 + .../dropdownlist/dropdownlist.aspx.cs | 40 + .../dropdownlist.aspx.designer.cs | 78 + .../dropdownlist_autopostback.aspx | 40 + .../dropdownlist_autopostback.aspx.cs | 50 + ...dropdownlist_autopostback.aspx.designer.cs | 78 + .../dropdownlist_autopostback_enableedit.aspx | 42 + ...opdownlist_autopostback_enableedit.aspx.cs | 50 + ...t_autopostback_enableedit.aspx.designer.cs | 78 + ...opostback_enableedit_noforceselection.aspx | 44 + ...stback_enableedit_noforceselection.aspx.cs | 50 + ...ableedit_noforceselection.aspx.designer.cs | 78 + .../dropdownlist/dropdownlist_emptytext.aspx | 41 + .../dropdownlist_emptytext.aspx.cs | 38 + .../dropdownlist_emptytext.aspx.designer.cs | 78 + .../dropdownlist_emptytext_enableedit.aspx | 41 + .../dropdownlist_emptytext_enableedit.aspx.cs | 38 + ...list_emptytext_enableedit.aspx.designer.cs | 78 + .../dropdownlist/dropdownlist_emptyvalue.aspx | 46 + .../dropdownlist_emptyvalue.aspx.cs | 50 + .../dropdownlist_emptyvalue.aspx.designer.cs | 78 + .../dropdownlist/dropdownlist_enableedit.aspx | 44 + .../dropdownlist_enableedit.aspx.cs | 38 + .../dropdownlist_enableedit.aspx.designer.cs | 78 + .../dropdownlist/dropdownlist_focus.aspx | 42 + .../dropdownlist/dropdownlist_focus.aspx.cs | 40 + .../dropdownlist_focus.aspx.designer.cs | 78 + .../dropdownlist_forceselection.aspx | 44 + .../dropdownlist_forceselection.aspx.cs | 38 + ...opdownlist_forceselection.aspx.designer.cs | 78 + .../dropdownlist_matchfieldwidth.aspx | 52 + .../dropdownlist_matchfieldwidth.aspx.cs | 40 + ...pdownlist_matchfieldwidth.aspx.designer.cs | 78 + .../dropdownlist_matchfieldwidth_right.aspx | 53 + ...dropdownlist_matchfieldwidth_right.aspx.cs | 40 + ...ist_matchfieldwidth_right.aspx.designer.cs | 87 + .../dropdownlist_multiselect_scroll.aspx | 52 + .../dropdownlist_multiselect_scroll.aspx.cs | 51 + ...wnlist_multiselect_scroll.aspx.designer.cs | 78 + .../dropdownlist_no_autopostback.aspx | 58 + .../dropdownlist_no_autopostback.aspx.cs | 45 + ...pdownlist_no_autopostback.aspx.designer.cs | 78 + ...pdownlist_no_forceselection_initvalue.aspx | 48 + ...wnlist_no_forceselection_initvalue.aspx.cs | 44 + ..._forceselection_initvalue.aspx.designer.cs | 87 + .../dropdownlist/dropdownlist_scroll.aspx | 51 + .../dropdownlist/dropdownlist_scroll.aspx.cs | 40 + .../dropdownlist_scroll.aspx.designer.cs | 78 + .../dropdownlist_simulate_tree.aspx | 31 + .../dropdownlist_simulate_tree.aspx.cs | 116 + ...ropdownlist_simulate_tree.aspx.designer.cs | 69 + .../dropdownlist/multiselect.aspx | 42 + .../dropdownlist/multiselect.aspx.cs | 51 + .../dropdownlist/multiselect.aspx.designer.cs | 78 + .../multiselect_autopostback.aspx | 42 + .../multiselect_autopostback.aspx.cs | 59 + .../multiselect_autopostback.aspx.designer.cs | 78 + .../multiselect_autopostback_enableedit.aspx | 43 + ...ultiselect_autopostback_enableedit.aspx.cs | 59 + ...t_autopostback_enableedit.aspx.designer.cs | 78 + .../dropdownlist/multiselect_enableedit.aspx | 44 + .../multiselect_enableedit.aspx.cs | 51 + .../multiselect_enableedit.aspx.designer.cs | 78 + .../dropdownlist/shengshixian.aspx | 37 + .../dropdownlist/shengshixian.aspx.cs | 91 + .../shengshixian.aspx.designer.cs | 87 + .../ajaxminifier/AjaxMinifier.exe | Bin 0 -> 552448 bytes .../FineUI.Examples/extjs_builder/build.bat | 151 + .../extjs_builder/build_only_js_css.bat | 136 + .../extjs_builder/js/F/F.ajax.js | 662 + .../extjs_builder/js/F/F.format.js | 45 + .../extjs_builder/js/F/F.simulateTree.js | 118 + .../extjs_builder/js/F/F.util.js | 1623 ++ .../extjs_builder/js/F/F.wnd.js | 418 + .../extjs_builder/js/F/extender.js | 2120 +++ .../extjs_builder/js/lang/f-lang-en.js | 49 + .../extjs_builder/js/lang/f-lang-pt_BR.js | 40 + .../extjs_builder/js/lang/f-lang-ru.js | 30 + .../extjs_builder/js/lang/f-lang-tr.js | 31 + .../extjs_builder/js/lang/f-lang-zh_CN.js | 58 + .../extjs_builder/js/lang/f-lang-zh_TW.js | 57 + .../extjs_builder/js/lib/Base64.js | 142 + .../extjs_builder/js/lib/json2.js | 480 + .../extjs_builder/js/ux/CheckColumn.js | 101 + .../extjs_builder/js/ux/FormViewport.js | 90 + .../js/ux/SimplePagingToolbar.js | 77 + .../extjs_builder/js/ux/TabCloseMenu.js | 214 + .../extjs_builder/res/FineUI.css | 204 + .../extjs_builder/res/Grid.css | 79 + .../extjs_builder/res/PageLoading.css | 113 + .../extjs_builder/res/Tree.css | 11 + .../res/images/accordion_hover.gif | Bin 0 -> 156 bytes .../res/images/accordion_link_hover.gif | Bin 0 -> 147 bytes .../res/images/accordion_link_hover2.gif | Bin 0 -> 149 bytes .../res/images/accordion_reset.gif | Bin 0 -> 156 bytes .../res/images/accordion_select.gif | Bin 0 -> 156 bytes .../extjs_builder/res/images/box.gif | Bin 0 -> 81 bytes .../extjs_builder/res/images/bullet_cross.png | Bin 0 -> 587 bytes .../extjs_builder/res/images/check-back1.gif | Bin 0 -> 531 bytes .../extjs_builder/res/images/check.gif | Bin 0 -> 96 bytes .../res/images/check_notuse__1.gif | Bin 0 -> 91 bytes .../res/images/check_notuse_back.gif | Bin 0 -> 180 bytes .../extjs_builder/res/images/checked.gif | Bin 0 -> 959 bytes .../res/images/checked_disabled.gif | Bin 0 -> 121 bytes .../extjs_builder/res/images/delete.gif | Bin 0 -> 545 bytes .../extjs_builder/res/images/dialog-ok.gif | Bin 0 -> 531 bytes .../extjs_builder/res/images/dialog-ok.png | Bin 0 -> 883 bytes .../extjs_builder/res/images/elbow-empty.gif | Bin 0 -> 59 bytes .../extjs_builder/res/images/elbow-end.gif | Bin 0 -> 66 bytes .../extjs_builder/res/images/elbow-line.gif | Bin 0 -> 66 bytes .../extjs_builder/res/images/elbow.gif | Bin 0 -> 68 bytes .../extjs_builder/res/images/loading_24.gif | Bin 0 -> 2545 bytes .../extjs_builder/res/images/loading_25.gif | Bin 0 -> 3494 bytes .../extjs_builder/res/images/loading_32.gif | Bin 0 -> 4176 bytes .../extjs_builder/res/images/loading_32_2.gif | Bin 0 -> 4178 bytes .../extjs_builder/res/images/loading_42.gif | Bin 0 -> 3992 bytes .../extjs_builder/res/images/loading_50.gif | Bin 0 -> 6494 bytes .../res/images/pagemenu-separator.gif | Bin 0 -> 55 bytes .../images/pagemenu_toolbar_background.gif | Bin 0 -> 153 bytes .../extjs_builder/res/images/s.gif | Bin 0 -> 43 bytes .../extjs_builder/res/images/tick.png | Bin 0 -> 537 bytes .../extjs_builder/res/images/uncheck.gif | Bin 0 -> 131 bytes .../extjs_builder/res/images/unchecked.gif | Bin 0 -> 941 bytes .../res/images/unchecked_disabled.gif | Bin 0 -> 115 bytes .../extjs_builder/res/theme-classic.css | 18 + .../extjs_builder/res/theme-crisp.css | 38 + .../extjs_builder/res/theme-gray.css | 11 + .../extjs_builder/res/theme-neptune.css | 132 + .../extjs_builder/res/theme-triton.css | 45 + .../FineUI.Examples/extjs_builder/version.txt | 1 + .../extjs_builder/如何自行创建extjs目录.txt | 6 + FineUI_v6/FineUI.Examples/favicon.ico | Bin 0 -> 7886 bytes FineUI_v6/FineUI.Examples/form/calendar.aspx | 24 + .../FineUI.Examples/form/calendar.aspx.cs | 38 + .../form/calendar.aspx.designer.cs | 60 + .../form/calendar_mindate.aspx | 24 + .../form/calendar_mindate.aspx.cs | 40 + .../form/calendar_mindate.aspx.designer.cs | 60 + FineUI_v6/FineUI.Examples/form/checkbox.aspx | 32 + .../FineUI.Examples/form/checkbox.aspx.cs | 35 + .../form/checkbox.aspx.designer.cs | 87 + .../FineUI.Examples/form/checkboxlist.aspx | 90 + .../FineUI.Examples/form/checkboxlist.aspx.cs | 111 + .../form/checkboxlist.aspx.designer.cs | 132 + .../form/checkboxlist_update.aspx | 74 + .../form/checkboxlist_update.aspx.cs | 243 + .../form/checkboxlist_update.aspx.designer.cs | 159 + .../FineUI.Examples/form/datepicker.aspx | 32 + .../FineUI.Examples/form/datepicker.aspx.cs | 26 + .../form/datepicker.aspx.designer.cs | 78 + .../form/datepicker_autopostback.aspx | 71 + .../form/datepicker_autopostback.aspx.cs | 69 + .../datepicker_autopostback.aspx.designer.cs | 123 + .../form/datepicker_range.aspx | 29 + .../form/datepicker_range.aspx.cs | 25 + .../form/datepicker_range.aspx.designer.cs | 69 + .../FineUI.Examples/form/fileupload.aspx | 35 + .../FineUI.Examples/form/fileupload.aspx.cs | 50 + .../form/fileupload.aspx.designer.cs | 78 + .../form/fileupload_autopostback.aspx | 48 + .../form/fileupload_autopostback.aspx.cs | 68 + .../fileupload_autopostback.aspx.designer.cs | 96 + .../form/fileupload_toolbar.aspx | 53 + .../form/fileupload_toolbar.aspx.cs | 68 + .../form/fileupload_toolbar.aspx.designer.cs | 87 + FineUI_v6/FineUI.Examples/form/form.aspx | 108 + FineUI_v6/FineUI.Examples/form/form.aspx.cs | 36 + .../form/form.aspx.designer.cs | 195 + .../form/form_center_button.aspx | 67 + .../form/form_center_button.aspx.cs | 28 + .../form/form_center_button.aspx.designer.cs | 105 + .../form/form_columnwidths.aspx | 84 + .../form/form_columnwidths.aspx.cs | 27 + .../form/form_columnwidths.aspx.designer.cs | 159 + .../FineUI.Examples/form/form_compare.aspx | 53 + .../FineUI.Examples/form/form_compare.aspx.cs | 23 + .../form/form_compare.aspx.designer.cs | 132 + .../FineUI.Examples/form/form_disabled.aspx | 145 + .../form/form_disabled.aspx.cs | 111 + .../form/form_disabled.aspx.designer.cs | 258 + .../FineUI.Examples/form/form_dynamic.aspx | 31 + .../FineUI.Examples/form/form_dynamic.aspx.cs | 69 + .../form/form_dynamic.aspx.designer.cs | 60 + .../FineUI.Examples/form/form_hide_field.aspx | 95 + .../form/form_hide_field.aspx.cs | 49 + .../form/form_hide_field.aspx.designer.cs | 195 + .../FineUI.Examples/form/form_labelwidth.aspx | 51 + .../form/form_labelwidth.aspx.cs | 27 + .../form/form_labelwidth.aspx.designer.cs | 96 + .../FineUI.Examples/form/form_longlabel.aspx | 28 + .../form/form_longlabel.aspx.cs | 26 + .../form/form_longlabel.aspx.designer.cs | 87 + .../FineUI.Examples/form/form_reset.aspx | 120 + .../FineUI.Examples/form/form_reset.aspx.cs | 38 + .../form/form_reset.aspx.designer.cs | 222 + .../FineUI.Examples/form/form_textalign.aspx | 34 + .../form/form_textalign.aspx.cs | 26 + .../form/form_textalign.aspx.designer.cs | 78 + .../FineUI.Examples/form/form_validate.aspx | 28 + .../form/form_validate.aspx.cs | 29 + .../form/form_validate.aspx.designer.cs | 69 + .../FineUI.Examples/form/htmleditor.aspx | 28 + .../FineUI.Examples/form/htmleditor.aspx.cs | 29 + .../form/htmleditor.aspx.designer.cs | 78 + FineUI_v6/FineUI.Examples/form/hyperlink.aspx | 25 + .../FineUI.Examples/form/hyperlink.aspx.cs | 25 + .../form/hyperlink.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/form/image.aspx | 31 + FineUI_v6/FineUI.Examples/form/image.aspx.cs | 35 + .../form/image.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/form/label.aspx | 34 + FineUI_v6/FineUI.Examples/form/label.aspx.cs | 23 + .../form/label.aspx.designer.cs | 78 + .../form/layout_center_label.aspx | 66 + .../form/layout_center_label.aspx.cs | 28 + .../form/layout_center_label.aspx.designer.cs | 105 + .../FineUI.Examples/form/layout_checkout.aspx | 123 + .../form/layout_checkout.aspx.cs | 25 + .../form/layout_checkout.aspx.designer.cs | 303 + .../form/layout_contactus.aspx | 47 + .../form/layout_contactus.aspx.cs | 17 + .../form/layout_contactus.aspx.designer.cs | 123 + .../form/layout_multiline_buttons.aspx | 52 + .../form/layout_multiline_buttons.aspx.cs | 28 + .../layout_multiline_buttons.aspx.designer.cs | 123 + .../FineUI.Examples/form/layout_panel.aspx | 57 + .../FineUI.Examples/form/layout_panel.aspx.cs | 17 + .../form/layout_panel.aspx.designer.cs | 150 + .../FineUI.Examples/form/layout_panel2.aspx | 79 + .../form/layout_panel2.aspx.cs | 23 + .../form/layout_panel2.aspx.designer.cs | 204 + .../form/layout_panel_column.aspx | 78 + .../form/layout_panel_column.aspx.cs | 23 + .../form/layout_panel_column.aspx.designer.cs | 204 + FineUI_v6/FineUI.Examples/form/numberbox.aspx | 29 + .../FineUI.Examples/form/numberbox.aspx.cs | 27 + .../form/numberbox.aspx.designer.cs | 87 + .../FineUI.Examples/form/radiobutton.aspx | 46 + .../FineUI.Examples/form/radiobutton.aspx.cs | 70 + .../form/radiobutton.aspx.designer.cs | 132 + .../FineUI.Examples/form/radiobuttonlist.aspx | 85 + .../form/radiobuttonlist.aspx.cs | 98 + .../form/radiobuttonlist.aspx.designer.cs | 141 + .../form/radiobuttonlist_update.aspx | 73 + .../form/radiobuttonlist_update.aspx.cs | 237 + .../radiobuttonlist_update.aspx.designer.cs | 159 + .../form/textarea_autogrow.aspx | 25 + .../form/textarea_autogrow.aspx.cs | 18 + .../form/textarea_autogrow.aspx.designer.cs | 60 + FineUI_v6/FineUI.Examples/form/textbox.aspx | 31 + .../FineUI.Examples/form/textbox.aspx.cs | 24 + .../form/textbox.aspx.designer.cs | 87 + .../form/textbox_autopostback.aspx | 38 + .../form/textbox_autopostback.aspx.cs | 31 + .../textbox_autopostback.aspx.designer.cs | 96 + .../FineUI.Examples/form/timepicker.aspx | 32 + .../FineUI.Examples/form/timepicker.aspx.cs | 34 + .../form/timepicker.aspx.designer.cs | 78 + FineUI_v6/FineUI.Examples/form/tooltip.aspx | 29 + .../FineUI.Examples/form/tooltip.aspx.cs | 18 + .../form/tooltip.aspx.designer.cs | 69 + .../FineUI.Examples/form/triggerbox.aspx | 29 + .../FineUI.Examples/form/triggerbox.aspx.cs | 31 + .../form/triggerbox.aspx.designer.cs | 69 + .../form/triggerbox_triggerboxurl.aspx | 35 + .../form/triggerbox_triggerboxurl.aspx.cs | 59 + .../triggerbox_triggerboxurl.aspx.designer.cs | 78 + .../FineUI.Examples/form/twintriggerbox.aspx | 23 + .../form/twintriggerbox.aspx.cs | 45 + .../form/twintriggerbox.aspx.designer.cs | 51 + FineUI_v6/FineUI.Examples/grid/grid.aspx | 36 + FineUI_v6/FineUI.Examples/grid/grid.aspx.cs | 39 + .../grid/grid.aspx.designer.cs | 42 + .../FineUI.Examples/grid/grid_aspnet.aspx | 36 + .../FineUI.Examples/grid/grid_aspnet.aspx.cs | 42 + .../grid/grid_aspnet.aspx.designer.cs | 33 + .../grid/grid_aspnet_rowdatabound.aspx | 36 + .../grid/grid_aspnet_rowdatabound.aspx.cs | 55 + .../grid_aspnet_rowdatabound.aspx.designer.cs | 33 + .../FineUI.Examples/grid/grid_backup.aspx | 38 + .../FineUI.Examples/grid/grid_backup.aspx.cs | 40 + .../grid/grid_backup.aspx.designer.cs | 51 + .../grid/grid_centercolumn.aspx | 46 + .../grid/grid_centercolumn.aspx.cs | 41 + .../grid/grid_centercolumn.aspx.designer.cs | 60 + .../FineUI.Examples/grid/grid_checkall.aspx | 48 + .../grid/grid_checkall.aspx.cs | 72 + .../grid/grid_checkall.aspx.designer.cs | 87 + .../grid_checkall_keepcurrentselection.aspx | 48 + ...grid_checkall_keepcurrentselection.aspx.cs | 70 + ...kall_keepcurrentselection.aspx.designer.cs | 87 + .../grid/grid_checkall_only.aspx | 44 + .../grid/grid_checkall_only.aspx.cs | 57 + .../grid/grid_checkall_only.aspx.designer.cs | 69 + .../grid/grid_checkall_singleselect.aspx | 47 + .../grid/grid_checkall_singleselect.aspx.cs | 70 + ...rid_checkall_singleselect.aspx.designer.cs | 87 + .../grid/grid_checkboxfield.aspx | 42 + .../grid/grid_checkboxfield.aspx.cs | 81 + .../grid/grid_checkboxfield.aspx.designer.cs | 69 + .../grid/grid_checkboxfield_autopostback.aspx | 42 + .../grid_checkboxfield_autopostback.aspx.cs | 87 + ...heckboxfield_autopostback.aspx.designer.cs | 69 + .../grid/grid_checkboxfield_checkall.aspx | 42 + .../grid/grid_checkboxfield_checkall.aspx.cs | 81 + ...id_checkboxfield_checkall.aspx.designer.cs | 69 + .../grid/grid_checkboxfield_rowcheckall.aspx | 57 + .../grid_checkboxfield_rowcheckall.aspx.cs | 103 + ...checkboxfield_rowcheckall.aspx.designer.cs | 105 + ..._checkboxfield_rowcheckall_clientside.aspx | 101 + ...eckboxfield_rowcheckall_clientside.aspx.cs | 75 + ...ld_rowcheckall_clientside.aspx.designer.cs | 105 + ...checkboxfield_rowcheckall_contextmenu.aspx | 101 + ...ckboxfield_rowcheckall_contextmenu.aspx.cs | 75 + ...d_rowcheckall_contextmenu.aspx.designer.cs | 96 + .../grid/grid_column_lines.aspx | 38 + .../grid/grid_column_lines.aspx.cs | 40 + .../grid/grid_column_lines.aspx.designer.cs | 51 + .../grid/grid_complex_property.aspx | 33 + .../grid/grid_complex_property.aspx.cs | 142 + .../grid_complex_property.aspx.designer.cs | 42 + .../grid/grid_dynamic_columns.aspx | 23 + .../grid/grid_dynamic_columns.aspx.cs | 83 + .../grid_dynamic_columns.aspx.designer.cs | 60 + .../grid/grid_dynamic_columns2.aspx | 23 + .../grid/grid_dynamic_columns2.aspx.cs | 94 + .../grid_dynamic_columns2.aspx.designer.cs | 60 + FineUI_v6/FineUI.Examples/grid/grid_edit.aspx | 90 + .../FineUI.Examples/grid/grid_edit.aspx.cs | 87 + .../grid/grid_edit.aspx.designer.cs | 96 + .../FineUI.Examples/grid/grid_edit_cart.aspx | 158 + .../grid/grid_edit_cart.aspx.cs | 125 + .../grid/grid_edit_cart.aspx.designer.cs | 69 + .../grid/grid_edit_checkboxlist.aspx | 65 + .../grid/grid_edit_checkboxlist.aspx.cs | 118 + .../grid_edit_checkboxlist.aspx.designer.cs | 87 + .../grid/grid_edit_compare.aspx | 130 + .../grid/grid_edit_compare.aspx.cs | 87 + .../grid/grid_edit_compare.aspx.designer.cs | 114 + .../grid/grid_edit_dropdownlist.aspx | 45 + .../grid/grid_edit_dropdownlist.aspx.cs | 85 + .../grid_edit_dropdownlist.aspx.designer.cs | 78 + .../grid/grid_edit_dropdownlist2.aspx | 43 + .../grid/grid_edit_dropdownlist2.aspx.cs | 93 + .../grid_edit_dropdownlist2.aspx.designer.cs | 78 + .../grid/grid_edit_dropdownlist_textbox.aspx | 69 + .../grid_edit_dropdownlist_textbox.aspx.cs | 90 + ...edit_dropdownlist_textbox.aspx.designer.cs | 87 + .../grid/grid_edit_dropdownlist_update.aspx | 62 + .../grid_edit_dropdownlist_update.aspx.cs | 108 + ..._edit_dropdownlist_update.aspx.designer.cs | 96 + .../grid/grid_edit_enterkey_h.aspx | 113 + .../grid/grid_edit_enterkey_h.aspx.cs | 111 + .../grid_edit_enterkey_h.aspx.designer.cs | 114 + .../grid/grid_edit_enterkey_v.aspx | 112 + .../grid/grid_edit_enterkey_v.aspx.cs | 111 + .../grid_edit_enterkey_v.aspx.designer.cs | 114 + .../grid/grid_edit_radiobuttonlist.aspx | 55 + .../grid/grid_edit_radiobuttonlist.aspx.cs | 86 + ...grid_edit_radiobuttonlist.aspx.designer.cs | 78 + .../grid/grid_edit_save_auto.aspx | 221 + .../grid/grid_edit_save_auto.aspx.cs | 153 + .../grid/grid_edit_save_auto.aspx.designer.cs | 204 + .../grid/grid_edit_save_manual.aspx | 112 + .../grid/grid_edit_save_manual.aspx.cs | 142 + .../grid_edit_save_manual.aspx.designer.cs | 186 + .../grid/grid_editor_cell.aspx | 79 + .../grid/grid_editor_cell.aspx.cs | 121 + .../grid/grid_editor_cell.aspx.designer.cs | 114 + .../grid/grid_editor_cell2.aspx | 85 + .../grid/grid_editor_cell2.aspx.cs | 87 + .../grid/grid_editor_cell2.aspx.designer.cs | 105 + .../grid/grid_editor_cell_afteredit.aspx | 77 + .../grid/grid_editor_cell_afteredit.aspx.cs | 122 + ...rid_editor_cell_afteredit.aspx.designer.cs | 105 + ...rid_editor_cell_afteredit_rowexpander.aspx | 89 + ..._editor_cell_afteredit_rowexpander.aspx.cs | 122 + ...ell_afteredit_rowexpander.aspx.designer.cs | 105 + ...grid_editor_cell_afteredit_selectcell.aspx | 85 + ...d_editor_cell_afteredit_selectcell.aspx.cs | 131 + ...cell_afteredit_selectcell.aspx.designer.cs | 105 + .../grid_editor_cell_client_validate.aspx | 135 + .../grid_editor_cell_client_validate.aspx.cs | 235 + ...itor_cell_client_validate.aspx.designer.cs | 141 + .../grid/grid_editor_cell_databind.aspx | 79 + .../grid/grid_editor_cell_databind.aspx.cs | 137 + ...grid_editor_cell_databind.aspx.designer.cs | 114 + .../grid/grid_editor_cell_delete.aspx | 93 + .../grid/grid_editor_cell_delete.aspx.cs | 178 + .../grid_editor_cell_delete.aspx.designer.cs | 123 + .../grid/grid_editor_cell_new.aspx | 92 + .../grid/grid_editor_cell_new.aspx.cs | 184 + .../grid_editor_cell_new.aspx.designer.cs | 132 + .../grid/grid_editor_cell_new_delete.aspx | 97 + .../grid/grid_editor_cell_new_delete.aspx.cs | 238 + ...id_editor_cell_new_delete.aspx.designer.cs | 141 + ...id_editor_cell_new_delete_rowexpander.aspx | 111 + ...editor_cell_new_delete_rowexpander.aspx.cs | 238 + ...ll_new_delete_rowexpander.aspx.designer.cs | 141 + .../grid_editor_cell_new_editcolumnid.aspx | 95 + .../grid_editor_cell_new_editcolumnid.aspx.cs | 184 + ...tor_cell_new_editcolumnid.aspx.designer.cs | 132 + .../grid/grid_editor_cell_newdelete.aspx | 97 + .../grid/grid_editor_cell_newdelete.aspx.cs | 232 + ...rid_editor_cell_newdelete.aspx.designer.cs | 141 + ...d_editor_cell_newdelete_getmergeddata.aspx | 97 + ...ditor_cell_newdelete_getmergeddata.aspx.cs | 138 + ...l_newdelete_getmergeddata.aspx.designer.cs | 141 + ...rid_editor_cell_newdelete_rowexpander.aspx | 111 + ..._editor_cell_newdelete_rowexpander.aspx.cs | 233 + ...ell_newdelete_rowexpander.aspx.designer.cs | 141 + .../grid/grid_editor_cell_paging.aspx | 80 + .../grid/grid_editor_cell_paging.aspx.cs | 127 + .../grid_editor_cell_paging.aspx.designer.cs | 114 + .../grid/grid_editor_cell_renderfunction.aspx | 91 + .../grid_editor_cell_renderfunction.aspx.cs | 122 + ...ditor_cell_renderfunction.aspx.designer.cs | 114 + ...id_editor_cell_renderfunction_complex.aspx | 94 + ...editor_cell_renderfunction_complex.aspx.cs | 121 + ...ll_renderfunction_complex.aspx.designer.cs | 114 + .../grid/grid_editor_cell_textarea.aspx | 93 + .../grid/grid_editor_cell_textarea.aspx.cs | 124 + ...grid_editor_cell_textarea.aspx.designer.cs | 123 + .../grid_editor_cell_updatecellvalue.aspx | 116 + .../grid_editor_cell_updatecellvalue.aspx.cs | 235 + ...itor_cell_updatecellvalue.aspx.designer.cs | 150 + ...tor_cell_updatecellvalue_hiddencolumn.aspx | 111 + ..._cell_updatecellvalue_hiddencolumn.aspx.cs | 121 + ...atecellvalue_hiddencolumn.aspx.designer.cs | 123 + ...id_editor_cell_updatecellvalue_noedit.aspx | 113 + ...editor_cell_updatecellvalue_noedit.aspx.cs | 235 + ...ll_updatecellvalue_noedit.aspx.designer.cs | 141 + .../grid/grid_editor_cell_updatesummary.aspx | 202 + .../grid_editor_cell_updatesummary.aspx.cs | 225 + ...editor_cell_updatesummary.aspx.designer.cs | 141 + .../FineUI.Examples/grid/grid_empty_text.aspx | 45 + .../grid/grid_empty_text.aspx.cs | 49 + .../grid/grid_empty_text.aspx.designer.cs | 69 + .../FineUI.Examples/grid/grid_excel.aspx | 47 + .../FineUI.Examples/grid/grid_excel.aspx.cs | 133 + .../grid/grid_excel.aspx.designer.cs | 69 + .../grid/grid_excel_aspnet.aspx | 44 + .../grid/grid_excel_aspnet.aspx.cs | 91 + .../grid/grid_excel_aspnet.aspx.designer.cs | 42 + .../grid/grid_excel_dblclick_download.aspx | 54 + .../grid/grid_excel_dblclick_download.aspx.cs | 89 + ...d_excel_dblclick_download.aspx.designer.cs | 69 + .../grid/grid_excel_dynamic_columns.aspx | 23 + .../grid/grid_excel_dynamic_columns.aspx.cs | 256 + ...rid_excel_dynamic_columns.aspx.designer.cs | 60 + .../grid/grid_excel_findcontrol.aspx | 50 + .../grid/grid_excel_findcontrol.aspx.cs | 134 + .../grid_excel_findcontrol.aspx.designer.cs | 78 + .../grid/grid_excel_groupfield.aspx | 56 + .../grid/grid_excel_groupfield.aspx.cs | 334 + .../grid_excel_groupfield.aspx.designer.cs | 78 + .../grid/grid_excel_selectcolumns.aspx | 50 + .../grid/grid_excel_selectcolumns.aspx.cs | 149 + .../grid_excel_selectcolumns.aspx.designer.cs | 78 + ...rid_excel_selectcolumns_iframe_window.aspx | 39 + ..._excel_selectcolumns_iframe_window.aspx.cs | 41 + ...lectcolumns_iframe_window.aspx.designer.cs | 87 + .../grid/grid_groupheader.aspx | 49 + .../grid/grid_groupheader.aspx.cs | 75 + .../grid/grid_groupheader.aspx.designer.cs | 42 + .../grid/grid_groupheader_hidden.aspx | 58 + .../grid/grid_groupheader_hidden.aspx.cs | 93 + .../grid_groupheader_hidden.aspx.designer.cs | 42 + .../grid/grid_groupheader_sort.aspx | 57 + .../grid/grid_groupheader_sort.aspx.cs | 93 + .../grid_groupheader_sort.aspx.designer.cs | 42 + .../grid/grid_groupheader_sort_hdmenu.aspx | 58 + .../grid/grid_groupheader_sort_hdmenu.aspx.cs | 93 + ...d_groupheader_sort_hdmenu.aspx.designer.cs | 42 + .../grid/grid_hdmenu_hidecolumn.aspx | 47 + .../grid/grid_hdmenu_hidecolumn.aspx.cs | 64 + .../grid_hdmenu_hidecolumn.aspx.designer.cs | 78 + .../grid/grid_hdmenu_sorting.aspx | 43 + .../grid/grid_hdmenu_sorting.aspx.cs | 60 + .../grid/grid_hdmenu_sorting.aspx.designer.cs | 69 + .../grid/grid_header_disablemenu.aspx | 37 + .../grid/grid_header_disablemenu.aspx.cs | 40 + .../grid_header_disablemenu.aspx.designer.cs | 51 + .../grid/grid_header_hide.aspx | 29 + .../grid/grid_header_hide.aspx.cs | 49 + .../grid/grid_header_hide.aspx.designer.cs | 60 + .../grid/grid_header_wrap.aspx | 42 + .../grid/grid_header_wrap.aspx.cs | 40 + .../grid/grid_header_wrap.aspx.designer.cs | 51 + .../grid/grid_hide_gridheader.aspx | 25 + .../grid/grid_hide_gridheader.aspx.cs | 49 + .../grid_hide_gridheader.aspx.designer.cs | 60 + .../FineUI.Examples/grid/grid_hidecolumn.aspx | 49 + .../grid/grid_hidecolumn.aspx.cs | 63 + .../grid/grid_hidecolumn.aspx.designer.cs | 78 + .../FineUI.Examples/grid/grid_iframe.aspx | 58 + .../FineUI.Examples/grid/grid_iframe.aspx.cs | 68 + .../grid/grid_iframe.aspx.designer.cs | 87 + .../grid/grid_iframe_window.aspx | 67 + .../grid/grid_iframe_window.aspx.cs | 49 + .../grid/grid_iframe_window.aspx.designer.cs | 177 + .../FineUI.Examples/grid/grid_line_wrap.aspx | 50 + .../grid/grid_line_wrap.aspx.cs | 40 + .../grid/grid_line_wrap.aspx.designer.cs | 51 + .../FineUI.Examples/grid/grid_lockcolumn.aspx | 39 + .../grid/grid_lockcolumn.aspx.cs | 40 + .../grid/grid_lockcolumn.aspx.designer.cs | 51 + .../grid/grid_lockcolumn_editor_cell_new.aspx | 88 + .../grid_lockcolumn_editor_cell_new.aspx.cs | 189 + ...ockcolumn_editor_cell_new.aspx.designer.cs | 123 + .../grid_lockcolumn_groupheader_sort.aspx | 58 + .../grid_lockcolumn_groupheader_sort.aspx.cs | 93 + ...ckcolumn_groupheader_sort.aspx.designer.cs | 42 + .../grid/grid_lockcolumn_line_wrap.aspx | 43 + .../grid/grid_lockcolumn_line_wrap.aspx.cs | 40 + ...grid_lockcolumn_line_wrap.aspx.designer.cs | 51 + .../grid/grid_lockcolumn_many_columns.aspx | 64 + .../grid/grid_lockcolumn_many_columns.aspx.cs | 77 + ...d_lockcolumn_many_columns.aspx.designer.cs | 51 + .../grid/grid_lockcolumn_rowexpander.aspx | 55 + .../grid/grid_lockcolumn_rowexpander.aspx.cs | 52 + ...id_lockcolumn_rowexpander.aspx.designer.cs | 69 + .../grid_lockcolumn_summary_scrollbar.aspx | 55 + .../grid_lockcolumn_summary_scrollbar.aspx.cs | 118 + ...kcolumn_summary_scrollbar.aspx.designer.cs | 78 + .../grid/grid_many_columns.aspx | 61 + .../grid/grid_many_columns.aspx.cs | 77 + .../grid/grid_many_columns.aspx.designer.cs | 51 + .../FineUI.Examples/grid/grid_newtab.aspx | 50 + .../FineUI.Examples/grid/grid_newtab.aspx.cs | 84 + .../grid/grid_newtab.aspx.designer.cs | 78 + .../grid/grid_newtab_hiderefresh.aspx | 63 + .../grid/grid_newtab_hiderefresh.aspx.cs | 86 + .../grid_newtab_hiderefresh.aspx.designer.cs | 78 + .../grid/grid_newtab_hiderefresh_window.aspx | 61 + .../grid_newtab_hiderefresh_window.aspx.cs | 35 + ...newtab_hiderefresh_window.aspx.designer.cs | 159 + .../grid/grid_newtab_hideupdate.aspx | 68 + .../grid/grid_newtab_hideupdate.aspx.cs | 98 + .../grid_newtab_hideupdate.aspx.designer.cs | 78 + .../grid/grid_newtab_hideupdate_window.aspx | 61 + .../grid_newtab_hideupdate_window.aspx.cs | 42 + ..._newtab_hideupdate_window.aspx.designer.cs | 159 + .../grid/grid_newtab_sametab.aspx | 50 + .../grid/grid_newtab_sametab.aspx.cs | 84 + .../grid/grid_newtab_sametab.aspx.designer.cs | 78 + .../grid/grid_newtab_window.aspx | 60 + .../grid/grid_newtab_window.aspx.cs | 35 + .../grid/grid_newtab_window.aspx.designer.cs | 150 + .../FineUI.Examples/grid/grid_pageitems.aspx | 57 + .../grid/grid_pageitems.aspx.cs | 79 + .../grid/grid_pageitems.aspx.designer.cs | 123 + .../grid/grid_pageitems_pagesize.aspx | 55 + .../grid/grid_pageitems_pagesize.aspx.cs | 80 + .../grid_pageitems_pagesize.aspx.designer.cs | 96 + .../grid_pageitems_pagesize_database.aspx | 53 + .../grid_pageitems_pagesize_database.aspx.cs | 102 + ...geitems_pagesize_database.aspx.designer.cs | 87 + .../grid/grid_pageitems_rowexpander.aspx | 67 + .../grid/grid_pageitems_rowexpander.aspx.cs | 54 + ...rid_pageitems_rowexpander.aspx.designer.cs | 96 + .../FineUI.Examples/grid/grid_paging.aspx | 42 + .../FineUI.Examples/grid/grid_paging.aspx.cs | 48 + .../grid/grid_paging.aspx.designer.cs | 69 + .../grid/grid_paging_aspnet.aspx | 33 + .../grid/grid_paging_aspnet.aspx.cs | 46 + .../grid/grid_paging_aspnet.aspx.designer.cs | 33 + .../grid/grid_paging_database.aspx | 44 + .../grid/grid_paging_database.aspx.cs | 90 + .../grid_paging_database.aspx.designer.cs | 69 + .../grid/grid_paging_database_bbar.aspx | 48 + .../grid/grid_paging_database_bbar.aspx.cs | 90 + ...grid_paging_database_bbar.aspx.designer.cs | 69 + .../grid/grid_paging_database_selection.aspx | 44 + .../grid_paging_database_selection.aspx.cs | 155 + ...paging_database_selection.aspx.designer.cs | 78 + .../grid/grid_paging_database_sorting.aspx | 45 + .../grid/grid_paging_database_sorting.aspx.cs | 109 + ...d_paging_database_sorting.aspx.designer.cs | 69 + .../grid/grid_paging_fineui.aspx | 36 + .../grid/grid_paging_fineui.aspx.cs | 44 + .../grid/grid_paging_fineui.aspx.designer.cs | 51 + .../grid/grid_paging_selection.aspx | 46 + .../grid/grid_paging_selection.aspx.cs | 125 + .../grid_paging_selection.aspx.designer.cs | 78 + .../grid/grid_paging_sorting.aspx | 46 + .../grid/grid_paging_sorting.aspx.cs | 64 + .../grid/grid_paging_sorting.aspx.designer.cs | 69 + .../grid/grid_prerowdatabound.aspx | 43 + .../grid/grid_prerowdatabound.aspx.cs | 83 + .../grid_prerowdatabound.aspx.designer.cs | 60 + .../grid/grid_prerowdatabound_cancelled.aspx | 45 + .../grid_prerowdatabound_cancelled.aspx.cs | 68 + ...prerowdatabound_cancelled.aspx.designer.cs | 60 + .../grid/grid_rowcheckall.aspx | 41 + .../grid/grid_rowcheckall.aspx.cs | 98 + .../grid/grid_rowcheckall.aspx.designer.cs | 69 + .../FineUI.Examples/grid/grid_rowclick.aspx | 35 + .../grid/grid_rowclick.aspx.cs | 46 + .../grid/grid_rowclick.aspx.designer.cs | 51 + .../FineUI.Examples/grid/grid_rowcolor.aspx | 95 + .../grid/grid_rowcolor.aspx.cs | 86 + .../grid/grid_rowcolor.aspx.designer.cs | 69 + .../FineUI.Examples/grid/grid_rowcommand.aspx | 43 + .../grid/grid_rowcommand.aspx.cs | 59 + .../grid/grid_rowcommand.aspx.designer.cs | 69 + .../grid/grid_rowcommand_download.aspx | 42 + .../grid/grid_rowcommand_download.aspx.cs | 74 + .../grid_rowcommand_download.aspx.designer.cs | 69 + .../grid/grid_rowcommand_paging.aspx | 51 + .../grid/grid_rowcommand_paging.aspx.cs | 64 + .../grid_rowcommand_paging.aspx.designer.cs | 69 + .../grid/grid_rowcommand_paging_database.aspx | 48 + .../grid_rowcommand_paging_database.aspx.cs | 99 + ...owcommand_paging_database.aspx.designer.cs | 69 + .../grid/grid_rowdatabound.aspx | 42 + .../grid/grid_rowdatabound.aspx.cs | 67 + .../grid/grid_rowdatabound.aspx.designer.cs | 60 + .../grid/grid_rowdoubleclick.aspx | 35 + .../grid/grid_rowdoubleclick.aspx.cs | 46 + .../grid/grid_rowdoubleclick.aspx.designer.cs | 51 + .../grid/grid_rowexpander.aspx | 55 + .../grid/grid_rowexpander.aspx.cs | 45 + .../grid/grid_rowexpander.aspx.designer.cs | 60 + .../grid/grid_rowexpander_expandall.aspx | 58 + .../grid/grid_rowexpander_expandall.aspx.cs | 71 + ...rid_rowexpander_expandall.aspx.designer.cs | 78 + .../grid/grid_rowexpander_expandall2.aspx | 71 + .../grid/grid_rowexpander_expandall2.aspx.cs | 71 + ...id_rowexpander_expandall2.aspx.designer.cs | 78 + .../grid/grid_rowexpander_expandall_js.aspx | 85 + .../grid_rowexpander_expandall_js.aspx.cs | 61 + ..._rowexpander_expandall_js.aspx.designer.cs | 69 + .../grid/grid_rowexpander_grid.aspx | 136 + .../grid/grid_rowexpander_grid.aspx.cs | 37 + .../grid_rowexpander_grid.aspx.designer.cs | 51 + .../grid/grid_rowexpander_grid_data.ashx | 1 + .../grid/grid_rowexpander_grid_data.ashx.cs | 74 + .../grid/grid_rownumber_align.aspx | 29 + .../grid/grid_rownumber_align.aspx.cs | 81 + .../grid_rownumber_align.aspx.designer.cs | 60 + .../grid/grid_rownumber_paging.aspx | 44 + .../grid/grid_rownumber_paging.aspx.cs | 48 + .../grid_rownumber_paging.aspx.designer.cs | 69 + .../grid/grid_rownumber_paging_database.aspx | 40 + .../grid_rownumber_paging_database.aspx.cs | 90 + ...rownumber_paging_database.aspx.designer.cs | 69 + .../grid/grid_rownumber_width.aspx | 29 + .../grid/grid_rownumber_width.aspx.cs | 81 + .../grid_rownumber_width.aspx.designer.cs | 60 + .../FineUI.Examples/grid/grid_rowselect.aspx | 42 + .../grid/grid_rowselect.aspx.cs | 54 + .../grid/grid_rowselect.aspx.designer.cs | 51 + .../grid/grid_simulate_tree.aspx | 24 + .../grid/grid_simulate_tree.aspx.cs | 100 + .../grid/grid_simulate_tree.aspx.designer.cs | 42 + .../grid_simulate_tree_database_paging.aspx | 25 + ...grid_simulate_tree_database_paging.aspx.cs | 145 + ...late_tree_database_paging.aspx.designer.cs | 42 + ...ate_tree_database_paging_dropdownlist.aspx | 29 + ..._tree_database_paging_dropdownlist.aspx.cs | 192 + ...abase_paging_dropdownlist.aspx.designer.cs | 51 + .../grid/grid_simulate_tree_paging.aspx | 24 + .../grid/grid_simulate_tree_paging.aspx.cs | 117 + ...grid_simulate_tree_paging.aspx.designer.cs | 42 + .../FineUI.Examples/grid/grid_sorting.aspx | 41 + .../FineUI.Examples/grid/grid_sorting.aspx.cs | 57 + .../grid/grid_sorting.aspx.designer.cs | 69 + .../grid/grid_sorting_nosortfield.aspx | 42 + .../grid/grid_sorting_nosortfield.aspx.cs | 61 + .../grid_sorting_nosortfield.aspx.designer.cs | 69 + .../grid/grid_style_columnclass.aspx | 63 + .../grid/grid_style_columnclass.aspx.cs | 64 + .../grid_style_columnclass.aspx.designer.cs | 78 + .../grid/grid_style_rowcolor.aspx | 106 + .../grid/grid_style_rowcolor.aspx.cs | 86 + .../grid/grid_style_rowcolor.aspx.designer.cs | 69 + .../grid/grid_style_rowcolor_paging.aspx | 116 + .../grid/grid_style_rowcolor_paging.aspx.cs | 68 + ...rid_style_rowcolor_paging.aspx.designer.cs | 69 + .../grid_style_rowcolor_paging_database.aspx | 103 + ...rid_style_rowcolor_paging_database.aspx.cs | 108 + ..._rowcolor_paging_database.aspx.designer.cs | 60 + .../FineUI.Examples/grid/grid_summary.aspx | 50 + .../FineUI.Examples/grid/grid_summary.aspx.cs | 118 + .../grid/grid_summary.aspx.designer.cs | 78 + .../grid/grid_summary_absolute.aspx | 121 + .../grid/grid_summary_absolute.aspx.cs | 115 + .../grid_summary_absolute.aspx.designer.cs | 78 + .../grid/grid_summary_currentpage.aspx | 52 + .../grid/grid_summary_currentpage.aspx.cs | 118 + .../grid_summary_currentpage.aspx.designer.cs | 69 + .../grid/grid_summary_scrollbar.aspx | 54 + .../grid/grid_summary_scrollbar.aspx.cs | 118 + .../grid_summary_scrollbar.aspx.designer.cs | 78 + .../grid/grid_summary_scrollbar_bottom.aspx | 53 + .../grid_summary_scrollbar_bottom.aspx.cs | 118 + ..._summary_scrollbar_bottom.aspx.designer.cs | 78 + .../grid/grid_summary_scrollbar_flow.aspx | 53 + .../grid/grid_summary_scrollbar_flow.aspx.cs | 118 + ...id_summary_scrollbar_flow.aspx.designer.cs | 78 + .../grid/grid_summary_scrollbar_top.aspx | 56 + .../grid/grid_summary_scrollbar_top.aspx.cs | 119 + ...rid_summary_scrollbar_top.aspx.designer.cs | 69 + .../grid/grid_summary_serverside.aspx | 101 + .../grid/grid_summary_serverside.aspx.cs | 115 + .../grid_summary_serverside.aspx.designer.cs | 78 + .../grid/grid_summary_serverside_paged.aspx | 101 + .../grid_summary_serverside_paged.aspx.cs | 115 + ..._summary_serverside_paged.aspx.designer.cs | 78 + .../grid/grid_text_middle.aspx | 44 + .../grid/grid_text_middle.aspx.cs | 40 + .../grid/grid_text_middle.aspx.designer.cs | 51 + .../FineUI.Examples/grid/grid_text_top.aspx | 39 + .../grid/grid_text_top.aspx.cs | 40 + .../grid/grid_text_top.aspx.designer.cs | 51 + .../grid/grid_textselection.aspx | 46 + .../grid/grid_textselection.aspx.cs | 61 + .../grid/grid_textselection.aspx.designer.cs | 69 + .../FineUI.Examples/grid/grid_twogrid.aspx | 72 + .../FineUI.Examples/grid/grid_twogrid.aspx.cs | 86 + .../grid/grid_twogrid.aspx.designer.cs | 114 + .../FineUI.Examples/grid/grid_width.aspx | 35 + .../FineUI.Examples/grid/grid_width.aspx.cs | 40 + .../grid/grid_width.aspx.designer.cs | 51 + .../grid/grid_width_boxflex.aspx | 36 + .../grid/grid_width_boxflex.aspx.cs | 40 + .../grid/grid_width_boxflex.aspx.designer.cs | 51 + .../grid/grid_width_expandunusedspace.aspx | 37 + .../grid/grid_width_expandunusedspace.aspx.cs | 40 + ...d_width_expandunusedspace.aspx.designer.cs | 51 + .../grid/grid_width_forcefit.aspx | 36 + .../grid/grid_width_forcefit.aspx.cs | 40 + .../grid/grid_width_forcefit.aspx.designer.cs | 51 + .../grid/grid_width_forcefit_minwidth.aspx | 37 + .../grid/grid_width_forcefit_minwidth.aspx.cs | 40 + ...d_width_forcefit_minwidth.aspx.designer.cs | 51 + .../grid/grid_width_forcefitalltime.aspx | 46 + .../grid/grid_width_forcefitalltime.aspx.cs | 40 + ...rid_width_forcefitalltime.aspx.designer.cs | 60 + .../grid/grid_width_forcefitfirsttime.aspx | 41 + .../grid/grid_width_forcefitfirsttime.aspx.cs | 40 + ...d_width_forcefitfirsttime.aspx.designer.cs | 60 + FineUI_v6/FineUI.Examples/grid/image.ashx | 39 + .../FineUI.Examples/iframe/button_iframe.aspx | 36 + .../iframe/button_iframe.aspx.cs | 38 + .../iframe/button_iframe.aspx.designer.cs | 87 + .../FineUI.Examples/iframe/grid_iframe.aspx | 84 + .../iframe/grid_iframe.aspx.cs | 104 + .../iframe/grid_iframe.aspx.designer.cs | 150 + .../FineUI.Examples/iframe/iframe_iframe.aspx | 34 + .../iframe/iframe_iframe.aspx.cs | 29 + .../iframe/iframe_iframe.aspx.designer.cs | 78 + .../iframe/iframe_iframe_window1.aspx | 43 + .../iframe/iframe_iframe_window1.aspx.cs | 28 + .../iframe_iframe_window1.aspx.designer.cs | 96 + .../iframe/iframe_iframe_window2.aspx | 44 + .../iframe/iframe_iframe_window2.aspx.cs | 27 + .../iframe_iframe_window2.aspx.designer.cs | 114 + .../iframe/parent_postback.aspx | 30 + .../iframe/parent_postback.aspx.cs | 32 + .../iframe/parent_postback.aspx.designer.cs | 78 + .../iframe/parent_postback2.aspx | 26 + .../iframe/parent_postback2.aspx.cs | 25 + .../iframe/parent_postback2.aspx.designer.cs | 69 + .../iframe/parent_postback3.aspx | 18 + .../iframe/parent_postback3.aspx.cs | 24 + .../iframe/parent_postback3.aspx.designer.cs | 51 + .../iframe/parent_postback_top.aspx | 24 + .../iframe/parent_postback_top.aspx.cs | 21 + .../parent_postback_top.aspx.designer.cs | 60 + .../iframe/parent_postback_top2.aspx | 29 + .../iframe/parent_postback_top2.aspx.cs | 40 + .../parent_postback_top2.aspx.designer.cs | 78 + .../iframe/parent_postback_top3.aspx | 18 + .../iframe/parent_postback_top3.aspx.cs | 24 + .../parent_postback_top3.aspx.designer.cs | 51 + .../iframe/parent_simplepostback.aspx | 23 + .../iframe/parent_simplepostback.aspx.cs | 28 + .../parent_simplepostback.aspx.designer.cs | 60 + .../iframe/parent_simplepostback2.aspx | 20 + .../iframe/parent_simplepostback2.aspx.cs | 23 + .../parent_simplepostback2.aspx.designer.cs | 51 + .../iframe/passvalue_iframe.aspx | 31 + .../iframe/passvalue_iframe.aspx.cs | 39 + .../iframe/passvalue_iframe.aspx.designer.cs | 78 + .../iframe/passvalue_iframe_iframe.aspx | 22 + .../iframe/passvalue_iframe_iframe.aspx.cs | 42 + .../passvalue_iframe_iframe.aspx.designer.cs | 51 + .../iframe/selectprovince1.aspx | 38 + .../iframe/selectprovince1.aspx.cs | 34 + .../iframe/selectprovince1.aspx.designer.cs | 78 + .../iframe/selectprovince1_child.aspx | 81 + .../iframe/selectprovince1_child.aspx.cs | 23 + .../selectprovince1_child.aspx.designer.cs | 69 + .../iframe/selectprovince2.aspx | 38 + .../iframe/selectprovince2.aspx.cs | 34 + .../iframe/selectprovince2.aspx.designer.cs | 78 + .../iframe/selectprovince2_child.aspx | 75 + .../iframe/selectprovince2_child.aspx.cs | 34 + .../selectprovince2_child.aspx.designer.cs | 69 + .../iframe/selectprovince3.aspx | 32 + .../iframe/selectprovince3.aspx.cs | 45 + .../iframe/selectprovince3.aspx.designer.cs | 78 + .../iframe/selectprovince3_child.aspx | 75 + .../iframe/selectprovince3_child.aspx.cs | 32 + .../selectprovince3_child.aspx.designer.cs | 69 + .../iframe/selectprovince_executescript.aspx | 38 + .../selectprovince_executescript.aspx.cs | 34 + ...ectprovince_executescript.aspx.designer.cs | 78 + .../selectprovince_executescript_child.aspx | 75 + ...selectprovince_executescript_child.aspx.cs | 35 + ...vince_executescript_child.aspx.designer.cs | 69 + .../iframe/topmenu/data/menuMail.xml | 15 + .../iframe/topmenu/data/menuSMS.xml | 17 + .../iframe/topmenu/data/menuSYS.xml | 19 + .../iframe/topmenu/default.aspx | 91 + .../iframe/topmenu/default.aspx.cs | 78 + .../iframe/topmenu/default.aspx.designer.cs | 114 + .../iframe/topmenu/html/mail-1.html | 10 + .../iframe/topmenu/html/mail-2.html | 11 + .../iframe/topmenu/html/mail-3.html | 11 + .../iframe/topmenu/html/mail-4.html | 11 + .../iframe/topmenu/html/mail-5.html | 11 + .../iframe/topmenu/html/sms-1.html | 11 + .../iframe/topmenu/html/sms-2.html | 11 + .../iframe/topmenu/html/sms-3.html | 11 + .../iframe/topmenu/html/sms-4.html | 11 + .../iframe/topmenu/html/sms-5.html | 11 + .../iframe/topmenu/html/sys-1.html | 11 + .../iframe/topmenu/html/sys-2.html | 11 + .../iframe/topmenu/html/sys-3.html | 11 + .../iframe/topmenu/html/sys-4.html | 11 + .../iframe/topmenu/html/sys-5.html | 11 + .../iframe/topmenu/res/images/admin_tbg.png | Bin 0 -> 759 bytes .../iframe/topmenu/res/images/menu.png | Bin 0 -> 3338 bytes .../iframe/topmenu/res/images/p.png | Bin 0 -> 23782 bytes .../iframe/topmenu/res/images/t.png | Bin 0 -> 810 bytes .../iframe/topmenu/res/main.css | 84 + .../iframe/topmenu2/data/menuMail.xml | 15 + .../iframe/topmenu2/data/menuSMS.xml | 17 + .../iframe/topmenu2/data/menuSYS.xml | 19 + .../iframe/topmenu2/default.aspx | 71 + .../iframe/topmenu2/default.aspx.cs | 37 + .../iframe/topmenu2/default.aspx.designer.cs | 69 + .../iframe/topmenu2/html/mail-1.html | 10 + .../iframe/topmenu2/html/mail-2.html | 11 + .../iframe/topmenu2/html/mail-3.html | 11 + .../iframe/topmenu2/html/mail-4.html | 11 + .../iframe/topmenu2/html/mail-5.html | 11 + .../iframe/topmenu2/html/sms-1.html | 11 + .../iframe/topmenu2/html/sms-2.html | 11 + .../iframe/topmenu2/html/sms-3.html | 11 + .../iframe/topmenu2/html/sms-4.html | 11 + .../iframe/topmenu2/html/sms-5.html | 11 + .../iframe/topmenu2/html/sys-1.html | 11 + .../iframe/topmenu2/html/sys-2.html | 11 + .../iframe/topmenu2/html/sys-3.html | 11 + .../iframe/topmenu2/html/sys-4.html | 11 + .../iframe/topmenu2/html/sys-5.html | 11 + .../iframe/topmenu2/leftmenu.aspx | 36 + .../iframe/topmenu2/leftmenu.aspx.cs | 46 + .../iframe/topmenu2/leftmenu.aspx.designer.cs | 51 + .../iframe/topmenu2/res/images/admin_tbg.png | Bin 0 -> 759 bytes .../iframe/topmenu2/res/images/menu.png | Bin 0 -> 3338 bytes .../iframe/topmenu2/res/images/p.png | Bin 0 -> 23782 bytes .../iframe/topmenu2/res/images/t.png | Bin 0 -> 810 bytes .../iframe/topmenu2/res/main.css | 84 + .../iframe/topmenu3/data/menuMail.xml | 15 + .../iframe/topmenu3/data/menuSMS.xml | 17 + .../iframe/topmenu3/data/menuSYS.xml | 19 + .../iframe/topmenu3/default.aspx | 71 + .../iframe/topmenu3/default.aspx.cs | 37 + .../iframe/topmenu3/default.aspx.designer.cs | 69 + .../iframe/topmenu3/html/mail-1.html | 10 + .../iframe/topmenu3/html/mail-2.html | 11 + .../iframe/topmenu3/html/mail-3.html | 11 + .../iframe/topmenu3/html/mail-4.html | 11 + .../iframe/topmenu3/html/mail-5.html | 11 + .../iframe/topmenu3/html/sms-1.html | 11 + .../iframe/topmenu3/html/sms-2.html | 11 + .../iframe/topmenu3/html/sms-3.html | 11 + .../iframe/topmenu3/html/sms-4.html | 11 + .../iframe/topmenu3/html/sms-5.html | 11 + .../iframe/topmenu3/html/sys-1.html | 11 + .../iframe/topmenu3/html/sys-2.html | 11 + .../iframe/topmenu3/html/sys-3.html | 11 + .../iframe/topmenu3/html/sys-4.html | 11 + .../iframe/topmenu3/html/sys-5.html | 11 + .../iframe/topmenu3/leftmenu.aspx | 33 + .../iframe/topmenu3/leftmenu.aspx.cs | 88 + .../iframe/topmenu3/leftmenu.aspx.designer.cs | 51 + .../iframe/topmenu3/res/images/admin_tbg.png | Bin 0 -> 759 bytes .../iframe/topmenu3/res/images/menu.png | Bin 0 -> 3338 bytes .../iframe/topmenu3/res/images/p.png | Bin 0 -> 23782 bytes .../iframe/topmenu3/res/images/t.png | Bin 0 -> 810 bytes .../iframe/topmenu3/res/main.css | 84 + .../iframe/topmenu4/data/menuMail.xml | 15 + .../iframe/topmenu4/data/menuSMS.xml | 17 + .../iframe/topmenu4/data/menuSYS.xml | 19 + .../iframe/topmenu4/default.aspx | 111 + .../iframe/topmenu4/default.aspx.cs | 37 + .../iframe/topmenu4/default.aspx.designer.cs | 78 + .../iframe/topmenu4/html/mail-1.html | 10 + .../iframe/topmenu4/html/mail-2.html | 11 + .../iframe/topmenu4/html/mail-3.html | 11 + .../iframe/topmenu4/html/mail-4.html | 11 + .../iframe/topmenu4/html/mail-5.html | 11 + .../iframe/topmenu4/html/sms-1.html | 11 + .../iframe/topmenu4/html/sms-2.html | 11 + .../iframe/topmenu4/html/sms-3.html | 11 + .../iframe/topmenu4/html/sms-4.html | 11 + .../iframe/topmenu4/html/sms-5.html | 11 + .../iframe/topmenu4/html/sys-1.html | 11 + .../iframe/topmenu4/html/sys-2.html | 11 + .../iframe/topmenu4/html/sys-3.html | 11 + .../iframe/topmenu4/html/sys-4.html | 11 + .../iframe/topmenu4/html/sys-5.html | 11 + .../iframe/topmenu4/leftmenu.aspx | 35 + .../iframe/topmenu4/leftmenu.aspx.cs | 46 + .../iframe/topmenu4/leftmenu.aspx.designer.cs | 51 + .../iframe/topmenu4/res/images/admin_tbg.png | Bin 0 -> 759 bytes .../iframe/topmenu4/res/images/menu.png | Bin 0 -> 3338 bytes .../iframe/topmenu4/res/images/p.png | Bin 0 -> 23782 bytes .../iframe/topmenu4/res/images/t.png | Bin 0 -> 810 bytes .../iframe/topmenu4/res/main.css | 84 + .../iframe/triggerbox_iframe.aspx | 55 + .../iframe/triggerbox_iframe.aspx.cs | 53 + .../iframe/triggerbox_iframe.aspx.designer.cs | 141 + .../iframe/triggerbox_iframe_iframe.aspx | 42 + .../iframe/triggerbox_iframe_iframe.aspx.cs | 36 + .../triggerbox_iframe_iframe.aspx.designer.cs | 105 + FineUI_v6/FineUI.Examples/iframe/window.aspx | 24 + .../FineUI.Examples/iframe/window.aspx.cs | 27 + .../iframe/window.aspx.designer.cs | 60 + FineUI_v6/FineUI.Examples/iframe/window2.aspx | 35 + .../FineUI.Examples/iframe/window2.aspx.cs | 31 + .../iframe/window2.aspx.designer.cs | 87 + .../iframe/window2_iframe.aspx | 40 + .../iframe/window2_iframe.aspx.cs | 44 + .../iframe/window2_iframe.aspx.designer.cs | 96 + .../FineUI.Examples/iframe/window_iframe.aspx | 50 + .../iframe/window_iframe.aspx.cs | 30 + .../iframe/window_iframe.aspx.designer.cs | 114 + .../FineUI.Examples/layout/absolute.aspx | 36 + .../FineUI.Examples/layout/absolute.aspx.cs | 25 + .../layout/absolute.aspx.designer.cs | 78 + FineUI_v6/FineUI.Examples/layout/anchor.aspx | 258 + .../FineUI.Examples/layout/anchor.aspx.cs | 39 + .../layout/anchor.aspx.designer.cs | 465 + FineUI_v6/FineUI.Examples/layout/border.aspx | 16 + .../FineUI.Examples/layout/border.aspx.cs | 25 + .../layout/border.aspx.designer.cs | 42 + FineUI_v6/FineUI.Examples/layout/card.aspx | 51 + FineUI_v6/FineUI.Examples/layout/card.aspx.cs | 25 + .../layout/card.aspx.designer.cs | 114 + FineUI_v6/FineUI.Examples/layout/column.aspx | 291 + .../FineUI.Examples/layout/column.aspx.cs | 25 + .../layout/column.aspx.designer.cs | 465 + .../layout/column_autoheight.aspx | 150 + .../layout/column_autoheight.aspx.cs | 25 + .../layout/column_autoheight.aspx.designer.cs | 150 + .../layout/column_scrollbar.aspx | 148 + .../layout/column_scrollbar.aspx.cs | 25 + .../layout/column_scrollbar.aspx.designer.cs | 150 + FineUI_v6/FineUI.Examples/layout/fit.aspx | 98 + FineUI_v6/FineUI.Examples/layout/fit.aspx.cs | 35 + .../layout/fit.aspx.designer.cs | 177 + FineUI_v6/FineUI.Examples/layout/form.aspx | 16 + FineUI_v6/FineUI.Examples/layout/form.aspx.cs | 25 + .../layout/form.aspx.designer.cs | 42 + FineUI_v6/FineUI.Examples/layout/hbox.aspx | 161 + FineUI_v6/FineUI.Examples/layout/hbox.aspx.cs | 25 + .../layout/hbox.aspx.designer.cs | 348 + .../layout/hbox_autoheight.aspx | 36 + .../layout/hbox_autoheight.aspx.cs | 25 + .../layout/hbox_autoheight.aspx.designer.cs | 78 + .../layout/hbox_autoheight_multilevels.aspx | 39 + .../hbox_autoheight_multilevels.aspx.cs | 25 + ...ox_autoheight_multilevels.aspx.designer.cs | 69 + .../FineUI.Examples/layout/hbox_form.aspx | 96 + .../FineUI.Examples/layout/hbox_form.aspx.cs | 25 + .../layout/hbox_form.aspx.designer.cs | 159 + .../layout/hbox_scrollbar.aspx | 35 + .../layout/hbox_scrollbar.aspx.cs | 25 + .../layout/hbox_scrollbar.aspx.designer.cs | 78 + FineUI_v6/FineUI.Examples/layout/region.aspx | 52 + .../FineUI.Examples/layout/region.aspx.cs | 25 + .../layout/region.aspx.designer.cs | 132 + FineUI_v6/FineUI.Examples/layout/row.aspx | 74 + FineUI_v6/FineUI.Examples/layout/row.aspx.cs | 25 + .../layout/row.aspx.designer.cs | 159 + FineUI_v6/FineUI.Examples/layout/table.aspx | 76 + .../FineUI.Examples/layout/table.aspx.cs | 25 + .../layout/table.aspx.designer.cs | 168 + .../FineUI.Examples/layout/table_form.aspx | 52 + .../FineUI.Examples/layout/table_form.aspx.cs | 25 + .../layout/table_form.aspx.designer.cs | 114 + FineUI_v6/FineUI.Examples/layout/vbox.aspx | 156 + FineUI_v6/FineUI.Examples/layout/vbox.aspx.cs | 25 + .../layout/vbox.aspx.designer.cs | 348 + .../layout/vbox_autoheight.aspx | 34 + .../layout/vbox_autoheight.aspx.cs | 25 + .../layout/vbox_autoheight.aspx.designer.cs | 78 + .../FineUI.Examples/layout/vbox_collapse.aspx | 40 + .../layout/vbox_collapse.aspx.cs | 25 + .../layout/vbox_collapse.aspx.designer.cs | 96 + .../FineUI.Examples/layout/vbox_form.aspx | 28 + .../FineUI.Examples/layout/vbox_form.aspx.cs | 25 + .../layout/vbox_form.aspx.designer.cs | 69 + .../FineUI.Examples/layout/vbox_formgrid.aspx | 134 + .../layout/vbox_formgrid.aspx.cs | 63 + .../layout/vbox_formgrid.aspx.designer.cs | 339 + .../FineUI.Examples/layout/vbox_hbox.aspx | 66 + .../FineUI.Examples/layout/vbox_hbox.aspx.cs | 25 + .../layout/vbox_hbox.aspx.designer.cs | 168 + .../layout/vbox_scrollbar.aspx | 35 + .../layout/vbox_scrollbar.aspx.cs | 25 + .../layout/vbox_scrollbar.aspx.designer.cs | 78 + .../FineUI.Examples/master/ISingleGridPage.cs | 36 + .../FineUI.Examples/master/Simple.Master | 40 + .../FineUI.Examples/master/Simple.Master.cs | 32 + .../master/Simple.Master.designer.cs | 78 + .../FineUI.Examples/master/SingleGrid.Master | 31 + .../master/SingleGrid.Master.cs | 230 + .../master/SingleGrid.Master.designer.cs | 69 + .../FineUI.Examples/master/formlist.aspx | 60 + .../FineUI.Examples/master/formlist.aspx.cs | 171 + .../master/formlist.aspx.designer.cs | 99 + FineUI_v6/FineUI.Examples/master/list.aspx | 42 + FineUI_v6/FineUI.Examples/master/list.aspx.cs | 136 + .../master/list.aspx.designer.cs | 72 + FineUI_v6/FineUI.Examples/master/simple.aspx | 14 + .../FineUI.Examples/master/simple.aspx.cs | 27 + .../master/simple.aspx.designer.cs | 33 + FineUI_v6/FineUI.Examples/master/simple2.aspx | 14 + .../FineUI.Examples/master/simple2.aspx.cs | 27 + .../master/simple2.aspx.designer.cs | 33 + FineUI_v6/FineUI.Examples/message/alert.aspx | 24 + .../FineUI.Examples/message/alert.aspx.cs | 39 + .../message/alert.aspx.designer.cs | 51 + .../message/alert_download.aspx | 16 + .../message/alert_download.aspx.cs | 48 + .../message/alert_download.aspx.designer.cs | 42 + .../message/alert_download_hide.aspx | 22 + .../message/alert_download_hide.aspx.cs | 49 + .../alert_download_hide.aspx.designer.cs | 51 + .../message/alert_download_hideiframe.aspx | 40 + .../message/alert_download_hideiframe.aspx.cs | 41 + ...alert_download_hideiframe.aspx.designer.cs | 42 + .../alert_download_hideiframe_window.aspx | 16 + .../alert_download_hideiframe_window.aspx.cs | 27 + ...ownload_hideiframe_window.aspx.designer.cs | 42 + .../message/confirm_buttons.aspx | 44 + .../message/confirm_buttons.aspx.cs | 33 + .../message/confirm_buttons.aspx.designer.cs | 42 + .../message/confirm_cancel.aspx | 27 + .../message/confirm_cancel.aspx.cs | 46 + .../message/confirm_cancel.aspx.designer.cs | 60 + .../message/confirm_cancel_customevent.aspx | 16 + .../confirm_cancel_customevent.aspx.cs | 37 + ...onfirm_cancel_customevent.aspx.designer.cs | 42 + FineUI_v6/FineUI.Examples/other/addtab.aspx | 47 + .../FineUI.Examples/other/addtab.aspx.cs | 25 + .../other/addtab.aspx.designer.cs | 69 + .../FineUI.Examples/other/ajax_loading.aspx | 33 + .../other/ajax_loading.aspx.cs | 37 + .../other/ajax_loading.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/other/alert.aspx | 20 + FineUI_v6/FineUI.Examples/other/alert.aspx.cs | 38 + .../other/alert.aspx.designer.cs | 51 + .../other/authentication_timeout.aspx | 61 + .../other/authentication_timeout.aspx.cs | 24 + .../authentication_timeout.aspx.designer.cs | 51 + .../other/authentication_timeout_async.aspx | 72 + .../authentication_timeout_async.aspx.cs | 24 + ...hentication_timeout_async.aspx.designer.cs | 51 + .../FineUI.Examples/other/button_in_form.aspx | 58 + .../other/button_in_form.aspx.cs | 20 + .../other/button_in_form.aspx.designer.cs | 150 + .../FineUI.Examples/other/confirm_cancel.aspx | 28 + .../other/confirm_cancel.aspx.cs | 46 + .../other/confirm_cancel.aspx.designer.cs | 60 + .../other/confirm_cancel2.aspx | 17 + .../other/confirm_cancel2.aspx.cs | 37 + .../other/confirm_cancel2.aspx.designer.cs | 42 + FineUI_v6/FineUI.Examples/other/cssclass.aspx | 50 + .../FineUI.Examples/other/cssclass.aspx.cs | 25 + .../other/cssclass.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/other/cssstyle.aspx | 42 + .../FineUI.Examples/other/cssstyle.aspx.cs | 28 + .../other/cssstyle.aspx.designer.cs | 51 + .../other/custom_postback.aspx | 49 + .../other/custom_postback.aspx.cs | 31 + .../other/custom_postback.aspx.designer.cs | 60 + .../other/custom_postback2.aspx | 49 + .../other/custom_postback2.aspx.cs | 32 + .../other/custom_postback2.aspx.designer.cs | 60 + .../FineUI.Examples/other/global_error.aspx | 47 + .../other/global_error.aspx.cs | 26 + .../other/global_error.aspx.designer.cs | 51 + FineUI_v6/FineUI.Examples/other/keydown.aspx | 51 + .../FineUI.Examples/other/keydown.aspx.cs | 24 + .../other/keydown.aspx.designer.cs | 60 + .../FineUI.Examples/other/pageloading.aspx | 15 + .../FineUI.Examples/other/pageloading.aspx.cs | 21 + .../other/pageloading.aspx.designer.cs | 33 + FineUI_v6/FineUI.Examples/other/timer.aspx | 26 + FineUI_v6/FineUI.Examples/other/timer.aspx.cs | 36 + .../other/timer.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/other/toolbar.aspx | 13 + .../FineUI.Examples/other/toolbar.aspx.cs | 25 + .../other/toolbar.aspx.designer.cs | 33 + FineUI_v6/FineUI.Examples/res/css/common.css | 42 + FineUI_v6/FineUI.Examples/res/css/default.css | 158 + FineUI_v6/FineUI.Examples/res/css/main.css | 44 + .../res/google-code-prettify/lang-apollo.js | 2 + .../res/google-code-prettify/lang-basic.js | 3 + .../res/google-code-prettify/lang-clj.js | 18 + .../res/google-code-prettify/lang-css.js | 2 + .../res/google-code-prettify/lang-dart.js | 3 + .../res/google-code-prettify/lang-erlang.js | 2 + .../res/google-code-prettify/lang-go.js | 1 + .../res/google-code-prettify/lang-hs.js | 2 + .../res/google-code-prettify/lang-lisp.js | 3 + .../res/google-code-prettify/lang-llvm.js | 1 + .../res/google-code-prettify/lang-lua.js | 2 + .../res/google-code-prettify/lang-matlab.js | 6 + .../res/google-code-prettify/lang-ml.js | 2 + .../res/google-code-prettify/lang-mumps.js | 2 + .../res/google-code-prettify/lang-n.js | 4 + .../res/google-code-prettify/lang-pascal.js | 3 + .../res/google-code-prettify/lang-proto.js | 1 + .../res/google-code-prettify/lang-r.js | 2 + .../res/google-code-prettify/lang-rd.js | 1 + .../res/google-code-prettify/lang-scala.js | 2 + .../res/google-code-prettify/lang-sql.js | 2 + .../res/google-code-prettify/lang-tcl.js | 3 + .../res/google-code-prettify/lang-tex.js | 1 + .../res/google-code-prettify/lang-vb.js | 2 + .../res/google-code-prettify/lang-vhdl.js | 3 + .../res/google-code-prettify/lang-wiki.js | 2 + .../res/google-code-prettify/lang-xq.js | 3 + .../res/google-code-prettify/lang-yaml.js | 2 + .../res/google-code-prettify/prettify.css | 1 + .../res/google-code-prettify/prettify.js | 30 + .../res/google-code-prettify/run_prettify.js | 34 + FineUI_v6/FineUI.Examples/res/icon/accept.png | Bin 0 -> 781 bytes FineUI_v6/FineUI.Examples/res/icon/add.png | Bin 0 -> 733 bytes FineUI_v6/FineUI.Examples/res/icon/anchor.png | Bin 0 -> 523 bytes .../FineUI.Examples/res/icon/application.png | Bin 0 -> 464 bytes .../res/icon/application_add.png | Bin 0 -> 619 bytes .../res/icon/application_cascade.png | Bin 0 -> 524 bytes .../res/icon/application_delete.png | Bin 0 -> 610 bytes .../res/icon/application_double.png | Bin 0 -> 533 bytes .../res/icon/application_edit.png | Bin 0 -> 703 bytes .../res/icon/application_error.png | Bin 0 -> 656 bytes .../res/icon/application_form.png | Bin 0 -> 467 bytes .../res/icon/application_form_add.png | Bin 0 -> 592 bytes .../res/icon/application_form_delete.png | Bin 0 -> 605 bytes .../res/icon/application_form_edit.png | Bin 0 -> 714 bytes .../res/icon/application_form_magnify.png | Bin 0 -> 612 bytes .../res/icon/application_get.png | Bin 0 -> 581 bytes .../res/icon/application_go.png | Bin 0 -> 634 bytes .../res/icon/application_home.png | Bin 0 -> 685 bytes .../res/icon/application_key.png | Bin 0 -> 670 bytes .../res/icon/application_lightning.png | Bin 0 -> 656 bytes .../res/icon/application_link.png | Bin 0 -> 701 bytes .../res/icon/application_osx.png | Bin 0 -> 487 bytes .../res/icon/application_osx_add.png | Bin 0 -> 645 bytes .../res/icon/application_osx_cascade.png | Bin 0 -> 559 bytes .../res/icon/application_osx_delete.png | Bin 0 -> 639 bytes .../res/icon/application_osx_double.png | Bin 0 -> 573 bytes .../res/icon/application_osx_error.png | Bin 0 -> 713 bytes .../res/icon/application_osx_get.png | Bin 0 -> 623 bytes .../res/icon/application_osx_go.png | Bin 0 -> 697 bytes .../res/icon/application_osx_home.png | Bin 0 -> 761 bytes .../res/icon/application_osx_key.png | Bin 0 -> 714 bytes .../res/icon/application_osx_lightning.png | Bin 0 -> 737 bytes .../res/icon/application_osx_link.png | Bin 0 -> 741 bytes .../res/icon/application_osx_split.png | Bin 0 -> 569 bytes .../res/icon/application_osx_start.png | Bin 0 -> 723 bytes .../res/icon/application_osx_stop.png | Bin 0 -> 690 bytes .../res/icon/application_osx_terminal.png | Bin 0 -> 525 bytes .../res/icon/application_put.png | Bin 0 -> 585 bytes .../res/icon/application_side_boxes.png | Bin 0 -> 478 bytes .../res/icon/application_side_contract.png | Bin 0 -> 547 bytes .../res/icon/application_side_expand.png | Bin 0 -> 581 bytes .../res/icon/application_side_list.png | Bin 0 -> 510 bytes .../res/icon/application_side_tree.png | Bin 0 -> 483 bytes .../res/icon/application_split.png | Bin 0 -> 520 bytes .../res/icon/application_start.png | Bin 0 -> 685 bytes .../res/icon/application_stop.png | Bin 0 -> 652 bytes .../res/icon/application_tile_horizontal.png | Bin 0 -> 432 bytes .../res/icon/application_tile_vertical.png | Bin 0 -> 492 bytes .../res/icon/application_view_columns.png | Bin 0 -> 493 bytes .../res/icon/application_view_detail.png | Bin 0 -> 576 bytes .../res/icon/application_view_gallery.png | Bin 0 -> 555 bytes .../res/icon/application_view_icons.png | Bin 0 -> 476 bytes .../res/icon/application_view_list.png | Bin 0 -> 473 bytes .../res/icon/application_view_tile.png | Bin 0 -> 465 bytes .../res/icon/application_xp.png | Bin 0 -> 426 bytes .../res/icon/application_xp_terminal.png | Bin 0 -> 507 bytes .../FineUI.Examples/res/icon/arrow_branch.png | Bin 0 -> 582 bytes .../FineUI.Examples/res/icon/arrow_divide.png | Bin 0 -> 677 bytes .../FineUI.Examples/res/icon/arrow_down.png | Bin 0 -> 379 bytes .../FineUI.Examples/res/icon/arrow_ew.png | Bin 0 -> 421 bytes .../FineUI.Examples/res/icon/arrow_in.png | Bin 0 -> 600 bytes .../res/icon/arrow_in_longer.png | Bin 0 -> 719 bytes .../FineUI.Examples/res/icon/arrow_inout.png | Bin 0 -> 551 bytes .../FineUI.Examples/res/icon/arrow_join.png | Bin 0 -> 626 bytes .../FineUI.Examples/res/icon/arrow_left.png | Bin 0 -> 345 bytes .../FineUI.Examples/res/icon/arrow_merge.png | Bin 0 -> 484 bytes .../FineUI.Examples/res/icon/arrow_ne.png | Bin 0 -> 355 bytes .../FineUI.Examples/res/icon/arrow_ns.png | Bin 0 -> 464 bytes .../FineUI.Examples/res/icon/arrow_nsew.png | Bin 0 -> 697 bytes .../FineUI.Examples/res/icon/arrow_nw.png | Bin 0 -> 361 bytes .../res/icon/arrow_nw_ne_sw_se.png | Bin 0 -> 805 bytes .../FineUI.Examples/res/icon/arrow_nw_se.png | Bin 0 -> 532 bytes .../FineUI.Examples/res/icon/arrow_out.png | Bin 0 -> 594 bytes .../res/icon/arrow_out_longer.png | Bin 0 -> 684 bytes .../FineUI.Examples/res/icon/arrow_redo.png | Bin 0 -> 625 bytes .../res/icon/arrow_refresh.png | Bin 0 -> 685 bytes .../res/icon/arrow_refresh_small.png | Bin 0 -> 506 bytes .../FineUI.Examples/res/icon/arrow_right.png | Bin 0 -> 349 bytes .../res/icon/arrow_rotate_anticlockwise.png | Bin 0 -> 608 bytes .../res/icon/arrow_rotate_clockwise.png | Bin 0 -> 602 bytes .../FineUI.Examples/res/icon/arrow_se.png | Bin 0 -> 311 bytes .../FineUI.Examples/res/icon/arrow_sw.png | Bin 0 -> 353 bytes .../FineUI.Examples/res/icon/arrow_sw_ne.png | Bin 0 -> 508 bytes .../FineUI.Examples/res/icon/arrow_switch.png | Bin 0 -> 683 bytes .../res/icon/arrow_switch_bluegreen.png | Bin 0 -> 718 bytes .../res/icon/arrow_turn_left.png | Bin 0 -> 516 bytes .../res/icon/arrow_turn_right.png | Bin 0 -> 489 bytes .../FineUI.Examples/res/icon/arrow_undo.png | Bin 0 -> 631 bytes .../FineUI.Examples/res/icon/arrow_up.png | Bin 0 -> 372 bytes .../res/icon/asterisk_orange.png | Bin 0 -> 760 bytes .../FineUI.Examples/res/icon/asterisk_red.png | Bin 0 -> 762 bytes .../res/icon/asterisk_yellow.png | Bin 0 -> 743 bytes FineUI_v6/FineUI.Examples/res/icon/attach.png | Bin 0 -> 391 bytes .../res/icon/award_star_add.png | Bin 0 -> 853 bytes .../res/icon/award_star_bronze_1.png | Bin 0 -> 733 bytes .../res/icon/award_star_bronze_2.png | Bin 0 -> 755 bytes .../res/icon/award_star_bronze_3.png | Bin 0 -> 754 bytes .../res/icon/award_star_delete.png | Bin 0 -> 849 bytes .../res/icon/award_star_gold_1.png | Bin 0 -> 753 bytes .../res/icon/award_star_gold_2.png | Bin 0 -> 770 bytes .../res/icon/award_star_gold_3.png | Bin 0 -> 781 bytes .../res/icon/award_star_silver_1.png | Bin 0 -> 714 bytes .../res/icon/award_star_silver_2.png | Bin 0 -> 734 bytes .../res/icon/award_star_silver_3.png | Bin 0 -> 738 bytes FineUI_v6/FineUI.Examples/res/icon/basket.png | Bin 0 -> 669 bytes .../FineUI.Examples/res/icon/basket_add.png | Bin 0 -> 752 bytes .../res/icon/basket_delete.png | Bin 0 -> 773 bytes .../FineUI.Examples/res/icon/basket_edit.png | Bin 0 -> 811 bytes .../FineUI.Examples/res/icon/basket_error.png | Bin 0 -> 794 bytes .../FineUI.Examples/res/icon/basket_go.png | Bin 0 -> 777 bytes .../FineUI.Examples/res/icon/basket_put.png | Bin 0 -> 733 bytes .../res/icon/basket_remove.png | Bin 0 -> 738 bytes FineUI_v6/FineUI.Examples/res/icon/bell.png | Bin 0 -> 789 bytes .../FineUI.Examples/res/icon/bell_add.png | Bin 0 -> 816 bytes .../FineUI.Examples/res/icon/bell_delete.png | Bin 0 -> 824 bytes .../FineUI.Examples/res/icon/bell_error.png | Bin 0 -> 813 bytes .../FineUI.Examples/res/icon/bell_go.png | Bin 0 -> 836 bytes .../FineUI.Examples/res/icon/bell_link.png | Bin 0 -> 850 bytes .../FineUI.Examples/res/icon/bell_silver.png | Bin 0 -> 494 bytes .../res/icon/bell_silver_start.png | Bin 0 -> 833 bytes .../res/icon/bell_silver_stop.png | Bin 0 -> 813 bytes .../FineUI.Examples/res/icon/bell_start.png | Bin 0 -> 882 bytes .../FineUI.Examples/res/icon/bell_stop.png | Bin 0 -> 849 bytes FineUI_v6/FineUI.Examples/res/icon/bin.png | Bin 0 -> 476 bytes .../FineUI.Examples/res/icon/bin_closed.png | Bin 0 -> 363 bytes .../FineUI.Examples/res/icon/bin_empty.png | Bin 0 -> 475 bytes FineUI_v6/FineUI.Examples/res/icon/blank.png | Bin 0 -> 166 bytes FineUI_v6/FineUI.Examples/res/icon/bomb.png | Bin 0 -> 793 bytes FineUI_v6/FineUI.Examples/res/icon/book.png | Bin 0 -> 593 bytes .../FineUI.Examples/res/icon/book_add.png | Bin 0 -> 714 bytes .../res/icon/book_addresses.png | Bin 0 -> 770 bytes .../res/icon/book_addresses_add.png | Bin 0 -> 849 bytes .../res/icon/book_addresses_delete.png | Bin 0 -> 840 bytes .../res/icon/book_addresses_edit.png | Bin 0 -> 883 bytes .../res/icon/book_addresses_error.png | Bin 0 -> 852 bytes .../res/icon/book_addresses_key.png | Bin 0 -> 873 bytes .../FineUI.Examples/res/icon/book_delete.png | Bin 0 -> 719 bytes .../FineUI.Examples/res/icon/book_edit.png | Bin 0 -> 813 bytes .../FineUI.Examples/res/icon/book_error.png | Bin 0 -> 734 bytes .../FineUI.Examples/res/icon/book_go.png | Bin 0 -> 745 bytes .../FineUI.Examples/res/icon/book_key.png | Bin 0 -> 779 bytes .../FineUI.Examples/res/icon/book_link.png | Bin 0 -> 789 bytes .../FineUI.Examples/res/icon/book_magnify.png | Bin 0 -> 740 bytes .../FineUI.Examples/res/icon/book_next.png | Bin 0 -> 702 bytes .../FineUI.Examples/res/icon/book_open.png | Bin 0 -> 622 bytes .../res/icon/book_open_mark.png | Bin 0 -> 658 bytes .../res/icon/book_previous.png | Bin 0 -> 680 bytes .../FineUI.Examples/res/icon/book_red.png | Bin 0 -> 638 bytes .../FineUI.Examples/res/icon/book_tabs.png | Bin 0 -> 707 bytes .../FineUI.Examples/res/icon/bookmark.png | Bin 0 -> 666 bytes .../FineUI.Examples/res/icon/bookmark_add.png | Bin 0 -> 767 bytes .../res/icon/bookmark_delete.png | Bin 0 -> 775 bytes .../res/icon/bookmark_edit.png | Bin 0 -> 850 bytes .../res/icon/bookmark_error.png | Bin 0 -> 789 bytes .../FineUI.Examples/res/icon/bookmark_go.png | Bin 0 -> 800 bytes .../FineUI.Examples/res/icon/border_all.png | Bin 0 -> 393 bytes .../res/icon/border_bottom.png | Bin 0 -> 351 bytes .../FineUI.Examples/res/icon/border_draw.png | Bin 0 -> 684 bytes .../FineUI.Examples/res/icon/border_inner.png | Bin 0 -> 382 bytes .../res/icon/border_inner_horizontal.png | Bin 0 -> 355 bytes .../res/icon/border_inner_vertical.png | Bin 0 -> 368 bytes .../FineUI.Examples/res/icon/border_left.png | Bin 0 -> 370 bytes .../FineUI.Examples/res/icon/border_none.png | Bin 0 -> 338 bytes .../FineUI.Examples/res/icon/border_outer.png | Bin 0 -> 392 bytes .../FineUI.Examples/res/icon/border_right.png | Bin 0 -> 356 bytes .../FineUI.Examples/res/icon/border_top.png | Bin 0 -> 352 bytes FineUI_v6/FineUI.Examples/res/icon/box.png | Bin 0 -> 555 bytes .../FineUI.Examples/res/icon/box_error.png | Bin 0 -> 719 bytes .../FineUI.Examples/res/icon/box_picture.png | Bin 0 -> 674 bytes .../FineUI.Examples/res/icon/box_world.png | Bin 0 -> 726 bytes FineUI_v6/FineUI.Examples/res/icon/brick.png | Bin 0 -> 452 bytes .../FineUI.Examples/res/icon/brick_add.png | Bin 0 -> 729 bytes .../FineUI.Examples/res/icon/brick_delete.png | Bin 0 -> 745 bytes .../FineUI.Examples/res/icon/brick_edit.png | Bin 0 -> 775 bytes .../FineUI.Examples/res/icon/brick_error.png | Bin 0 -> 798 bytes .../FineUI.Examples/res/icon/brick_go.png | Bin 0 -> 790 bytes .../FineUI.Examples/res/icon/brick_link.png | Bin 0 -> 764 bytes .../res/icon/brick_magnify.png | Bin 0 -> 794 bytes FineUI_v6/FineUI.Examples/res/icon/bricks.png | Bin 0 -> 825 bytes .../FineUI.Examples/res/icon/briefcase.png | Bin 0 -> 793 bytes FineUI_v6/FineUI.Examples/res/icon/bug.png | Bin 0 -> 774 bytes .../FineUI.Examples/res/icon/bug_add.png | Bin 0 -> 806 bytes .../FineUI.Examples/res/icon/bug_delete.png | Bin 0 -> 836 bytes .../FineUI.Examples/res/icon/bug_edit.png | Bin 0 -> 873 bytes .../FineUI.Examples/res/icon/bug_error.png | Bin 0 -> 841 bytes .../FineUI.Examples/res/icon/bug_fix.png | Bin 0 -> 862 bytes FineUI_v6/FineUI.Examples/res/icon/bug_go.png | Bin 0 -> 831 bytes .../FineUI.Examples/res/icon/bug_link.png | Bin 0 -> 847 bytes .../FineUI.Examples/res/icon/bug_magnify.png | Bin 0 -> 852 bytes FineUI_v6/FineUI.Examples/res/icon/build.png | Bin 0 -> 773 bytes .../FineUI.Examples/res/icon/build_cancel.png | Bin 0 -> 837 bytes .../FineUI.Examples/res/icon/building.png | Bin 0 -> 556 bytes .../FineUI.Examples/res/icon/building_add.png | Bin 0 -> 631 bytes .../res/icon/building_delete.png | Bin 0 -> 633 bytes .../res/icon/building_edit.png | Bin 0 -> 731 bytes .../res/icon/building_error.png | Bin 0 -> 653 bytes .../FineUI.Examples/res/icon/building_go.png | Bin 0 -> 665 bytes .../FineUI.Examples/res/icon/building_key.png | Bin 0 -> 705 bytes .../res/icon/building_link.png | Bin 0 -> 668 bytes .../FineUI.Examples/res/icon/bullet_add.png | Bin 0 -> 286 bytes .../res/icon/bullet_arrow_bottom.png | Bin 0 -> 229 bytes .../res/icon/bullet_arrow_down.png | Bin 0 -> 201 bytes .../res/icon/bullet_arrow_top.png | Bin 0 -> 230 bytes .../res/icon/bullet_arrow_up.png | Bin 0 -> 201 bytes .../FineUI.Examples/res/icon/bullet_black.png | Bin 0 -> 211 bytes .../FineUI.Examples/res/icon/bullet_blue.png | Bin 0 -> 289 bytes .../res/icon/bullet_connect.png | Bin 0 -> 609 bytes .../FineUI.Examples/res/icon/bullet_cross.png | Bin 0 -> 587 bytes .../res/icon/bullet_database.png | Bin 0 -> 404 bytes .../res/icon/bullet_database_yellow.png | Bin 0 -> 443 bytes .../res/icon/bullet_delete.png | Bin 0 -> 308 bytes .../FineUI.Examples/res/icon/bullet_disk.png | Bin 0 -> 483 bytes .../FineUI.Examples/res/icon/bullet_earth.png | Bin 0 -> 422 bytes .../FineUI.Examples/res/icon/bullet_edit.png | Bin 0 -> 592 bytes .../FineUI.Examples/res/icon/bullet_eject.png | Bin 0 -> 797 bytes .../FineUI.Examples/res/icon/bullet_error.png | Bin 0 -> 454 bytes .../FineUI.Examples/res/icon/bullet_feed.png | Bin 0 -> 262 bytes .../FineUI.Examples/res/icon/bullet_get.png | Bin 0 -> 417 bytes .../FineUI.Examples/res/icon/bullet_go.png | Bin 0 -> 410 bytes .../FineUI.Examples/res/icon/bullet_green.png | Bin 0 -> 295 bytes .../FineUI.Examples/res/icon/bullet_home.png | Bin 0 -> 534 bytes .../FineUI.Examples/res/icon/bullet_key.png | Bin 0 -> 436 bytes .../FineUI.Examples/res/icon/bullet_left.png | Bin 0 -> 349 bytes .../res/icon/bullet_lightning.png | Bin 0 -> 574 bytes .../res/icon/bullet_magnify.png | Bin 0 -> 409 bytes .../FineUI.Examples/res/icon/bullet_minus.png | Bin 0 -> 224 bytes .../res/icon/bullet_orange.png | Bin 0 -> 283 bytes .../res/icon/bullet_page_white.png | Bin 0 -> 258 bytes .../res/icon/bullet_picture.png | Bin 0 -> 470 bytes .../FineUI.Examples/res/icon/bullet_pink.png | Bin 0 -> 286 bytes .../FineUI.Examples/res/icon/bullet_plus.png | Bin 0 -> 305 bytes .../res/icon/bullet_purple.png | Bin 0 -> 294 bytes .../FineUI.Examples/res/icon/bullet_red.png | Bin 0 -> 287 bytes .../FineUI.Examples/res/icon/bullet_right.png | Bin 0 -> 355 bytes .../FineUI.Examples/res/icon/bullet_shape.png | Bin 0 -> 440 bytes .../res/icon/bullet_sparkle.png | Bin 0 -> 459 bytes .../FineUI.Examples/res/icon/bullet_star.png | Bin 0 -> 331 bytes .../FineUI.Examples/res/icon/bullet_start.png | Bin 0 -> 448 bytes .../FineUI.Examples/res/icon/bullet_stop.png | Bin 0 -> 449 bytes .../res/icon/bullet_stop_alt.png | Bin 0 -> 272 bytes .../FineUI.Examples/res/icon/bullet_tick.png | Bin 0 -> 419 bytes .../res/icon/bullet_toggle_minus.png | Bin 0 -> 207 bytes .../res/icon/bullet_toggle_plus.png | Bin 0 -> 209 bytes .../FineUI.Examples/res/icon/bullet_white.png | Bin 0 -> 201 bytes .../res/icon/bullet_wrench.png | Bin 0 -> 448 bytes .../res/icon/bullet_wrench_red.png | Bin 0 -> 471 bytes .../res/icon/bullet_yellow.png | Bin 0 -> 287 bytes FineUI_v6/FineUI.Examples/res/icon/button.png | Bin 0 -> 211 bytes FineUI_v6/FineUI.Examples/res/icon/cake.png | Bin 0 -> 676 bytes .../FineUI.Examples/res/icon/cake_out.png | Bin 0 -> 720 bytes .../FineUI.Examples/res/icon/cake_sliced.png | Bin 0 -> 716 bytes .../FineUI.Examples/res/icon/calculator.png | Bin 0 -> 543 bytes .../res/icon/calculator_add.png | Bin 0 -> 660 bytes .../res/icon/calculator_delete.png | Bin 0 -> 692 bytes .../res/icon/calculator_edit.png | Bin 0 -> 767 bytes .../res/icon/calculator_error.png | Bin 0 -> 731 bytes .../res/icon/calculator_link.png | Bin 0 -> 723 bytes .../FineUI.Examples/res/icon/calendar.png | Bin 0 -> 675 bytes .../FineUI.Examples/res/icon/calendar_add.png | Bin 0 -> 723 bytes .../res/icon/calendar_delete.png | Bin 0 -> 742 bytes .../res/icon/calendar_edit.png | Bin 0 -> 777 bytes .../res/icon/calendar_link.png | Bin 0 -> 795 bytes .../res/icon/calendar_select_day.png | Bin 0 -> 675 bytes .../res/icon/calendar_select_none.png | Bin 0 -> 657 bytes .../res/icon/calendar_select_week.png | Bin 0 -> 656 bytes .../res/icon/calendar_star.png | Bin 0 -> 751 bytes .../res/icon/calendar_view_day.png | Bin 0 -> 572 bytes .../res/icon/calendar_view_month.png | Bin 0 -> 595 bytes .../res/icon/calendar_view_week.png | Bin 0 -> 480 bytes FineUI_v6/FineUI.Examples/res/icon/camera.png | Bin 0 -> 665 bytes .../FineUI.Examples/res/icon/camera_add.png | Bin 0 -> 800 bytes .../res/icon/camera_connect.png | Bin 0 -> 776 bytes .../res/icon/camera_delete.png | Bin 0 -> 797 bytes .../FineUI.Examples/res/icon/camera_edit.png | Bin 0 -> 872 bytes .../FineUI.Examples/res/icon/camera_error.png | Bin 0 -> 835 bytes .../FineUI.Examples/res/icon/camera_go.png | Bin 0 -> 809 bytes .../FineUI.Examples/res/icon/camera_link.png | Bin 0 -> 839 bytes .../res/icon/camera_magnify.png | Bin 0 -> 768 bytes .../res/icon/camera_picture.png | Bin 0 -> 797 bytes .../FineUI.Examples/res/icon/camera_small.png | Bin 0 -> 489 bytes .../FineUI.Examples/res/icon/camera_start.png | Bin 0 -> 819 bytes .../FineUI.Examples/res/icon/camera_stop.png | Bin 0 -> 799 bytes FineUI_v6/FineUI.Examples/res/icon/cancel.png | Bin 0 -> 587 bytes FineUI_v6/FineUI.Examples/res/icon/car.png | Bin 0 -> 610 bytes .../FineUI.Examples/res/icon/car_add.png | Bin 0 -> 677 bytes .../FineUI.Examples/res/icon/car_delete.png | Bin 0 -> 689 bytes .../FineUI.Examples/res/icon/car_error.png | Bin 0 -> 729 bytes .../FineUI.Examples/res/icon/car_red.png | Bin 0 -> 605 bytes .../FineUI.Examples/res/icon/car_start.png | Bin 0 -> 741 bytes .../FineUI.Examples/res/icon/car_stop.png | Bin 0 -> 724 bytes FineUI_v6/FineUI.Examples/res/icon/cart.png | Bin 0 -> 421 bytes .../FineUI.Examples/res/icon/cart_add.png | Bin 0 -> 711 bytes .../FineUI.Examples/res/icon/cart_delete.png | Bin 0 -> 742 bytes .../FineUI.Examples/res/icon/cart_edit.png | Bin 0 -> 789 bytes .../FineUI.Examples/res/icon/cart_error.png | Bin 0 -> 790 bytes .../FineUI.Examples/res/icon/cart_full.png | Bin 0 -> 725 bytes .../FineUI.Examples/res/icon/cart_go.png | Bin 0 -> 763 bytes .../FineUI.Examples/res/icon/cart_magnify.png | Bin 0 -> 767 bytes .../FineUI.Examples/res/icon/cart_put.png | Bin 0 -> 763 bytes .../FineUI.Examples/res/icon/cart_remove.png | Bin 0 -> 769 bytes FineUI_v6/FineUI.Examples/res/icon/cd.png | Bin 0 -> 673 bytes FineUI_v6/FineUI.Examples/res/icon/cd_add.png | Bin 0 -> 758 bytes .../FineUI.Examples/res/icon/cd_burn.png | Bin 0 -> 756 bytes .../FineUI.Examples/res/icon/cd_delete.png | Bin 0 -> 767 bytes .../FineUI.Examples/res/icon/cd_edit.png | Bin 0 -> 790 bytes .../FineUI.Examples/res/icon/cd_eject.png | Bin 0 -> 786 bytes FineUI_v6/FineUI.Examples/res/icon/cd_go.png | Bin 0 -> 793 bytes .../FineUI.Examples/res/icon/cd_magnify.png | Bin 0 -> 872 bytes .../FineUI.Examples/res/icon/cd_play.png | Bin 0 -> 861 bytes .../FineUI.Examples/res/icon/cd_stop.png | Bin 0 -> 881 bytes .../FineUI.Examples/res/icon/cd_stop_alt.png | Bin 0 -> 841 bytes .../FineUI.Examples/res/icon/cd_tick.png | Bin 0 -> 868 bytes FineUI_v6/FineUI.Examples/res/icon/cdr.png | Bin 0 -> 796 bytes .../FineUI.Examples/res/icon/cdr_add.png | Bin 0 -> 860 bytes .../FineUI.Examples/res/icon/cdr_burn.png | Bin 0 -> 869 bytes .../FineUI.Examples/res/icon/cdr_cross.png | Bin 0 -> 911 bytes .../FineUI.Examples/res/icon/cdr_delete.png | Bin 0 -> 858 bytes .../FineUI.Examples/res/icon/cdr_edit.png | Bin 0 -> 893 bytes .../FineUI.Examples/res/icon/cdr_eject.png | Bin 0 -> 857 bytes .../FineUI.Examples/res/icon/cdr_error.png | Bin 0 -> 882 bytes FineUI_v6/FineUI.Examples/res/icon/cdr_go.png | Bin 0 -> 866 bytes .../FineUI.Examples/res/icon/cdr_magnify.png | Bin 0 -> 879 bytes .../FineUI.Examples/res/icon/cdr_play.png | Bin 0 -> 842 bytes .../FineUI.Examples/res/icon/cdr_start.png | Bin 0 -> 891 bytes .../FineUI.Examples/res/icon/cdr_stop.png | Bin 0 -> 867 bytes .../FineUI.Examples/res/icon/cdr_stop_alt.png | Bin 0 -> 837 bytes .../FineUI.Examples/res/icon/cdr_tick.png | Bin 0 -> 857 bytes .../FineUI.Examples/res/icon/chart_bar.png | Bin 0 -> 541 bytes .../res/icon/chart_bar_add.png | Bin 0 -> 626 bytes .../res/icon/chart_bar_delete.png | Bin 0 -> 636 bytes .../res/icon/chart_bar_edit.png | Bin 0 -> 754 bytes .../res/icon/chart_bar_error.png | Bin 0 -> 671 bytes .../res/icon/chart_bar_link.png | Bin 0 -> 712 bytes .../FineUI.Examples/res/icon/chart_curve.png | Bin 0 -> 710 bytes .../res/icon/chart_curve_add.png | Bin 0 -> 761 bytes .../res/icon/chart_curve_delete.png | Bin 0 -> 782 bytes .../res/icon/chart_curve_edit.png | Bin 0 -> 822 bytes .../res/icon/chart_curve_error.png | Bin 0 -> 837 bytes .../res/icon/chart_curve_go.png | Bin 0 -> 823 bytes .../res/icon/chart_curve_link.png | Bin 0 -> 829 bytes .../FineUI.Examples/res/icon/chart_line.png | Bin 0 -> 526 bytes .../res/icon/chart_line_add.png | Bin 0 -> 655 bytes .../res/icon/chart_line_delete.png | Bin 0 -> 675 bytes .../res/icon/chart_line_edit.png | Bin 0 -> 718 bytes .../res/icon/chart_line_error.png | Bin 0 -> 741 bytes .../res/icon/chart_line_link.png | Bin 0 -> 749 bytes .../res/icon/chart_org_inverted.png | Bin 0 -> 479 bytes .../res/icon/chart_organisation.png | Bin 0 -> 444 bytes .../res/icon/chart_organisation_add.png | Bin 0 -> 551 bytes .../res/icon/chart_organisation_delete.png | Bin 0 -> 563 bytes .../FineUI.Examples/res/icon/chart_pie.png | Bin 0 -> 918 bytes .../res/icon/chart_pie_add.png | Bin 0 -> 975 bytes .../res/icon/chart_pie_delete.png | Bin 0 -> 983 bytes .../res/icon/chart_pie_edit.png | Bin 0 -> 986 bytes .../res/icon/chart_pie_error.png | Bin 0 -> 989 bytes .../res/icon/chart_pie_lightning.png | Bin 0 -> 956 bytes .../res/icon/chart_pie_link.png | Bin 0 -> 1021 bytes .../FineUI.Examples/res/icon/check_error.png | Bin 0 -> 798 bytes .../FineUI.Examples/res/icon/clipboard.png | Bin 0 -> 534 bytes FineUI_v6/FineUI.Examples/res/icon/clock.png | Bin 0 -> 882 bytes .../FineUI.Examples/res/icon/clock_add.png | Bin 0 -> 925 bytes .../FineUI.Examples/res/icon/clock_delete.png | Bin 0 -> 952 bytes .../FineUI.Examples/res/icon/clock_edit.png | Bin 0 -> 967 bytes .../FineUI.Examples/res/icon/clock_error.png | Bin 0 -> 953 bytes .../FineUI.Examples/res/icon/clock_go.png | Bin 0 -> 959 bytes .../FineUI.Examples/res/icon/clock_link.png | Bin 0 -> 961 bytes .../FineUI.Examples/res/icon/clock_pause.png | Bin 0 -> 927 bytes .../FineUI.Examples/res/icon/clock_play.png | Bin 0 -> 943 bytes .../FineUI.Examples/res/icon/clock_red.png | Bin 0 -> 889 bytes .../FineUI.Examples/res/icon/clock_start.png | Bin 0 -> 1006 bytes .../FineUI.Examples/res/icon/clock_stop.png | Bin 0 -> 922 bytes .../FineUI.Examples/res/icon/clock_stop_2.png | Bin 0 -> 980 bytes FineUI_v6/FineUI.Examples/res/icon/cmy.png | Bin 0 -> 540 bytes FineUI_v6/FineUI.Examples/res/icon/cog.png | Bin 0 -> 512 bytes .../FineUI.Examples/res/icon/cog_add.png | Bin 0 -> 814 bytes .../FineUI.Examples/res/icon/cog_delete.png | Bin 0 -> 847 bytes .../FineUI.Examples/res/icon/cog_edit.png | Bin 0 -> 865 bytes .../FineUI.Examples/res/icon/cog_error.png | Bin 0 -> 869 bytes FineUI_v6/FineUI.Examples/res/icon/cog_go.png | Bin 0 -> 859 bytes .../FineUI.Examples/res/icon/cog_start.png | Bin 0 -> 891 bytes .../FineUI.Examples/res/icon/cog_stop.png | Bin 0 -> 859 bytes FineUI_v6/FineUI.Examples/res/icon/coins.png | Bin 0 -> 732 bytes .../FineUI.Examples/res/icon/coins_add.png | Bin 0 -> 789 bytes .../FineUI.Examples/res/icon/coins_delete.png | Bin 0 -> 775 bytes FineUI_v6/FineUI.Examples/res/icon/color.png | Bin 0 -> 492 bytes .../FineUI.Examples/res/icon/color_swatch.png | Bin 0 -> 209 bytes .../FineUI.Examples/res/icon/color_wheel.png | Bin 0 -> 892 bytes .../FineUI.Examples/res/icon/comment.png | Bin 0 -> 413 bytes .../FineUI.Examples/res/icon/comment_add.png | Bin 0 -> 530 bytes .../res/icon/comment_delete.png | Bin 0 -> 548 bytes .../FineUI.Examples/res/icon/comment_dull.png | Bin 0 -> 506 bytes .../FineUI.Examples/res/icon/comment_edit.png | Bin 0 -> 644 bytes .../FineUI.Examples/res/icon/comment_play.png | Bin 0 -> 613 bytes .../res/icon/comment_record.png | Bin 0 -> 599 bytes .../FineUI.Examples/res/icon/comments.png | Bin 0 -> 557 bytes .../FineUI.Examples/res/icon/comments_add.png | Bin 0 -> 648 bytes .../res/icon/comments_delete.png | Bin 0 -> 670 bytes .../FineUI.Examples/res/icon/compass.png | Bin 0 -> 777 bytes .../FineUI.Examples/res/icon/compress.png | Bin 0 -> 766 bytes .../FineUI.Examples/res/icon/computer.png | Bin 0 -> 667 bytes .../FineUI.Examples/res/icon/computer_add.png | Bin 0 -> 781 bytes .../res/icon/computer_connect.png | Bin 0 -> 802 bytes .../res/icon/computer_delete.png | Bin 0 -> 775 bytes .../res/icon/computer_edit.png | Bin 0 -> 792 bytes .../res/icon/computer_error.png | Bin 0 -> 784 bytes .../FineUI.Examples/res/icon/computer_go.png | Bin 0 -> 777 bytes .../FineUI.Examples/res/icon/computer_key.png | Bin 0 -> 771 bytes .../res/icon/computer_link.png | Bin 0 -> 792 bytes .../res/icon/computer_magnify.png | Bin 0 -> 766 bytes .../FineUI.Examples/res/icon/computer_off.png | Bin 0 -> 657 bytes .../res/icon/computer_start.png | Bin 0 -> 814 bytes .../res/icon/computer_stop.png | Bin 0 -> 777 bytes .../res/icon/computer_wrench.png | Bin 0 -> 765 bytes .../FineUI.Examples/res/icon/connect.png | Bin 0 -> 748 bytes .../FineUI.Examples/res/icon/contrast.png | Bin 0 -> 434 bytes .../res/icon/contrast_decrease.png | Bin 0 -> 695 bytes .../res/icon/contrast_high.png | Bin 0 -> 435 bytes .../res/icon/contrast_increase.png | Bin 0 -> 717 bytes .../FineUI.Examples/res/icon/contrast_low.png | Bin 0 -> 421 bytes .../FineUI.Examples/res/icon/control_add.png | Bin 0 -> 623 bytes .../res/icon/control_add_blue.png | Bin 0 -> 819 bytes .../res/icon/control_blank.png | Bin 0 -> 578 bytes .../res/icon/control_blank_blue.png | Bin 0 -> 759 bytes .../res/icon/control_eject.png | Bin 0 -> 603 bytes .../res/icon/control_eject_blue.png | Bin 0 -> 727 bytes .../FineUI.Examples/res/icon/control_end.png | Bin 0 -> 621 bytes .../res/icon/control_end_blue.png | Bin 0 -> 737 bytes .../res/icon/control_equalizer.png | Bin 0 -> 432 bytes .../res/icon/control_equalizer_blue.png | Bin 0 -> 764 bytes .../res/icon/control_fastforward.png | Bin 0 -> 607 bytes .../res/icon/control_fastforward_blue.png | Bin 0 -> 736 bytes .../res/icon/control_pause.png | Bin 0 -> 598 bytes .../res/icon/control_pause_blue.png | Bin 0 -> 721 bytes .../FineUI.Examples/res/icon/control_play.png | Bin 0 -> 592 bytes .../res/icon/control_play_blue.png | Bin 0 -> 717 bytes .../res/icon/control_power.png | Bin 0 -> 679 bytes .../res/icon/control_power_blue.png | Bin 0 -> 831 bytes .../res/icon/control_record.png | Bin 0 -> 661 bytes .../res/icon/control_record_blue.png | Bin 0 -> 826 bytes .../res/icon/control_remove.png | Bin 0 -> 597 bytes .../res/icon/control_remove_blue.png | Bin 0 -> 785 bytes .../res/icon/control_repeat.png | Bin 0 -> 422 bytes .../res/icon/control_repeat_blue.png | Bin 0 -> 750 bytes .../res/icon/control_rewind.png | Bin 0 -> 614 bytes .../res/icon/control_rewind_blue.png | Bin 0 -> 745 bytes .../res/icon/control_start.png | Bin 0 -> 604 bytes .../res/icon/control_start_blue.png | Bin 0 -> 720 bytes .../FineUI.Examples/res/icon/control_stop.png | Bin 0 -> 403 bytes .../res/icon/control_stop_blue.png | Bin 0 -> 695 bytes .../FineUI.Examples/res/icon/controller.png | Bin 0 -> 666 bytes .../res/icon/controller_add.png | Bin 0 -> 759 bytes .../res/icon/controller_delete.png | Bin 0 -> 770 bytes .../res/icon/controller_error.png | Bin 0 -> 815 bytes .../FineUI.Examples/res/icon/creditcards.png | Bin 0 -> 693 bytes FineUI_v6/FineUI.Examples/res/icon/cross.png | Bin 0 -> 655 bytes FineUI_v6/FineUI.Examples/res/icon/css.png | Bin 0 -> 524 bytes .../FineUI.Examples/res/icon/css_add.png | Bin 0 -> 666 bytes .../FineUI.Examples/res/icon/css_delete.png | Bin 0 -> 654 bytes .../FineUI.Examples/res/icon/css_error.png | Bin 0 -> 668 bytes FineUI_v6/FineUI.Examples/res/icon/css_go.png | Bin 0 -> 655 bytes .../FineUI.Examples/res/icon/css_valid.png | Bin 0 -> 661 bytes FineUI_v6/FineUI.Examples/res/icon/cup.png | Bin 0 -> 633 bytes .../FineUI.Examples/res/icon/cup_add.png | Bin 0 -> 715 bytes .../FineUI.Examples/res/icon/cup_black.png | Bin 0 -> 650 bytes .../FineUI.Examples/res/icon/cup_delete.png | Bin 0 -> 731 bytes .../FineUI.Examples/res/icon/cup_edit.png | Bin 0 -> 778 bytes .../FineUI.Examples/res/icon/cup_error.png | Bin 0 -> 790 bytes FineUI_v6/FineUI.Examples/res/icon/cup_go.png | Bin 0 -> 780 bytes .../FineUI.Examples/res/icon/cup_green.png | Bin 0 -> 664 bytes .../FineUI.Examples/res/icon/cup_key.png | Bin 0 -> 776 bytes .../FineUI.Examples/res/icon/cup_link.png | Bin 0 -> 760 bytes .../FineUI.Examples/res/icon/cup_tea.png | Bin 0 -> 661 bytes FineUI_v6/FineUI.Examples/res/icon/cursor.png | Bin 0 -> 354 bytes .../FineUI.Examples/res/icon/cursor_small.png | Bin 0 -> 331 bytes FineUI_v6/FineUI.Examples/res/icon/cut.png | Bin 0 -> 648 bytes .../FineUI.Examples/res/icon/cut_red.png | Bin 0 -> 650 bytes .../FineUI.Examples/res/icon/database.png | Bin 0 -> 390 bytes .../FineUI.Examples/res/icon/database_add.png | Bin 0 -> 658 bytes .../res/icon/database_connect.png | Bin 0 -> 763 bytes .../res/icon/database_copy.png | Bin 0 -> 759 bytes .../res/icon/database_delete.png | Bin 0 -> 659 bytes .../res/icon/database_edit.png | Bin 0 -> 767 bytes .../res/icon/database_error.png | Bin 0 -> 682 bytes .../res/icon/database_gear.png | Bin 0 -> 468 bytes .../FineUI.Examples/res/icon/database_go.png | Bin 0 -> 698 bytes .../FineUI.Examples/res/icon/database_key.png | Bin 0 -> 764 bytes .../res/icon/database_lightning.png | Bin 0 -> 775 bytes .../res/icon/database_link.png | Bin 0 -> 679 bytes .../res/icon/database_refresh.png | Bin 0 -> 770 bytes .../res/icon/database_save.png | Bin 0 -> 755 bytes .../res/icon/database_start.png | Bin 0 -> 721 bytes .../res/icon/database_stop.png | Bin 0 -> 695 bytes .../res/icon/database_table.png | Bin 0 -> 726 bytes .../res/icon/database_wrench.png | Bin 0 -> 690 bytes .../res/icon/database_yellow.png | Bin 0 -> 642 bytes .../res/icon/database_yellow_start.png | Bin 0 -> 768 bytes .../res/icon/database_yellow_stop.png | Bin 0 -> 748 bytes FineUI_v6/FineUI.Examples/res/icon/date.png | Bin 0 -> 626 bytes .../FineUI.Examples/res/icon/date_add.png | Bin 0 -> 703 bytes .../FineUI.Examples/res/icon/date_delete.png | Bin 0 -> 716 bytes .../FineUI.Examples/res/icon/date_edit.png | Bin 0 -> 799 bytes .../FineUI.Examples/res/icon/date_error.png | Bin 0 -> 753 bytes .../FineUI.Examples/res/icon/date_go.png | Bin 0 -> 753 bytes .../FineUI.Examples/res/icon/date_link.png | Bin 0 -> 764 bytes .../FineUI.Examples/res/icon/date_magnify.png | Bin 0 -> 711 bytes .../FineUI.Examples/res/icon/date_next.png | Bin 0 -> 688 bytes .../res/icon/date_previous.png | Bin 0 -> 720 bytes .../FineUI.Examples/res/icon/decline.png | Bin 0 -> 781 bytes FineUI_v6/FineUI.Examples/res/icon/delete.png | Bin 0 -> 715 bytes .../res/icon/device_stylus.png | Bin 0 -> 580 bytes .../FineUI.Examples/res/icon/disconnect.png | Bin 0 -> 796 bytes FineUI_v6/FineUI.Examples/res/icon/disk.png | Bin 0 -> 620 bytes .../FineUI.Examples/res/icon/disk_black.png | Bin 0 -> 591 bytes .../res/icon/disk_black_error.png | Bin 0 -> 794 bytes .../res/icon/disk_black_magnify.png | Bin 0 -> 740 bytes .../res/icon/disk_download.png | Bin 0 -> 636 bytes .../FineUI.Examples/res/icon/disk_edit.png | Bin 0 -> 857 bytes .../FineUI.Examples/res/icon/disk_error.png | Bin 0 -> 808 bytes .../FineUI.Examples/res/icon/disk_magnify.png | Bin 0 -> 771 bytes .../res/icon/disk_multiple.png | Bin 0 -> 691 bytes .../FineUI.Examples/res/icon/disk_upload.png | Bin 0 -> 628 bytes FineUI_v6/FineUI.Examples/res/icon/door.png | Bin 0 -> 412 bytes .../FineUI.Examples/res/icon/door_error.png | Bin 0 -> 595 bytes .../FineUI.Examples/res/icon/door_in.png | Bin 0 -> 693 bytes .../FineUI.Examples/res/icon/door_open.png | Bin 0 -> 508 bytes .../FineUI.Examples/res/icon/door_out.png | Bin 0 -> 688 bytes FineUI_v6/FineUI.Examples/res/icon/drink.png | Bin 0 -> 692 bytes .../FineUI.Examples/res/icon/drink_empty.png | Bin 0 -> 433 bytes .../FineUI.Examples/res/icon/drink_red.png | Bin 0 -> 733 bytes FineUI_v6/FineUI.Examples/res/icon/drive.png | Bin 0 -> 346 bytes .../FineUI.Examples/res/icon/drive_add.png | Bin 0 -> 623 bytes .../FineUI.Examples/res/icon/drive_burn.png | Bin 0 -> 608 bytes .../FineUI.Examples/res/icon/drive_cd.png | Bin 0 -> 734 bytes .../res/icon/drive_cd_empty.png | Bin 0 -> 341 bytes .../FineUI.Examples/res/icon/drive_cdr.png | Bin 0 -> 751 bytes .../FineUI.Examples/res/icon/drive_delete.png | Bin 0 -> 628 bytes .../FineUI.Examples/res/icon/drive_disk.png | Bin 0 -> 695 bytes .../FineUI.Examples/res/icon/drive_edit.png | Bin 0 -> 714 bytes .../FineUI.Examples/res/icon/drive_error.png | Bin 0 -> 705 bytes .../FineUI.Examples/res/icon/drive_go.png | Bin 0 -> 661 bytes .../FineUI.Examples/res/icon/drive_key.png | Bin 0 -> 681 bytes .../FineUI.Examples/res/icon/drive_link.png | Bin 0 -> 679 bytes .../res/icon/drive_magnify.png | Bin 0 -> 641 bytes .../res/icon/drive_network.png | Bin 0 -> 585 bytes .../res/icon/drive_network_error.png | Bin 0 -> 786 bytes .../res/icon/drive_network_stop.png | Bin 0 -> 723 bytes .../FineUI.Examples/res/icon/drive_rename.png | Bin 0 -> 494 bytes .../FineUI.Examples/res/icon/drive_user.png | Bin 0 -> 712 bytes .../FineUI.Examples/res/icon/drive_web.png | Bin 0 -> 686 bytes FineUI_v6/FineUI.Examples/res/icon/dvd.png | Bin 0 -> 764 bytes .../FineUI.Examples/res/icon/dvd_add.png | Bin 0 -> 788 bytes .../FineUI.Examples/res/icon/dvd_delete.png | Bin 0 -> 800 bytes .../FineUI.Examples/res/icon/dvd_edit.png | Bin 0 -> 844 bytes .../FineUI.Examples/res/icon/dvd_error.png | Bin 0 -> 854 bytes FineUI_v6/FineUI.Examples/res/icon/dvd_go.png | Bin 0 -> 854 bytes .../FineUI.Examples/res/icon/dvd_key.png | Bin 0 -> 816 bytes .../FineUI.Examples/res/icon/dvd_link.png | Bin 0 -> 819 bytes .../FineUI.Examples/res/icon/dvd_start.png | Bin 0 -> 892 bytes .../FineUI.Examples/res/icon/dvd_stop.png | Bin 0 -> 870 bytes .../FineUI.Examples/res/icon/eject_blue.png | Bin 0 -> 513 bytes .../FineUI.Examples/res/icon/eject_green.png | Bin 0 -> 509 bytes FineUI_v6/FineUI.Examples/res/icon/email.png | Bin 0 -> 641 bytes .../FineUI.Examples/res/icon/email_add.png | Bin 0 -> 761 bytes .../FineUI.Examples/res/icon/email_attach.png | Bin 0 -> 793 bytes .../FineUI.Examples/res/icon/email_delete.png | Bin 0 -> 756 bytes .../FineUI.Examples/res/icon/email_edit.png | Bin 0 -> 756 bytes .../FineUI.Examples/res/icon/email_error.png | Bin 0 -> 792 bytes .../FineUI.Examples/res/icon/email_go.png | Bin 0 -> 754 bytes .../FineUI.Examples/res/icon/email_link.png | Bin 0 -> 821 bytes .../res/icon/email_magnify.png | Bin 0 -> 747 bytes .../FineUI.Examples/res/icon/email_open.png | Bin 0 -> 783 bytes .../res/icon/email_open_image.png | Bin 0 -> 811 bytes .../FineUI.Examples/res/icon/email_star.png | Bin 0 -> 739 bytes .../FineUI.Examples/res/icon/email_start.png | Bin 0 -> 802 bytes .../FineUI.Examples/res/icon/email_stop.png | Bin 0 -> 778 bytes .../res/icon/email_transfer.png | Bin 0 -> 817 bytes .../res/icon/emoticon_evilgrin.png | Bin 0 -> 727 bytes .../res/icon/emoticon_grin.png | Bin 0 -> 714 bytes .../res/icon/emoticon_happy.png | Bin 0 -> 731 bytes .../res/icon/emoticon_smile.png | Bin 0 -> 725 bytes .../res/icon/emoticon_surprised.png | Bin 0 -> 741 bytes .../res/icon/emoticon_tongue.png | Bin 0 -> 727 bytes .../res/icon/emoticon_unhappy.png | Bin 0 -> 723 bytes .../res/icon/emoticon_waii.png | Bin 0 -> 737 bytes .../res/icon/emoticon_wink.png | Bin 0 -> 712 bytes FineUI_v6/FineUI.Examples/res/icon/erase.png | Bin 0 -> 585 bytes FineUI_v6/FineUI.Examples/res/icon/error.png | Bin 0 -> 666 bytes .../FineUI.Examples/res/icon/error_add.png | Bin 0 -> 710 bytes .../FineUI.Examples/res/icon/error_delete.png | Bin 0 -> 729 bytes .../FineUI.Examples/res/icon/error_go.png | Bin 0 -> 734 bytes .../FineUI.Examples/res/icon/exclamation.png | Bin 0 -> 701 bytes FineUI_v6/FineUI.Examples/res/icon/eye.png | Bin 0 -> 750 bytes FineUI_v6/FineUI.Examples/res/icon/eyes.png | Bin 0 -> 512 bytes FineUI_v6/FineUI.Examples/res/icon/feed.png | Bin 0 -> 691 bytes .../FineUI.Examples/res/icon/feed_add.png | Bin 0 -> 763 bytes .../FineUI.Examples/res/icon/feed_delete.png | Bin 0 -> 746 bytes .../FineUI.Examples/res/icon/feed_disk.png | Bin 0 -> 738 bytes .../FineUI.Examples/res/icon/feed_edit.png | Bin 0 -> 801 bytes .../FineUI.Examples/res/icon/feed_error.png | Bin 0 -> 770 bytes .../FineUI.Examples/res/icon/feed_go.png | Bin 0 -> 761 bytes .../FineUI.Examples/res/icon/feed_key.png | Bin 0 -> 771 bytes .../FineUI.Examples/res/icon/feed_link.png | Bin 0 -> 806 bytes .../FineUI.Examples/res/icon/feed_magnify.png | Bin 0 -> 737 bytes .../FineUI.Examples/res/icon/feed_star.png | Bin 0 -> 775 bytes FineUI_v6/FineUI.Examples/res/icon/female.png | Bin 0 -> 590 bytes FineUI_v6/FineUI.Examples/res/icon/film.png | Bin 0 -> 653 bytes .../FineUI.Examples/res/icon/film_add.png | Bin 0 -> 739 bytes .../FineUI.Examples/res/icon/film_delete.png | Bin 0 -> 730 bytes .../FineUI.Examples/res/icon/film_edit.png | Bin 0 -> 855 bytes .../FineUI.Examples/res/icon/film_eject.png | Bin 0 -> 759 bytes .../FineUI.Examples/res/icon/film_error.png | Bin 0 -> 800 bytes .../FineUI.Examples/res/icon/film_go.png | Bin 0 -> 813 bytes .../FineUI.Examples/res/icon/film_key.png | Bin 0 -> 835 bytes .../FineUI.Examples/res/icon/film_link.png | Bin 0 -> 830 bytes .../FineUI.Examples/res/icon/film_magnify.png | Bin 0 -> 761 bytes .../FineUI.Examples/res/icon/film_save.png | Bin 0 -> 806 bytes .../FineUI.Examples/res/icon/film_star.png | Bin 0 -> 748 bytes .../FineUI.Examples/res/icon/film_start.png | Bin 0 -> 795 bytes .../FineUI.Examples/res/icon/film_stop.png | Bin 0 -> 774 bytes FineUI_v6/FineUI.Examples/res/icon/find.png | Bin 0 -> 659 bytes .../FineUI.Examples/res/icon/finger_point.png | Bin 0 -> 642 bytes .../FineUI.Examples/res/icon/flag_ad.png | Bin 0 -> 643 bytes .../FineUI.Examples/res/icon/flag_ae.png | Bin 0 -> 408 bytes .../FineUI.Examples/res/icon/flag_af.png | Bin 0 -> 604 bytes .../FineUI.Examples/res/icon/flag_ag.png | Bin 0 -> 591 bytes .../FineUI.Examples/res/icon/flag_ai.png | Bin 0 -> 643 bytes .../FineUI.Examples/res/icon/flag_al.png | Bin 0 -> 600 bytes .../FineUI.Examples/res/icon/flag_am.png | Bin 0 -> 497 bytes .../FineUI.Examples/res/icon/flag_an.png | Bin 0 -> 488 bytes .../FineUI.Examples/res/icon/flag_ao.png | Bin 0 -> 428 bytes .../FineUI.Examples/res/icon/flag_ar.png | Bin 0 -> 506 bytes .../FineUI.Examples/res/icon/flag_as.png | Bin 0 -> 647 bytes .../FineUI.Examples/res/icon/flag_at.png | Bin 0 -> 403 bytes .../FineUI.Examples/res/icon/flag_au.png | Bin 0 -> 673 bytes .../FineUI.Examples/res/icon/flag_aw.png | Bin 0 -> 524 bytes .../FineUI.Examples/res/icon/flag_ax.png | Bin 0 -> 663 bytes .../FineUI.Examples/res/icon/flag_az.png | Bin 0 -> 589 bytes .../FineUI.Examples/res/icon/flag_ba.png | Bin 0 -> 593 bytes .../FineUI.Examples/res/icon/flag_bb.png | Bin 0 -> 585 bytes .../FineUI.Examples/res/icon/flag_bd.png | Bin 0 -> 504 bytes .../FineUI.Examples/res/icon/flag_be.png | Bin 0 -> 449 bytes .../FineUI.Examples/res/icon/flag_bf.png | Bin 0 -> 497 bytes .../FineUI.Examples/res/icon/flag_bg.png | Bin 0 -> 462 bytes .../FineUI.Examples/res/icon/flag_bh.png | Bin 0 -> 457 bytes .../FineUI.Examples/res/icon/flag_bi.png | Bin 0 -> 675 bytes .../FineUI.Examples/res/icon/flag_bj.png | Bin 0 -> 486 bytes .../FineUI.Examples/res/icon/flag_black.png | Bin 0 -> 670 bytes .../FineUI.Examples/res/icon/flag_blue.png | Bin 0 -> 671 bytes .../FineUI.Examples/res/icon/flag_bm.png | Bin 0 -> 611 bytes .../FineUI.Examples/res/icon/flag_bn.png | Bin 0 -> 639 bytes .../FineUI.Examples/res/icon/flag_bo.png | Bin 0 -> 500 bytes .../FineUI.Examples/res/icon/flag_br.png | Bin 0 -> 593 bytes .../FineUI.Examples/res/icon/flag_bs.png | Bin 0 -> 526 bytes .../FineUI.Examples/res/icon/flag_bt.png | Bin 0 -> 631 bytes .../FineUI.Examples/res/icon/flag_bv.png | Bin 0 -> 512 bytes .../FineUI.Examples/res/icon/flag_bw.png | Bin 0 -> 443 bytes .../FineUI.Examples/res/icon/flag_by.png | Bin 0 -> 514 bytes .../FineUI.Examples/res/icon/flag_bz.png | Bin 0 -> 600 bytes .../FineUI.Examples/res/icon/flag_ca.png | Bin 0 -> 628 bytes .../res/icon/flag_catalonia.png | Bin 0 -> 398 bytes .../FineUI.Examples/res/icon/flag_cc.png | Bin 0 -> 625 bytes .../FineUI.Examples/res/icon/flag_cd.png | Bin 0 -> 528 bytes .../FineUI.Examples/res/icon/flag_cf.png | Bin 0 -> 614 bytes .../FineUI.Examples/res/icon/flag_cg.png | Bin 0 -> 521 bytes .../FineUI.Examples/res/icon/flag_ch.png | Bin 0 -> 367 bytes .../FineUI.Examples/res/icon/flag_checked.png | Bin 0 -> 702 bytes .../FineUI.Examples/res/icon/flag_ci.png | Bin 0 -> 453 bytes .../FineUI.Examples/res/icon/flag_ck.png | Bin 0 -> 586 bytes .../FineUI.Examples/res/icon/flag_cl.png | Bin 0 -> 450 bytes .../FineUI.Examples/res/icon/flag_cm.png | Bin 0 -> 525 bytes .../FineUI.Examples/res/icon/flag_cn.png | Bin 0 -> 472 bytes .../FineUI.Examples/res/icon/flag_co.png | Bin 0 -> 483 bytes .../FineUI.Examples/res/icon/flag_cr.png | Bin 0 -> 477 bytes .../FineUI.Examples/res/icon/flag_cs.png | Bin 0 -> 439 bytes .../FineUI.Examples/res/icon/flag_cu.png | Bin 0 -> 563 bytes .../FineUI.Examples/res/icon/flag_cv.png | Bin 0 -> 529 bytes .../FineUI.Examples/res/icon/flag_cx.png | Bin 0 -> 608 bytes .../FineUI.Examples/res/icon/flag_cy.png | Bin 0 -> 428 bytes .../FineUI.Examples/res/icon/flag_cz.png | Bin 0 -> 476 bytes .../FineUI.Examples/res/icon/flag_de.png | Bin 0 -> 545 bytes .../FineUI.Examples/res/icon/flag_dj.png | Bin 0 -> 572 bytes .../FineUI.Examples/res/icon/flag_dk.png | Bin 0 -> 495 bytes .../FineUI.Examples/res/icon/flag_dm.png | Bin 0 -> 620 bytes .../FineUI.Examples/res/icon/flag_do.png | Bin 0 -> 508 bytes .../FineUI.Examples/res/icon/flag_dz.png | Bin 0 -> 582 bytes .../FineUI.Examples/res/icon/flag_ec.png | Bin 0 -> 500 bytes .../FineUI.Examples/res/icon/flag_ee.png | Bin 0 -> 429 bytes .../FineUI.Examples/res/icon/flag_eg.png | Bin 0 -> 465 bytes .../FineUI.Examples/res/icon/flag_eh.png | Bin 0 -> 508 bytes .../FineUI.Examples/res/icon/flag_england.png | Bin 0 -> 496 bytes .../FineUI.Examples/res/icon/flag_er.png | Bin 0 -> 653 bytes .../FineUI.Examples/res/icon/flag_es.png | Bin 0 -> 469 bytes .../FineUI.Examples/res/icon/flag_et.png | Bin 0 -> 592 bytes .../res/icon/flag_europeanunion.png | Bin 0 -> 479 bytes .../FineUI.Examples/res/icon/flag_fam.png | Bin 0 -> 532 bytes .../FineUI.Examples/res/icon/flag_fi.png | Bin 0 -> 489 bytes .../FineUI.Examples/res/icon/flag_fj.png | Bin 0 -> 610 bytes .../FineUI.Examples/res/icon/flag_fk.png | Bin 0 -> 648 bytes .../FineUI.Examples/res/icon/flag_fm.png | Bin 0 -> 552 bytes .../FineUI.Examples/res/icon/flag_fo.png | Bin 0 -> 474 bytes .../FineUI.Examples/res/icon/flag_fr.png | Bin 0 -> 545 bytes .../FineUI.Examples/res/icon/flag_france.png | Bin 0 -> 707 bytes .../FineUI.Examples/res/icon/flag_ga.png | Bin 0 -> 489 bytes .../FineUI.Examples/res/icon/flag_gb.png | Bin 0 -> 599 bytes .../FineUI.Examples/res/icon/flag_gd.png | Bin 0 -> 637 bytes .../FineUI.Examples/res/icon/flag_ge.png | Bin 0 -> 594 bytes .../FineUI.Examples/res/icon/flag_gf.png | Bin 0 -> 545 bytes .../FineUI.Examples/res/icon/flag_gg.png | Bin 0 -> 887 bytes .../FineUI.Examples/res/icon/flag_gh.png | Bin 0 -> 490 bytes .../FineUI.Examples/res/icon/flag_gi.png | Bin 0 -> 463 bytes .../FineUI.Examples/res/icon/flag_gl.png | Bin 0 -> 470 bytes .../FineUI.Examples/res/icon/flag_gm.png | Bin 0 -> 493 bytes .../FineUI.Examples/res/icon/flag_gn.png | Bin 0 -> 480 bytes .../FineUI.Examples/res/icon/flag_gp.png | Bin 0 -> 488 bytes .../FineUI.Examples/res/icon/flag_gq.png | Bin 0 -> 537 bytes .../FineUI.Examples/res/icon/flag_gr.png | Bin 0 -> 487 bytes .../FineUI.Examples/res/icon/flag_green.png | Bin 0 -> 672 bytes .../FineUI.Examples/res/icon/flag_grey.png | Bin 0 -> 666 bytes .../FineUI.Examples/res/icon/flag_gs.png | Bin 0 -> 630 bytes .../FineUI.Examples/res/icon/flag_gt.png | Bin 0 -> 493 bytes .../FineUI.Examples/res/icon/flag_gu.png | Bin 0 -> 509 bytes .../FineUI.Examples/res/icon/flag_gw.png | Bin 0 -> 516 bytes .../FineUI.Examples/res/icon/flag_gy.png | Bin 0 -> 645 bytes .../FineUI.Examples/res/icon/flag_hk.png | Bin 0 -> 527 bytes .../FineUI.Examples/res/icon/flag_hm.png | Bin 0 -> 673 bytes .../FineUI.Examples/res/icon/flag_hn.png | Bin 0 -> 537 bytes .../FineUI.Examples/res/icon/flag_hr.png | Bin 0 -> 524 bytes .../FineUI.Examples/res/icon/flag_ht.png | Bin 0 -> 487 bytes .../FineUI.Examples/res/icon/flag_hu.png | Bin 0 -> 432 bytes .../FineUI.Examples/res/icon/flag_id.png | Bin 0 -> 430 bytes .../FineUI.Examples/res/icon/flag_ie.png | Bin 0 -> 481 bytes .../FineUI.Examples/res/icon/flag_il.png | Bin 0 -> 431 bytes .../FineUI.Examples/res/icon/flag_in.png | Bin 0 -> 503 bytes .../FineUI.Examples/res/icon/flag_io.png | Bin 0 -> 658 bytes .../FineUI.Examples/res/icon/flag_iq.png | Bin 0 -> 515 bytes .../FineUI.Examples/res/icon/flag_ir.png | Bin 0 -> 512 bytes .../FineUI.Examples/res/icon/flag_is.png | Bin 0 -> 532 bytes .../FineUI.Examples/res/icon/flag_it.png | Bin 0 -> 420 bytes .../FineUI.Examples/res/icon/flag_jm.png | Bin 0 -> 637 bytes .../FineUI.Examples/res/icon/flag_jo.png | Bin 0 -> 473 bytes .../FineUI.Examples/res/icon/flag_jp.png | Bin 0 -> 420 bytes .../FineUI.Examples/res/icon/flag_ke.png | Bin 0 -> 569 bytes .../FineUI.Examples/res/icon/flag_kg.png | Bin 0 -> 510 bytes .../FineUI.Examples/res/icon/flag_kh.png | Bin 0 -> 549 bytes .../FineUI.Examples/res/icon/flag_ki.png | Bin 0 -> 656 bytes .../FineUI.Examples/res/icon/flag_km.png | Bin 0 -> 577 bytes .../FineUI.Examples/res/icon/flag_kn.png | Bin 0 -> 604 bytes .../FineUI.Examples/res/icon/flag_kp.png | Bin 0 -> 561 bytes .../FineUI.Examples/res/icon/flag_kr.png | Bin 0 -> 592 bytes .../FineUI.Examples/res/icon/flag_kw.png | Bin 0 -> 486 bytes .../FineUI.Examples/res/icon/flag_ky.png | Bin 0 -> 643 bytes .../FineUI.Examples/res/icon/flag_kz.png | Bin 0 -> 616 bytes .../FineUI.Examples/res/icon/flag_la.png | Bin 0 -> 563 bytes .../FineUI.Examples/res/icon/flag_lb.png | Bin 0 -> 517 bytes .../FineUI.Examples/res/icon/flag_lc.png | Bin 0 -> 520 bytes .../FineUI.Examples/res/icon/flag_li.png | Bin 0 -> 537 bytes .../FineUI.Examples/res/icon/flag_lk.png | Bin 0 -> 627 bytes .../FineUI.Examples/res/icon/flag_lr.png | Bin 0 -> 466 bytes .../FineUI.Examples/res/icon/flag_ls.png | Bin 0 -> 628 bytes .../FineUI.Examples/res/icon/flag_lt.png | Bin 0 -> 508 bytes .../FineUI.Examples/res/icon/flag_lu.png | Bin 0 -> 481 bytes .../FineUI.Examples/res/icon/flag_lv.png | Bin 0 -> 465 bytes .../FineUI.Examples/res/icon/flag_ly.png | Bin 0 -> 419 bytes .../FineUI.Examples/res/icon/flag_ma.png | Bin 0 -> 432 bytes .../FineUI.Examples/res/icon/flag_mc.png | Bin 0 -> 380 bytes .../FineUI.Examples/res/icon/flag_md.png | Bin 0 -> 566 bytes .../FineUI.Examples/res/icon/flag_me.png | Bin 0 -> 448 bytes .../FineUI.Examples/res/icon/flag_mg.png | Bin 0 -> 453 bytes .../FineUI.Examples/res/icon/flag_mh.png | Bin 0 -> 628 bytes .../FineUI.Examples/res/icon/flag_mk.png | Bin 0 -> 664 bytes .../FineUI.Examples/res/icon/flag_ml.png | Bin 0 -> 474 bytes .../FineUI.Examples/res/icon/flag_mm.png | Bin 0 -> 483 bytes .../FineUI.Examples/res/icon/flag_mn.png | Bin 0 -> 492 bytes .../FineUI.Examples/res/icon/flag_mo.png | Bin 0 -> 588 bytes .../FineUI.Examples/res/icon/flag_mp.png | Bin 0 -> 597 bytes .../FineUI.Examples/res/icon/flag_mq.png | Bin 0 -> 655 bytes .../FineUI.Examples/res/icon/flag_mr.png | Bin 0 -> 569 bytes .../FineUI.Examples/res/icon/flag_ms.png | Bin 0 -> 614 bytes .../FineUI.Examples/res/icon/flag_mt.png | Bin 0 -> 420 bytes .../FineUI.Examples/res/icon/flag_mu.png | Bin 0 -> 496 bytes .../FineUI.Examples/res/icon/flag_mv.png | Bin 0 -> 542 bytes .../FineUI.Examples/res/icon/flag_mw.png | Bin 0 -> 529 bytes .../FineUI.Examples/res/icon/flag_mx.png | Bin 0 -> 574 bytes .../FineUI.Examples/res/icon/flag_my.png | Bin 0 -> 571 bytes .../FineUI.Examples/res/icon/flag_mz.png | Bin 0 -> 584 bytes .../FineUI.Examples/res/icon/flag_na.png | Bin 0 -> 647 bytes .../FineUI.Examples/res/icon/flag_nc.png | Bin 0 -> 591 bytes .../FineUI.Examples/res/icon/flag_ne.png | Bin 0 -> 537 bytes .../FineUI.Examples/res/icon/flag_nf.png | Bin 0 -> 602 bytes .../FineUI.Examples/res/icon/flag_ng.png | Bin 0 -> 482 bytes .../FineUI.Examples/res/icon/flag_ni.png | Bin 0 -> 508 bytes .../FineUI.Examples/res/icon/flag_nl.png | Bin 0 -> 453 bytes .../FineUI.Examples/res/icon/flag_no.png | Bin 0 -> 512 bytes .../FineUI.Examples/res/icon/flag_np.png | Bin 0 -> 443 bytes .../FineUI.Examples/res/icon/flag_nr.png | Bin 0 -> 527 bytes .../FineUI.Examples/res/icon/flag_nu.png | Bin 0 -> 572 bytes .../FineUI.Examples/res/icon/flag_nz.png | Bin 0 -> 639 bytes .../FineUI.Examples/res/icon/flag_om.png | Bin 0 -> 478 bytes .../FineUI.Examples/res/icon/flag_orange.png | Bin 0 -> 669 bytes .../FineUI.Examples/res/icon/flag_pa.png | Bin 0 -> 519 bytes .../FineUI.Examples/res/icon/flag_pe.png | Bin 0 -> 397 bytes .../FineUI.Examples/res/icon/flag_pf.png | Bin 0 -> 498 bytes .../FineUI.Examples/res/icon/flag_pg.png | Bin 0 -> 593 bytes .../FineUI.Examples/res/icon/flag_ph.png | Bin 0 -> 538 bytes .../FineUI.Examples/res/icon/flag_pink.png | Bin 0 -> 651 bytes .../FineUI.Examples/res/icon/flag_pk.png | Bin 0 -> 569 bytes .../FineUI.Examples/res/icon/flag_pl.png | Bin 0 -> 374 bytes .../FineUI.Examples/res/icon/flag_pm.png | Bin 0 -> 689 bytes .../FineUI.Examples/res/icon/flag_pn.png | Bin 0 -> 657 bytes .../FineUI.Examples/res/icon/flag_pr.png | Bin 0 -> 556 bytes .../FineUI.Examples/res/icon/flag_ps.png | Bin 0 -> 472 bytes .../FineUI.Examples/res/icon/flag_pt.png | Bin 0 -> 554 bytes .../FineUI.Examples/res/icon/flag_purple.png | Bin 0 -> 656 bytes .../FineUI.Examples/res/icon/flag_pw.png | Bin 0 -> 550 bytes .../FineUI.Examples/res/icon/flag_py.png | Bin 0 -> 473 bytes .../FineUI.Examples/res/icon/flag_qa.png | Bin 0 -> 450 bytes .../FineUI.Examples/res/icon/flag_re.png | Bin 0 -> 545 bytes .../FineUI.Examples/res/icon/flag_red.png | Bin 0 -> 665 bytes .../FineUI.Examples/res/icon/flag_ro.png | Bin 0 -> 495 bytes .../FineUI.Examples/res/icon/flag_rs.png | Bin 0 -> 423 bytes .../FineUI.Examples/res/icon/flag_ru.png | Bin 0 -> 420 bytes .../FineUI.Examples/res/icon/flag_rw.png | Bin 0 -> 533 bytes .../FineUI.Examples/res/icon/flag_sa.png | Bin 0 -> 551 bytes .../FineUI.Examples/res/icon/flag_sb.png | Bin 0 -> 624 bytes .../FineUI.Examples/res/icon/flag_sc.png | Bin 0 -> 608 bytes .../res/icon/flag_scotland.png | Bin 0 -> 649 bytes .../FineUI.Examples/res/icon/flag_sd.png | Bin 0 -> 492 bytes .../FineUI.Examples/res/icon/flag_se.png | Bin 0 -> 542 bytes .../FineUI.Examples/res/icon/flag_sg.png | Bin 0 -> 468 bytes .../FineUI.Examples/res/icon/flag_sh.png | Bin 0 -> 645 bytes .../FineUI.Examples/res/icon/flag_si.png | Bin 0 -> 510 bytes .../FineUI.Examples/res/icon/flag_sj.png | Bin 0 -> 512 bytes .../FineUI.Examples/res/icon/flag_sk.png | Bin 0 -> 562 bytes .../FineUI.Examples/res/icon/flag_sl.png | Bin 0 -> 436 bytes .../FineUI.Examples/res/icon/flag_sm.png | Bin 0 -> 502 bytes .../FineUI.Examples/res/icon/flag_sn.png | Bin 0 -> 532 bytes .../FineUI.Examples/res/icon/flag_so.png | Bin 0 -> 527 bytes .../FineUI.Examples/res/icon/flag_sr.png | Bin 0 -> 513 bytes .../FineUI.Examples/res/icon/flag_st.png | Bin 0 -> 584 bytes .../FineUI.Examples/res/icon/flag_sv.png | Bin 0 -> 501 bytes .../FineUI.Examples/res/icon/flag_sy.png | Bin 0 -> 422 bytes .../FineUI.Examples/res/icon/flag_sz.png | Bin 0 -> 643 bytes .../FineUI.Examples/res/icon/flag_tc.png | Bin 0 -> 624 bytes .../FineUI.Examples/res/icon/flag_td.png | Bin 0 -> 570 bytes .../FineUI.Examples/res/icon/flag_tf.png | Bin 0 -> 527 bytes .../FineUI.Examples/res/icon/flag_tg.png | Bin 0 -> 562 bytes .../FineUI.Examples/res/icon/flag_th.png | Bin 0 -> 452 bytes .../FineUI.Examples/res/icon/flag_tj.png | Bin 0 -> 496 bytes .../FineUI.Examples/res/icon/flag_tk.png | Bin 0 -> 638 bytes .../FineUI.Examples/res/icon/flag_tl.png | Bin 0 -> 514 bytes .../FineUI.Examples/res/icon/flag_tm.png | Bin 0 -> 593 bytes .../FineUI.Examples/res/icon/flag_tn.png | Bin 0 -> 495 bytes .../FineUI.Examples/res/icon/flag_to.png | Bin 0 -> 426 bytes .../FineUI.Examples/res/icon/flag_tr.png | Bin 0 -> 492 bytes .../FineUI.Examples/res/icon/flag_tt.png | Bin 0 -> 617 bytes .../FineUI.Examples/res/icon/flag_tv.png | Bin 0 -> 536 bytes .../FineUI.Examples/res/icon/flag_tw.png | Bin 0 -> 465 bytes .../FineUI.Examples/res/icon/flag_tz.png | Bin 0 -> 642 bytes .../FineUI.Examples/res/icon/flag_ua.png | Bin 0 -> 446 bytes .../FineUI.Examples/res/icon/flag_ug.png | Bin 0 -> 531 bytes .../FineUI.Examples/res/icon/flag_um.png | Bin 0 -> 571 bytes .../FineUI.Examples/res/icon/flag_us.png | Bin 0 -> 609 bytes .../FineUI.Examples/res/icon/flag_uy.png | Bin 0 -> 532 bytes .../FineUI.Examples/res/icon/flag_uz.png | Bin 0 -> 515 bytes .../FineUI.Examples/res/icon/flag_va.png | Bin 0 -> 553 bytes .../FineUI.Examples/res/icon/flag_vc.png | Bin 0 -> 577 bytes .../FineUI.Examples/res/icon/flag_ve.png | Bin 0 -> 528 bytes .../FineUI.Examples/res/icon/flag_vg.png | Bin 0 -> 630 bytes .../FineUI.Examples/res/icon/flag_vi.png | Bin 0 -> 616 bytes .../FineUI.Examples/res/icon/flag_vn.png | Bin 0 -> 474 bytes .../FineUI.Examples/res/icon/flag_vu.png | Bin 0 -> 604 bytes .../FineUI.Examples/res/icon/flag_wales.png | Bin 0 -> 652 bytes .../FineUI.Examples/res/icon/flag_wf.png | Bin 0 -> 554 bytes .../FineUI.Examples/res/icon/flag_white.png | Bin 0 -> 671 bytes .../FineUI.Examples/res/icon/flag_ws.png | Bin 0 -> 476 bytes .../FineUI.Examples/res/icon/flag_ye.png | Bin 0 -> 413 bytes .../FineUI.Examples/res/icon/flag_yellow.png | Bin 0 -> 671 bytes .../FineUI.Examples/res/icon/flag_yt.png | Bin 0 -> 593 bytes .../FineUI.Examples/res/icon/flag_za.png | Bin 0 -> 642 bytes .../FineUI.Examples/res/icon/flag_zm.png | Bin 0 -> 500 bytes .../FineUI.Examples/res/icon/flag_zw.png | Bin 0 -> 574 bytes .../FineUI.Examples/res/icon/flower_daisy.png | Bin 0 -> 756 bytes FineUI_v6/FineUI.Examples/res/icon/folder.png | Bin 0 -> 537 bytes .../FineUI.Examples/res/icon/folder_add.png | Bin 0 -> 668 bytes .../FineUI.Examples/res/icon/folder_bell.png | Bin 0 -> 781 bytes .../res/icon/folder_bookmark.png | Bin 0 -> 773 bytes .../FineUI.Examples/res/icon/folder_brick.png | Bin 0 -> 735 bytes .../FineUI.Examples/res/icon/folder_bug.png | Bin 0 -> 829 bytes .../res/icon/folder_camera.png | Bin 0 -> 729 bytes .../res/icon/folder_connect.png | Bin 0 -> 732 bytes .../res/icon/folder_database.png | Bin 0 -> 687 bytes .../res/icon/folder_delete.png | Bin 0 -> 666 bytes .../FineUI.Examples/res/icon/folder_edit.png | Bin 0 -> 733 bytes .../FineUI.Examples/res/icon/folder_error.png | Bin 0 -> 727 bytes .../res/icon/folder_explore.png | Bin 0 -> 679 bytes .../FineUI.Examples/res/icon/folder_feed.png | Bin 0 -> 691 bytes .../FineUI.Examples/res/icon/folder_film.png | Bin 0 -> 792 bytes .../FineUI.Examples/res/icon/folder_find.png | Bin 0 -> 795 bytes .../FineUI.Examples/res/icon/folder_font.png | Bin 0 -> 768 bytes .../FineUI.Examples/res/icon/folder_go.png | Bin 0 -> 694 bytes .../FineUI.Examples/res/icon/folder_heart.png | Bin 0 -> 741 bytes .../FineUI.Examples/res/icon/folder_home.png | Bin 0 -> 750 bytes .../FineUI.Examples/res/icon/folder_image.png | Bin 0 -> 677 bytes .../FineUI.Examples/res/icon/folder_key.png | Bin 0 -> 720 bytes .../res/icon/folder_lightbulb.png | Bin 0 -> 741 bytes .../FineUI.Examples/res/icon/folder_link.png | Bin 0 -> 785 bytes .../res/icon/folder_magnify.png | Bin 0 -> 686 bytes .../FineUI.Examples/res/icon/folder_page.png | Bin 0 -> 688 bytes .../res/icon/folder_page_white.png | Bin 0 -> 639 bytes .../res/icon/folder_palette.png | Bin 0 -> 822 bytes .../res/icon/folder_picture.png | Bin 0 -> 713 bytes .../FineUI.Examples/res/icon/folder_star.png | Bin 0 -> 755 bytes .../FineUI.Examples/res/icon/folder_table.png | Bin 0 -> 675 bytes .../FineUI.Examples/res/icon/folder_up.png | Bin 0 -> 653 bytes .../FineUI.Examples/res/icon/folder_user.png | Bin 0 -> 730 bytes .../res/icon/folder_wrench.png | Bin 0 -> 740 bytes FineUI_v6/FineUI.Examples/res/icon/font.png | Bin 0 -> 567 bytes .../FineUI.Examples/res/icon/font_add.png | Bin 0 -> 634 bytes .../FineUI.Examples/res/icon/font_color.png | Bin 0 -> 647 bytes .../FineUI.Examples/res/icon/font_delete.png | Bin 0 -> 661 bytes .../FineUI.Examples/res/icon/font_go.png | Bin 0 -> 700 bytes .../FineUI.Examples/res/icon/font_larger.png | Bin 0 -> 688 bytes .../FineUI.Examples/res/icon/font_smaller.png | Bin 0 -> 678 bytes .../FineUI.Examples/res/icon/forward_blue.png | Bin 0 -> 425 bytes .../res/icon/forward_green.png | Bin 0 -> 433 bytes FineUI_v6/FineUI.Examples/res/icon/group.png | Bin 0 -> 753 bytes .../FineUI.Examples/res/icon/group_add.png | Bin 0 -> 807 bytes .../FineUI.Examples/res/icon/group_delete.png | Bin 0 -> 827 bytes .../FineUI.Examples/res/icon/group_edit.png | Bin 0 -> 785 bytes .../FineUI.Examples/res/icon/group_error.png | Bin 0 -> 842 bytes .../FineUI.Examples/res/icon/group_gear.png | Bin 0 -> 824 bytes .../FineUI.Examples/res/icon/group_go.png | Bin 0 -> 842 bytes .../FineUI.Examples/res/icon/group_key.png | Bin 0 -> 813 bytes .../FineUI.Examples/res/icon/group_link.png | Bin 0 -> 858 bytes FineUI_v6/FineUI.Examples/res/icon/heart.png | Bin 0 -> 749 bytes .../FineUI.Examples/res/icon/heart_add.png | Bin 0 -> 820 bytes .../FineUI.Examples/res/icon/heart_broken.png | Bin 0 -> 838 bytes .../res/icon/heart_connect.png | Bin 0 -> 869 bytes .../FineUI.Examples/res/icon/heart_delete.png | Bin 0 -> 823 bytes FineUI_v6/FineUI.Examples/res/icon/help.png | Bin 0 -> 786 bytes .../FineUI.Examples/res/icon/hourglass.png | Bin 0 -> 744 bytes .../res/icon/hourglass_add.png | Bin 0 -> 814 bytes .../res/icon/hourglass_delete.png | Bin 0 -> 829 bytes .../FineUI.Examples/res/icon/hourglass_go.png | Bin 0 -> 866 bytes .../res/icon/hourglass_link.png | Bin 0 -> 871 bytes FineUI_v6/FineUI.Examples/res/icon/house.png | Bin 0 -> 806 bytes .../res/icon/house_connect.png | Bin 0 -> 896 bytes .../FineUI.Examples/res/icon/house_go.png | Bin 0 -> 861 bytes .../FineUI.Examples/res/icon/house_key.png | Bin 0 -> 897 bytes .../FineUI.Examples/res/icon/house_link.png | Bin 0 -> 868 bytes .../FineUI.Examples/res/icon/house_star.png | Bin 0 -> 884 bytes FineUI_v6/FineUI.Examples/res/icon/html.png | Bin 0 -> 578 bytes .../FineUI.Examples/res/icon/html_add.png | Bin 0 -> 698 bytes .../FineUI.Examples/res/icon/html_delete.png | Bin 0 -> 688 bytes .../FineUI.Examples/res/icon/html_error.png | Bin 0 -> 716 bytes .../FineUI.Examples/res/icon/html_go.png | Bin 0 -> 692 bytes .../FineUI.Examples/res/icon/html_valid.png | Bin 0 -> 704 bytes FineUI_v6/FineUI.Examples/res/icon/image.png | Bin 0 -> 516 bytes .../FineUI.Examples/res/icon/image_add.png | Bin 0 -> 653 bytes .../FineUI.Examples/res/icon/image_delete.png | Bin 0 -> 653 bytes .../FineUI.Examples/res/icon/image_edit.png | Bin 0 -> 783 bytes .../FineUI.Examples/res/icon/image_link.png | Bin 0 -> 773 bytes .../res/icon/image_magnify.png | Bin 0 -> 665 bytes .../FineUI.Examples/res/icon/image_star.png | Bin 0 -> 671 bytes FineUI_v6/FineUI.Examples/res/icon/images.png | Bin 0 -> 661 bytes .../FineUI.Examples/res/icon/information.png | Bin 0 -> 778 bytes FineUI_v6/FineUI.Examples/res/icon/ipod.png | Bin 0 -> 463 bytes .../FineUI.Examples/res/icon/ipod_cast.png | Bin 0 -> 711 bytes .../res/icon/ipod_cast_add.png | Bin 0 -> 796 bytes .../res/icon/ipod_cast_delete.png | Bin 0 -> 809 bytes .../FineUI.Examples/res/icon/ipod_connect.png | Bin 0 -> 697 bytes .../FineUI.Examples/res/icon/ipod_nano.png | Bin 0 -> 463 bytes .../res/icon/ipod_nano_connect.png | Bin 0 -> 664 bytes .../FineUI.Examples/res/icon/ipod_sound.png | Bin 0 -> 678 bytes .../FineUI.Examples/res/icon/joystick.png | Bin 0 -> 559 bytes .../FineUI.Examples/res/icon/joystick_add.png | Bin 0 -> 669 bytes .../res/icon/joystick_connect.png | Bin 0 -> 738 bytes .../res/icon/joystick_delete.png | Bin 0 -> 671 bytes .../res/icon/joystick_error.png | Bin 0 -> 711 bytes FineUI_v6/FineUI.Examples/res/icon/key.png | Bin 0 -> 612 bytes .../FineUI.Examples/res/icon/key_add.png | Bin 0 -> 703 bytes .../FineUI.Examples/res/icon/key_delete.png | Bin 0 -> 724 bytes FineUI_v6/FineUI.Examples/res/icon/key_go.png | Bin 0 -> 744 bytes .../FineUI.Examples/res/icon/key_start.png | Bin 0 -> 833 bytes .../FineUI.Examples/res/icon/key_stop.png | Bin 0 -> 811 bytes .../FineUI.Examples/res/icon/keyboard.png | Bin 0 -> 570 bytes .../FineUI.Examples/res/icon/keyboard_add.png | Bin 0 -> 683 bytes .../res/icon/keyboard_connect.png | Bin 0 -> 735 bytes .../res/icon/keyboard_delete.png | Bin 0 -> 681 bytes .../res/icon/keyboard_magnify.png | Bin 0 -> 651 bytes FineUI_v6/FineUI.Examples/res/icon/laptop.png | Bin 0 -> 626 bytes .../FineUI.Examples/res/icon/laptop_add.png | Bin 0 -> 706 bytes .../res/icon/laptop_connect.png | Bin 0 -> 758 bytes .../res/icon/laptop_delete.png | Bin 0 -> 706 bytes .../FineUI.Examples/res/icon/laptop_disk.png | Bin 0 -> 744 bytes .../FineUI.Examples/res/icon/laptop_edit.png | Bin 0 -> 800 bytes .../FineUI.Examples/res/icon/laptop_error.png | Bin 0 -> 743 bytes .../FineUI.Examples/res/icon/laptop_go.png | Bin 0 -> 735 bytes .../FineUI.Examples/res/icon/laptop_key.png | Bin 0 -> 767 bytes .../FineUI.Examples/res/icon/laptop_link.png | Bin 0 -> 697 bytes .../res/icon/laptop_magnify.png | Bin 0 -> 707 bytes .../FineUI.Examples/res/icon/laptop_start.png | Bin 0 -> 753 bytes .../FineUI.Examples/res/icon/laptop_stop.png | Bin 0 -> 716 bytes .../res/icon/laptop_wrench.png | Bin 0 -> 737 bytes FineUI_v6/FineUI.Examples/res/icon/layers.png | Bin 0 -> 597 bytes FineUI_v6/FineUI.Examples/res/icon/layout.png | Bin 0 -> 480 bytes .../FineUI.Examples/res/icon/layout_add.png | Bin 0 -> 577 bytes .../res/icon/layout_content.png | Bin 0 -> 519 bytes .../res/icon/layout_delete.png | Bin 0 -> 608 bytes .../FineUI.Examples/res/icon/layout_edit.png | Bin 0 -> 716 bytes .../FineUI.Examples/res/icon/layout_error.png | Bin 0 -> 666 bytes .../res/icon/layout_header.png | Bin 0 -> 500 bytes .../FineUI.Examples/res/icon/layout_key.png | Bin 0 -> 693 bytes .../res/icon/layout_lightning.png | Bin 0 -> 719 bytes .../FineUI.Examples/res/icon/layout_link.png | Bin 0 -> 660 bytes .../res/icon/layout_sidebar.png | Bin 0 -> 479 bytes .../FineUI.Examples/res/icon/lightbulb.png | Bin 0 -> 782 bytes .../res/icon/lightbulb_add.png | Bin 0 -> 839 bytes .../res/icon/lightbulb_delete.png | Bin 0 -> 857 bytes .../res/icon/lightbulb_off.png | Bin 0 -> 700 bytes .../FineUI.Examples/res/icon/lightning.png | Bin 0 -> 634 bytes .../res/icon/lightning_add.png | Bin 0 -> 746 bytes .../res/icon/lightning_delete.png | Bin 0 -> 745 bytes .../FineUI.Examples/res/icon/lightning_go.png | Bin 0 -> 739 bytes FineUI_v6/FineUI.Examples/res/icon/link.png | Bin 0 -> 343 bytes .../FineUI.Examples/res/icon/link_add.png | Bin 0 -> 570 bytes .../FineUI.Examples/res/icon/link_break.png | Bin 0 -> 657 bytes .../FineUI.Examples/res/icon/link_delete.png | Bin 0 -> 600 bytes .../FineUI.Examples/res/icon/link_edit.png | Bin 0 -> 703 bytes .../FineUI.Examples/res/icon/link_error.png | Bin 0 -> 698 bytes .../FineUI.Examples/res/icon/link_go.png | Bin 0 -> 655 bytes FineUI_v6/FineUI.Examples/res/icon/lock.png | Bin 0 -> 749 bytes .../FineUI.Examples/res/icon/lock_add.png | Bin 0 -> 824 bytes .../FineUI.Examples/res/icon/lock_break.png | Bin 0 -> 771 bytes .../FineUI.Examples/res/icon/lock_delete.png | Bin 0 -> 815 bytes .../FineUI.Examples/res/icon/lock_edit.png | Bin 0 -> 861 bytes .../FineUI.Examples/res/icon/lock_go.png | Bin 0 -> 829 bytes .../FineUI.Examples/res/icon/lock_key.png | Bin 0 -> 837 bytes .../FineUI.Examples/res/icon/lock_open.png | Bin 0 -> 727 bytes .../FineUI.Examples/res/icon/lock_start.png | Bin 0 -> 844 bytes .../FineUI.Examples/res/icon/lock_stop.png | Bin 0 -> 815 bytes FineUI_v6/FineUI.Examples/res/icon/lorry.png | Bin 0 -> 582 bytes .../FineUI.Examples/res/icon/lorry_add.png | Bin 0 -> 689 bytes .../FineUI.Examples/res/icon/lorry_delete.png | Bin 0 -> 683 bytes .../FineUI.Examples/res/icon/lorry_error.png | Bin 0 -> 739 bytes .../res/icon/lorry_flatbed.png | Bin 0 -> 450 bytes .../FineUI.Examples/res/icon/lorry_go.png | Bin 0 -> 699 bytes .../FineUI.Examples/res/icon/lorry_link.png | Bin 0 -> 775 bytes .../FineUI.Examples/res/icon/lorry_start.png | Bin 0 -> 752 bytes .../FineUI.Examples/res/icon/lorry_stop.png | Bin 0 -> 720 bytes .../res/icon/magifier_zoom_out.png | Bin 0 -> 657 bytes .../FineUI.Examples/res/icon/magnifier.png | Bin 0 -> 615 bytes .../res/icon/magnifier_zoom_in.png | Bin 0 -> 680 bytes FineUI_v6/FineUI.Examples/res/icon/mail.png | Bin 0 -> 552 bytes FineUI_v6/FineUI.Examples/res/icon/male.png | Bin 0 -> 629 bytes FineUI_v6/FineUI.Examples/res/icon/map.png | Bin 0 -> 804 bytes .../FineUI.Examples/res/icon/map_add.png | Bin 0 -> 836 bytes .../res/icon/map_clipboard.png | Bin 0 -> 724 bytes .../FineUI.Examples/res/icon/map_cursor.png | Bin 0 -> 835 bytes .../FineUI.Examples/res/icon/map_delete.png | Bin 0 -> 835 bytes .../FineUI.Examples/res/icon/map_edit.png | Bin 0 -> 876 bytes .../FineUI.Examples/res/icon/map_error.png | Bin 0 -> 862 bytes FineUI_v6/FineUI.Examples/res/icon/map_go.png | Bin 0 -> 842 bytes .../FineUI.Examples/res/icon/map_link.png | Bin 0 -> 898 bytes .../FineUI.Examples/res/icon/map_magnify.png | Bin 0 -> 797 bytes .../FineUI.Examples/res/icon/map_start.png | Bin 0 -> 872 bytes .../FineUI.Examples/res/icon/map_stop.png | Bin 0 -> 841 bytes .../res/icon/medal_bronze_1.png | Bin 0 -> 640 bytes .../res/icon/medal_bronze_2.png | Bin 0 -> 654 bytes .../res/icon/medal_bronze_3.png | Bin 0 -> 646 bytes .../res/icon/medal_bronze_add.png | Bin 0 -> 747 bytes .../res/icon/medal_bronze_delete.png | Bin 0 -> 730 bytes .../FineUI.Examples/res/icon/medal_gold_1.png | Bin 0 -> 629 bytes .../FineUI.Examples/res/icon/medal_gold_2.png | Bin 0 -> 641 bytes .../FineUI.Examples/res/icon/medal_gold_3.png | Bin 0 -> 634 bytes .../res/icon/medal_gold_add.png | Bin 0 -> 733 bytes .../res/icon/medal_gold_delete.png | Bin 0 -> 724 bytes .../res/icon/medal_silver_1.png | Bin 0 -> 589 bytes .../res/icon/medal_silver_2.png | Bin 0 -> 600 bytes .../res/icon/medal_silver_3.png | Bin 0 -> 597 bytes .../res/icon/medal_silver_add.png | Bin 0 -> 727 bytes .../res/icon/medal_silver_delete.png | Bin 0 -> 714 bytes FineUI_v6/FineUI.Examples/res/icon/money.png | Bin 0 -> 738 bytes .../FineUI.Examples/res/icon/money_add.png | Bin 0 -> 784 bytes .../FineUI.Examples/res/icon/money_delete.png | Bin 0 -> 806 bytes .../FineUI.Examples/res/icon/money_dollar.png | Bin 0 -> 630 bytes .../FineUI.Examples/res/icon/money_euro.png | Bin 0 -> 605 bytes .../FineUI.Examples/res/icon/money_pound.png | Bin 0 -> 565 bytes .../FineUI.Examples/res/icon/money_yen.png | Bin 0 -> 562 bytes .../FineUI.Examples/res/icon/monitor.png | Bin 0 -> 612 bytes .../FineUI.Examples/res/icon/monitor_add.png | Bin 0 -> 692 bytes .../res/icon/monitor_delete.png | Bin 0 -> 691 bytes .../FineUI.Examples/res/icon/monitor_edit.png | Bin 0 -> 769 bytes .../res/icon/monitor_error.png | Bin 0 -> 714 bytes .../FineUI.Examples/res/icon/monitor_go.png | Bin 0 -> 696 bytes .../FineUI.Examples/res/icon/monitor_key.png | Bin 0 -> 758 bytes .../res/icon/monitor_lightning.png | Bin 0 -> 768 bytes .../FineUI.Examples/res/icon/monitor_link.png | Bin 0 -> 736 bytes .../FineUI.Examples/res/icon/moon_full.png | Bin 0 -> 561 bytes FineUI_v6/FineUI.Examples/res/icon/mouse.png | Bin 0 -> 634 bytes .../FineUI.Examples/res/icon/mouse_add.png | Bin 0 -> 729 bytes .../FineUI.Examples/res/icon/mouse_delete.png | Bin 0 -> 741 bytes .../FineUI.Examples/res/icon/mouse_error.png | Bin 0 -> 790 bytes FineUI_v6/FineUI.Examples/res/icon/music.png | Bin 0 -> 385 bytes .../FineUI.Examples/res/icon/music_note.png | Bin 0 -> 284 bytes .../res/icon/neighbourhood.png | Bin 0 -> 695 bytes FineUI_v6/FineUI.Examples/res/icon/new.png | Bin 0 -> 378 bytes .../FineUI.Examples/res/icon/new_blue.png | Bin 0 -> 446 bytes .../FineUI.Examples/res/icon/new_red.png | Bin 0 -> 428 bytes .../FineUI.Examples/res/icon/newspaper.png | Bin 0 -> 658 bytes .../res/icon/newspaper_add.png | Bin 0 -> 750 bytes .../res/icon/newspaper_delete.png | Bin 0 -> 775 bytes .../FineUI.Examples/res/icon/newspaper_go.png | Bin 0 -> 779 bytes .../res/icon/newspaper_link.png | Bin 0 -> 787 bytes .../FineUI.Examples/res/icon/next_blue.png | Bin 0 -> 530 bytes .../FineUI.Examples/res/icon/next_green.png | Bin 0 -> 519 bytes FineUI_v6/FineUI.Examples/res/icon/note.png | Bin 0 -> 500 bytes .../FineUI.Examples/res/icon/note_add.png | Bin 0 -> 641 bytes .../FineUI.Examples/res/icon/note_delete.png | Bin 0 -> 631 bytes .../FineUI.Examples/res/icon/note_edit.png | Bin 0 -> 731 bytes .../FineUI.Examples/res/icon/note_error.png | Bin 0 -> 680 bytes .../FineUI.Examples/res/icon/note_go.png | Bin 0 -> 661 bytes .../FineUI.Examples/res/icon/outline.png | Bin 0 -> 398 bytes .../FineUI.Examples/res/icon/overlays.png | Bin 0 -> 716 bytes .../FineUI.Examples/res/icon/package.png | Bin 0 -> 853 bytes .../FineUI.Examples/res/icon/package_add.png | Bin 0 -> 899 bytes .../res/icon/package_delete.png | Bin 0 -> 891 bytes .../FineUI.Examples/res/icon/package_down.png | Bin 0 -> 870 bytes .../FineUI.Examples/res/icon/package_go.png | Bin 0 -> 898 bytes .../res/icon/package_green.png | Bin 0 -> 896 bytes .../FineUI.Examples/res/icon/package_in.png | Bin 0 -> 915 bytes .../FineUI.Examples/res/icon/package_link.png | Bin 0 -> 939 bytes .../FineUI.Examples/res/icon/package_se.png | Bin 0 -> 898 bytes .../res/icon/package_start.png | Bin 0 -> 926 bytes .../FineUI.Examples/res/icon/package_stop.png | Bin 0 -> 899 bytes .../res/icon/package_white.png | Bin 0 -> 501 bytes FineUI_v6/FineUI.Examples/res/icon/page.png | Bin 0 -> 635 bytes .../FineUI.Examples/res/icon/page_add.png | Bin 0 -> 739 bytes .../FineUI.Examples/res/icon/page_attach.png | Bin 0 -> 794 bytes .../FineUI.Examples/res/icon/page_back.png | Bin 0 -> 796 bytes .../FineUI.Examples/res/icon/page_break.png | Bin 0 -> 696 bytes .../res/icon/page_break_insert.png | Bin 0 -> 789 bytes .../FineUI.Examples/res/icon/page_cancel.png | Bin 0 -> 858 bytes .../FineUI.Examples/res/icon/page_code.png | Bin 0 -> 818 bytes .../FineUI.Examples/res/icon/page_copy.png | Bin 0 -> 663 bytes .../FineUI.Examples/res/icon/page_delete.png | Bin 0 -> 740 bytes .../FineUI.Examples/res/icon/page_edit.png | Bin 0 -> 807 bytes .../FineUI.Examples/res/icon/page_error.png | Bin 0 -> 793 bytes .../FineUI.Examples/res/icon/page_excel.png | Bin 0 -> 817 bytes .../FineUI.Examples/res/icon/page_find.png | Bin 0 -> 879 bytes .../FineUI.Examples/res/icon/page_forward.png | Bin 0 -> 775 bytes .../FineUI.Examples/res/icon/page_gear.png | Bin 0 -> 833 bytes .../FineUI.Examples/res/icon/page_go.png | Bin 0 -> 779 bytes .../FineUI.Examples/res/icon/page_green.png | Bin 0 -> 621 bytes .../res/icon/page_header_footer.png | Bin 0 -> 676 bytes .../FineUI.Examples/res/icon/page_key.png | Bin 0 -> 801 bytes .../res/icon/page_landscape.png | Bin 0 -> 656 bytes .../res/icon/page_landscape_shot.png | Bin 0 -> 746 bytes .../res/icon/page_lightning.png | Bin 0 -> 839 bytes .../FineUI.Examples/res/icon/page_link.png | Bin 0 -> 830 bytes .../FineUI.Examples/res/icon/page_magnify.png | Bin 0 -> 788 bytes .../res/icon/page_paintbrush.png | Bin 0 -> 813 bytes .../FineUI.Examples/res/icon/page_paste.png | Bin 0 -> 703 bytes .../res/icon/page_portrait.png | Bin 0 -> 685 bytes .../res/icon/page_portrait_shot.png | Bin 0 -> 856 bytes .../FineUI.Examples/res/icon/page_red.png | Bin 0 -> 641 bytes .../FineUI.Examples/res/icon/page_refresh.png | Bin 0 -> 858 bytes .../FineUI.Examples/res/icon/page_save.png | Bin 0 -> 774 bytes .../FineUI.Examples/res/icon/page_white.png | Bin 0 -> 294 bytes .../res/icon/page_white_acrobat.png | Bin 0 -> 591 bytes .../res/icon/page_white_actionscript.png | Bin 0 -> 664 bytes .../res/icon/page_white_add.png | Bin 0 -> 512 bytes .../res/icon/page_white_break.png | Bin 0 -> 322 bytes .../FineUI.Examples/res/icon/page_white_c.png | Bin 0 -> 587 bytes .../res/icon/page_white_camera.png | Bin 0 -> 656 bytes .../res/icon/page_white_cd.png | Bin 0 -> 666 bytes .../res/icon/page_white_cdr.png | Bin 0 -> 720 bytes .../res/icon/page_white_code.png | Bin 0 -> 603 bytes .../res/icon/page_white_code_red.png | Bin 0 -> 587 bytes .../res/icon/page_white_coldfusion.png | Bin 0 -> 592 bytes .../res/icon/page_white_compressed.png | Bin 0 -> 724 bytes .../res/icon/page_white_connect.png | Bin 0 -> 725 bytes .../res/icon/page_white_copy.png | Bin 0 -> 309 bytes .../res/icon/page_white_cplusplus.png | Bin 0 -> 621 bytes .../res/icon/page_white_csharp.png | Bin 0 -> 700 bytes .../res/icon/page_white_cup.png | Bin 0 -> 639 bytes .../res/icon/page_white_database.png | Bin 0 -> 579 bytes .../res/icon/page_white_database_yellow.png | Bin 0 -> 672 bytes .../res/icon/page_white_delete.png | Bin 0 -> 536 bytes .../res/icon/page_white_dvd.png | Bin 0 -> 638 bytes .../res/icon/page_white_edit.png | Bin 0 -> 618 bytes .../res/icon/page_white_error.png | Bin 0 -> 623 bytes .../res/icon/page_white_excel.png | Bin 0 -> 663 bytes .../res/icon/page_white_find.png | Bin 0 -> 676 bytes .../res/icon/page_white_flash.png | Bin 0 -> 582 bytes .../res/icon/page_white_font.png | Bin 0 -> 633 bytes .../res/icon/page_white_freehand.png | Bin 0 -> 639 bytes .../res/icon/page_white_gear.png | Bin 0 -> 402 bytes .../res/icon/page_white_get.png | Bin 0 -> 516 bytes .../res/icon/page_white_go.png | Bin 0 -> 612 bytes .../FineUI.Examples/res/icon/page_white_h.png | Bin 0 -> 603 bytes .../res/icon/page_white_horizontal.png | Bin 0 -> 296 bytes .../res/icon/page_white_key.png | Bin 0 -> 616 bytes .../res/icon/page_white_lightning.png | Bin 0 -> 669 bytes .../res/icon/page_white_link.png | Bin 0 -> 614 bytes .../res/icon/page_white_magnify.png | Bin 0 -> 554 bytes .../res/icon/page_white_medal.png | Bin 0 -> 706 bytes .../res/icon/page_white_office.png | Bin 0 -> 779 bytes .../res/icon/page_white_paint.png | Bin 0 -> 688 bytes .../res/icon/page_white_paint_2.png | Bin 0 -> 742 bytes .../res/icon/page_white_paintbrush.png | Bin 0 -> 618 bytes .../res/icon/page_white_paste.png | Bin 0 -> 620 bytes .../res/icon/page_white_paste_table.png | Bin 0 -> 690 bytes .../res/icon/page_white_php.png | Bin 0 -> 538 bytes .../res/icon/page_white_picture.png | Bin 0 -> 650 bytes .../res/icon/page_white_powerpoint.png | Bin 0 -> 588 bytes .../res/icon/page_white_put.png | Bin 0 -> 523 bytes .../res/icon/page_white_refresh.png | Bin 0 -> 708 bytes .../res/icon/page_white_ruby.png | Bin 0 -> 626 bytes .../res/icon/page_white_side_by_side.png | Bin 0 -> 273 bytes .../res/icon/page_white_stack.png | Bin 0 -> 317 bytes .../res/icon/page_white_star.png | Bin 0 -> 565 bytes .../res/icon/page_white_swoosh.png | Bin 0 -> 634 bytes .../res/icon/page_white_text.png | Bin 0 -> 342 bytes .../res/icon/page_white_text_width.png | Bin 0 -> 315 bytes .../res/icon/page_white_tux.png | Bin 0 -> 668 bytes .../res/icon/page_white_vector.png | Bin 0 -> 644 bytes .../res/icon/page_white_visualstudio.png | Bin 0 -> 702 bytes .../res/icon/page_white_width.png | Bin 0 -> 309 bytes .../res/icon/page_white_word.png | Bin 0 -> 651 bytes .../res/icon/page_white_world.png | Bin 0 -> 734 bytes .../res/icon/page_white_wrench.png | Bin 0 -> 613 bytes .../res/icon/page_white_zip.png | Bin 0 -> 386 bytes .../FineUI.Examples/res/icon/page_word.png | Bin 0 -> 777 bytes .../FineUI.Examples/res/icon/page_world.png | Bin 0 -> 903 bytes FineUI_v6/FineUI.Examples/res/icon/paint.png | Bin 0 -> 973 bytes .../res/icon/paint_can_brush.png | Bin 0 -> 866 bytes .../FineUI.Examples/res/icon/paintbrush.png | Bin 0 -> 548 bytes .../res/icon/paintbrush_color.png | Bin 0 -> 726 bytes .../FineUI.Examples/res/icon/paintcan.png | Bin 0 -> 707 bytes .../FineUI.Examples/res/icon/paintcan_red.png | Bin 0 -> 737 bytes .../FineUI.Examples/res/icon/palette.png | Bin 0 -> 856 bytes .../FineUI.Examples/res/icon/paste_plain.png | Bin 0 -> 605 bytes .../FineUI.Examples/res/icon/paste_word.png | Bin 0 -> 701 bytes .../FineUI.Examples/res/icon/pause_blue.png | Bin 0 -> 336 bytes .../FineUI.Examples/res/icon/pause_green.png | Bin 0 -> 323 bytes .../FineUI.Examples/res/icon/pause_record.png | Bin 0 -> 439 bytes FineUI_v6/FineUI.Examples/res/icon/pencil.png | Bin 0 -> 450 bytes .../FineUI.Examples/res/icon/pencil_add.png | Bin 0 -> 589 bytes .../res/icon/pencil_delete.png | Bin 0 -> 603 bytes .../FineUI.Examples/res/icon/pencil_go.png | Bin 0 -> 666 bytes FineUI_v6/FineUI.Examples/res/icon/phone.png | Bin 0 -> 488 bytes .../FineUI.Examples/res/icon/phone_add.png | Bin 0 -> 621 bytes .../FineUI.Examples/res/icon/phone_delete.png | Bin 0 -> 615 bytes .../FineUI.Examples/res/icon/phone_edit.png | Bin 0 -> 702 bytes .../FineUI.Examples/res/icon/phone_error.png | Bin 0 -> 659 bytes .../FineUI.Examples/res/icon/phone_go.png | Bin 0 -> 651 bytes .../FineUI.Examples/res/icon/phone_key.png | Bin 0 -> 696 bytes .../FineUI.Examples/res/icon/phone_link.png | Bin 0 -> 663 bytes .../FineUI.Examples/res/icon/phone_sound.png | Bin 0 -> 703 bytes .../FineUI.Examples/res/icon/phone_start.png | Bin 0 -> 686 bytes .../FineUI.Examples/res/icon/phone_stop.png | Bin 0 -> 657 bytes FineUI_v6/FineUI.Examples/res/icon/photo.png | Bin 0 -> 589 bytes .../FineUI.Examples/res/icon/photo_add.png | Bin 0 -> 707 bytes .../FineUI.Examples/res/icon/photo_delete.png | Bin 0 -> 703 bytes .../FineUI.Examples/res/icon/photo_edit.png | Bin 0 -> 767 bytes .../FineUI.Examples/res/icon/photo_link.png | Bin 0 -> 784 bytes .../FineUI.Examples/res/icon/photo_paint.png | Bin 0 -> 773 bytes FineUI_v6/FineUI.Examples/res/icon/photos.png | Bin 0 -> 647 bytes .../FineUI.Examples/res/icon/picture.png | Bin 0 -> 606 bytes .../FineUI.Examples/res/icon/picture_add.png | Bin 0 -> 745 bytes .../res/icon/picture_clipboard.png | Bin 0 -> 723 bytes .../res/icon/picture_delete.png | Bin 0 -> 744 bytes .../FineUI.Examples/res/icon/picture_edit.png | Bin 0 -> 826 bytes .../res/icon/picture_empty.png | Bin 0 -> 463 bytes .../res/icon/picture_error.png | Bin 0 -> 755 bytes .../FineUI.Examples/res/icon/picture_go.png | Bin 0 -> 758 bytes .../FineUI.Examples/res/icon/picture_key.png | Bin 0 -> 794 bytes .../FineUI.Examples/res/icon/picture_link.png | Bin 0 -> 835 bytes .../FineUI.Examples/res/icon/picture_save.png | Bin 0 -> 755 bytes .../FineUI.Examples/res/icon/pictures.png | Bin 0 -> 704 bytes .../res/icon/pictures_thumbs.png | Bin 0 -> 512 bytes .../FineUI.Examples/res/icon/pilcrow.png | Bin 0 -> 361 bytes FineUI_v6/FineUI.Examples/res/icon/pill.png | Bin 0 -> 719 bytes .../FineUI.Examples/res/icon/pill_add.png | Bin 0 -> 797 bytes .../FineUI.Examples/res/icon/pill_delete.png | Bin 0 -> 805 bytes .../FineUI.Examples/res/icon/pill_error.png | Bin 0 -> 805 bytes .../FineUI.Examples/res/icon/pill_go.png | Bin 0 -> 817 bytes .../FineUI.Examples/res/icon/play_blue.png | Bin 0 -> 407 bytes .../FineUI.Examples/res/icon/play_green.png | Bin 0 -> 414 bytes FineUI_v6/FineUI.Examples/res/icon/plugin.png | Bin 0 -> 591 bytes .../FineUI.Examples/res/icon/plugin_add.png | Bin 0 -> 691 bytes .../res/icon/plugin_delete.png | Bin 0 -> 692 bytes .../res/icon/plugin_disabled.png | Bin 0 -> 347 bytes .../FineUI.Examples/res/icon/plugin_edit.png | Bin 0 -> 746 bytes .../FineUI.Examples/res/icon/plugin_error.png | Bin 0 -> 702 bytes .../FineUI.Examples/res/icon/plugin_go.png | Bin 0 -> 694 bytes .../FineUI.Examples/res/icon/plugin_key.png | Bin 0 -> 748 bytes .../FineUI.Examples/res/icon/plugin_link.png | Bin 0 -> 759 bytes .../res/icon/previous_green.png | Bin 0 -> 524 bytes .../FineUI.Examples/res/icon/printer.png | Bin 0 -> 731 bytes .../FineUI.Examples/res/icon/printer_add.png | Bin 0 -> 782 bytes .../res/icon/printer_cancel.png | Bin 0 -> 879 bytes .../res/icon/printer_color.png | Bin 0 -> 756 bytes .../res/icon/printer_connect.png | Bin 0 -> 883 bytes .../res/icon/printer_delete.png | Bin 0 -> 792 bytes .../res/icon/printer_empty.png | Bin 0 -> 350 bytes .../res/icon/printer_error.png | Bin 0 -> 854 bytes .../FineUI.Examples/res/icon/printer_go.png | Bin 0 -> 844 bytes .../FineUI.Examples/res/icon/printer_key.png | Bin 0 -> 846 bytes .../FineUI.Examples/res/icon/printer_mono.png | Bin 0 -> 754 bytes .../res/icon/printer_start.png | Bin 0 -> 853 bytes .../FineUI.Examples/res/icon/printer_stop.png | Bin 0 -> 831 bytes .../FineUI.Examples/res/icon/rainbow.png | Bin 0 -> 655 bytes .../FineUI.Examples/res/icon/rainbow_star.png | Bin 0 -> 777 bytes .../FineUI.Examples/res/icon/record_blue.png | Bin 0 -> 411 bytes .../FineUI.Examples/res/icon/record_green.png | Bin 0 -> 423 bytes .../FineUI.Examples/res/icon/record_red.png | Bin 0 -> 383 bytes FineUI_v6/FineUI.Examples/res/icon/reload.png | Bin 0 -> 643 bytes FineUI_v6/FineUI.Examples/res/icon/report.png | Bin 0 -> 649 bytes .../FineUI.Examples/res/icon/report_add.png | Bin 0 -> 714 bytes .../res/icon/report_delete.png | Bin 0 -> 729 bytes .../FineUI.Examples/res/icon/report_disk.png | Bin 0 -> 760 bytes .../FineUI.Examples/res/icon/report_edit.png | Bin 0 -> 762 bytes .../FineUI.Examples/res/icon/report_go.png | Bin 0 -> 756 bytes .../FineUI.Examples/res/icon/report_key.png | Bin 0 -> 760 bytes .../FineUI.Examples/res/icon/report_link.png | Bin 0 -> 754 bytes .../res/icon/report_magnify.png | Bin 0 -> 738 bytes .../res/icon/report_picture.png | Bin 0 -> 733 bytes .../FineUI.Examples/res/icon/report_start.png | Bin 0 -> 812 bytes .../FineUI.Examples/res/icon/report_stop.png | Bin 0 -> 779 bytes .../FineUI.Examples/res/icon/report_user.png | Bin 0 -> 785 bytes .../FineUI.Examples/res/icon/report_word.png | Bin 0 -> 731 bytes .../res/icon/resultset_first.png | Bin 0 -> 522 bytes .../res/icon/resultset_last.png | Bin 0 -> 524 bytes .../res/icon/resultset_next.png | Bin 0 -> 395 bytes .../res/icon/resultset_previous.png | Bin 0 -> 389 bytes .../FineUI.Examples/res/icon/reverse_blue.png | Bin 0 -> 402 bytes .../res/icon/reverse_green.png | Bin 0 -> 406 bytes .../FineUI.Examples/res/icon/rewind_blue.png | Bin 0 -> 410 bytes .../FineUI.Examples/res/icon/rewind_green.png | Bin 0 -> 415 bytes FineUI_v6/FineUI.Examples/res/icon/rgb.png | Bin 0 -> 547 bytes .../FineUI.Examples/res/icon/rosette.png | Bin 0 -> 673 bytes .../FineUI.Examples/res/icon/rosette_blue.png | Bin 0 -> 715 bytes FineUI_v6/FineUI.Examples/res/icon/rss.png | Bin 0 -> 530 bytes .../FineUI.Examples/res/icon/rss_add.png | Bin 0 -> 649 bytes .../FineUI.Examples/res/icon/rss_delete.png | Bin 0 -> 633 bytes .../FineUI.Examples/res/icon/rss_error.png | Bin 0 -> 675 bytes FineUI_v6/FineUI.Examples/res/icon/rss_go.png | Bin 0 -> 635 bytes .../FineUI.Examples/res/icon/rss_valid.png | Bin 0 -> 660 bytes FineUI_v6/FineUI.Examples/res/icon/ruby.png | Bin 0 -> 592 bytes .../FineUI.Examples/res/icon/ruby_add.png | Bin 0 -> 691 bytes .../FineUI.Examples/res/icon/ruby_delete.png | Bin 0 -> 704 bytes .../FineUI.Examples/res/icon/ruby_gear.png | Bin 0 -> 716 bytes .../FineUI.Examples/res/icon/ruby_get.png | Bin 0 -> 692 bytes .../FineUI.Examples/res/icon/ruby_go.png | Bin 0 -> 720 bytes .../FineUI.Examples/res/icon/ruby_key.png | Bin 0 -> 732 bytes .../FineUI.Examples/res/icon/ruby_link.png | Bin 0 -> 767 bytes .../FineUI.Examples/res/icon/ruby_put.png | Bin 0 -> 694 bytes FineUI_v6/FineUI.Examples/res/icon/script.png | Bin 0 -> 748 bytes .../FineUI.Examples/res/icon/script_add.png | Bin 0 -> 811 bytes .../FineUI.Examples/res/icon/script_code.png | Bin 0 -> 859 bytes .../res/icon/script_code_original.png | Bin 0 -> 859 bytes .../res/icon/script_code_red.png | Bin 0 -> 868 bytes .../res/icon/script_delete.png | Bin 0 -> 811 bytes .../FineUI.Examples/res/icon/script_edit.png | Bin 0 -> 880 bytes .../FineUI.Examples/res/icon/script_error.png | Bin 0 -> 861 bytes .../FineUI.Examples/res/icon/script_gear.png | Bin 0 -> 861 bytes .../FineUI.Examples/res/icon/script_go.png | Bin 0 -> 839 bytes .../FineUI.Examples/res/icon/script_key.png | Bin 0 -> 853 bytes .../res/icon/script_lightning.png | Bin 0 -> 879 bytes .../FineUI.Examples/res/icon/script_link.png | Bin 0 -> 876 bytes .../res/icon/script_palette.png | Bin 0 -> 917 bytes .../FineUI.Examples/res/icon/script_save.png | Bin 0 -> 804 bytes .../FineUI.Examples/res/icon/script_start.png | Bin 0 -> 887 bytes .../FineUI.Examples/res/icon/script_stop.png | Bin 0 -> 862 bytes .../FineUI.Examples/res/icon/seasons.png | Bin 0 -> 748 bytes .../res/icon/section_collapsed.png | Bin 0 -> 292 bytes .../res/icon/section_expanded.png | Bin 0 -> 308 bytes FineUI_v6/FineUI.Examples/res/icon/server.png | Bin 0 -> 530 bytes .../FineUI.Examples/res/icon/server_add.png | Bin 0 -> 676 bytes .../FineUI.Examples/res/icon/server_chart.png | Bin 0 -> 673 bytes .../res/icon/server_compressed.png | Bin 0 -> 721 bytes .../res/icon/server_connect.png | Bin 0 -> 755 bytes .../res/icon/server_database.png | Bin 0 -> 666 bytes .../res/icon/server_delete.png | Bin 0 -> 668 bytes .../FineUI.Examples/res/icon/server_edit.png | Bin 0 -> 749 bytes .../FineUI.Examples/res/icon/server_error.png | Bin 0 -> 678 bytes .../FineUI.Examples/res/icon/server_go.png | Bin 0 -> 706 bytes .../FineUI.Examples/res/icon/server_key.png | Bin 0 -> 746 bytes .../res/icon/server_lightning.png | Bin 0 -> 729 bytes .../FineUI.Examples/res/icon/server_link.png | Bin 0 -> 706 bytes .../FineUI.Examples/res/icon/server_start.png | Bin 0 -> 727 bytes .../FineUI.Examples/res/icon/server_stop.png | Bin 0 -> 702 bytes .../res/icon/server_uncompressed.png | Bin 0 -> 669 bytes .../res/icon/server_wrench.png | Bin 0 -> 665 bytes .../FineUI.Examples/res/icon/shading.png | Bin 0 -> 225 bytes .../FineUI.Examples/res/icon/shape_3d.png | Bin 0 -> 601 bytes .../res/icon/shape_align_bottom.png | Bin 0 -> 398 bytes .../res/icon/shape_align_center.png | Bin 0 -> 384 bytes .../res/icon/shape_align_left.png | Bin 0 -> 402 bytes .../res/icon/shape_align_middle.png | Bin 0 -> 414 bytes .../res/icon/shape_align_right.png | Bin 0 -> 401 bytes .../res/icon/shape_align_top.png | Bin 0 -> 406 bytes .../res/icon/shape_flip_horizontal.png | Bin 0 -> 403 bytes .../res/icon/shape_flip_vertical.png | Bin 0 -> 418 bytes .../FineUI.Examples/res/icon/shape_group.png | Bin 0 -> 553 bytes .../res/icon/shape_handles.png | Bin 0 -> 538 bytes .../res/icon/shape_move_back.png | Bin 0 -> 395 bytes .../res/icon/shape_move_backwards.png | Bin 0 -> 358 bytes .../res/icon/shape_move_forwards.png | Bin 0 -> 381 bytes .../res/icon/shape_move_front.png | Bin 0 -> 435 bytes .../res/icon/shape_rotate_anticlockwise.png | Bin 0 -> 657 bytes .../res/icon/shape_rotate_clockwise.png | Bin 0 -> 673 bytes .../res/icon/shape_shade_a.png | Bin 0 -> 462 bytes .../res/icon/shape_shade_b.png | Bin 0 -> 460 bytes .../res/icon/shape_shade_c.png | Bin 0 -> 468 bytes .../FineUI.Examples/res/icon/shape_shadow.png | Bin 0 -> 416 bytes .../res/icon/shape_shadow_toggle.png | Bin 0 -> 461 bytes .../FineUI.Examples/res/icon/shape_square.png | Bin 0 -> 353 bytes .../res/icon/shape_square_add.png | Bin 0 -> 539 bytes .../res/icon/shape_square_delete.png | Bin 0 -> 537 bytes .../res/icon/shape_square_edit.png | Bin 0 -> 660 bytes .../res/icon/shape_square_error.png | Bin 0 -> 570 bytes .../res/icon/shape_square_go.png | Bin 0 -> 566 bytes .../res/icon/shape_square_key.png | Bin 0 -> 607 bytes .../res/icon/shape_square_link.png | Bin 0 -> 642 bytes .../res/icon/shape_square_select.png | Bin 0 -> 589 bytes .../res/icon/shape_ungroup.png | Bin 0 -> 666 bytes .../FineUI.Examples/res/icon/shapes_many.png | Bin 0 -> 371 bytes .../res/icon/shapes_many_select.png | Bin 0 -> 626 bytes FineUI_v6/FineUI.Examples/res/icon/share.png | Bin 0 -> 654 bytes FineUI_v6/FineUI.Examples/res/icon/shield.png | Bin 0 -> 702 bytes .../FineUI.Examples/res/icon/shield_add.png | Bin 0 -> 758 bytes .../res/icon/shield_delete.png | Bin 0 -> 768 bytes .../FineUI.Examples/res/icon/shield_error.png | Bin 0 -> 765 bytes .../FineUI.Examples/res/icon/shield_go.png | Bin 0 -> 775 bytes .../res/icon/shield_rainbow.png | Bin 0 -> 820 bytes .../res/icon/shield_silver.png | Bin 0 -> 448 bytes .../FineUI.Examples/res/icon/shield_start.png | Bin 0 -> 806 bytes .../FineUI.Examples/res/icon/shield_stop.png | Bin 0 -> 779 bytes .../FineUI.Examples/res/icon/sitemap.png | Bin 0 -> 278 bytes .../res/icon/sitemap_color.png | Bin 0 -> 406 bytes .../FineUI.Examples/res/icon/smartphone.png | Bin 0 -> 544 bytes .../res/icon/smartphone_add.png | Bin 0 -> 679 bytes .../res/icon/smartphone_connect.png | Bin 0 -> 692 bytes .../res/icon/smartphone_delete.png | Bin 0 -> 677 bytes .../res/icon/smartphone_disk.png | Bin 0 -> 705 bytes .../res/icon/smartphone_edit.png | Bin 0 -> 755 bytes .../res/icon/smartphone_error.png | Bin 0 -> 693 bytes .../res/icon/smartphone_go.png | Bin 0 -> 700 bytes .../res/icon/smartphone_key.png | Bin 0 -> 732 bytes .../res/icon/smartphone_wrench.png | Bin 0 -> 658 bytes .../res/icon/sort_ascending.png | Bin 0 -> 506 bytes .../res/icon/sort_descending.png | Bin 0 -> 509 bytes FineUI_v6/FineUI.Examples/res/icon/sound.png | Bin 0 -> 610 bytes .../FineUI.Examples/res/icon/sound_add.png | Bin 0 -> 684 bytes .../FineUI.Examples/res/icon/sound_delete.png | Bin 0 -> 711 bytes .../FineUI.Examples/res/icon/sound_high.png | Bin 0 -> 716 bytes .../FineUI.Examples/res/icon/sound_in.png | Bin 0 -> 573 bytes .../FineUI.Examples/res/icon/sound_low.png | Bin 0 -> 524 bytes .../FineUI.Examples/res/icon/sound_mute.png | Bin 0 -> 474 bytes .../FineUI.Examples/res/icon/sound_none.png | Bin 0 -> 417 bytes .../FineUI.Examples/res/icon/sound_out.png | Bin 0 -> 584 bytes .../FineUI.Examples/res/icon/spellcheck.png | Bin 0 -> 603 bytes .../FineUI.Examples/res/icon/sport_8ball.png | Bin 0 -> 490 bytes .../res/icon/sport_basketball.png | Bin 0 -> 977 bytes .../res/icon/sport_football.png | Bin 0 -> 875 bytes .../FineUI.Examples/res/icon/sport_golf.png | Bin 0 -> 504 bytes .../res/icon/sport_golf_practice.png | Bin 0 -> 871 bytes .../FineUI.Examples/res/icon/sport_raquet.png | Bin 0 -> 719 bytes .../res/icon/sport_shuttlecock.png | Bin 0 -> 683 bytes .../FineUI.Examples/res/icon/sport_soccer.png | Bin 0 -> 517 bytes .../FineUI.Examples/res/icon/sport_tennis.png | Bin 0 -> 884 bytes FineUI_v6/FineUI.Examples/res/icon/star.png | Bin 0 -> 670 bytes .../FineUI.Examples/res/icon/star_bronze.png | Bin 0 -> 674 bytes .../res/icon/star_bronze_half_grey.png | Bin 0 -> 654 bytes .../FineUI.Examples/res/icon/star_gold.png | Bin 0 -> 709 bytes .../res/icon/star_gold_half_grey.png | Bin 0 -> 676 bytes .../res/icon/star_gold_half_silver.png | Bin 0 -> 695 bytes .../FineUI.Examples/res/icon/star_grey.png | Bin 0 -> 435 bytes .../res/icon/star_half_grey.png | Bin 0 -> 657 bytes .../FineUI.Examples/res/icon/star_silver.png | Bin 0 -> 454 bytes .../FineUI.Examples/res/icon/status_away.png | Bin 0 -> 794 bytes .../res/icon/status_be_right_back.png | Bin 0 -> 795 bytes .../FineUI.Examples/res/icon/status_busy.png | Bin 0 -> 751 bytes .../res/icon/status_invisible.png | Bin 0 -> 704 bytes .../res/icon/status_offline.png | Bin 0 -> 422 bytes .../res/icon/status_online.png | Bin 0 -> 722 bytes FineUI_v6/FineUI.Examples/res/icon/stop.png | Bin 0 -> 700 bytes .../FineUI.Examples/res/icon/stop_blue.png | Bin 0 -> 391 bytes .../FineUI.Examples/res/icon/stop_green.png | Bin 0 -> 402 bytes .../FineUI.Examples/res/icon/stop_red.png | Bin 0 -> 390 bytes FineUI_v6/FineUI.Examples/res/icon/style.png | Bin 0 -> 813 bytes .../FineUI.Examples/res/icon/style_add.png | Bin 0 -> 844 bytes .../FineUI.Examples/res/icon/style_delete.png | Bin 0 -> 865 bytes .../FineUI.Examples/res/icon/style_edit.png | Bin 0 -> 927 bytes .../FineUI.Examples/res/icon/style_go.png | Bin 0 -> 862 bytes FineUI_v6/FineUI.Examples/res/icon/sum.png | Bin 0 -> 289 bytes .../FineUI.Examples/res/icon/system_close.gif | Bin 0 -> 634 bytes .../FineUI.Examples/res/icon/system_new.gif | Bin 0 -> 619 bytes .../FineUI.Examples/res/icon/system_save.gif | Bin 0 -> 621 bytes .../res/icon/system_saveclose.gif | Bin 0 -> 631 bytes .../res/icon/system_savenew.gif | Bin 0 -> 636 bytes .../res/icon/system_search.gif | Bin 0 -> 567 bytes FineUI_v6/FineUI.Examples/res/icon/tab.png | Bin 0 -> 323 bytes .../FineUI.Examples/res/icon/tab_add.png | Bin 0 -> 488 bytes .../FineUI.Examples/res/icon/tab_blue.png | Bin 0 -> 338 bytes .../FineUI.Examples/res/icon/tab_delete.png | Bin 0 -> 493 bytes .../FineUI.Examples/res/icon/tab_edit.png | Bin 0 -> 580 bytes FineUI_v6/FineUI.Examples/res/icon/tab_go.png | Bin 0 -> 552 bytes .../FineUI.Examples/res/icon/tab_green.png | Bin 0 -> 371 bytes .../FineUI.Examples/res/icon/tab_red.png | Bin 0 -> 324 bytes FineUI_v6/FineUI.Examples/res/icon/table.png | Bin 0 -> 566 bytes .../FineUI.Examples/res/icon/table_add.png | Bin 0 -> 663 bytes .../FineUI.Examples/res/icon/table_cell.png | Bin 0 -> 595 bytes .../FineUI.Examples/res/icon/table_column.png | Bin 0 -> 592 bytes .../res/icon/table_column_add.png | Bin 0 -> 628 bytes .../res/icon/table_column_delete.png | Bin 0 -> 629 bytes .../res/icon/table_connect.png | Bin 0 -> 725 bytes .../FineUI.Examples/res/icon/table_delete.png | Bin 0 -> 660 bytes .../FineUI.Examples/res/icon/table_edit.png | Bin 0 -> 744 bytes .../FineUI.Examples/res/icon/table_error.png | Bin 0 -> 687 bytes .../FineUI.Examples/res/icon/table_gear.png | Bin 0 -> 714 bytes .../FineUI.Examples/res/icon/table_go.png | Bin 0 -> 683 bytes .../FineUI.Examples/res/icon/table_key.png | Bin 0 -> 746 bytes .../res/icon/table_lightning.png | Bin 0 -> 736 bytes .../FineUI.Examples/res/icon/table_link.png | Bin 0 -> 728 bytes .../res/icon/table_multiple.png | Bin 0 -> 612 bytes .../res/icon/table_refresh.png | Bin 0 -> 795 bytes .../res/icon/table_relationship.png | Bin 0 -> 663 bytes .../FineUI.Examples/res/icon/table_row.png | Bin 0 -> 582 bytes .../res/icon/table_row_delete.png | Bin 0 -> 629 bytes .../res/icon/table_row_insert.png | Bin 0 -> 641 bytes .../FineUI.Examples/res/icon/table_save.png | Bin 0 -> 723 bytes .../FineUI.Examples/res/icon/table_sort.png | Bin 0 -> 678 bytes FineUI_v6/FineUI.Examples/res/icon/tag.png | Bin 0 -> 389 bytes .../FineUI.Examples/res/icon/tag_blue.png | Bin 0 -> 586 bytes .../FineUI.Examples/res/icon/tag_blue_add.png | Bin 0 -> 671 bytes .../res/icon/tag_blue_delete.png | Bin 0 -> 701 bytes .../res/icon/tag_blue_edit.png | Bin 0 -> 748 bytes .../FineUI.Examples/res/icon/tag_green.png | Bin 0 -> 613 bytes .../FineUI.Examples/res/icon/tag_orange.png | Bin 0 -> 586 bytes .../FineUI.Examples/res/icon/tag_pink.png | Bin 0 -> 579 bytes .../FineUI.Examples/res/icon/tag_purple.png | Bin 0 -> 599 bytes .../FineUI.Examples/res/icon/tag_red.png | Bin 0 -> 592 bytes .../FineUI.Examples/res/icon/tag_yellow.png | Bin 0 -> 586 bytes .../FineUI.Examples/res/icon/tags_grey.png | Bin 0 -> 312 bytes .../FineUI.Examples/res/icon/tags_red.png | Bin 0 -> 455 bytes .../FineUI.Examples/res/icon/telephone.png | Bin 0 -> 791 bytes .../res/icon/telephone_add.png | Bin 0 -> 860 bytes .../res/icon/telephone_delete.png | Bin 0 -> 856 bytes .../res/icon/telephone_edit.png | Bin 0 -> 893 bytes .../res/icon/telephone_error.png | Bin 0 -> 884 bytes .../FineUI.Examples/res/icon/telephone_go.png | Bin 0 -> 865 bytes .../res/icon/telephone_key.png | Bin 0 -> 881 bytes .../res/icon/telephone_link.png | Bin 0 -> 909 bytes .../res/icon/telephone_red.png | Bin 0 -> 754 bytes .../FineUI.Examples/res/icon/television.png | Bin 0 -> 696 bytes .../res/icon/television_add.png | Bin 0 -> 809 bytes .../res/icon/television_delete.png | Bin 0 -> 810 bytes .../res/icon/television_in.png | Bin 0 -> 819 bytes .../res/icon/television_off.png | Bin 0 -> 623 bytes .../res/icon/television_out.png | Bin 0 -> 825 bytes .../res/icon/television_star.png | Bin 0 -> 777 bytes .../FineUI.Examples/res/icon/text_ab.png | Bin 0 -> 553 bytes .../res/icon/text_align_center.png | Bin 0 -> 234 bytes .../res/icon/text_align_justify.png | Bin 0 -> 209 bytes .../res/icon/text_align_left.png | Bin 0 -> 209 bytes .../res/icon/text_align_right.png | Bin 0 -> 209 bytes .../FineUI.Examples/res/icon/text_allcaps.png | Bin 0 -> 284 bytes .../FineUI.Examples/res/icon/text_bold.png | Bin 0 -> 304 bytes .../FineUI.Examples/res/icon/text_columns.png | Bin 0 -> 246 bytes .../res/icon/text_complete.png | Bin 0 -> 355 bytes .../res/icon/text_direction.png | Bin 0 -> 369 bytes .../res/icon/text_double_underline.png | Bin 0 -> 276 bytes .../res/icon/text_dropcaps.png | Bin 0 -> 314 bytes .../FineUI.Examples/res/icon/text_fit.png | Bin 0 -> 444 bytes .../FineUI.Examples/res/icon/text_flip.png | Bin 0 -> 323 bytes .../res/icon/text_font_default.png | Bin 0 -> 551 bytes .../res/icon/text_heading_1.png | Bin 0 -> 276 bytes .../res/icon/text_heading_2.png | Bin 0 -> 304 bytes .../res/icon/text_heading_3.png | Bin 0 -> 306 bytes .../res/icon/text_heading_4.png | Bin 0 -> 293 bytes .../res/icon/text_heading_5.png | Bin 0 -> 304 bytes .../res/icon/text_heading_6.png | Bin 0 -> 310 bytes .../res/icon/text_horizontalrule.png | Bin 0 -> 317 bytes .../FineUI.Examples/res/icon/text_indent.png | Bin 0 -> 353 bytes .../res/icon/text_indent_remove.png | Bin 0 -> 351 bytes .../FineUI.Examples/res/icon/text_inverse.png | Bin 0 -> 338 bytes .../FineUI.Examples/res/icon/text_italic.png | Bin 0 -> 223 bytes .../FineUI.Examples/res/icon/text_kerning.png | Bin 0 -> 495 bytes .../res/icon/text_left_to_right.png | Bin 0 -> 485 bytes .../res/icon/text_letter_omega.png | Bin 0 -> 541 bytes .../res/icon/text_letterspacing.png | Bin 0 -> 503 bytes .../res/icon/text_linespacing.png | Bin 0 -> 363 bytes .../res/icon/text_list_bullets.png | Bin 0 -> 344 bytes .../res/icon/text_list_numbers.png | Bin 0 -> 357 bytes .../res/icon/text_lowercase.png | Bin 0 -> 709 bytes .../res/icon/text_lowercase_a.png | Bin 0 -> 520 bytes .../FineUI.Examples/res/icon/text_mirror.png | Bin 0 -> 326 bytes .../res/icon/text_padding_bottom.png | Bin 0 -> 237 bytes .../res/icon/text_padding_left.png | Bin 0 -> 271 bytes .../res/icon/text_padding_right.png | Bin 0 -> 271 bytes .../res/icon/text_padding_top.png | Bin 0 -> 236 bytes .../FineUI.Examples/res/icon/text_replace.png | Bin 0 -> 691 bytes .../res/icon/text_right_to_left.png | Bin 0 -> 478 bytes .../res/icon/text_rotate_0.png | Bin 0 -> 326 bytes .../res/icon/text_rotate_180.png | Bin 0 -> 318 bytes .../res/icon/text_rotate_270.png | Bin 0 -> 323 bytes .../res/icon/text_rotate_90.png | Bin 0 -> 320 bytes .../FineUI.Examples/res/icon/text_ruler.png | Bin 0 -> 459 bytes .../FineUI.Examples/res/icon/text_shading.png | Bin 0 -> 674 bytes .../res/icon/text_signature.png | Bin 0 -> 524 bytes .../res/icon/text_smallcaps.png | Bin 0 -> 260 bytes .../res/icon/text_spelling.png | Bin 0 -> 583 bytes .../res/icon/text_strikethrough.png | Bin 0 -> 269 bytes .../res/icon/text_subscript.png | Bin 0 -> 422 bytes .../res/icon/text_superscript.png | Bin 0 -> 421 bytes .../FineUI.Examples/res/icon/text_tab.png | Bin 0 -> 283 bytes .../res/icon/text_underline.png | Bin 0 -> 273 bytes .../res/icon/text_uppercase.png | Bin 0 -> 747 bytes .../FineUI.Examples/res/icon/textfield.png | Bin 0 -> 153 bytes .../res/icon/textfield_add.png | Bin 0 -> 321 bytes .../res/icon/textfield_delete.png | Bin 0 -> 335 bytes .../res/icon/textfield_key.png | Bin 0 -> 455 bytes .../res/icon/textfield_rename.png | Bin 0 -> 273 bytes FineUI_v6/FineUI.Examples/res/icon/theme.png | Bin 0 -> 756 bytes .../FineUI.Examples/res/icon/thumb_down.png | Bin 0 -> 601 bytes .../FineUI.Examples/res/icon/thumb_up.png | Bin 0 -> 619 bytes FineUI_v6/FineUI.Examples/res/icon/tick.png | Bin 0 -> 537 bytes FineUI_v6/FineUI.Examples/res/icon/time.png | Bin 0 -> 793 bytes .../FineUI.Examples/res/icon/time_add.png | Bin 0 -> 827 bytes .../FineUI.Examples/res/icon/time_delete.png | Bin 0 -> 853 bytes .../FineUI.Examples/res/icon/time_go.png | Bin 0 -> 882 bytes .../FineUI.Examples/res/icon/time_green.png | Bin 0 -> 854 bytes .../FineUI.Examples/res/icon/time_red.png | Bin 0 -> 838 bytes .../res/icon/timeline_marker.png | Bin 0 -> 327 bytes .../FineUI.Examples/res/icon/transmit.png | Bin 0 -> 749 bytes .../FineUI.Examples/res/icon/transmit_add.png | Bin 0 -> 803 bytes .../res/icon/transmit_blue.png | Bin 0 -> 814 bytes .../res/icon/transmit_delete.png | Bin 0 -> 827 bytes .../res/icon/transmit_edit.png | Bin 0 -> 848 bytes .../res/icon/transmit_error.png | Bin 0 -> 883 bytes .../FineUI.Examples/res/icon/transmit_go.png | Bin 0 -> 842 bytes .../FineUI.Examples/res/icon/transmit_red.png | Bin 0 -> 838 bytes FineUI_v6/FineUI.Examples/res/icon/tux.png | Bin 0 -> 696 bytes FineUI_v6/FineUI.Examples/res/icon/user.png | Bin 0 -> 741 bytes .../FineUI.Examples/res/icon/user_add.png | Bin 0 -> 746 bytes .../FineUI.Examples/res/icon/user_alert.png | Bin 0 -> 822 bytes FineUI_v6/FineUI.Examples/res/icon/user_b.png | Bin 0 -> 777 bytes .../FineUI.Examples/res/icon/user_brown.png | Bin 0 -> 779 bytes .../FineUI.Examples/res/icon/user_comment.png | Bin 0 -> 743 bytes .../FineUI.Examples/res/icon/user_cross.png | Bin 0 -> 856 bytes .../FineUI.Examples/res/icon/user_delete.png | Bin 0 -> 767 bytes .../FineUI.Examples/res/icon/user_earth.png | Bin 0 -> 853 bytes .../FineUI.Examples/res/icon/user_edit.png | Bin 0 -> 833 bytes .../FineUI.Examples/res/icon/user_female.png | Bin 0 -> 663 bytes .../FineUI.Examples/res/icon/user_go.png | Bin 0 -> 793 bytes .../FineUI.Examples/res/icon/user_gray.png | Bin 0 -> 706 bytes .../res/icon/user_gray_cool.png | Bin 0 -> 761 bytes .../FineUI.Examples/res/icon/user_green.png | Bin 0 -> 722 bytes .../FineUI.Examples/res/icon/user_home.png | Bin 0 -> 865 bytes .../FineUI.Examples/res/icon/user_key.png | Bin 0 -> 834 bytes .../FineUI.Examples/res/icon/user_magnify.png | Bin 0 -> 808 bytes .../FineUI.Examples/res/icon/user_mature.png | Bin 0 -> 773 bytes .../FineUI.Examples/res/icon/user_orange.png | Bin 0 -> 723 bytes .../FineUI.Examples/res/icon/user_red.png | Bin 0 -> 717 bytes .../FineUI.Examples/res/icon/user_star.png | Bin 0 -> 816 bytes .../FineUI.Examples/res/icon/user_suit.png | Bin 0 -> 748 bytes .../res/icon/user_suit_black.png | Bin 0 -> 784 bytes .../FineUI.Examples/res/icon/user_tick.png | Bin 0 -> 827 bytes FineUI_v6/FineUI.Examples/res/icon/vcard.png | Bin 0 -> 533 bytes .../FineUI.Examples/res/icon/vcard_add.png | Bin 0 -> 661 bytes .../FineUI.Examples/res/icon/vcard_delete.png | Bin 0 -> 651 bytes .../FineUI.Examples/res/icon/vcard_edit.png | Bin 0 -> 775 bytes .../FineUI.Examples/res/icon/vcard_key.png | Bin 0 -> 695 bytes FineUI_v6/FineUI.Examples/res/icon/vector.png | Bin 0 -> 481 bytes .../FineUI.Examples/res/icon/vector_add.png | Bin 0 -> 616 bytes .../res/icon/vector_delete.png | Bin 0 -> 635 bytes .../FineUI.Examples/res/icon/vector_key.png | Bin 0 -> 746 bytes FineUI_v6/FineUI.Examples/res/icon/wand.png | Bin 0 -> 570 bytes .../res/icon/weather_cloud.png | Bin 0 -> 595 bytes .../res/icon/weather_clouds.png | Bin 0 -> 581 bytes .../res/icon/weather_cloudy.png | Bin 0 -> 694 bytes .../res/icon/weather_cloudy_rain.png | Bin 0 -> 835 bytes .../res/icon/weather_lightning.png | Bin 0 -> 641 bytes .../FineUI.Examples/res/icon/weather_rain.png | Bin 0 -> 626 bytes .../FineUI.Examples/res/icon/weather_snow.png | Bin 0 -> 341 bytes .../FineUI.Examples/res/icon/weather_sun.png | Bin 0 -> 623 bytes FineUI_v6/FineUI.Examples/res/icon/webcam.png | Bin 0 -> 728 bytes .../FineUI.Examples/res/icon/webcam_add.png | Bin 0 -> 786 bytes .../res/icon/webcam_connect.png | Bin 0 -> 825 bytes .../res/icon/webcam_delete.png | Bin 0 -> 805 bytes .../FineUI.Examples/res/icon/webcam_error.png | Bin 0 -> 821 bytes .../FineUI.Examples/res/icon/webcam_start.png | Bin 0 -> 857 bytes .../FineUI.Examples/res/icon/webcam_stop.png | Bin 0 -> 814 bytes FineUI_v6/FineUI.Examples/res/icon/world.png | Bin 0 -> 923 bytes .../FineUI.Examples/res/icon/world_add.png | Bin 0 -> 940 bytes .../res/icon/world_connect.png | Bin 0 -> 963 bytes .../FineUI.Examples/res/icon/world_dawn.png | Bin 0 -> 821 bytes .../FineUI.Examples/res/icon/world_delete.png | Bin 0 -> 945 bytes .../FineUI.Examples/res/icon/world_edit.png | Bin 0 -> 945 bytes .../FineUI.Examples/res/icon/world_go.png | Bin 0 -> 944 bytes .../FineUI.Examples/res/icon/world_key.png | Bin 0 -> 965 bytes .../FineUI.Examples/res/icon/world_link.png | Bin 0 -> 957 bytes .../FineUI.Examples/res/icon/world_night.png | Bin 0 -> 514 bytes .../FineUI.Examples/res/icon/world_orbit.png | Bin 0 -> 967 bytes FineUI_v6/FineUI.Examples/res/icon/wrench.png | Bin 0 -> 610 bytes .../res/icon/wrench_orange.png | Bin 0 -> 584 bytes FineUI_v6/FineUI.Examples/res/icon/xhtml.png | Bin 0 -> 595 bytes .../FineUI.Examples/res/icon/xhtml_add.png | Bin 0 -> 703 bytes .../FineUI.Examples/res/icon/xhtml_delete.png | Bin 0 -> 696 bytes .../FineUI.Examples/res/icon/xhtml_error.png | Bin 0 -> 736 bytes .../FineUI.Examples/res/icon/xhtml_go.png | Bin 0 -> 697 bytes .../FineUI.Examples/res/icon/xhtml_valid.png | Bin 0 -> 718 bytes FineUI_v6/FineUI.Examples/res/icon/zoom.png | Bin 0 -> 692 bytes .../FineUI.Examples/res/icon/zoom_in.png | Bin 0 -> 725 bytes .../FineUI.Examples/res/icon/zoom_out.png | Bin 0 -> 708 bytes FineUI_v6/FineUI.Examples/res/images/16/1.png | Bin 0 -> 586 bytes .../FineUI.Examples/res/images/16/10.png | Bin 0 -> 779 bytes .../FineUI.Examples/res/images/16/11.png | Bin 0 -> 663 bytes .../FineUI.Examples/res/images/16/12.png | Bin 0 -> 706 bytes .../FineUI.Examples/res/images/16/13.png | Bin 0 -> 761 bytes .../FineUI.Examples/res/images/16/14.png | Bin 0 -> 722 bytes .../FineUI.Examples/res/images/16/15.png | Bin 0 -> 773 bytes .../FineUI.Examples/res/images/16/16.png | Bin 0 -> 723 bytes .../FineUI.Examples/res/images/16/17.png | Bin 0 -> 717 bytes .../FineUI.Examples/res/images/16/18.png | Bin 0 -> 748 bytes .../FineUI.Examples/res/images/16/19.png | Bin 0 -> 784 bytes FineUI_v6/FineUI.Examples/res/images/16/2.png | Bin 0 -> 613 bytes .../FineUI.Examples/res/images/16/20.png | Bin 0 -> 793 bytes .../FineUI.Examples/res/images/16/21.png | Bin 0 -> 865 bytes .../FineUI.Examples/res/images/16/23.png | Bin 0 -> 834 bytes .../FineUI.Examples/res/images/16/24.png | Bin 0 -> 808 bytes .../FineUI.Examples/res/images/16/25.png | Bin 0 -> 816 bytes FineUI_v6/FineUI.Examples/res/images/16/3.png | Bin 0 -> 586 bytes FineUI_v6/FineUI.Examples/res/images/16/4.png | Bin 0 -> 579 bytes FineUI_v6/FineUI.Examples/res/images/16/5.png | Bin 0 -> 599 bytes FineUI_v6/FineUI.Examples/res/images/16/6.png | Bin 0 -> 592 bytes FineUI_v6/FineUI.Examples/res/images/16/7.png | Bin 0 -> 586 bytes FineUI_v6/FineUI.Examples/res/images/16/8.png | Bin 0 -> 741 bytes FineUI_v6/FineUI.Examples/res/images/16/9.png | Bin 0 -> 777 bytes .../FineUI.Examples/res/images/blank.png | Bin 0 -> 3430 bytes .../res/images/bs-docs-masthead-pattern.png | Bin 0 -> 6450 bytes .../FineUI.Examples/res/images/china.gif | Bin 0 -> 82978 bytes .../FineUI.Examples/res/images/class.gif | Bin 0 -> 925 bytes FineUI_v6/FineUI.Examples/res/images/cmp.gif | Bin 0 -> 988 bytes FineUI_v6/FineUI.Examples/res/images/code.gif | Bin 0 -> 988 bytes .../res/images/collapse-all.gif | Bin 0 -> 983 bytes .../FineUI.Examples/res/images/comment.gif | Bin 0 -> 595 bytes .../FineUI.Examples/res/images/delete.png | Bin 0 -> 715 bytes .../res/images/delete_disabled.png | Bin 0 -> 563 bytes .../FineUI.Examples/res/images/demo_pro.png | Bin 0 -> 16847 bytes .../res/images/diamond-black.gif | Bin 0 -> 49 bytes .../res/images/enable_gzip_iis6_1.png | Bin 0 -> 15221 bytes .../res/images/enable_gzip_iis6_2.png | Bin 0 -> 9671 bytes .../res/images/enable_gzip_iis6_3.png | Bin 0 -> 14752 bytes .../res/images/enable_gzip_iis6_4.png | Bin 0 -> 28953 bytes .../res/images/enable_gzip_iis6_5.png | Bin 0 -> 5493 bytes .../FineUI.Examples/res/images/expand-all.gif | Bin 0 -> 1009 bytes .../res/images/filetype/vs_ascx.png | Bin 0 -> 3007 bytes .../res/images/filetype/vs_ashx.png | Bin 0 -> 3294 bytes .../res/images/filetype/vs_aspx.png | Bin 0 -> 3290 bytes .../res/images/filetype/vs_config.png | Bin 0 -> 3361 bytes .../res/images/filetype/vs_cs.png | Bin 0 -> 3326 bytes .../res/images/filetype/vs_css.png | Bin 0 -> 3272 bytes .../res/images/filetype/vs_htm.png | Bin 0 -> 3253 bytes .../res/images/filetype/vs_html.png | Bin 0 -> 3253 bytes .../res/images/filetype/vs_img.png | Bin 0 -> 3365 bytes .../res/images/filetype/vs_js.png | Bin 0 -> 3430 bytes .../res/images/filetype/vs_master.png | Bin 0 -> 3007 bytes .../res/images/filetype/vs_sitemap.png | Bin 0 -> 3274 bytes .../res/images/filetype/vs_txt.png | Bin 0 -> 3157 bytes .../res/images/filetype/vs_unknow.png | Bin 0 -> 3017 bytes .../res/images/filetype/vs_usercontrol.png | Bin 0 -> 3007 bytes .../res/images/filetype/vs_vb.png | Bin 0 -> 3255 bytes .../res/images/filetype/vs_xml.png | Bin 0 -> 3195 bytes .../res/images/formchangeconfirm.png | Bin 0 -> 99770 bytes .../res/images/ico_24_grsz.gif | Bin 0 -> 1274 bytes .../FineUI.Examples/res/images/icons.gif | Bin 0 -> 495937 bytes .../FineUI.Examples/res/images/json.net.1.png | Bin 0 -> 38286 bytes .../FineUI.Examples/res/images/json.net.2.png | Bin 0 -> 56913 bytes .../res/images/loading/loading_24.gif | Bin 0 -> 2545 bytes .../res/images/loading/loading_25.gif | Bin 0 -> 3494 bytes .../res/images/loading/loading_32.gif | Bin 0 -> 4176 bytes .../res/images/loading/loading_32_2.gif | Bin 0 -> 4178 bytes .../res/images/loading/loading_42.gif | Bin 0 -> 3992 bytes .../res/images/loading/loading_50.gif | Bin 0 -> 6494 bytes .../FineUI.Examples/res/images/login.png | Bin 0 -> 6387 bytes .../res/images/logo/favicon.gif | Bin 0 -> 865 bytes .../res/images/logo/favicon.ico | Bin 0 -> 17542 bytes .../res/images/logo/favicon.png | Bin 0 -> 4116 bytes .../FineUI.Examples/res/images/logo/logo.png | Bin 0 -> 2590 bytes .../FineUI.Examples/res/images/logo/logo.psd | Bin 0 -> 24578 bytes .../FineUI.Examples/res/images/logo/logo2.gif | Bin 0 -> 769 bytes .../FineUI.Examples/res/images/logo/logo3.png | Bin 0 -> 2676 bytes .../res/images/logo/logo3_old.gif | Bin 0 -> 2099 bytes .../res/images/logo/logo_127.psd | Bin 0 -> 23378 bytes .../res/images/logo/logo_old.gif | Bin 0 -> 2054 bytes FineUI_v6/FineUI.Examples/res/images/love.jpg | Bin 0 -> 1008 bytes .../FineUI.Examples/res/images/my_face_80.jpg | Bin 0 -> 5817 bytes .../res/images/nav_hover_highlight_2.gif | Bin 0 -> 147 bytes .../res/images/no_data_found.jpg | Bin 0 -> 2964 bytes .../res/images/pagemenu-separator.gif | Bin 0 -> 55 bytes .../images/pagemenu_toolbar_background.gif | Bin 0 -> 153 bytes FineUI_v6/FineUI.Examples/res/images/pkg.gif | Bin 0 -> 936 bytes .../res/images/snapshot/cascade_window.jpg | Bin 0 -> 220186 bytes .../FineUI.Examples/res/images/square.gif | Bin 0 -> 71 bytes .../FineUI.Examples/res/images/success.png | Bin 0 -> 4447 bytes .../images/themeroller-ready-black-200px.png | Bin 0 -> 6099 bytes .../images/themeroller-ready-white-200px.png | Bin 0 -> 5578 bytes .../FineUI.Examples/res/images/toolbox.png | Bin 0 -> 38973 bytes .../res/images/ui-anim_basic_16x16.gif | Bin 0 -> 1459 bytes FineUI_v6/FineUI.Examples/res/js/jquery.js | 11008 ++++++++++++ .../FineUI.Examples/res/js/jquery.min.js | 5 + .../res/loading/_1/ffffff_444444.gif | Bin 0 -> 4502 bytes .../res/loading/_102/ffffff_444444.gif | Bin 0 -> 3346 bytes .../res/loading/_104/ffffff_444444.gif | Bin 0 -> 8325 bytes .../res/loading/_109/ffffff_444444.gif | Bin 0 -> 12279 bytes .../res/loading/_13/ffffff_444444.gif | Bin 0 -> 9190 bytes .../res/loading/_2/ffffff_444444.gif | Bin 0 -> 7149 bytes .../res/loading/_21/ffffff_444444.gif | Bin 0 -> 6789 bytes .../res/loading/_25/ffffff_444444.gif | Bin 0 -> 2905 bytes .../res/loading/_3/ffffff_444444.gif | Bin 0 -> 6489 bytes .../res/loading/_31/ffffff_444444.gif | Bin 0 -> 5198 bytes .../res/loading/_36/ffffff_444444.gif | Bin 0 -> 10826 bytes .../res/loading/_40/ffffff_444444.gif | Bin 0 -> 4209 bytes .../res/loading/_43/ffffff_444444.gif | Bin 0 -> 5334 bytes .../res/loading/_52/ffffff_444444.gif | Bin 0 -> 2600 bytes .../res/loading/_53/ffffff_444444.gif | Bin 0 -> 3009 bytes .../res/loading/_54/ffffff_444444.gif | Bin 0 -> 7167 bytes .../res/loading/_6/ffffff_444444.gif | Bin 0 -> 11316 bytes .../res/loading/_61/ffffff_444444.gif | Bin 0 -> 2591 bytes .../res/loading/_62/ffffff_444444.gif | Bin 0 -> 7590 bytes .../res/loading/_66/ffffff_444444.gif | Bin 0 -> 7624 bytes .../res/loading/_67/ffffff_444444.gif | Bin 0 -> 3463 bytes .../res/loading/_68/ffffff_444444.gif | Bin 0 -> 7394 bytes .../res/loading/_72/ffffff_444444.gif | Bin 0 -> 5412 bytes .../res/loading/_74/ffffff_444444.gif | Bin 0 -> 6083 bytes .../res/loading/_75/ffffff_444444.gif | Bin 0 -> 3904 bytes .../res/loading/_76/ffffff_444444.gif | Bin 0 -> 9333 bytes .../res/loading/_8/ffffff_444444.gif | Bin 0 -> 16727 bytes .../res/loading/_92/ffffff_444444.gif | Bin 0 -> 9474 bytes .../res/loading/_93/ffffff_444444.gif | Bin 0 -> 14563 bytes .../res/loading/_99/ffffff_444444.gif | Bin 0 -> 3707 bytes .../FineUI.Examples/tabstrip/tabstrip.aspx | 62 + .../FineUI.Examples/tabstrip/tabstrip.aspx.cs | 36 + .../tabstrip/tabstrip.aspx.designer.cs | 132 + .../tabstrip/tabstrip_addtab.aspx | 56 + .../tabstrip/tabstrip_addtab.aspx.cs | 45 + .../tabstrip/tabstrip_addtab.aspx.designer.cs | 114 + .../tabstrip/tabstrip_autopostback.aspx | 62 + .../tabstrip/tabstrip_autopostback.aspx.cs | 51 + .../tabstrip_autopostback.aspx.designer.cs | 132 + .../tabstrip/tabstrip_enableclose.aspx | 61 + .../tabstrip/tabstrip_enableclose.aspx.cs | 34 + .../tabstrip_enableclose.aspx.designer.cs | 168 + .../tabstrip/tabstrip_iframe.aspx | 35 + .../tabstrip/tabstrip_iframe.aspx.cs | 23 + .../tabstrip/tabstrip_iframe.aspx.designer.cs | 87 + .../tabstrip/tabstrip_iframe_disabled.aspx | 28 + .../tabstrip/tabstrip_iframe_disabled.aspx.cs | 42 + .../tabstrip_iframe_disabled.aspx.designer.cs | 69 + .../tabstrip_iframe_disabled_tab1.aspx | 20 + .../tabstrip_iframe_disabled_tab1.aspx.cs | 36 + ...trip_iframe_disabled_tab1.aspx.designer.cs | 51 + .../tabstrip/tabstrip_position.aspx | 101 + .../tabstrip/tabstrip_position.aspx.cs | 20 + .../tabstrip_position.aspx.designer.cs | 258 + FineUI_v6/FineUI.Examples/test/activex.aspx | 84 + .../FineUI.Examples/test/activex.aspx.cs | 47 + .../test/activex.aspx.designer.cs | 150 + .../test/checkboxlist_update2.aspx | 33 + .../test/checkboxlist_update2.aspx.cs | 130 + .../checkboxlist_update2.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/test/empty.aspx | 103 + FineUI_v6/FineUI.Examples/test/empty.aspx.cs | 39 + .../test/empty.aspx.designer.cs | 321 + FineUI_v6/FineUI.Examples/test/form2.aspx | 123 + FineUI_v6/FineUI.Examples/test/form2.aspx.cs | 36 + .../test/form2.aspx.designer.cs | 132 + FineUI_v6/FineUI.Examples/test/grid2.aspx | 62 + FineUI_v6/FineUI.Examples/test/grid2.aspx.cs | 39 + .../test/grid2.aspx.designer.cs | 42 + .../test/grid_editor_cell2.aspx | 79 + .../test/grid_editor_cell2.aspx.cs | 121 + .../test/grid_editor_cell2.aspx.designer.cs | 114 + FineUI_v6/FineUI.Examples/test/test.aspx | 26 + FineUI_v6/FineUI.Examples/test/test.aspx.cs | 22 + .../test/test.aspx.designer.cs | 42 + FineUI_v6/FineUI.Examples/test/test2.aspx | 44 + FineUI_v6/FineUI.Examples/test/test2.aspx.cs | 22 + .../test/test2.aspx.designer.cs | 51 + .../autocomplete/custom_display.aspx | 81 + .../autocomplete/custom_display.aspx.cs | 24 + .../custom_display.aspx.designer.cs | 69 + .../third-party/autocomplete/email.aspx | 62 + .../third-party/autocomplete/email.aspx.cs | 24 + .../autocomplete/email.aspx.designer.cs | 51 + .../third-party/autocomplete/inline.aspx | 60 + .../third-party/autocomplete/inline.aspx.cs | 24 + .../autocomplete/inline.aspx.designer.cs | 51 + .../autocomplete/inline_window.aspx | 75 + .../autocomplete/inline_window.aspx.cs | 29 + .../inline_window.aspx.designer.cs | 69 + .../autocomplete/multi_values.aspx | 100 + .../autocomplete/multi_values.aspx.cs | 24 + .../multi_values.aspx.designer.cs | 51 + .../autocomplete/multi_values_remote.aspx | 88 + .../autocomplete/multi_values_remote.aspx.cs | 24 + .../multi_values_remote.aspx.designer.cs | 51 + .../autocomplete/remote_with_cache.aspx | 58 + .../autocomplete/remote_with_cache.aspx.cs | 24 + .../remote_with_cache.aspx.designer.cs | 51 + .../third-party/autocomplete/search.ashx | 1 + .../third-party/autocomplete/search.ashx.cs | 72 + .../third-party/ckeditor/ckeditor.aspx | 77 + .../third-party/ckeditor/ckeditor.aspx.cs | 46 + .../ckeditor/ckeditor.aspx.designer.cs | 60 + .../ckeditor/ckeditor_setvalue.aspx | 66 + .../ckeditor/ckeditor_setvalue.aspx.cs | 46 + .../ckeditor_setvalue.aspx.designer.cs | 69 + .../third-party/my97/my97.aspx | 55 + .../third-party/my97/my97.aspx.cs | 24 + .../third-party/my97/my97.aspx.designer.cs | 78 + .../res/My97DatePicker_4.8beta4.zip | Bin 0 -> 38223 bytes .../third-party/res/ckeditor_4.4.2_full.zip | Bin 0 -> 1389795 bytes .../res/jqueryuiautocomplete/jquery-ui.css | 146 + .../res/jqueryuiautocomplete/jquery-ui.js | 2583 +++ .../jqueryuiautocomplete/jquery-ui.min.css | 6 + .../res/jqueryuiautocomplete/jquery-ui.min.js | 7 + .../theme-start/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_55_999999_40x100.png | Bin 0 -> 259 bytes .../images/ui-bg_flat_75_aaaaaa_40x100.png | Bin 0 -> 251 bytes .../images/ui-bg_glass_45_0078ae_1x400.png | Bin 0 -> 385 bytes .../images/ui-bg_glass_55_f8da4e_1x400.png | Bin 0 -> 384 bytes .../images/ui-bg_glass_75_79c9ec_1x400.png | Bin 0 -> 387 bytes .../ui-bg_gloss-wave_45_e14f1c_500x100.png | Bin 0 -> 5903 bytes .../ui-bg_gloss-wave_50_6eac2c_500x100.png | Bin 0 -> 5945 bytes .../ui-bg_gloss-wave_75_2191c0_500x100.png | Bin 0 -> 6016 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 331 bytes .../images/ui-icons_0078ae_256x240.png | Bin 0 -> 4599 bytes .../images/ui-icons_056b93_256x240.png | Bin 0 -> 4599 bytes .../images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 4599 bytes .../images/ui-icons_e0fdff_256x240.png | Bin 0 -> 4599 bytes .../images/ui-icons_f5e175_256x240.png | Bin 0 -> 4599 bytes .../images/ui-icons_f7a50d_256x240.png | Bin 0 -> 4599 bytes .../images/ui-icons_fcd113_256x240.png | Bin 0 -> 4599 bytes .../theme-start/theme.css | 410 + .../third-party/res/tinymce_4.1.1.zip | Bin 0 -> 316789 bytes .../third-party/res/ueditor1_4_3-utf8-net.zip | Bin 0 -> 3518597 bytes .../res/umeditor1_2_2-utf8-net.zip | Bin 0 -> 5834975 bytes .../third-party/res/授权说明.txt | 19 + .../third-party/tinymce/tinymce.aspx | 78 + .../third-party/tinymce/tinymce.aspx.cs | 46 + .../tinymce/tinymce.aspx.designer.cs | 60 + .../third-party/tinymce/tinymce_setvalue.aspx | 67 + .../tinymce/tinymce_setvalue.aspx.cs | 46 + .../tinymce/tinymce_setvalue.aspx.designer.cs | 69 + .../third-party/ueditor/ueditor.aspx | 82 + .../third-party/ueditor/ueditor.aspx.cs | 46 + .../ueditor/ueditor.aspx.designer.cs | 60 + .../third-party/ueditor/ueditor_setvalue.aspx | 70 + .../ueditor/ueditor_setvalue.aspx.cs | 49 + .../ueditor/ueditor_setvalue.aspx.designer.cs | 69 + .../third-party/ueditor/ueditor_two.aspx | 138 + .../third-party/ueditor/ueditor_two.aspx.cs | 56 + .../ueditor/ueditor_two.aspx.designer.cs | 132 + .../third-party/umeditor/umeditor.aspx | 93 + .../third-party/umeditor/umeditor.aspx.cs | 46 + .../umeditor/umeditor.aspx.designer.cs | 60 + .../umeditor/umeditor_setvalue.aspx | 81 + .../umeditor/umeditor_setvalue.aspx.cs | 46 + .../umeditor_setvalue.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/toolbar/form.aspx | 99 + .../FineUI.Examples/toolbar/form.aspx.cs | 42 + .../toolbar/form.aspx.designer.cs | 150 + .../FineUI.Examples/toolbar/formfields.aspx | 56 + .../toolbar/formfields.aspx.cs | 56 + .../toolbar/formfields.aspx.designer.cs | 96 + FineUI_v6/FineUI.Examples/toolbar/menu.aspx | 48 + .../FineUI.Examples/toolbar/menu.aspx.cs | 22 + .../toolbar/menu.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/toolbar/menu.xml | 10 + .../FineUI.Examples/toolbar/menu_dynamic.aspx | 20 + .../toolbar/menu_dynamic.aspx.cs | 106 + .../toolbar/menu_dynamic.aspx.designer.cs | 42 + .../toolbar/menu_dynamic2.aspx | 26 + .../toolbar/menu_dynamic2.aspx.cs | 35 + .../toolbar/menu_dynamic2.aspx.designer.cs | 51 + .../toolbar/menu_hideonclick.aspx | 53 + .../toolbar/menu_hideonclick.aspx.cs | 22 + .../toolbar/menu_hideonclick.aspx.designer.cs | 69 + .../FineUI.Examples/toolbar/menucheckbox.aspx | 54 + .../toolbar/menucheckbox.aspx.cs | 71 + .../toolbar/menucheckbox.aspx.designer.cs | 123 + .../toolbar/multi_toolbars.aspx | 67 + .../toolbar/multi_toolbars.aspx.cs | 22 + .../toolbar/multi_toolbars.aspx.designer.cs | 150 + .../FineUI.Examples/toolbar/toolbar_fill.aspx | 51 + .../toolbar/toolbar_fill.aspx.cs | 22 + .../toolbar/toolbar_fill.aspx.designer.cs | 150 + .../toolbar/toolbar_iframe.aspx | 46 + .../toolbar/toolbar_iframe.aspx.cs | 25 + .../toolbar/toolbar_iframe.aspx.designer.cs | 69 + .../toolbar/toolbar_images.aspx | 73 + .../toolbar/toolbar_images.aspx.cs | 21 + .../toolbar/toolbar_images.aspx.designer.cs | 105 + .../toolbar/toolbar_images_fixedwidth.aspx | 45 + .../toolbar/toolbar_images_fixedwidth.aspx.cs | 21 + ...toolbar_images_fixedwidth.aspx.designer.cs | 96 + .../tree/checkbox/tree_checkall.aspx | 37 + .../tree/checkbox/tree_checkall.aspx.cs | 59 + .../checkbox/tree_checkall.aspx.designer.cs | 42 + .../tree/checkbox/tree_checked.aspx | 41 + .../tree/checkbox/tree_checked.aspx.cs | 39 + .../checkbox/tree_checked.aspx.designer.cs | 60 + .../FineUI.Examples/tree/databind/Web.sitemap | 15 + .../tree/databind/tree_datasource.aspx | 21 + .../tree/databind/tree_datasource.aspx.cs | 34 + .../databind/tree_datasource.aspx.designer.cs | 51 + .../tree/databind/tree_datatable.aspx | 17 + .../tree/databind/tree_datatable.aspx.cs | 128 + .../databind/tree_datatable.aspx.designer.cs | 42 + .../tree/databind/tree_document.aspx | 21 + .../tree/databind/tree_document.aspx.cs | 54 + .../databind/tree_document.aspx.designer.cs | 60 + .../tree/databind/tree_sitemap.aspx | 24 + .../tree/databind/tree_sitemap.aspx.cs | 33 + .../databind/tree_sitemap.aspx.designer.cs | 51 + .../FineUI.Examples/tree/databind/website.xml | 15 + .../tree/select/tree_multi_select.aspx | 51 + .../tree/select/tree_multi_select.aspx.cs | 63 + .../select/tree_multi_select.aspx.designer.cs | 69 + .../select/tree_multi_select_selectable.aspx | 47 + .../tree_multi_select_selectable.aspx.cs | 63 + ...e_multi_select_selectable.aspx.designer.cs | 69 + .../tree/select/tree_nodecommand.aspx | 41 + .../tree/select/tree_nodecommand.aspx.cs | 28 + .../select/tree_nodecommand.aspx.designer.cs | 51 + .../tree/select/tree_select.aspx | 45 + .../tree/select/tree_select.aspx.cs | 42 + .../tree/select/tree_select.aspx.designer.cs | 69 + FineUI_v6/FineUI.Examples/tree/tree.aspx | 39 + FineUI_v6/FineUI.Examples/tree/tree.aspx.cs | 24 + .../tree/tree.aspx.designer.cs | 42 + FineUI_v6/FineUI.Examples/tree/tree_ajax.aspx | 36 + .../FineUI.Examples/tree/tree_ajax.aspx.cs | 62 + .../tree/tree_ajax.aspx.designer.cs | 42 + .../tree/tree_auto_leaf_identification.aspx | 21 + .../tree_auto_leaf_identification.aspx.cs | 145 + ..._auto_leaf_identification.aspx.designer.cs | 51 + .../tree/tree_contextmenu.aspx | 128 + .../tree/tree_contextmenu.aspx.cs | 24 + .../tree/tree_contextmenu.aspx.designer.cs | 69 + .../FineUI.Examples/tree/tree_expand.aspx | 41 + .../FineUI.Examples/tree/tree_expand.aspx.cs | 34 + .../tree/tree_expand.aspx.designer.cs | 51 + FineUI_v6/FineUI.Examples/tree/tree_icon.aspx | 40 + .../FineUI.Examples/tree/tree_icon.aspx.cs | 21 + .../tree/tree_icon.aspx.designer.cs | 42 + .../tree/tree_node_cssclass.aspx | 49 + .../tree/tree_node_cssclass.aspx.cs | 24 + .../tree/tree_node_cssclass.aspx.designer.cs | 42 + .../tree/tree_nodedatabound.aspx | 27 + .../tree/tree_nodedatabound.aspx.cs | 43 + .../tree/tree_nodedatabound.aspx.designer.cs | 51 + .../tree/tree_singleexpand.aspx | 50 + .../tree/tree_singleexpand.aspx.cs | 24 + .../tree/tree_singleexpand.aspx.designer.cs | 42 + .../tree/tree_textselection.aspx | 39 + .../tree/tree_textselection.aspx.cs | 24 + .../tree/tree_textselection.aspx.designer.cs | 42 + FineUI_v6/FineUI.Examples/upload/web.config | 6 + .../usercontrol/UserInfoControl.ascx | 8 + .../usercontrol/UserInfoControl.ascx.cs | 62 + .../UserInfoControl.ascx.designer.cs | 33 + .../FineUI.Examples/usercontrol/userinfo.aspx | 40 + .../usercontrol/userinfo.aspx.cs | 17 + .../usercontrol/userinfo.aspx.designer.cs | 87 + .../usercontrol/userinfo2.aspx | 60 + .../usercontrol/userinfo2.aspx.cs | 32 + .../usercontrol/userinfo2.aspx.designer.cs | 150 + .../usercontrol/userinfo_dynamic.aspx | 26 + .../usercontrol/userinfo_dynamic.aspx.cs | 43 + .../userinfo_dynamic.aspx.designer.cs | 60 + .../FineUI.Examples/window/group_panel.aspx | 63 + .../window/group_panel.aspx.cs | 27 + .../window/group_panel.aspx.designer.cs | 141 + FineUI_v6/FineUI.Examples/window/panel.aspx | 62 + .../FineUI.Examples/window/panel.aspx.cs | 52 + .../window/panel.aspx.designer.cs | 177 + .../window/panel_collapse.aspx | 27 + .../window/panel_collapse.aspx.cs | 32 + .../window/panel_collapse.aspx.designer.cs | 51 + .../window/panel_disabled.aspx | 47 + .../window/panel_disabled.aspx.cs | 27 + .../window/panel_disabled.aspx.designer.cs | 132 + FineUI_v6/FineUI.Examples/window/window.aspx | 46 + .../FineUI.Examples/window/window.aspx.cs | 42 + .../window/window.aspx.designer.cs | 87 + .../FineUI.Examples/window/window_form.aspx | 77 + .../window/window_form.aspx.cs | 35 + .../window/window_form.aspx.designer.cs | 168 + .../window/window_maximized.aspx | 47 + .../window/window_maximized.aspx.cs | 47 + .../window/window_maximized.aspx.designer.cs | 87 + .../window/window_maximized_fixed.aspx | 47 + .../window/window_maximized_fixed.aspx.cs | 47 + .../window_maximized_fixed.aspx.designer.cs | 87 + .../window/window_minwidth.aspx | 40 + .../window/window_minwidth.aspx.cs | 24 + .../window/window_minwidth.aspx.designer.cs | 60 + .../FineUI.Examples/window/window_multi.aspx | 139 + .../window/window_multi.aspx.cs | 34 + .../window/window_multi.aspx.designer.cs | 213 + .../window/window_toolbar.aspx | 45 + .../window/window_toolbar.aspx.cs | 35 + .../window/window_toolbar.aspx.designer.cs | 114 + FineUI_v6/FineUI.sln | 28 + .../FormBase.cs | 352 + .../CollapsablePanel.cs | 593 + .../PanelBase.cs | 1258 ++ .../BoxComponent.Container/Container.cs | 181 + .../RealTextField.cs | 407 + .../BoxComponent.Field.TextField/TextField.cs | 544 + .../BoxComponent.Field/Field.cs | 637 + .../BoxComponent.Field/TooltipField.cs | 165 + .../BoxComponent.cs | 568 + .../ControlBase.Component/Component.cs | 417 + .../ControlBase/BaseCollection.cs | 137 + .../ControlBase/ControlBase.cs | 2297 +++ .../ControlBase/ControlBaseCollection.cs | 78 + .../ControlBase/Listener/Listener.cs | 120 + .../Listener/ListenerCollection.cs | 60 + .../FineUI/Business/Config/ConfigSection.cs | 411 + FineUI_v6/FineUI/Business/Config/Constants.cs | 243 + .../FineUI/Business/Config/GlobalConfig.cs | 404 + .../ControlBuilder/ContentPanelBuilder.cs | 75 + .../NotAllowWhitespaceLiteralsBuilder.cs | 67 + .../Business/Editor/ControlBaseItemsEditor.cs | 96 + .../Business/Editor/GridColumnEditorEditor.cs | 80 + .../Business/Editor/GridColumnsEditor.cs | 67 + .../FineUI/Business/Editor/MenuItemsEditor.cs | 65 + .../Business/Editor/ToolbarItemsEditor.cs | 83 + .../FineUI/Business/Enums/AjaxLoadingType.cs | 70 + .../FineUI/Business/Enums/BoxLayoutAlign.cs | 108 + .../Business/Enums/BoxLayoutPosition.cs | 86 + .../FineUI/Business/Enums/ButtonAlign.cs | 45 + FineUI_v6/FineUI/Business/Enums/ButtonSize.cs | 51 + FineUI_v6/FineUI/Business/Enums/ButtonType.cs | 51 + .../FineUI/Business/Enums/CloseAction.cs | 76 + .../FineUI/Business/Enums/CollapseMode.cs | 70 + .../FineUI/Business/Enums/CompareType.cs | 84 + .../FineUI/Business/Enums/FooterBarAlign.cs | 51 + .../FineUI/Business/Enums/Grid/FieldType.cs | 81 + .../FineUI/Business/Enums/Grid/Renderer.cs | 153 + FineUI_v6/FineUI/Business/Enums/HideMode.cs | 75 + FineUI_v6/FineUI/Business/Enums/Icon.cs | 13820 ++++++++++++++++ FineUI_v6/FineUI/Business/Enums/IconAlign.cs | 85 + FineUI_v6/FineUI/Business/Enums/IconHelper.cs | 120 + FineUI_v6/FineUI/Business/Enums/LabelAlign.cs | 58 + FineUI_v6/FineUI/Business/Enums/Language.cs | 265 + FineUI_v6/FineUI/Business/Enums/Layout.cs | 138 + .../FineUI/Business/Enums/MessageBoxIcon.cs | 110 + .../FineUI/Business/Enums/MessageTarget.cs | 89 + FineUI_v6/FineUI/Business/Enums/Operator.cs | 96 + FineUI_v6/FineUI/Business/Enums/Position.cs | 90 + .../FineUI/Business/Enums/RegexPattern.cs | 160 + .../FineUI/Business/Enums/SummaryPosition.cs | 76 + .../FineUI/Business/Enums/TabPosition.cs | 59 + FineUI_v6/FineUI/Business/Enums/Target.cs | 100 + FineUI_v6/FineUI/Business/Enums/TextAlign.cs | 58 + FineUI_v6/FineUI/Business/Enums/TextMode.cs | 68 + FineUI_v6/FineUI/Business/Enums/Theme.cs | 89 + .../FineUI/Business/Enums/ToolTipType.cs | 68 + .../FineUI/Business/Enums/ToolbarAlign.cs | 74 + .../FineUI/Business/Enums/ToolbarPosition.cs | 122 + .../FineUI/Business/Enums/TriggerIcon.cs | 81 + .../FineUI/Business/Enums/VerticalAlign.cs | 51 + .../FineUI/Business/Enums/WindowPosition.cs | 46 + .../Business/JsHelper/JsArrayBuilder.cs | 190 + .../FineUI/Business/JsHelper/JsHelper.cs | 297 + .../Business/JsHelper/JsObjectBuilder.cs | 216 + .../FineUI/Business/JsHelper/OptionBuilder.cs | 128 + .../ResourceManager/AbsoluteScriptBlock.cs | 57 + .../ClientJavascriptIDManager.cs | 81 + .../ResourceManager/CommonResourceHelper.cs | 322 + .../DesignTimeResourceHelper.cs | 202 + .../ResourceManager/ResourceHandler.cs | 181 + .../ResourceManager/ResourceHelper.cs | 235 + .../ResourceManager/ResourceManager.cs | 1137 ++ .../ResourceManager/ResponseFilter.cs | 578 + .../Business/ResourceManager/ScriptBlock.cs | 73 + .../Business/ResourceManager/ScriptModule.cs | 67 + .../ResourceManager/TreeNodeIDManager.cs | 81 + .../SimulateTree/SimulateTreeHeper.cs | 273 + .../Business/SimulateTree/SimulateTreeNode.cs | 112 + FineUI_v6/FineUI/Business/Util/ControlUtil.cs | 253 + FineUI_v6/FineUI/Business/Util/DateUtil.cs | 165 + .../Business/Util/ExtDateTimeConvertor.cs | 167 + FineUI_v6/FineUI/Business/Util/FState.cs | 312 + .../FineUI/Business/Util/HtmlNodeBuilder.cs | 123 + FineUI_v6/FineUI/Business/Util/JSONUtil.cs | 110 + FineUI_v6/FineUI/Business/Util/ObjectUtil.cs | 118 + FineUI_v6/FineUI/Business/Util/StringUtil.cs | 559 + FineUI_v6/FineUI/Business/Util/StyleUtil.cs | 113 + FineUI_v6/FineUI/Business/Util/XState.cs | 303 + FineUI_v6/FineUI/FineUI.csproj | 406 + FineUI_v6/FineUI/Properties/AssemblyInfo.cs | 49 + FineUI_v6/FineUI/StaticClass/ActiveWindow.cs | 215 + FineUI_v6/FineUI/StaticClass/Alert.cs | 754 + FineUI_v6/FineUI/StaticClass/Confirm.cs | 781 + FineUI_v6/FineUI/StaticClass/PageContext.cs | 299 + FineUI_v6/FineUI/StrongName.snk | Bin 0 -> 596 bytes .../Component.ToolbarFill/ToolbarFill.cs | 104 + .../ToolbarSeparator.cs | 104 + .../Component.ToolbarText/ToolbarText.cs | 144 + .../BoxComponent.Toolbar/Toolbar.cs | 273 + .../BoxComponent.Toolbar/ToolbarCollection.cs | 94 + .../WebControls/Component.Button/Button.cs | 1017 ++ .../Component.Calendar/Calendar.cs | 361 + .../FineUI/WebControls/Component.Menu/Menu.cs | 209 + .../Component.Menu/MenuItem/BaseMenuItem.cs | 88 + .../Component.Menu/MenuItem/MenuButton.cs | 402 + .../Component.Menu/MenuItem/MenuCheckBox.cs | 274 + .../Component.Menu/MenuItem/MenuHyperLink.cs | 149 + .../Component.Menu/MenuItem/MenuItem.cs | 289 + .../MenuItem/MenuItemCollection.cs | 70 + .../Component.Menu/MenuItem/MenuSeparator.cs | 95 + .../Component.Menu/MenuItem/MenuText.cs | 113 + .../Component.SplitButton/SplitButton.cs | 97 + .../ControlBase.CPHConnector/CPHConnector.cs | 215 + .../ControlBase.PageLoading/PageLoading.cs | 202 + .../CustomEventArgs.cs | 58 + .../ControlBase.PageManager/PageManager.cs | 1639 ++ .../WebControls/ControlBase.Timer/Timer.cs | 207 + .../UserControlConnector.cs | 243 + .../WebControls/Field.CheckBox/CheckBox.cs | 268 + .../EventArgs/CheckedEventArgs.cs | 65 + .../Field.CheckBoxList/CheckBoxList.cs | 1062 ++ .../Field.CheckBoxList/CheckItem/CheckItem.cs | 153 + .../CheckItem/CheckItemCollection.cs | 117 + .../Field.HtmlEditor/HtmlEditor.cs | 474 + .../Field.Label.HyperLink/HyperLink.cs | 279 + .../WebControls/Field.Label.Image/Image.cs | 346 + .../Field.Label.LinkButton/LinkButton.cs | 440 + .../FineUI/WebControls/Field.Label/Label.cs | 224 + .../Field.RadioButton/RadioButton.cs | 363 + .../Field.RadioButtonList/RadioButtonList.cs | 978 ++ .../RadioItem/RadioItem.cs | 154 + .../RadioItem/RadioItemCollection.cs | 119 + .../DropDownList.cs | 2021 +++ .../ListItem/ListItem.cs | 195 + .../ListItem/ListItemCollection.cs | 118 + .../DatePicker.cs | 407 + .../FileUpload.cs | 405 + .../HiddenField.cs | 73 + .../NumberBox.cs | 196 + .../TextArea.cs | 239 + .../TextBox.cs | 139 + .../TimePicker.cs | 457 + .../TriggerBox.cs | 360 + .../TwinTriggerBox.cs | 562 + .../Accordion.cs | 567 + .../AccordionPane/AccordionPane.cs | 336 + .../AccordionPane/AccordionPaneCollection.cs | 70 + .../ContentPanel.cs | 269 + .../PanelBase.CollapsablePanel.Form/Form.cs | 665 + .../FormRow/FormRow.cs | 729 + .../FormRow/FormRowCollection.cs | 114 + .../GroupPanel.cs | 200 + .../PanelBase.CollapsablePanel.Panel/Panel.cs | 176 + .../SimpleForm.cs | 313 + .../EventArgs/TreeCheckEventArgs.cs | 89 + .../EventArgs/TreeCommandEventArgs.cs | 105 + .../EventArgs/TreeExpandEventArgs.cs | 76 + .../EventArgs/TreeNodeEventArgs.cs | 101 + .../EventArgs/TreePreNodeEventArgs.cs | 77 + .../PanelBase.CollapsablePanel.Tree/Tree.cs | 2626 +++ .../TreeNode/TreeNode.cs | 761 + .../TreeNode/TreeNodeCollection.cs | 111 + .../XmlAttributeMapping.cs | 95 + .../XmlAttributeMappingCollection.cs | 45 + .../EventArgs/WindowCloseEventArgs.cs | 65 + .../Window.cs | 1920 +++ .../Editor/GridColumnEditorCollection.cs | 50 + .../PanelBase.Grid/Editor/ModifiedCell.cs | 53 + .../EventArgs/GridAfterEditEventArgs.cs | 102 + .../EventArgs/GridCommandEventArgs.cs | 131 + .../EventArgs/GridPageEventArgs.cs | 86 + .../EventArgs/GridPreRowEventArgs.cs | 88 + .../EventArgs/GridRowClickEventArgs.cs | 76 + .../EventArgs/GridRowEventArgs.cs | 98 + .../EventArgs/GridRowSelectEventArgs.cs | 77 + .../EventArgs/GridSortEventArgs.cs | 96 + .../FineUI/WebControls/PanelBase.Grid/Grid.cs | 6066 +++++++ .../PanelBase.Grid/GridColumn/BaseField.cs | 210 + .../PanelBase.Grid/GridColumn/BoundField.cs | 264 + .../GridColumn/CheckBoxField.cs | 461 + .../GridColumn/GridColumn/GridColumn.cs | 745 + .../GridColumn/GridColumnCollection.cs | 81 + .../PanelBase.Grid/GridColumn/GroupField.cs | 103 + .../GridColumn/HyperLinkField.cs | 473 + .../PanelBase.Grid/GridColumn/ImageField.cs | 228 + .../GridColumn/LinkButtonField.cs | 707 + .../GridColumn/RenderField/RenderBaseField.cs | 148 + .../RenderField/RenderCheckField.cs | 120 + .../GridColumn/RenderField/RenderField.cs | 420 + .../GridColumn/RowNumberField.cs | 146 + .../GridColumn/TemplateField.cs | 219 + .../PanelBase.Grid/GridColumn/WindowField.cs | 665 + .../GridGroupColumn/GridGroupColumn.cs | 147 + .../GridGroupColumnCollection.cs | 104 + .../PanelBase.Grid/GridRow/GridRow.cs | 533 + .../GridRow/GridRowCollection.cs | 46 + .../PanelBase.Grid/GridRow/GridRowControl.cs | 138 + .../GridRow/GridTemplateContainer.cs | 138 + .../PanelBase.RegionPanel/Region/Region.cs | 556 + .../Region/RegionCollection.cs | 69 + .../PanelBase.RegionPanel/RegionPanel.cs | 256 + .../WebControls/PanelBase.TabStrip/Tab/Tab.cs | 475 + .../PanelBase.TabStrip/Tab/TabCollection.cs | 88 + .../PanelBase.TabStrip/TabStrip.cs | 831 + FineUI_v6/FineUI/ajax_properties.txt | 360 + .../HtmlAgilityPack/EncodingFoundException.cs | 24 + .../lib/HtmlAgilityPack/HtmlAttribute.cs | 182 + .../HtmlAttributeCollection.cs | 293 + .../FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs | 127 + .../lib/HtmlAgilityPack/HtmlCommentNode.cs | 73 + .../HtmlAgilityPack/HtmlConsoleListener.cs | 30 + .../lib/HtmlAgilityPack/HtmlDocument.cs | 1936 +++ .../lib/HtmlAgilityPack/HtmlElementFlag.cs | 32 + .../FineUI/lib/HtmlAgilityPack/HtmlEntity.cs | 802 + .../lib/HtmlAgilityPack/HtmlNameTable.cs | 46 + .../FineUI/lib/HtmlAgilityPack/HtmlNode.cs | 1760 ++ .../lib/HtmlAgilityPack/HtmlNodeCollection.cs | 326 + .../lib/HtmlAgilityPack/HtmlNodeNavigator.cs | 767 + .../lib/HtmlAgilityPack/HtmlNodeType.cs | 32 + .../lib/HtmlAgilityPack/HtmlParseError.cs | 101 + .../lib/HtmlAgilityPack/HtmlParseErrorCode.cs | 38 + .../lib/HtmlAgilityPack/HtmlTextNode.cs | 69 + .../FineUI/lib/HtmlAgilityPack/HtmlWeb.cs | 807 + .../lib/HtmlAgilityPack/HtmlWebException.cs | 20 + .../FineUI/lib/HtmlAgilityPack/IOLibrary.cs | 26 + .../lib/HtmlAgilityPack/MixedCodeDocument.cs | 440 + .../MixedCodeDocumentCodeFragment.cs | 43 + .../MixedCodeDocumentFragment.cs | 95 + .../MixedCodeDocumentFragmentList.cs | 196 + .../MixedCodeDocumentFragmentType.cs | 22 + .../MixedCodeDocumentTextFragment.cs | 32 + .../lib/HtmlAgilityPack/NameValuePair.cs | 30 + .../lib/HtmlAgilityPack/NameValuePairList.cs | 89 + FineUI_v6/FineUI/lib/HtmlAgilityPack/crc32.cs | 140 + .../FineUI/lib/JSBeautifyLib/JSBeautify.cs | 971 ++ .../FineUI/lib/JSBeautifyLib/JSBeautify.txt | 8 + FineUI_v6/FineUI/lib/extjs.txt | 41 + .../lib/json.net/Net20/Newtonsoft.Json.dll | Bin 0 -> 389120 bytes .../lib/json.net/Net20/Newtonsoft.Json.xml | 8181 +++++++++ .../lib/json.net/Net40/Newtonsoft.Json.dll | Bin 0 -> 373248 bytes .../lib/json.net/Net40/Newtonsoft.Json.xml | 7560 +++++++++ FineUI_v6/FineUI/lib/licenses/JSBeautify.txt | 8 + FineUI_v6/FineUI/lib/licenses/extjs.txt | 41 + FineUI_v6/FineUI/lib/licenses/json.net.txt | 85 + FineUI_v6/FineUI/release_history.txt | 2414 +++ FineUI_v6/FineUI/release_history_en.txt | 404 + FineUI_v6/FineUI/toolbox/Accordion.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/Button.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/Calendar.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/CheckBox.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/CheckBoxList.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/ContentPanel.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/DataList.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/DatePicker.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/DropDownList.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/FileUpload.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/Form.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/Grid.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/GroupPanel.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/HiddenField.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/HtmlEditor.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/HyperLink.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/Image.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/ImageButton.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/Label.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/LinkButton.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/ListBox.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/Literal.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/Menu.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/MenuButton.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/MenuCheckBox.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/MenuHyperLink.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/MenuSeparator.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/MenuText.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/NumberBox.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/PageLoading.bmp | Bin 0 -> 246 bytes FineUI_v6/FineUI/toolbox/PageManager.bmp | Bin 0 -> 246 bytes FineUI_v6/FineUI/toolbox/Panel.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/PlaceHolder.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/RadioButton.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/RadioButtonList.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/RegionPanel.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/SimpleForm.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/SplitButton.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/TabStrip.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/Table.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/TextArea.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/TextBox.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/TimePicker.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/Toolbar.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/ToolbarFill.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/ToolbarSeparator.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/ToolbarText.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/Tree.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/TriggerBox.bmp | Bin 0 -> 1334 bytes FineUI_v6/FineUI/toolbox/TwinTriggerBox.bmp | Bin 0 -> 1334 bytes .../FineUI/toolbox/UserControlConnector.bmp | Bin 0 -> 246 bytes FineUI_v6/FineUI/toolbox/View.bmp | Bin 0 -> 824 bytes FineUI_v6/FineUI/toolbox/Window.bmp | Bin 0 -> 1334 bytes .../Newtonsoft.Json/Net20/Newtonsoft.Json.dll | Bin 0 -> 440320 bytes .../Newtonsoft.Json/Net20/Newtonsoft.Json.xml | 8968 ++++++++++ .../Newtonsoft.Json/Net35/Newtonsoft.Json.dll | Bin 0 -> 401920 bytes .../Newtonsoft.Json/Net35/Newtonsoft.Json.xml | 8105 +++++++++ .../Newtonsoft.Json/Net40/Newtonsoft.Json.dll | Bin 0 -> 456192 bytes .../Newtonsoft.Json/Net40/Newtonsoft.Json.xml | 8380 ++++++++++ .../Newtonsoft.Json/Net45/Newtonsoft.Json.dll | Bin 0 -> 465408 bytes .../Newtonsoft.Json/Net45/Newtonsoft.Json.xml | 8380 ++++++++++ 3703 files changed, 260867 insertions(+) create mode 100644 FineUI_v6/FineUI.Examples/Code/DataSourceUtil.cs create mode 100644 FineUI_v6/FineUI.Examples/Code/PageBase.cs create mode 100644 FineUI_v6/FineUI.Examples/FineUI.Examples.csproj create mode 100644 FineUI_v6/FineUI.Examples/Global.asax create mode 100644 FineUI_v6/FineUI.Examples/Global.asax.cs create mode 100644 FineUI_v6/FineUI.Examples/Properties/AssemblyInfo.cs create mode 100644 FineUI_v6/FineUI.Examples/Web.config create mode 100644 FineUI_v6/FineUI.Examples/Web.config_for_VS2013 create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion.aspx create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_links_iframe.htm create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/accordion/accordion_tree_index.htm create mode 100644 FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx create mode 100644 FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx create mode 100644 FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx create mode 100644 FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx create mode 100644 FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx create mode 100644 FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx create mode 100644 FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/test.aspx create mode 100644 FineUI_v6/FineUI.Examples/aspnet/test.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/test.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx create mode 100644 FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx create mode 100644 FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/Captcha/CaptchaImage.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/Captcha/captcha.ashx create mode 100644 FineUI_v6/FineUI.Examples/basic/Captcha/captcha.ashx.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/hello.aspx create mode 100644 FineUI_v6/FineUI.Examples/basic/hello.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/hello.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx create mode 100644 FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/login.aspx create mode 100644 FineUI_v6/FineUI.Examples/basic/login.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/login.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/login_captcha.aspx create mode 100644 FineUI_v6/FineUI.Examples/basic/login_captcha.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/login_captcha.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx create mode 100644 FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button.aspx create mode 100644 FineUI_v6/FineUI.Examples/button/button.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_click.aspx create mode 100644 FineUI_v6/FineUI.Examples/button/button_click.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_click.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_custom.aspx create mode 100644 FineUI_v6/FineUI.Examples/button/button_custom.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_custom.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_icon.aspx create mode 100644 FineUI_v6/FineUI.Examples/button/button_icon.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_icon.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx create mode 100644 FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_menu.aspx create mode 100644 FineUI_v6/FineUI.Examples/button/button_menu.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_menu.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx create mode 100644 FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/common/loading.aspx create mode 100644 FineUI_v6/FineUI.Examples/common/loading.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/common/loading.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/common/menu.xml create mode 100644 FineUI_v6/FineUI.Examples/common/source.aspx create mode 100644 FineUI_v6/FineUI.Examples/common/source.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/common/source.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/common/source_file.aspx create mode 100644 FineUI_v6/FineUI.Examples/common/source_file.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/common/source_file.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/config/ajax.aspx create mode 100644 FineUI_v6/FineUI.Examples/config/ajax.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/config/ajax.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/config/ajax_properties.txt create mode 100644 FineUI_v6/FineUI.Examples/config/enable_gzip_iis6.htm create mode 100644 FineUI_v6/FineUI.Examples/config/icons.aspx create mode 100644 FineUI_v6/FineUI.Examples/config/icons.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/config/icons.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/config/icons.htm create mode 100644 FineUI_v6/FineUI.Examples/config/install_toolbox.htm create mode 100644 FineUI_v6/FineUI.Examples/config/loading.aspx create mode 100644 FineUI_v6/FineUI.Examples/config/loading.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/config/loading.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/config/modify_webconfig.htm create mode 100644 FineUI_v6/FineUI.Examples/config/release_time_chart.htm create mode 100644 FineUI_v6/FineUI.Examples/default.aspx create mode 100644 FineUI_v6/FineUI.Examples/default.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/default.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/ajaxminifier/AjaxMinifier.exe create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/build.bat create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/build_only_js_css.bat create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.ajax.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.format.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.simulateTree.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.util.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.wnd.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/F/extender.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/lang/f-lang-en.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/lang/f-lang-pt_BR.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/lang/f-lang-ru.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/lang/f-lang-tr.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/lang/f-lang-zh_CN.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/lang/f-lang-zh_TW.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/lib/Base64.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/lib/json2.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/ux/CheckColumn.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/ux/FormViewport.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/ux/SimplePagingToolbar.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/js/ux/TabCloseMenu.js create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/FineUI.css create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/Grid.css create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/PageLoading.css create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/Tree.css create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/accordion_hover.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/accordion_link_hover.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/accordion_link_hover2.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/accordion_reset.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/accordion_select.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/box.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/bullet_cross.png create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/check-back1.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/check.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/check_notuse__1.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/check_notuse_back.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/checked.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/checked_disabled.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/delete.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/dialog-ok.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/dialog-ok.png create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/elbow-empty.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/elbow-end.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/elbow-line.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/elbow.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/loading_24.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/loading_25.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/loading_32.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/loading_32_2.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/loading_42.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/loading_50.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/pagemenu-separator.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/pagemenu_toolbar_background.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/s.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/tick.png create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/uncheck.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/unchecked.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/images/unchecked_disabled.gif create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/theme-classic.css create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/theme-crisp.css create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/theme-gray.css create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/theme-neptune.css create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/res/theme-triton.css create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/version.txt create mode 100644 FineUI_v6/FineUI.Examples/extjs_builder/如何自行创建extjs目录.txt create mode 100644 FineUI_v6/FineUI.Examples/favicon.ico create mode 100644 FineUI_v6/FineUI.Examples/form/calendar.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/calendar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/calendar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/calendar_mindate.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/calendar_mindate.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/calendar_mindate.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/checkbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/checkbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/checkbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/checkboxlist.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/checkboxlist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/checkboxlist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/checkboxlist_update.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/checkboxlist_update.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/checkboxlist_update.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/datepicker.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/datepicker.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/datepicker.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/datepicker_autopostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/datepicker_autopostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/datepicker_autopostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/datepicker_range.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/datepicker_range.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/datepicker_range.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/fileupload.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/fileupload.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/fileupload.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/fileupload_autopostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/fileupload_autopostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/fileupload_autopostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/fileupload_toolbar.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/fileupload_toolbar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/fileupload_toolbar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_center_button.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_center_button.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_center_button.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_columnwidths.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_columnwidths.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_columnwidths.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_compare.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_compare.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_compare.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_disabled.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_disabled.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_disabled.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_dynamic.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_dynamic.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_dynamic.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_hide_field.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_hide_field.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_hide_field.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_labelwidth.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_labelwidth.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_labelwidth.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_longlabel.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_longlabel.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_longlabel.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_reset.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_reset.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_reset.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_textalign.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_textalign.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_textalign.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_validate.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/form_validate.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/form_validate.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/htmleditor.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/htmleditor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/htmleditor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/hyperlink.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/hyperlink.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/hyperlink.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/image.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/image.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/image.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/label.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/label.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/label.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_center_label.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/layout_center_label.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_center_label.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_checkout.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/layout_checkout.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_checkout.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_contactus.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/layout_contactus.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_contactus.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_multiline_buttons.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/layout_multiline_buttons.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_multiline_buttons.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_panel.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/layout_panel.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_panel.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_panel2.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/layout_panel2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_panel2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_panel_column.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/layout_panel_column.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/layout_panel_column.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/numberbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/numberbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/numberbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/radiobutton.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/radiobutton.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/radiobutton.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/radiobuttonlist.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/radiobuttonlist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/radiobuttonlist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/radiobuttonlist_update.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/radiobuttonlist_update.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/radiobuttonlist_update.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/textarea_autogrow.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/textarea_autogrow.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/textarea_autogrow.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/textbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/textbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/textbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/textbox_autopostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/textbox_autopostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/textbox_autopostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/timepicker.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/timepicker.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/timepicker.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/tooltip.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/tooltip.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/tooltip.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/triggerbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/triggerbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/triggerbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/triggerbox_triggerboxurl.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/triggerbox_triggerboxurl.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/triggerbox_triggerboxurl.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/form/twintriggerbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/form/twintriggerbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/form/twintriggerbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_aspnet.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_aspnet.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_aspnet.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_aspnet_rowdatabound.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_aspnet_rowdatabound.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_aspnet_rowdatabound.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_backup.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_backup.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_backup.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_centercolumn.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_centercolumn.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_centercolumn.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall_keepcurrentselection.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall_keepcurrentselection.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall_keepcurrentselection.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall_only.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall_only.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall_only.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall_singleselect.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall_singleselect.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkall_singleselect.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_autopostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_autopostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_autopostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_checkall.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_checkall.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_checkall.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_rowcheckall.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_rowcheckall.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_rowcheckall.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_rowcheckall_clientside.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_rowcheckall_clientside.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_rowcheckall_clientside.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_rowcheckall_contextmenu.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_rowcheckall_contextmenu.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_checkboxfield_rowcheckall_contextmenu.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_column_lines.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_column_lines.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_column_lines.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_complex_property.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_complex_property.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_complex_property.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_dynamic_columns.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_dynamic_columns.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_dynamic_columns.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_dynamic_columns2.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_dynamic_columns2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_dynamic_columns2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_cart.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_cart.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_cart.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_checkboxlist.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_checkboxlist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_checkboxlist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_compare.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_compare.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_compare.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist2.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist_textbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist_textbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist_textbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist_update.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist_update.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_dropdownlist_update.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_enterkey_h.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_enterkey_h.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_enterkey_h.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_enterkey_v.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_enterkey_v.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_enterkey_v.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_radiobuttonlist.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_radiobuttonlist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_radiobuttonlist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_save_auto.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_save_auto.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_save_auto.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_save_manual.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_save_manual.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_edit_save_manual.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell2.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_afteredit.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_afteredit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_afteredit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_afteredit_rowexpander.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_afteredit_rowexpander.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_afteredit_rowexpander.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_afteredit_selectcell.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_afteredit_selectcell.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_afteredit_selectcell.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_client_validate.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_client_validate.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_client_validate.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_databind.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_databind.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_databind.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_delete.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_delete.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_delete.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new_delete.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new_delete.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new_delete.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new_delete_rowexpander.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new_delete_rowexpander.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new_delete_rowexpander.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new_editcolumnid.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new_editcolumnid.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_new_editcolumnid.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_newdelete.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_newdelete.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_newdelete.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_newdelete_getmergeddata.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_newdelete_getmergeddata.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_newdelete_getmergeddata.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_newdelete_rowexpander.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_newdelete_rowexpander.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_newdelete_rowexpander.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_paging.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_paging.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_paging.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_renderfunction.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_renderfunction.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_renderfunction.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_renderfunction_complex.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_renderfunction_complex.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_renderfunction_complex.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_textarea.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_textarea.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_textarea.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatecellvalue.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatecellvalue.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatecellvalue.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatecellvalue_hiddencolumn.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatecellvalue_hiddencolumn.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatecellvalue_hiddencolumn.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatecellvalue_noedit.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatecellvalue_noedit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatecellvalue_noedit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatesummary.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatesummary.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_editor_cell_updatesummary.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_empty_text.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_empty_text.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_empty_text.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_aspnet.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_aspnet.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_aspnet.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_dblclick_download.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_dblclick_download.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_dblclick_download.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_dynamic_columns.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_dynamic_columns.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_dynamic_columns.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_findcontrol.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_findcontrol.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_findcontrol.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_groupfield.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_groupfield.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_groupfield.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_selectcolumns.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_selectcolumns.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_selectcolumns.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_selectcolumns_iframe_window.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_selectcolumns_iframe_window.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_excel_selectcolumns_iframe_window.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader_hidden.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader_hidden.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader_hidden.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader_sort.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader_sort.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader_sort.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader_sort_hdmenu.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader_sort_hdmenu.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_groupheader_sort_hdmenu.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hdmenu_hidecolumn.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hdmenu_hidecolumn.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hdmenu_hidecolumn.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hdmenu_sorting.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hdmenu_sorting.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hdmenu_sorting.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_header_disablemenu.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_header_disablemenu.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_header_disablemenu.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_header_hide.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_header_hide.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_header_hide.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_header_wrap.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_header_wrap.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_header_wrap.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hide_gridheader.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hide_gridheader.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hide_gridheader.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hidecolumn.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hidecolumn.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_hidecolumn.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_iframe_window.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_iframe_window.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_iframe_window.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_line_wrap.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_line_wrap.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_line_wrap.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_editor_cell_new.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_editor_cell_new.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_editor_cell_new.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_groupheader_sort.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_groupheader_sort.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_groupheader_sort.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_line_wrap.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_line_wrap.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_line_wrap.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_many_columns.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_many_columns.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_many_columns.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_rowexpander.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_rowexpander.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_rowexpander.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_summary_scrollbar.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_summary_scrollbar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_lockcolumn_summary_scrollbar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_many_columns.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_many_columns.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_many_columns.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hiderefresh.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hiderefresh.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hiderefresh.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hiderefresh_window.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hiderefresh_window.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hiderefresh_window.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hideupdate.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hideupdate.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hideupdate.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hideupdate_window.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hideupdate_window.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_hideupdate_window.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_sametab.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_sametab.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_sametab.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_window.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_window.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_newtab_window.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems_pagesize.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems_pagesize.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems_pagesize.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems_pagesize_database.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems_pagesize_database.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems_pagesize_database.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems_rowexpander.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems_rowexpander.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_pageitems_rowexpander.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_aspnet.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_aspnet.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_aspnet.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database_bbar.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database_bbar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database_bbar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database_selection.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database_selection.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database_selection.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database_sorting.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database_sorting.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_database_sorting.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_fineui.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_fineui.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_fineui.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_selection.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_selection.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_selection.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_sorting.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_sorting.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_paging_sorting.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_prerowdatabound.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_prerowdatabound.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_prerowdatabound.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_prerowdatabound_cancelled.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_prerowdatabound_cancelled.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_prerowdatabound_cancelled.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcheckall.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcheckall.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcheckall.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowclick.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowclick.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowclick.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcolor.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcolor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcolor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand_download.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand_download.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand_download.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand_paging.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand_paging.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand_paging.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand_paging_database.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand_paging_database.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowcommand_paging_database.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowdatabound.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowdatabound.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowdatabound.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowdoubleclick.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowdoubleclick.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowdoubleclick.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_expandall.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_expandall.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_expandall.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_expandall2.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_expandall2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_expandall2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_expandall_js.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_expandall_js.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_expandall_js.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_grid.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_grid.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_grid.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_grid_data.ashx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowexpander_grid_data.ashx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_align.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_align.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_align.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_paging.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_paging.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_paging.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_paging_database.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_paging_database.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_paging_database.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_width.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_width.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rownumber_width.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowselect.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowselect.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_rowselect.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree_database_paging.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree_database_paging.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree_database_paging.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree_database_paging_dropdownlist.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree_database_paging_dropdownlist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree_database_paging_dropdownlist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree_paging.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree_paging.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_simulate_tree_paging.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_sorting.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_sorting.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_sorting.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_sorting_nosortfield.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_sorting_nosortfield.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_sorting_nosortfield.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_columnclass.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_columnclass.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_columnclass.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_rowcolor.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_rowcolor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_rowcolor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_rowcolor_paging.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_rowcolor_paging.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_rowcolor_paging.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_rowcolor_paging_database.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_rowcolor_paging_database.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_style_rowcolor_paging_database.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_absolute.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_absolute.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_absolute.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_currentpage.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_currentpage.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_currentpage.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar_bottom.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar_bottom.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar_bottom.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar_flow.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar_flow.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar_flow.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar_top.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar_top.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_scrollbar_top.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_serverside.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_serverside.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_serverside.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_serverside_paged.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_serverside_paged.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_summary_serverside_paged.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_text_middle.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_text_middle.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_text_middle.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_text_top.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_text_top.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_text_top.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_textselection.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_textselection.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_textselection.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_twogrid.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_twogrid.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_twogrid.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_boxflex.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_boxflex.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_boxflex.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_expandunusedspace.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_expandunusedspace.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_expandunusedspace.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefit.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefit_minwidth.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefit_minwidth.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefit_minwidth.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefitalltime.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefitalltime.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefitalltime.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefitfirsttime.aspx create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefitfirsttime.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/grid_width_forcefitfirsttime.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/grid/image.ashx create mode 100644 FineUI_v6/FineUI.Examples/iframe/button_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/button_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/button_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/grid_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/grid_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/grid_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/iframe_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/iframe_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/iframe_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/iframe_iframe_window1.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/iframe_iframe_window1.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/iframe_iframe_window1.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/iframe_iframe_window2.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/iframe_iframe_window2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/iframe_iframe_window2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback2.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback3.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback3.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback3.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback_top.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback_top.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback_top.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback_top2.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback_top2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback_top2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback_top3.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback_top3.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_postback_top3.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_simplepostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_simplepostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_simplepostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_simplepostback2.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_simplepostback2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/parent_simplepostback2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/passvalue_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/passvalue_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/passvalue_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/passvalue_iframe_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/passvalue_iframe_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/passvalue_iframe_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince1.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince1.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince1.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince1_child.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince1_child.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince1_child.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince2.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince2_child.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince2_child.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince2_child.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince3.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince3.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince3.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince3_child.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince3_child.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince3_child.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince_executescript.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince_executescript.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince_executescript.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince_executescript_child.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince_executescript_child.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/selectprovince_executescript_child.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/data/menuMail.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/data/menuSMS.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/data/menuSYS.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/default.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/default.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/default.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/mail-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/mail-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/mail-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/mail-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/mail-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sms-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sms-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sms-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sms-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sms-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sys-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sys-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sys-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sys-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/html/sys-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/res/images/admin_tbg.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/res/images/menu.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/res/images/p.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/res/images/t.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu/res/main.css create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/data/menuMail.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/data/menuSMS.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/data/menuSYS.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/default.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/default.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/default.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/mail-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/mail-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/mail-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/mail-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/mail-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sms-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sms-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sms-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sms-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sms-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sys-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sys-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sys-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sys-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/html/sys-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/leftmenu.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/leftmenu.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/leftmenu.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/res/images/admin_tbg.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/res/images/menu.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/res/images/p.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/res/images/t.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu2/res/main.css create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/data/menuMail.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/data/menuSMS.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/data/menuSYS.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/default.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/default.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/default.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/mail-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/mail-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/mail-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/mail-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/mail-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sms-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sms-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sms-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sms-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sms-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sys-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sys-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sys-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sys-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/html/sys-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/leftmenu.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/leftmenu.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/leftmenu.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/res/images/admin_tbg.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/res/images/menu.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/res/images/p.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/res/images/t.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu3/res/main.css create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/data/menuMail.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/data/menuSMS.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/data/menuSYS.xml create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/default.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/default.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/default.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/mail-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/mail-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/mail-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/mail-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/mail-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sms-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sms-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sms-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sms-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sms-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sys-1.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sys-2.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sys-3.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sys-4.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/html/sys-5.html create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/leftmenu.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/leftmenu.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/leftmenu.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/res/images/admin_tbg.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/res/images/menu.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/res/images/p.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/res/images/t.png create mode 100644 FineUI_v6/FineUI.Examples/iframe/topmenu4/res/main.css create mode 100644 FineUI_v6/FineUI.Examples/iframe/triggerbox_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/triggerbox_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/triggerbox_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/triggerbox_iframe_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/triggerbox_iframe_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/triggerbox_iframe_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/window.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/window.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/window.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/window2.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/window2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/window2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/window2_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/window2_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/window2_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/window_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/iframe/window_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/iframe/window_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/absolute.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/absolute.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/absolute.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/anchor.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/anchor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/anchor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/border.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/border.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/border.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/card.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/card.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/card.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/column.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/column.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/column.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/column_autoheight.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/column_autoheight.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/column_autoheight.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/column_scrollbar.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/column_scrollbar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/column_scrollbar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/fit.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/fit.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/fit.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/form.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/form.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/form.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_autoheight.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_autoheight.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_autoheight.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_autoheight_multilevels.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_autoheight_multilevels.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_autoheight_multilevels.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_form.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_form.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_form.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_scrollbar.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_scrollbar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/hbox_scrollbar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/region.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/region.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/region.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/row.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/row.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/row.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/table.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/table.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/table.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/table_form.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/table_form.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/table_form.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_autoheight.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_autoheight.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_autoheight.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_collapse.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_collapse.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_collapse.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_form.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_form.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_form.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_formgrid.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_formgrid.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_formgrid.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_hbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_hbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_hbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_scrollbar.aspx create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_scrollbar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/layout/vbox_scrollbar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/master/ISingleGridPage.cs create mode 100644 FineUI_v6/FineUI.Examples/master/Simple.Master create mode 100644 FineUI_v6/FineUI.Examples/master/Simple.Master.cs create mode 100644 FineUI_v6/FineUI.Examples/master/Simple.Master.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/master/SingleGrid.Master create mode 100644 FineUI_v6/FineUI.Examples/master/SingleGrid.Master.cs create mode 100644 FineUI_v6/FineUI.Examples/master/SingleGrid.Master.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/master/formlist.aspx create mode 100644 FineUI_v6/FineUI.Examples/master/formlist.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/master/formlist.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/master/list.aspx create mode 100644 FineUI_v6/FineUI.Examples/master/list.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/master/list.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/master/simple.aspx create mode 100644 FineUI_v6/FineUI.Examples/master/simple.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/master/simple.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/master/simple2.aspx create mode 100644 FineUI_v6/FineUI.Examples/master/simple2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/master/simple2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert.aspx create mode 100644 FineUI_v6/FineUI.Examples/message/alert.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download.aspx create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download_hide.aspx create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download_hide.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download_hide.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download_hideiframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download_hideiframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download_hideiframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download_hideiframe_window.aspx create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download_hideiframe_window.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/message/alert_download_hideiframe_window.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/message/confirm_buttons.aspx create mode 100644 FineUI_v6/FineUI.Examples/message/confirm_buttons.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/message/confirm_buttons.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/message/confirm_cancel.aspx create mode 100644 FineUI_v6/FineUI.Examples/message/confirm_cancel.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/message/confirm_cancel.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/message/confirm_cancel_customevent.aspx create mode 100644 FineUI_v6/FineUI.Examples/message/confirm_cancel_customevent.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/message/confirm_cancel_customevent.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/addtab.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/addtab.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/addtab.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/ajax_loading.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/ajax_loading.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/ajax_loading.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/alert.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/alert.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/alert.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/authentication_timeout.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/authentication_timeout.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/authentication_timeout.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/authentication_timeout_async.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/authentication_timeout_async.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/authentication_timeout_async.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/button_in_form.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/button_in_form.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/button_in_form.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/confirm_cancel.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/confirm_cancel.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/confirm_cancel.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/confirm_cancel2.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/confirm_cancel2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/confirm_cancel2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/cssclass.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/cssclass.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/cssclass.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/cssstyle.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/cssstyle.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/cssstyle.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/custom_postback.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/custom_postback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/custom_postback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/custom_postback2.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/custom_postback2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/custom_postback2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/global_error.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/global_error.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/global_error.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/keydown.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/keydown.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/keydown.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/pageloading.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/pageloading.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/pageloading.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/timer.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/timer.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/timer.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/other/toolbar.aspx create mode 100644 FineUI_v6/FineUI.Examples/other/toolbar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/other/toolbar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/res/css/common.css create mode 100644 FineUI_v6/FineUI.Examples/res/css/default.css create mode 100644 FineUI_v6/FineUI.Examples/res/css/main.css create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-apollo.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-basic.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-clj.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-css.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-dart.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-erlang.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-go.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-hs.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-lisp.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-llvm.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-lua.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-matlab.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-ml.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-mumps.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-n.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-pascal.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-proto.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-r.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-rd.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-scala.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-sql.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-tcl.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-tex.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-vb.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-vhdl.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-wiki.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-xq.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/lang-yaml.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/prettify.css create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/prettify.js create mode 100644 FineUI_v6/FineUI.Examples/res/google-code-prettify/run_prettify.js create mode 100644 FineUI_v6/FineUI.Examples/res/icon/accept.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/anchor.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_cascade.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_double.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_form.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_form_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_form_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_form_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_form_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_get.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_home.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_cascade.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_double.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_get.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_home.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_split.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_osx_terminal.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_put.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_side_boxes.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_side_contract.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_side_expand.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_side_list.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_side_tree.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_split.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_tile_horizontal.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_tile_vertical.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_view_columns.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_view_detail.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_view_gallery.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_view_icons.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_view_list.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_view_tile.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_xp.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/application_xp_terminal.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_branch.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_divide.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_down.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_ew.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_in.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_in_longer.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_inout.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_join.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_left.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_merge.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_ne.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_ns.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_nsew.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_nw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_nw_ne_sw_se.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_nw_se.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_out.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_out_longer.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_redo.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_refresh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_refresh_small.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_right.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_rotate_anticlockwise.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_rotate_clockwise.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_se.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_sw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_sw_ne.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_switch.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_switch_bluegreen.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_turn_left.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_turn_right.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_undo.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/arrow_up.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/asterisk_orange.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/asterisk_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/asterisk_yellow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/attach.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_bronze_1.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_bronze_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_bronze_3.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_gold_1.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_gold_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_gold_3.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_silver_1.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_silver_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/award_star_silver_3.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/basket.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/basket_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/basket_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/basket_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/basket_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/basket_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/basket_put.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/basket_remove.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_silver.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_silver_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_silver_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bell_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bin.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bin_closed.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bin_empty.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/blank.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bomb.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_addresses.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_addresses_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_addresses_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_addresses_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_addresses_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_addresses_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_next.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_open.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_open_mark.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_previous.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/book_tabs.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bookmark.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bookmark_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bookmark_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bookmark_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bookmark_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bookmark_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_all.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_bottom.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_draw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_inner.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_inner_horizontal.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_inner_vertical.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_left.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_none.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_outer.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_right.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/border_top.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/box.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/box_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/box_picture.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/box_world.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/brick.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/brick_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/brick_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/brick_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/brick_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/brick_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/brick_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/brick_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bricks.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/briefcase.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bug.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bug_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bug_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bug_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bug_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bug_fix.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bug_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bug_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bug_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/build.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/build_cancel.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/building.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/building_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/building_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/building_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/building_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/building_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/building_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/building_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_arrow_bottom.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_arrow_down.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_arrow_top.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_arrow_up.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_black.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_cross.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_database.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_database_yellow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_disk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_earth.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_eject.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_feed.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_get.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_home.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_left.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_minus.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_orange.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_page_white.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_picture.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_pink.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_plus.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_purple.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_right.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_shape.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_sparkle.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_stop_alt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_tick.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_toggle_minus.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_toggle_plus.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_white.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_wrench.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_wrench_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/bullet_yellow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/button.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cake.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cake_out.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cake_sliced.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calculator.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calculator_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calculator_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calculator_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calculator_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calculator_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_select_day.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_select_none.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_select_week.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_view_day.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_view_month.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/calendar_view_week.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_picture.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_small.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/camera_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cancel.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/car.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/car_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/car_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/car_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/car_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/car_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/car_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart_full.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart_put.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cart_remove.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_burn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_eject.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_play.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_stop_alt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cd_tick.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_burn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_cross.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_eject.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_play.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_stop_alt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cdr_tick.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_bar.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_bar_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_bar_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_bar_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_bar_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_bar_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_curve.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_curve_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_curve_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_curve_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_curve_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_curve_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_curve_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_line.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_line_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_line_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_line_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_line_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_line_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_org_inverted.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_organisation.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_organisation_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_organisation_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_pie.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_pie_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_pie_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_pie_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_pie_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_pie_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/chart_pie_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/check_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clipboard.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_pause.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_play.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/clock_stop_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cmy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cog.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cog_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cog_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cog_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cog_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cog_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cog_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cog_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/coins.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/coins_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/coins_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/color.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/color_swatch.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/color_wheel.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comment.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comment_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comment_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comment_dull.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comment_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comment_play.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comment_record.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comments.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comments_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/comments_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/compass.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/compress.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_off.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/computer_wrench.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/contrast.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/contrast_decrease.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/contrast_high.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/contrast_increase.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/contrast_low.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_add_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_blank.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_blank_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_eject.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_eject_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_end.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_end_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_equalizer.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_equalizer_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_fastforward.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_fastforward_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_pause.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_pause_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_play.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_play_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_power.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_power_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_record.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_record_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_remove.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_remove_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_repeat.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_repeat_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_rewind.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_rewind_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_start_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/control_stop_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/controller.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/controller_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/controller_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/controller_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/creditcards.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cross.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/css.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/css_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/css_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/css_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/css_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/css_valid.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_black.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cup_tea.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cursor.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cursor_small.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cut.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/cut_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_copy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_gear.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_refresh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_save.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_table.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_wrench.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_yellow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_yellow_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/database_yellow_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date_next.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/date_previous.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/decline.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/device_stylus.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disconnect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk_black.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk_black_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk_black_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk_download.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk_multiple.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/disk_upload.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/door.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/door_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/door_in.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/door_open.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/door_out.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drink.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drink_empty.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drink_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_burn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_cd.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_cd_empty.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_cdr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_disk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_network.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_network_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_network_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_rename.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_user.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/drive_web.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/dvd_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/eject_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/eject_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_attach.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_open.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_open_image.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/email_transfer.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/emoticon_evilgrin.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/emoticon_grin.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/emoticon_happy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/emoticon_smile.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/emoticon_surprised.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/emoticon_tongue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/emoticon_unhappy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/emoticon_waii.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/emoticon_wink.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/erase.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/error_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/error_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/error_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/exclamation.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/eye.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/eyes.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_disk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/feed_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/female.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_eject.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_save.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/film_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/find.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/finger_point.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ad.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ae.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_af.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ag.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ai.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_al.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_am.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_an.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ao.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ar.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_as.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_at.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_au.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_aw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ax.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_az.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ba.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bb.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bd.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_be.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bf.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bi.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bj.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_black.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bo.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_br.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bs.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bv.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_by.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_bz.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ca.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_catalonia.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cc.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cd.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cf.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ch.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_checked.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ci.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ck.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cl.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_co.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cs.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cu.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cv.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cx.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_cz.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_de.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_dj.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_dk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_dm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_do.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_dz.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ec.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ee.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_eg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_eh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_england.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_er.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_es.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_et.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_europeanunion.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_fam.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_fi.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_fj.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_fk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_fm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_fo.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_fr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_france.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ga.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gb.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gd.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ge.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gf.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gi.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gl.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gp.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gq.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_grey.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gs.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gu.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_gy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_hk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_hm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_hn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_hr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ht.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_hu.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_id.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ie.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_il.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_in.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_io.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_iq.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ir.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_is.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_it.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_jm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_jo.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_jp.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ke.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_kg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_kh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ki.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_km.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_kn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_kp.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_kr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_kw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ky.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_kz.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_la.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_lb.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_lc.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_li.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_lk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_lr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ls.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_lt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_lu.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_lv.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ly.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ma.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mc.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_md.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_me.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ml.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mo.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mp.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mq.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ms.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mu.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mv.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mx.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_my.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_mz.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_na.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_nc.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ne.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_nf.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ng.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ni.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_nl.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_no.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_np.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_nr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_nu.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_nz.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_om.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_orange.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pa.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pe.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pf.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ph.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pink.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pl.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ps.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_purple.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_pw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_py.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_qa.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_re.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ro.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_rs.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ru.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_rw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sa.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sb.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sc.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_scotland.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sd.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_se.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_si.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sj.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sl.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_so.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_st.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sv.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_sz.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tc.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_td.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tf.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_th.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tj.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tl.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_to.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tv.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_tz.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ua.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ug.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_um.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_us.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_uy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_uz.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_va.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_vc.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ve.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_vg.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_vi.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_vn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_vu.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_wales.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_wf.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_white.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ws.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_ye.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_yellow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_yt.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_za.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_zm.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flag_zw.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/flower_daisy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_bell.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_bookmark.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_brick.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_bug.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_camera.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_database.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_explore.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_feed.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_film.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_find.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_font.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_heart.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_home.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_image.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_lightbulb.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_page.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_page_white.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_palette.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_picture.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_table.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_up.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_user.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/folder_wrench.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/font.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/font_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/font_color.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/font_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/font_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/font_larger.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/font_smaller.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/forward_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/forward_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/group.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/group_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/group_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/group_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/group_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/group_gear.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/group_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/group_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/group_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/heart.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/heart_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/heart_broken.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/heart_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/heart_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/help.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/hourglass.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/hourglass_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/hourglass_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/hourglass_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/hourglass_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/house.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/house_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/house_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/house_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/house_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/house_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/html.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/html_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/html_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/html_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/html_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/html_valid.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/image.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/image_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/image_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/image_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/image_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/image_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/image_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/images.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/information.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ipod.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ipod_cast.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ipod_cast_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ipod_cast_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ipod_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ipod_nano.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ipod_nano_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ipod_sound.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/joystick.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/joystick_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/joystick_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/joystick_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/joystick_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/key_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/key_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/key_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/key_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/key_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/keyboard.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/keyboard_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/keyboard_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/keyboard_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/keyboard_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_disk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/laptop_wrench.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layers.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_content.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_header.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/layout_sidebar.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lightbulb.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lightbulb_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lightbulb_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lightbulb_off.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lightning_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lightning_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lightning_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/link_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/link_break.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/link_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/link_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/link_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/link_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock_break.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock_open.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lock_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lorry.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lorry_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lorry_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lorry_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lorry_flatbed.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lorry_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lorry_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lorry_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/lorry_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/magifier_zoom_out.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/magnifier.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/magnifier_zoom_in.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/mail.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/male.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_clipboard.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_cursor.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/map_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_bronze_1.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_bronze_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_bronze_3.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_bronze_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_bronze_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_gold_1.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_gold_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_gold_3.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_gold_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_gold_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_silver_1.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_silver_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_silver_3.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_silver_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/medal_silver_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/money.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/money_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/money_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/money_dollar.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/money_euro.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/money_pound.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/money_yen.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/monitor.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/monitor_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/monitor_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/monitor_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/monitor_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/monitor_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/monitor_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/monitor_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/monitor_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/moon_full.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/mouse.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/mouse_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/mouse_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/mouse_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/music.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/music_note.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/neighbourhood.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/new.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/new_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/new_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/newspaper.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/newspaper_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/newspaper_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/newspaper_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/newspaper_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/next_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/next_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/note.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/note_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/note_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/note_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/note_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/note_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/outline.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/overlays.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_down.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_in.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_se.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/package_white.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_attach.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_back.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_break.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_break_insert.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_cancel.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_code.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_copy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_excel.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_find.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_forward.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_gear.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_header_footer.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_landscape.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_landscape_shot.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_paintbrush.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_paste.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_portrait.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_portrait_shot.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_refresh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_save.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_acrobat.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_actionscript.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_break.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_c.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_camera.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_cd.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_cdr.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_code.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_code_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_coldfusion.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_compressed.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_copy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_cplusplus.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_csharp.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_cup.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_database.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_database_yellow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_dvd.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_excel.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_find.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_flash.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_font.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_freehand.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_gear.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_get.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_h.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_horizontal.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_medal.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_office.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_paint.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_paint_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_paintbrush.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_paste.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_paste_table.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_php.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_picture.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_powerpoint.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_put.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_refresh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_ruby.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_side_by_side.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_stack.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_swoosh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_text.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_text_width.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_tux.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_vector.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_visualstudio.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_width.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_word.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_world.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_wrench.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_white_zip.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_word.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/page_world.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/paint.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/paint_can_brush.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/paintbrush.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/paintbrush_color.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/paintcan.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/paintcan_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/palette.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/paste_plain.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/paste_word.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pause_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pause_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pause_record.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pencil.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pencil_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pencil_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pencil_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_sound.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/phone_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/photo.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/photo_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/photo_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/photo_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/photo_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/photo_paint.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/photos.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_clipboard.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_empty.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/picture_save.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pictures.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pictures_thumbs.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pilcrow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pill.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pill_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pill_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pill_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/pill_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/play_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/play_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/plugin.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/plugin_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/plugin_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/plugin_disabled.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/plugin_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/plugin_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/plugin_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/plugin_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/plugin_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/previous_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_cancel.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_color.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_empty.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_mono.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/printer_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rainbow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rainbow_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/record_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/record_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/record_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/reload.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_disk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_picture.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_user.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/report_word.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/resultset_first.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/resultset_last.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/resultset_next.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/resultset_previous.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/reverse_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/reverse_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rewind_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rewind_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rgb.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rosette.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rosette_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rss.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rss_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rss_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rss_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rss_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/rss_valid.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ruby.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ruby_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ruby_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ruby_gear.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ruby_get.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ruby_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ruby_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ruby_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/ruby_put.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_code.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_code_original.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_code_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_gear.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_palette.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_save.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/script_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/seasons.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/section_collapsed.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/section_expanded.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_chart.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_compressed.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_database.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_uncompressed.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/server_wrench.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shading.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_3d.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_align_bottom.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_align_center.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_align_left.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_align_middle.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_align_right.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_align_top.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_flip_horizontal.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_flip_vertical.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_group.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_handles.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_move_back.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_move_backwards.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_move_forwards.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_move_front.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_rotate_anticlockwise.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_rotate_clockwise.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_shade_a.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_shade_b.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_shade_c.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_shadow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_shadow_toggle.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_square.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_square_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_square_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_square_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_square_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_square_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_square_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_square_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_square_select.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shape_ungroup.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shapes_many.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shapes_many_select.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/share.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shield.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shield_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shield_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shield_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shield_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shield_rainbow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shield_silver.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shield_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/shield_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sitemap.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sitemap_color.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone_disk.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/smartphone_wrench.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sort_ascending.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sort_descending.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sound.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sound_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sound_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sound_high.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sound_in.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sound_low.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sound_mute.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sound_none.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sound_out.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/spellcheck.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sport_8ball.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sport_basketball.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sport_football.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sport_golf.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sport_golf_practice.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sport_raquet.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sport_shuttlecock.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sport_soccer.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sport_tennis.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/star_bronze.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/star_bronze_half_grey.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/star_gold.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/star_gold_half_grey.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/star_gold_half_silver.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/star_grey.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/star_half_grey.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/star_silver.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/status_away.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/status_be_right_back.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/status_busy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/status_invisible.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/status_offline.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/status_online.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/stop_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/stop_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/stop_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/style.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/style_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/style_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/style_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/style_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/sum.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/system_close.gif create mode 100644 FineUI_v6/FineUI.Examples/res/icon/system_new.gif create mode 100644 FineUI_v6/FineUI.Examples/res/icon/system_save.gif create mode 100644 FineUI_v6/FineUI.Examples/res/icon/system_saveclose.gif create mode 100644 FineUI_v6/FineUI.Examples/res/icon/system_savenew.gif create mode 100644 FineUI_v6/FineUI.Examples/res/icon/system_search.gif create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tab.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tab_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tab_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tab_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tab_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tab_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tab_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tab_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_cell.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_column.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_column_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_column_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_gear.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_multiple.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_refresh.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_relationship.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_row.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_row_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_row_insert.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_save.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/table_sort.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_blue_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_blue_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_blue_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_orange.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_pink.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_purple.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tag_yellow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tags_grey.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tags_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/telephone.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/telephone_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/telephone_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/telephone_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/telephone_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/telephone_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/telephone_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/telephone_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/telephone_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/television.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/television_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/television_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/television_in.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/television_off.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/television_out.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/television_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_ab.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_align_center.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_align_justify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_align_left.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_align_right.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_allcaps.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_bold.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_columns.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_complete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_direction.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_double_underline.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_dropcaps.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_fit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_flip.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_font_default.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_heading_1.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_heading_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_heading_3.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_heading_4.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_heading_5.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_heading_6.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_horizontalrule.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_indent.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_indent_remove.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_inverse.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_italic.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_kerning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_left_to_right.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_letter_omega.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_letterspacing.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_linespacing.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_list_bullets.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_list_numbers.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_lowercase.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_lowercase_a.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_mirror.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_padding_bottom.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_padding_left.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_padding_right.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_padding_top.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_replace.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_right_to_left.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_rotate_0.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_rotate_180.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_rotate_270.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_rotate_90.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_ruler.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_shading.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_signature.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_smallcaps.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_spelling.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_strikethrough.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_subscript.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_superscript.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_tab.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_underline.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/text_uppercase.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/textfield.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/textfield_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/textfield_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/textfield_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/textfield_rename.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/theme.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/thumb_down.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/thumb_up.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tick.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/time.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/time_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/time_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/time_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/time_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/time_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/timeline_marker.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/transmit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/transmit_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/transmit_blue.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/transmit_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/transmit_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/transmit_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/transmit_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/transmit_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/tux.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_alert.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_b.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_brown.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_comment.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_cross.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_earth.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_female.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_gray.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_gray_cool.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_green.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_home.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_magnify.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_mature.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_orange.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_red.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_star.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_suit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_suit_black.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/user_tick.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/vcard.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/vcard_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/vcard_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/vcard_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/vcard_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/vector.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/vector_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/vector_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/vector_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/wand.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/weather_cloud.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/weather_clouds.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/weather_cloudy.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/weather_cloudy_rain.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/weather_lightning.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/weather_rain.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/weather_snow.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/weather_sun.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/webcam.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/webcam_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/webcam_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/webcam_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/webcam_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/webcam_start.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/webcam_stop.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_connect.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_dawn.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_edit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_key.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_link.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_night.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/world_orbit.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/wrench.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/wrench_orange.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/xhtml.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/xhtml_add.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/xhtml_delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/xhtml_error.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/xhtml_go.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/xhtml_valid.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/zoom.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/zoom_in.png create mode 100644 FineUI_v6/FineUI.Examples/res/icon/zoom_out.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/1.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/10.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/11.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/12.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/13.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/14.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/15.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/16.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/17.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/18.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/19.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/2.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/20.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/21.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/23.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/24.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/25.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/3.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/4.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/5.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/6.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/7.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/8.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/16/9.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/blank.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/bs-docs-masthead-pattern.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/china.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/class.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/cmp.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/code.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/collapse-all.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/comment.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/delete.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/delete_disabled.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/demo_pro.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/diamond-black.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/enable_gzip_iis6_1.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/enable_gzip_iis6_2.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/enable_gzip_iis6_3.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/enable_gzip_iis6_4.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/enable_gzip_iis6_5.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/expand-all.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_ascx.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_ashx.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_aspx.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_config.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_cs.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_css.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_htm.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_html.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_img.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_js.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_master.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_sitemap.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_txt.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_unknow.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_usercontrol.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_vb.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/filetype/vs_xml.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/formchangeconfirm.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/ico_24_grsz.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/icons.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/json.net.1.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/json.net.2.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/loading/loading_24.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/loading/loading_25.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/loading/loading_32.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/loading/loading_32_2.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/loading/loading_42.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/loading/loading_50.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/login.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/favicon.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/favicon.ico create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/favicon.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/logo.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/logo.psd create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/logo2.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/logo3.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/logo3_old.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/logo_127.psd create mode 100644 FineUI_v6/FineUI.Examples/res/images/logo/logo_old.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/love.jpg create mode 100644 FineUI_v6/FineUI.Examples/res/images/my_face_80.jpg create mode 100644 FineUI_v6/FineUI.Examples/res/images/nav_hover_highlight_2.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/no_data_found.jpg create mode 100644 FineUI_v6/FineUI.Examples/res/images/pagemenu-separator.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/pagemenu_toolbar_background.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/pkg.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/snapshot/cascade_window.jpg create mode 100644 FineUI_v6/FineUI.Examples/res/images/square.gif create mode 100644 FineUI_v6/FineUI.Examples/res/images/success.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/themeroller-ready-black-200px.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/themeroller-ready-white-200px.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/toolbox.png create mode 100644 FineUI_v6/FineUI.Examples/res/images/ui-anim_basic_16x16.gif create mode 100644 FineUI_v6/FineUI.Examples/res/js/jquery.js create mode 100644 FineUI_v6/FineUI.Examples/res/js/jquery.min.js create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_1/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_102/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_104/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_109/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_13/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_2/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_21/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_25/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_3/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_31/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_36/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_40/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_43/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_52/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_53/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_54/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_6/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_61/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_62/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_66/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_67/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_68/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_72/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_74/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_75/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_76/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_8/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_92/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_93/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/res/loading/_99/ffffff_444444.gif create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip.aspx create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_addtab.aspx create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_addtab.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_addtab.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_autopostback.aspx create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_autopostback.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_autopostback.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_enableclose.aspx create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_enableclose.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_enableclose.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_iframe_disabled.aspx create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_iframe_disabled.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_iframe_disabled.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_iframe_disabled_tab1.aspx create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_iframe_disabled_tab1.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_iframe_disabled_tab1.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_position.aspx create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_position.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tabstrip/tabstrip_position.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/test/activex.aspx create mode 100644 FineUI_v6/FineUI.Examples/test/activex.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/test/activex.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/test/checkboxlist_update2.aspx create mode 100644 FineUI_v6/FineUI.Examples/test/checkboxlist_update2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/test/checkboxlist_update2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/test/empty.aspx create mode 100644 FineUI_v6/FineUI.Examples/test/empty.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/test/empty.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/test/form2.aspx create mode 100644 FineUI_v6/FineUI.Examples/test/form2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/test/form2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/test/grid2.aspx create mode 100644 FineUI_v6/FineUI.Examples/test/grid2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/test/grid2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/test/grid_editor_cell2.aspx create mode 100644 FineUI_v6/FineUI.Examples/test/grid_editor_cell2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/test/grid_editor_cell2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/test/test.aspx create mode 100644 FineUI_v6/FineUI.Examples/test/test.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/test/test.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/test/test2.aspx create mode 100644 FineUI_v6/FineUI.Examples/test/test2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/test/test2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/custom_display.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/custom_display.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/custom_display.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/email.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/email.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/email.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/inline.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/inline.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/inline.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/inline_window.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/inline_window.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/inline_window.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/multi_values.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/multi_values.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/multi_values.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/multi_values_remote.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/multi_values_remote.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/multi_values_remote.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/remote_with_cache.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/remote_with_cache.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/remote_with_cache.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/search.ashx create mode 100644 FineUI_v6/FineUI.Examples/third-party/autocomplete/search.ashx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ckeditor/ckeditor.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/ckeditor/ckeditor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ckeditor/ckeditor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ckeditor/ckeditor_setvalue.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/ckeditor/ckeditor_setvalue.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ckeditor/ckeditor_setvalue.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/my97/my97.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/my97/my97.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/my97/my97.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/My97DatePicker_4.8beta4.zip create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/ckeditor_4.4.2_full.zip create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/jquery-ui.css create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/jquery-ui.js create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/jquery-ui.min.css create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/jquery-ui.min.js create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/animated-overlay.gif create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-bg_flat_55_999999_40x100.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-bg_flat_75_aaaaaa_40x100.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-bg_glass_45_0078ae_1x400.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-bg_glass_55_f8da4e_1x400.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-bg_glass_75_79c9ec_1x400.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-bg_gloss-wave_45_e14f1c_500x100.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-bg_gloss-wave_50_6eac2c_500x100.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-bg_gloss-wave_75_2191c0_500x100.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-icons_0078ae_256x240.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-icons_056b93_256x240.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-icons_d8e7f3_256x240.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-icons_e0fdff_256x240.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-icons_f5e175_256x240.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-icons_f7a50d_256x240.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/images/ui-icons_fcd113_256x240.png create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/jqueryuiautocomplete/theme-start/theme.css create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/tinymce_4.1.1.zip create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/ueditor1_4_3-utf8-net.zip create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/umeditor1_2_2-utf8-net.zip create mode 100644 FineUI_v6/FineUI.Examples/third-party/res/授权说明.txt create mode 100644 FineUI_v6/FineUI.Examples/third-party/tinymce/tinymce.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/tinymce/tinymce.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/tinymce/tinymce.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/tinymce/tinymce_setvalue.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/tinymce/tinymce_setvalue.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/tinymce/tinymce_setvalue.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ueditor/ueditor.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/ueditor/ueditor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ueditor/ueditor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ueditor/ueditor_setvalue.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/ueditor/ueditor_setvalue.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ueditor/ueditor_setvalue.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ueditor/ueditor_two.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/ueditor/ueditor_two.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/ueditor/ueditor_two.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/umeditor/umeditor.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/umeditor/umeditor.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/umeditor/umeditor.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/umeditor/umeditor_setvalue.aspx create mode 100644 FineUI_v6/FineUI.Examples/third-party/umeditor/umeditor_setvalue.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/third-party/umeditor/umeditor_setvalue.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/form.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/form.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/form.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/formfields.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/formfields.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/formfields.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu.xml create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu_dynamic.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu_dynamic.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu_dynamic.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu_dynamic2.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu_dynamic2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu_dynamic2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu_hideonclick.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu_hideonclick.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menu_hideonclick.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menucheckbox.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menucheckbox.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/menucheckbox.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/multi_toolbars.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/multi_toolbars.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/multi_toolbars.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_fill.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_fill.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_fill.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_iframe.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_iframe.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_iframe.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_images.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_images.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_images.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_images_fixedwidth.aspx create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_images_fixedwidth.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/toolbar/toolbar_images_fixedwidth.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/checkbox/tree_checkall.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/checkbox/tree_checkall.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/checkbox/tree_checkall.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/checkbox/tree_checked.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/checkbox/tree_checked.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/checkbox/tree_checked.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/Web.sitemap create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_datasource.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_datasource.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_datasource.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_datatable.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_datatable.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_datatable.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_document.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_document.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_document.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_sitemap.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_sitemap.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/tree_sitemap.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/databind/website.xml create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_multi_select.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_multi_select.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_multi_select.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_multi_select_selectable.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_multi_select_selectable.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_multi_select_selectable.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_nodecommand.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_nodecommand.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_nodecommand.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_select.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_select.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/select/tree_select.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_ajax.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_ajax.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_ajax.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_auto_leaf_identification.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_auto_leaf_identification.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_auto_leaf_identification.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_contextmenu.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_contextmenu.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_contextmenu.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_expand.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_expand.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_expand.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_icon.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_icon.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_icon.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_node_cssclass.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_node_cssclass.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_node_cssclass.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_nodedatabound.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_nodedatabound.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_nodedatabound.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_singleexpand.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_singleexpand.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_singleexpand.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_textselection.aspx create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_textselection.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/tree/tree_textselection.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/upload/web.config create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/UserInfoControl.ascx create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/UserInfoControl.ascx.cs create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/UserInfoControl.ascx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/userinfo.aspx create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/userinfo.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/userinfo.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/userinfo2.aspx create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/userinfo2.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/userinfo2.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/userinfo_dynamic.aspx create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/userinfo_dynamic.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/usercontrol/userinfo_dynamic.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/group_panel.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/group_panel.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/group_panel.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/panel.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/panel.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/panel.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/panel_collapse.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/panel_collapse.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/panel_collapse.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/panel_disabled.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/panel_disabled.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/panel_disabled.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/window.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_form.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/window_form.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_form.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_maximized.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/window_maximized.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_maximized.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_maximized_fixed.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/window_maximized_fixed.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_maximized_fixed.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_minwidth.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/window_minwidth.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_minwidth.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_multi.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/window_multi.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_multi.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_toolbar.aspx create mode 100644 FineUI_v6/FineUI.Examples/window/window_toolbar.aspx.cs create mode 100644 FineUI_v6/FineUI.Examples/window/window_toolbar.aspx.designer.cs create mode 100644 FineUI_v6/FineUI.sln create mode 100644 FineUI_v6/FineUI/BaseWebControls/BoxComponent.Container.PanelBase.CollapsablePanel.FormBase/FormBase.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/BoxComponent.Container.PanelBase.CollapsablePanel/CollapsablePanel.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/BoxComponent.Container.PanelBase/PanelBase.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/BoxComponent.Container/Container.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field.TextField.RealTextField/RealTextField.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field.TextField/TextField.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field/Field.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field/TooltipField.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/ControlBase.Component.BoxComponent/BoxComponent.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/ControlBase.Component/Component.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/ControlBase/BaseCollection.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/ControlBase/ControlBase.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/ControlBase/ControlBaseCollection.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/ControlBase/Listener/Listener.cs create mode 100644 FineUI_v6/FineUI/BaseWebControls/ControlBase/Listener/ListenerCollection.cs create mode 100644 FineUI_v6/FineUI/Business/Config/ConfigSection.cs create mode 100644 FineUI_v6/FineUI/Business/Config/Constants.cs create mode 100644 FineUI_v6/FineUI/Business/Config/GlobalConfig.cs create mode 100644 FineUI_v6/FineUI/Business/ControlBuilder/ContentPanelBuilder.cs create mode 100644 FineUI_v6/FineUI/Business/ControlBuilder/NotAllowWhitespaceLiteralsBuilder.cs create mode 100644 FineUI_v6/FineUI/Business/Editor/ControlBaseItemsEditor.cs create mode 100644 FineUI_v6/FineUI/Business/Editor/GridColumnEditorEditor.cs create mode 100644 FineUI_v6/FineUI/Business/Editor/GridColumnsEditor.cs create mode 100644 FineUI_v6/FineUI/Business/Editor/MenuItemsEditor.cs create mode 100644 FineUI_v6/FineUI/Business/Editor/ToolbarItemsEditor.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/AjaxLoadingType.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/BoxLayoutAlign.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/BoxLayoutPosition.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/ButtonAlign.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/ButtonSize.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/ButtonType.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/CloseAction.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/CollapseMode.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/CompareType.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/FooterBarAlign.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/Grid/FieldType.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/Grid/Renderer.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/HideMode.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/Icon.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/IconAlign.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/IconHelper.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/LabelAlign.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/Language.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/Layout.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/MessageBoxIcon.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/MessageTarget.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/Operator.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/Position.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/RegexPattern.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/SummaryPosition.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/TabPosition.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/Target.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/TextAlign.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/TextMode.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/Theme.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/ToolTipType.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/ToolbarAlign.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/ToolbarPosition.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/TriggerIcon.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/VerticalAlign.cs create mode 100644 FineUI_v6/FineUI/Business/Enums/WindowPosition.cs create mode 100644 FineUI_v6/FineUI/Business/JsHelper/JsArrayBuilder.cs create mode 100644 FineUI_v6/FineUI/Business/JsHelper/JsHelper.cs create mode 100644 FineUI_v6/FineUI/Business/JsHelper/JsObjectBuilder.cs create mode 100644 FineUI_v6/FineUI/Business/JsHelper/OptionBuilder.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/AbsoluteScriptBlock.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/ClientJavascriptIDManager.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/CommonResourceHelper.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/DesignTimeResourceHelper.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/ResourceHandler.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/ResourceHelper.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/ResourceManager.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/ResponseFilter.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/ScriptBlock.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/ScriptModule.cs create mode 100644 FineUI_v6/FineUI/Business/ResourceManager/TreeNodeIDManager.cs create mode 100644 FineUI_v6/FineUI/Business/SimulateTree/SimulateTreeHeper.cs create mode 100644 FineUI_v6/FineUI/Business/SimulateTree/SimulateTreeNode.cs create mode 100644 FineUI_v6/FineUI/Business/Util/ControlUtil.cs create mode 100644 FineUI_v6/FineUI/Business/Util/DateUtil.cs create mode 100644 FineUI_v6/FineUI/Business/Util/ExtDateTimeConvertor.cs create mode 100644 FineUI_v6/FineUI/Business/Util/FState.cs create mode 100644 FineUI_v6/FineUI/Business/Util/HtmlNodeBuilder.cs create mode 100644 FineUI_v6/FineUI/Business/Util/JSONUtil.cs create mode 100644 FineUI_v6/FineUI/Business/Util/ObjectUtil.cs create mode 100644 FineUI_v6/FineUI/Business/Util/StringUtil.cs create mode 100644 FineUI_v6/FineUI/Business/Util/StyleUtil.cs create mode 100644 FineUI_v6/FineUI/Business/Util/XState.cs create mode 100644 FineUI_v6/FineUI/FineUI.csproj create mode 100644 FineUI_v6/FineUI/Properties/AssemblyInfo.cs create mode 100644 FineUI_v6/FineUI/StaticClass/ActiveWindow.cs create mode 100644 FineUI_v6/FineUI/StaticClass/Alert.cs create mode 100644 FineUI_v6/FineUI/StaticClass/Confirm.cs create mode 100644 FineUI_v6/FineUI/StaticClass/PageContext.cs create mode 100644 FineUI_v6/FineUI/StrongName.snk create mode 100644 FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarFill/ToolbarFill.cs create mode 100644 FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarSeparator/ToolbarSeparator.cs create mode 100644 FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarText/ToolbarText.cs create mode 100644 FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Toolbar.cs create mode 100644 FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/ToolbarCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Button/Button.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Calendar/Calendar.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Menu/Menu.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/BaseMenuItem.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuButton.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuCheckBox.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuHyperLink.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuItem.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuItemCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuSeparator.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuText.cs create mode 100644 FineUI_v6/FineUI/WebControls/Component.SplitButton/SplitButton.cs create mode 100644 FineUI_v6/FineUI/WebControls/ControlBase.CPHConnector/CPHConnector.cs create mode 100644 FineUI_v6/FineUI/WebControls/ControlBase.PageLoading/PageLoading.cs create mode 100644 FineUI_v6/FineUI/WebControls/ControlBase.PageManager/CustomEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/ControlBase.PageManager/PageManager.cs create mode 100644 FineUI_v6/FineUI/WebControls/ControlBase.Timer/Timer.cs create mode 100644 FineUI_v6/FineUI/WebControls/ControlBase.UserControlConnector/UserControlConnector.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.CheckBox/CheckBox.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.CheckBox/EventArgs/CheckedEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckBoxList.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItem.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItemCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.HtmlEditor/HtmlEditor.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.Label.HyperLink/HyperLink.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.Label.Image/Image.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.Label.LinkButton/LinkButton.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.Label/Label.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.RadioButton/RadioButton.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioButtonList.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItem.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItemCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/DropDownList.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItem.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItemCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.DatePicker/DatePicker.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.FileUpload/FileUpload.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.HiddenField/HiddenField.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.NumberBox/NumberBox.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TextArea/TextArea.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TextBox/TextBox.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TimePicker/TimePicker.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TriggerBox/TriggerBox.cs create mode 100644 FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TwinTriggerBox/TwinTriggerBox.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/Accordion.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPane.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPaneCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.ContentPanel/ContentPanel.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/Form.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRow.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRowCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.GroupPanel/GroupPanel.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Panel/Panel.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.SimpleForm/SimpleForm.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCheckEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCommandEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeExpandEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeNodeEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreePreNodeEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/Tree.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNode.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNodeCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMapping.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMappingCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Window/EventArgs/WindowCloseEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Window/Window.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/Editor/GridColumnEditorCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/Editor/ModifiedCell.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridAfterEditEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridCommandEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPageEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPreRowEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowClickEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowSelectEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridSortEventArgs.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/Grid.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/BaseField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/BoundField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/CheckBoxField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumn.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumnCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GroupField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/HyperLinkField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/ImageField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/LinkButtonField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderBaseField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderCheckField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RowNumberField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/TemplateField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/WindowField.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumn.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumnCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRow.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowControl.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridTemplateContainer.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/Region/Region.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/Region/RegionCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/RegionPanel.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/Tab/Tab.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/Tab/TabCollection.cs create mode 100644 FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/TabStrip.cs create mode 100644 FineUI_v6/FineUI/ajax_properties.txt create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/EncodingFoundException.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlAttribute.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlAttributeCollection.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlCommentNode.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlConsoleListener.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlDocument.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlElementFlag.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlEntity.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNameTable.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNode.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeCollection.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeNavigator.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeType.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlParseError.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlParseErrorCode.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlTextNode.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlWeb.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlWebException.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/IOLibrary.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocument.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentCodeFragment.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragment.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentList.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentType.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentTextFragment.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/NameValuePair.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/NameValuePairList.cs create mode 100644 FineUI_v6/FineUI/lib/HtmlAgilityPack/crc32.cs create mode 100644 FineUI_v6/FineUI/lib/JSBeautifyLib/JSBeautify.cs create mode 100644 FineUI_v6/FineUI/lib/JSBeautifyLib/JSBeautify.txt create mode 100644 FineUI_v6/FineUI/lib/extjs.txt create mode 100644 FineUI_v6/FineUI/lib/json.net/Net20/Newtonsoft.Json.dll create mode 100644 FineUI_v6/FineUI/lib/json.net/Net20/Newtonsoft.Json.xml create mode 100644 FineUI_v6/FineUI/lib/json.net/Net40/Newtonsoft.Json.dll create mode 100644 FineUI_v6/FineUI/lib/json.net/Net40/Newtonsoft.Json.xml create mode 100644 FineUI_v6/FineUI/lib/licenses/JSBeautify.txt create mode 100644 FineUI_v6/FineUI/lib/licenses/extjs.txt create mode 100644 FineUI_v6/FineUI/lib/licenses/json.net.txt create mode 100644 FineUI_v6/FineUI/release_history.txt create mode 100644 FineUI_v6/FineUI/release_history_en.txt create mode 100644 FineUI_v6/FineUI/toolbox/Accordion.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Button.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Calendar.bmp create mode 100644 FineUI_v6/FineUI/toolbox/CheckBox.bmp create mode 100644 FineUI_v6/FineUI/toolbox/CheckBoxList.bmp create mode 100644 FineUI_v6/FineUI/toolbox/ContentPanel.bmp create mode 100644 FineUI_v6/FineUI/toolbox/DataList.bmp create mode 100644 FineUI_v6/FineUI/toolbox/DatePicker.bmp create mode 100644 FineUI_v6/FineUI/toolbox/DropDownList.bmp create mode 100644 FineUI_v6/FineUI/toolbox/FileUpload.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Form.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Grid.bmp create mode 100644 FineUI_v6/FineUI/toolbox/GroupPanel.bmp create mode 100644 FineUI_v6/FineUI/toolbox/HiddenField.bmp create mode 100644 FineUI_v6/FineUI/toolbox/HtmlEditor.bmp create mode 100644 FineUI_v6/FineUI/toolbox/HyperLink.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Image.bmp create mode 100644 FineUI_v6/FineUI/toolbox/ImageButton.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Label.bmp create mode 100644 FineUI_v6/FineUI/toolbox/LinkButton.bmp create mode 100644 FineUI_v6/FineUI/toolbox/ListBox.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Literal.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Menu.bmp create mode 100644 FineUI_v6/FineUI/toolbox/MenuButton.bmp create mode 100644 FineUI_v6/FineUI/toolbox/MenuCheckBox.bmp create mode 100644 FineUI_v6/FineUI/toolbox/MenuHyperLink.bmp create mode 100644 FineUI_v6/FineUI/toolbox/MenuSeparator.bmp create mode 100644 FineUI_v6/FineUI/toolbox/MenuText.bmp create mode 100644 FineUI_v6/FineUI/toolbox/NumberBox.bmp create mode 100644 FineUI_v6/FineUI/toolbox/PageLoading.bmp create mode 100644 FineUI_v6/FineUI/toolbox/PageManager.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Panel.bmp create mode 100644 FineUI_v6/FineUI/toolbox/PlaceHolder.bmp create mode 100644 FineUI_v6/FineUI/toolbox/RadioButton.bmp create mode 100644 FineUI_v6/FineUI/toolbox/RadioButtonList.bmp create mode 100644 FineUI_v6/FineUI/toolbox/RegionPanel.bmp create mode 100644 FineUI_v6/FineUI/toolbox/SimpleForm.bmp create mode 100644 FineUI_v6/FineUI/toolbox/SplitButton.bmp create mode 100644 FineUI_v6/FineUI/toolbox/TabStrip.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Table.bmp create mode 100644 FineUI_v6/FineUI/toolbox/TextArea.bmp create mode 100644 FineUI_v6/FineUI/toolbox/TextBox.bmp create mode 100644 FineUI_v6/FineUI/toolbox/TimePicker.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Toolbar.bmp create mode 100644 FineUI_v6/FineUI/toolbox/ToolbarFill.bmp create mode 100644 FineUI_v6/FineUI/toolbox/ToolbarSeparator.bmp create mode 100644 FineUI_v6/FineUI/toolbox/ToolbarText.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Tree.bmp create mode 100644 FineUI_v6/FineUI/toolbox/TriggerBox.bmp create mode 100644 FineUI_v6/FineUI/toolbox/TwinTriggerBox.bmp create mode 100644 FineUI_v6/FineUI/toolbox/UserControlConnector.bmp create mode 100644 FineUI_v6/FineUI/toolbox/View.bmp create mode 100644 FineUI_v6/FineUI/toolbox/Window.bmp create mode 100644 FineUI_v6/Newtonsoft.Json/Net20/Newtonsoft.Json.dll create mode 100644 FineUI_v6/Newtonsoft.Json/Net20/Newtonsoft.Json.xml create mode 100644 FineUI_v6/Newtonsoft.Json/Net35/Newtonsoft.Json.dll create mode 100644 FineUI_v6/Newtonsoft.Json/Net35/Newtonsoft.Json.xml create mode 100644 FineUI_v6/Newtonsoft.Json/Net40/Newtonsoft.Json.dll create mode 100644 FineUI_v6/Newtonsoft.Json/Net40/Newtonsoft.Json.xml create mode 100644 FineUI_v6/Newtonsoft.Json/Net45/Newtonsoft.Json.dll create mode 100644 FineUI_v6/Newtonsoft.Json/Net45/Newtonsoft.Json.xml diff --git a/FineUI_v6/FineUI.Examples/Code/DataSourceUtil.cs b/FineUI_v6/FineUI.Examples/Code/DataSourceUtil.cs new file mode 100644 index 0000000..9217d31 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/Code/DataSourceUtil.cs @@ -0,0 +1,1093 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Web; + +namespace FineUI.Examples +{ + public static class DataSourceUtil + { + #region GetClassDataTable + + /// + /// 获取班级的数据表格 + /// + /// + public static DataTable GetClassDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + + DataRow row = table.NewRow(); + + row[0] = 101; + row[1] = "班级一"; + row[2] = 2000; + row[3] = DateTime.Parse("2000-09-01"); + row[4] = "班级一创建于2000年9月1号,班长胡飞,连续三年获得全校优秀班级称号。"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "班级二"; + row[2] = 2005; + row[3] = DateTime.Parse("2005-09-01"); + row[4] = "班级二创建于2005年9月1号,班长董婷婷,连续两年获得全校优秀班级称号。"; + table.Rows.Add(row); + + return table; + } + + #endregion + + #region GetEmptyDataTable + + /// + /// 获取空数据表 + /// + /// + public static DataTable GetEmptyDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Group", typeof(int))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + table.Columns.Add(new DataColumn("Guid", typeof(Guid))); + table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); + + return table; + } + + #endregion + + #region GetDataTable + + /// + /// 获取模拟表格 + /// + /// + public static DataTable GetDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Group", typeof(int))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + table.Columns.Add(new DataColumn("Guid", typeof(Guid))); + + // Hobby:reading,basketball,travel,movie,music + // 爱好:读书, 篮球, 旅游, 电影, 音乐 + table.Columns.Add(new DataColumn("Hobby", typeof(String))); + table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); + + // 考试成绩 + table.Columns.Add(new DataColumn("ChineseScore", typeof(Int32))); + table.Columns.Add(new DataColumn("MathScore", typeof(Int32))); + table.Columns.Add(new DataColumn("TotalScore", typeof(Int32))); + + // 体检结果 + table.Columns.Add(new DataColumn("ShenGao", typeof(Int32))); + table.Columns.Add(new DataColumn("TiZhong", typeof(Int32))); + table.Columns.Add(new DataColumn("XueYaDi", typeof(String))); + table.Columns.Add(new DataColumn("XueYaGao", typeof(String))); + table.Columns.Add(new DataColumn("ShiLiZuo", typeof(Single))); + table.Columns.Add(new DataColumn("ShiLiYou", typeof(Single))); + table.Columns.Add(new DataColumn("ShiLiZuoJiaoZhen", typeof(Single))); + table.Columns.Add(new DataColumn("ShiLiYouJiaoZhen", typeof(Single))); + + // 合并单元格需要的字段 + table.Columns.Add(new DataColumn("GroupB", typeof(int))); + + + DataRow row = table.NewRow(); + row[0] = 101; + row[1] = "张萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "材料科学与工程系"; + row[5] = 1; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); // DBNull.Value; + row[8] = "张萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。
毕业后就职于某大型国有企业,任部门经理,连续三年获得企业优秀员工称号。
aaaaaaaaaaabbbbbbbbbbbbcccccccccccdddddddddddddeeeeeeeeeeeeffffffffffff"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,music"; + row[11] = "2000-09-01"; + row[12] = 80; + row[13] = 90; + row[14] = 170; + row[15] = 180; + row[16] = 150; + row[17] = 80; + row[18] = 120; + row[19] = 0.2; + row[20] = 0.5; + row[21] = 1.0; + row[22] = 1.2; + row[23] = 1; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "陈飞"; + row[2] = 2000; + row[3] = false; + row[4] = "化学系"; + row[5] = 1; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "陈飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,travel,movie,reading,music"; + row[11] = "2001-09-01"; + row[12] = 85; + row[13] = 90; + row[14] = 175; + row[15] = 160; + row[16] = 120; + row[17] = 70; + row[18] = 110; + row[19] = 0.3; + row[20] = 0.3; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 103; + row[1] = "董婷婷"; + row[2] = 2000; + row[3] = true; + row[4] = "化学系"; + row[5] = 2; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "董婷婷,女,18岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。
董婷婷是在学校认识丈夫刘国的,有一天晚上下自习后,董婷婷发短信给刘国说“做我男朋友吧!”,然后他们就走到了一起。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,movie,music"; + row[11] = "2008-09-01"; + row[12] = 90; + row[13] = 90; + row[14] = 180; + row[15] = 190; + row[16] = 130; + row[17] = 82; + row[18] = 125; + row[19] = 0.8; + row[20] = 0.6; + row[21] = 1.2; + row[22] = 1.0; + row[23] = 2; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 104; + row[1] = "刘国"; + row[2] = 2002; + row[3] = false; + row[4] = "化学系"; + row[5] = 2; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "刘国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。
刘国是作为交换生来中科大学习,在校期间认识了妻子董婷婷,虽然是被追到手了,不过在人前却总是说“老婆是我千辛万苦追来的!”。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,movie"; + row[11] = "2002-09-01"; + row[12] = 95; + row[13] = 95; + row[14] = 190; + row[15] = 170; + row[16] = 130; + row[17] = 76; + row[18] = 112; + row[19] = 1.0; + row[20] = 1.0; + row[21] = 1.0; + row[22] = 1.0; + row[23] = 2; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 105; + row[1] = "康颖颖"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-60); + row[8] = "康颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,movie,music"; + row[11] = "2008-09-01"; + row[12] = 85; + row[13] = 95; + row[14] = 180; + row[15] = 159; + row[16] = 90; + row[17] = 77; + row[18] = 128; + row[19] = 0.6; + row[20] = 0.9; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 106; + row[1] = "彭博"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "彭博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,travel,music"; + row[11] = "2003-09-01"; + row[12] = 60; + row[13] = 100; + row[14] = 160; + row[15] = 175; + row[16] = 150; + row[17] = 88; + row[18] = 126; + row[19] = 0.1; + row[20] = 0.3; + row[21] = 1.5; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 107; + row[1] = "黄婷婷"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "黄婷婷,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "travel,movie,music,reading"; + row[11] = "2000-09-01"; + row[12] = 100; + row[13] = 80; + row[14] = 180; + row[15] = 160; + row[16] = 80; + row[17] = 70; + row[18] = 110; + row[19] = 0.8; + row[20] = 0.8; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 108; + row[1] = "唐超"; + row[2] = 2004; + row[3] = false; + row[4] = "物理系"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "唐超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。
作为刘国的同班同学,唐超是班里的尖子生,本科还没毕业就被哈佛大学录取了,现在好像还没毕业呢。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music,basketball"; + row[11] = "2004-09-01"; + row[12] = 80; + row[13] = 80; + row[14] = 160; + row[15] = 188; + row[16] = 130; + row[17] = 82; + row[18] = 130; + row[19] = 0.5; + row[20] = 0.8; + row[21] = 1.3; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 109; + row[1] = "杨婷婷"; + row[2] = 2004; + row[3] = true; + row[4] = "物理系"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "杨婷婷,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。
杨婷婷的父母都是中科大的高材生,他们很高兴送女儿上一所前中科大校长创办的大学,而南科大自己颁发的学位文凭也颇受争议。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,movie"; + row[11] = "2003-09-01"; + row[12] = 90; + row[13] = 60; + row[14] = 150; + row[15] = 166; + row[16] = 110; + row[17] = 70; + row[18] = 116; + row[19] = 0.8; + row[20] = 1.0; + row[21] = 0.8; + row[22] = 1.0; + row[23] = 5; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 110; + row[1] = "徐鹏"; + row[2] = 2002; + row[3] = false; + row[4] = "物理系"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "徐鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,travel"; + row[11] = "2002-09-01"; + row[12] = 60; + row[13] = 90; + row[14] = 150; + row[15] = 198; + row[16] = 145; + row[17] = 83; + row[18] = 128; + row[19] = 1.2; + row[20] = 1.5; + row[21] = 1.2; + row[22] = 1.5; + row[23] = 5; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 111; + row[1] = "董国"; + row[2] = 2012; + row[3] = true; + row[4] = "自动化系"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "董国,男,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music,basketball"; + row[11] = "2006-09-01"; + row[12] = 90; + row[13] = 70; + row[14] = 160; + row[15] = 158; + row[16] = 76; + row[17] = 69; + row[18] = 109; + row[19] = 0.8; + row[20] = 0.6; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 5; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 112; + row[1] = "张一弛"; + row[2] = 2012; + row[3] = true; + row[4] = "材料科学与工程系"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "张一弛,男,28岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2000-09-01"; + row[12] = 99; + row[13] = 98; + row[14] = 197; + row[15] = 183; + row[16] = 125; + row[17] = 80; + row[18] = 120; + row[19] = 0.8; + row[20] = 0.6; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 5; + table.Rows.Add(row); + + return table; + } + + + /// + /// 获取模拟表格(简单表格) + /// + /// + public static DataTable GetSimpleDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); + + + + DataRow row = table.NewRow(); + row[0] = 101; + row[1] = "张萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "材料科学与工程系"; + row[5] = 0; + row[6] = "2000-09-01"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "陈飞"; + row[2] = 2000; + row[3] = false; + row[4] = "化学系"; + row[5] = 1; + row[6] = "2001-09-01"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 103; + row[1] = "董婷婷"; + row[2] = 2000; + row[3] = true; + row[4] = "化学系"; + row[5] = 0; + row[6] = "2008-09-01"; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 104; + row[1] = "刘国"; + row[2] = 2002; + row[3] = false; + row[4] = "化学系"; + row[5] = 1; + row[6] = "2002-09-01"; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 105; + row[1] = "康颖颖"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 0; + row[6] = "2008-09-01"; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 106; + row[1] = "彭博"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 1; + row[6] = "2003-09-01"; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 107; + row[1] = "黄婷婷"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 0; + row[6] = "2000-09-01"; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 108; + row[1] = "唐超"; + row[2] = 2004; + row[3] = false; + row[4] = "物理系"; + row[5] = 1; + row[6] = "2004-09-01"; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 109; + row[1] = "杨婷婷"; + row[2] = 2004; + row[3] = true; + row[4] = "物理系"; + row[5] = 0; + row[6] = "2003-09-01"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 110; + row[1] = "徐鹏"; + row[2] = 2002; + row[3] = false; + row[4] = "物理系"; + row[5] = 1; + row[6] = "2002-09-01"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 111; + row[1] = "董国"; + row[2] = 2012; + row[3] = true; + row[4] = "自动化系"; + row[5] = 1; + row[6] = "2006-09-01"; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 112; + row[1] = "张一弛"; + row[2] = 2012; + row[3] = true; + row[4] = "材料科学与工程系"; + row[5] = 1; + row[6] = "2000-09-01"; + table.Rows.Add(row); + + return table; + } + + #endregion + + #region GetDataTable2 + + /// + /// 获取模拟表格2 + /// + /// + public static DataTable GetDataTable2() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Group", typeof(int))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + table.Columns.Add(new DataColumn("Guid", typeof(Guid))); + table.Columns.Add(new DataColumn("Hobby", typeof(String))); + table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); + table.Columns.Add(new DataColumn("Donate", typeof(int))); + table.Columns.Add(new DataColumn("Fee", typeof(int))); + // Hobby:reading,basketball,travel,movie,music + // 爱好:读书, 篮球, 旅游, 电影, 音乐 + + // 考试成绩 + table.Columns.Add(new DataColumn("ChineseScore", typeof(Int32))); + table.Columns.Add(new DataColumn("MathScore", typeof(Int32))); + table.Columns.Add(new DataColumn("TotalScore", typeof(Int32))); + + + DataRow row = null; + + row = table.NewRow(); + row[0] = 101; + row[1] = "陈萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "计算机应用技术"; + row[5] = 1; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "陈萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,travel"; + row[11] = "2000-09-01"; + row[12] = 299; + row[13] = 2990; + row[14] = 80; + row[15] = 80; + row[16] = 160; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "胡飞"; + row[2] = 2008; + row[3] = true; + row[4] = "信息工程"; + row[5] = 1; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-90); + row[8] = "胡飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball"; + row[11] = "2008-09-01"; + row[12] = 199; + row[13] = 1990; + row[14] = 90; + row[15] = 80; + row[16] = 170; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 103; + row[1] = "金婷婷"; + row[2] = 2001; + row[3] = false; + row[4] = "会计学"; + row[5] = 2; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-80); + row[8] = "金婷婷,女,28岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,music"; + row[11] = "2001-09-01"; + row[12] = 299; + row[13] = 3990; + row[14] = 85; + row[15] = 85; + row[16] = 170; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 104; + row[1] = "潘国"; + row[2] = 2008; + row[3] = false; + row[4] = "国际经济与贸易"; + row[5] = 2; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-70); + row[8] = "潘国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,music"; + row[11] = "2008-09-01"; + row[12] = 399; + row[13] = 3998; + row[14] = 89; + row[15] = 80; + row[16] = 169; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 105; + row[1] = "吴颖颖"; + row[2] = 2002; + row[3] = true; + row[4] = "市场营销"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-60); + row[8] = "吴颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2002-09-01"; + row[12] = 499; + row[13] = 4992; + row[14] = 92; + row[15] = 85; + row[16] = 177; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 106; + row[1] = "张博"; + row[2] = 2003; + row[3] = true; + row[4] = "财务管理"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "张博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "movie,music"; + row[11] = "2003-09-01"; + row[12] = 99; + row[13] = 997; + row[14] = 88; + row[15] = 86; + row[16] = 174; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 107; + row[1] = "杨倩倩"; + row[2] = 2000; + row[3] = false; + row[4] = "材料物理与化学"; + row[5] = 4; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-40); + row[8] = "杨倩倩,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "travel,movie,music"; + row[11] = "2000-09-01"; + row[12] = 399; + row[13] = 3995; + row[14] = 95; + row[15] = 82; + row[16] = 177; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 108; + row[1] = "董超"; + row[2] = 2004; + row[3] = false; + row[4] = "生物医学工程"; + row[5] = 4; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-30); + row[8] = "董超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,movie,music"; + row[11] = "2004-09-01"; + row[12] = 299; + row[13] = 2996; + row[14] = 86; + row[15] = 98; + row[16] = 184; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 109; + row[1] = "张娟娟"; + row[2] = 2003; + row[3] = true; + row[4] = "材料物理与化学"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-20); + row[8] = "张娟娟,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,movie,music"; + row[11] = "2003-09-01"; + row[12] = 599; + row[13] = 5990; + row[14] = 92; + row[15] = 96; + row[16] = 198; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 110; + row[1] = "叶鹏"; + row[2] = 2006; + row[3] = false; + row[4] = "电子商务"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-10); + row[8] = "叶鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2006-09-01"; + row[12] = 699; + row[13] = 6990; + row[14] = 69; + row[15] = 99; + row[16] = 168; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 111; + row[1] = "李玲玲"; + row[2] = 2002; + row[3] = true; + row[4] = "管理学"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "李玲玲,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,music"; + row[11] = "2002-09-01"; + row[12] = 399; + row[13] = 3990; + row[14] = 88; + row[15] = 92; + row[16] = 180; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 112; + row[1] = "张萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "计算机应用技术"; + row[5] = 1; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "张萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,travel"; + row[11] = "2000-09-01"; + row[12] = 299; + row[13] = 2999; + row[14] = 82; + row[15] = 88; + row[16] = 170; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 113; + row[1] = "曹飞"; + row[2] = 2008; + row[3] = false; + row[4] = "信息工程"; + row[5] = 1; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-90); + row[8] = "曹飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball"; + row[11] = "2008-09-01"; + row[12] = 399; + row[13] = 3996; + row[14] = 96; + row[15] = 85; + row[16] = 181; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 114; + row[1] = "孙婷婷"; + row[2] = 2001; + row[3] = true; + row[4] = "材料物理与化学"; + row[5] = 2; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-80); + row[8] = "孙婷婷,女,28岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,music"; + row[11] = "2001-09-01"; + row[12] = 499; + row[13] = 4990; + row[14] = 80; + row[15] = 90; + row[16] = 170; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 115; + row[1] = "董国"; + row[2] = 2008; + row[3] = false; + row[4] = "国际经济与贸易"; + row[5] = 2; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-70); + row[8] = "董国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,music"; + row[11] = "2008-09-01"; + row[12] = 299; + row[13] = 2992; + row[14] = 90; + row[15] = 95; + row[16] = 185; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 116; + row[1] = "习颖颖"; + row[2] = 2002; + row[3] = true; + row[4] = "市场营销"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-60); + row[8] = "习颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2002-09-01"; + row[12] = 199; + row[13] = 1990; + row[14] = 86; + row[15] = 90; + row[16] = 176; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 117; + row[1] = "李博"; + row[2] = 2003; + row[3] = true; + row[4] = "财务管理"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "李博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "movie,music"; + row[11] = "2003-09-01"; + row[12] = 99; + row[13] = 990; + row[14] = 80; + row[15] = 95; + row[16] = 175; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 118; + row[1] = "黄婷婷"; + row[2] = 2000; + row[3] = false; + row[4] = "材料物理与化学"; + row[5] = 4; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-40); + row[8] = "黄婷婷,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "travel,movie,music"; + row[11] = "2000-09-01"; + row[12] = 399; + row[13] = 3990; + row[14] = 95; + row[15] = 88; + row[16] = 183; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 119; + row[1] = "韩超"; + row[2] = 2004; + row[3] = false; + row[4] = "生物医学工程"; + row[5] = 4; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-30); + row[8] = "韩超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,movie,music"; + row[11] = "2004-09-01"; + row[12] = 399; + row[13] = 3991; + row[14] = 88; + row[15] = 86; + row[16] = 174; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 120; + row[1] = "王娟娟"; + row[2] = 2003; + row[3] = true; + row[4] = "材料物理与化学"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-20); + row[8] = "王娟娟,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,movie,music"; + row[11] = "2003-09-01"; + row[12] = 399; + row[13] = 3992; + row[14] = 90; + row[15] = 88; + row[16] = 178; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 121; + row[1] = "周鹏"; + row[2] = 2006; + row[3] = false; + row[4] = "电子商务"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-10); + row[8] = "周鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2006-09-01"; + row[12] = 299; + row[13] = 2992; + row[14] = 92; + row[15] = 96; + row[16] = 186; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 122; + row[1] = "吴玲玲"; + row[2] = 2002; + row[3] = true; + row[4] = "管理学"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "吴玲玲,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,music"; + row[11] = "2002-09-01"; + row[12] = 399; + row[13] = 3993; + row[14] = 95; + row[15] = 89; + row[16] = 184; + table.Rows.Add(row); + + + return table; + } + #endregion + + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/Code/PageBase.cs b/FineUI_v6/FineUI.Examples/Code/PageBase.cs new file mode 100644 index 0000000..1b76072 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/Code/PageBase.cs @@ -0,0 +1,1194 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; +using System.Data; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.IO; + + +namespace FineUI.Examples +{ + public class PageBase : System.Web.UI.Page + { + #region OnInit + + protected override void OnInit(EventArgs e) + { + var pm = PageManager.Instance; + + // 如果不是FineUI的AJAX回发(两种情况:1.页面第一个加载 2.页面非AJAX回发) + if (pm != null && !pm.IsFineUIAjaxPostBack) + { + HttpCookie themeCookie = Request.Cookies["Theme_v6"]; + if (themeCookie != null) + { + try + { + string themeValue = themeCookie.Value; + pm.Theme = (Theme)Enum.Parse(typeof(Theme), themeValue, true); + } + catch (Exception) + { + pm.Theme = FineUI.Theme.Neptune; + } + } + + HttpCookie langCookie = Request.Cookies["Language_v6"]; + if (langCookie != null) + { + try + { + string langValue = langCookie.Value; + pm.Language = (Language)Enum.Parse(typeof(Language), langValue, true); + } + catch (Exception) + { + pm.Language = Language.ZH_CN; + } + } + + HttpCookie loadingCookie = Request.Cookies["Loading_v6"]; + if (loadingCookie != null) + { + int loadingNumber = Convert.ToInt32(loadingCookie.Value); + pm.LoadingImageNumber = loadingNumber; + } + + } + + + // 为所有页面添加公共的: + System.Web.UI.HtmlControls.HtmlGenericControl metaCtrl = new System.Web.UI.HtmlControls.HtmlGenericControl("meta"); + metaCtrl.Attributes["http-equiv"] = "Content-Type"; + metaCtrl.Attributes["content"] = "text/html; charset=utf-8"; + Header.Controls.AddAt(0, metaCtrl); + + + // 为所有页面添加公共的: + System.Web.UI.HtmlControls.HtmlGenericControl linkCtrl = new System.Web.UI.HtmlControls.HtmlGenericControl("link"); + linkCtrl.Attributes["rel"] = "stylesheet"; + linkCtrl.Attributes["type"] = "text/css"; + linkCtrl.Attributes["href"] = ResolveClientUrl("~/res/css/common.css"); + Header.Controls.Add(linkCtrl); + + + + base.OnInit(e); + } + + private bool IsSystemTheme(string themeName) + { + themeName = themeName.ToLower(); + string[] themes = Enum.GetNames(typeof(Theme)); + foreach (string theme in themes) + { + if (theme.ToLower() == themeName) + { + return true; + } + } + return false; + } + + #endregion + + #region 上传文件类型判断 + + protected readonly static List VALID_FILE_TYPES = new List { "jpg", "bmp", "gif", "jpeg", "png" }; + + protected static bool ValidateFileType(string fileName) + { + string fileType = String.Empty; + int lastDotIndex = fileName.LastIndexOf("."); + if (lastDotIndex >= 0) + { + fileType = fileName.Substring(lastDotIndex + 1).ToLower(); + } + + if (VALID_FILE_TYPES.Contains(fileType)) + { + return true; + } + else + { + return false; + } + } + + + #endregion + + #region 省市县 + + protected readonly static JArray SHENG_JSON = JArray.Parse("[\"北京\",\"天津\",\"上海\",\"重庆\",\"河北\",\"山西\",\"辽宁\",\"吉林\",\"黑龙江\",\"江苏\",\"浙江\",\"安徽\",\"福建\",\"江西\",\"山东\",\"河南\",\"湖北\",\"湖南\",\"广东\",\"海南\",\"四川\",\"贵州\",\"云南\",\"陕西\",\"甘肃\",\"青海\",\"内蒙古\",\"广西\",\"西藏\",\"宁夏\",\"新疆\",\"香港\",\"澳门\",\"台湾\"]"); + protected readonly static JObject SHI_JSON = JObject.Parse("{\"北京\":[\"北京市\"],\"天津\":[\"天津市\"],\"上海\":[\"上海市\"],\"重庆\":[\"重庆市\"],\"河北\":[\"石家庄市\",\"唐山市\",\"秦皇岛市\",\"邯郸市\",\"邢台市\",\"保定市\",\"张家口市\",\"承德市\",\"沧州市\",\"廊坊市\",\"衡水市\"],\"山西\":[\"太原市\",\"大同市\",\"阳泉市\",\"长治市\",\"晋城市\",\"朔州市\",\"晋中市运城市忻州市\",\"临汾市\",\"吕梁市\"],\"辽宁\":[\"沈阳市\",\"大连市\",\"鞍山市\",\"抚顺市\",\"本溪市\",\"丹东市\",\"锦州市\",\"营口市\",\"阜新市\",\"辽阳市\",\"盘锦市\",\"铁岭市\",\"朝阳市\",\"葫芦岛市\"],\"吉林\":[\"长春市\",\"吉林市\",\"四平市\",\"辽源市\",\"通化市\",\"白山市\",\"松原市\",\"白城市\",\"延边朝鲜族自治州\"],\"黑龙江\":[\"哈尔滨市\",\"齐齐哈尔市\",\"鹤岗市\",\"双鸭山市\",\"鸡西市\",\"大庆市\",\"伊春市\",\"牡丹江市\",\"佳木斯市\",\"七台河市\",\"黑河市\",\"绥化市\",\"大兴安岭地区\"],\"江苏\":[\"南京市\",\"苏州市\",\"无锡市\",\"常州市\",\"镇江市\",\"南通市\",\"泰州市\",\"扬州市\",\"盐城市\",\"连云港市\",\"徐州市\",\"淮安市\",\"宿迁市\"],\"浙江\":[\"杭州市\",\"宁波市\",\"温州市\",\"嘉兴市\",\"湖州市\",\"绍兴市\",\"金华市\",\"衢州市\",\"舟山市\",\"台州市\",\"丽水市\"],\"安徽\":[\"合肥市\",\"芜湖市\",\"蚌埠市\",\"淮南市\",\"马鞍山市\",\"淮北市\",\"铜陵市\",\"安庆市\",\"黄山市\",\"滁州市\",\"阜阳市\",\"宿州市\",\"巢湖市\",\"六安市\",\"亳州市\",\"池州市\",\"宣城市\"],\"福建\":[\"福州市\",\"厦门市\",\"莆田市\",\"三明市\",\"泉州市\",\"漳州市\",\"南平市\",\"龙岩市\",\"宁德市\"],\"江西\":[\"南昌市\",\"景德镇市\",\"萍乡市\",\"九江市\",\"新余市\",\"鹰潭市\",\"赣州市\",\"吉安市\",\"宜春市\",\"抚州市\",\"上饶市\"],\"山东\":[\"济南市\",\"青岛市\",\"淄博市\",\"枣庄市\",\"东营市\",\"烟台市\",\"潍坊市\",\"济宁市\",\"泰安市\",\"威海市\",\"日照市\",\"莱芜市\",\"临沂市\",\"德州市\",\"聊城市\",\"滨州市\",\"菏泽市\"],\"河南\":[\"郑州市\",\"开封市\",\"洛阳市\",\"平顶山市\",\"安阳市\",\"鹤壁市\",\"新乡市\",\"焦作市\",\"濮阳市\",\"许昌市\",\"漯河市\",\"三门峡市\",\"南阳市\",\"商丘市\",\"信阳市\",\"周口市\",\"驻马店市\",\"济源市\"],\"湖北\":[\"武汉市\",\"黄石市\",\"十堰市\",\"荆州市\",\"宜昌市\",\"襄樊市\",\"鄂州市\",\"荆门市\",\"孝感市\",\"黄冈市\",\"咸宁市\",\"随州市\",\"恩施土家族苗族自治州\",\"仙桃市\",\"天门市\",\"潜江市\",\"神农架林区\"],\"湖南\":[\"长沙市\",\"株洲市\",\"湘潭市\",\"衡阳市\",\"邵阳市\",\"岳阳市\",\"常德市\",\"张家界市\",\"益阳市\",\"郴州市\",\"永州市\",\"怀化市\",\"娄底市\",\"湘西土家族苗族自治州\"],\"广东\":[\"广州市\",\"深圳市\",\"珠海市\",\"汕头市\",\"韶关市\",\"佛山市\",\"江门市\",\"湛江市\",\"茂名市\",\"肇庆市\",\"惠州市\",\"梅州市\",\"汕尾市\",\"河源市\",\"阳江市\",\"清远市\",\"东莞市\",\"中山市\",\"潮州市\",\"揭阳市\",\"云浮市\"],\"海南\":[\"海口市\",\"三亚市\",\"五指山市\",\"琼海市\",\"儋州市\",\"文昌市\",\"万宁市\",\"东方市\",\"澄迈县\",\"定安县\",\"屯昌县\",\"临高县\",\"白沙黎族自治县\",\"昌江黎族自治县\",\"乐东黎族自治县\",\"陵水黎族自治县\",\"保亭黎族苗族自治县\",\"琼中黎族苗族自治县\"],\"四川\":[\"成都市\",\"自贡市\",\"攀枝花市\",\"泸州市\",\"德阳市\",\"绵阳市\",\"广元市\",\"遂宁市\",\"内江市\",\"乐山市\",\"南充市\",\"眉山市\",\"宜宾市\",\"广安市\",\"达州市\",\"雅安市\",\"巴中市\",\"资阳市\",\"阿坝藏族羌族自治州\",\"甘孜藏族自治州\",\"凉山彝族自治州\"],\"贵州\":[\"贵阳市\",\"六盘水市\",\"遵义市\",\"安顺市\",\"铜仁地区\",\"毕节地区\",\"黔西南布依族苗族自治州\",\"黔东南苗族侗族自治州\",\"黔南布依族苗族自治州\"],\"云南\":[\"昆明市\",\"曲靖市\",\"玉溪市\",\"保山市\",\"昭通市\",\"丽江市\",\"普洱市\",\"临沧市\",\"德宏傣族景颇族自治州\",\"怒江傈僳族自治州\",\"迪庆藏族自治州\",\"大理白族自治州\",\"楚雄彝族自治州\",\"红河哈尼族彝族自治州\",\"文山壮族苗族自治州\",\"西双版纳傣族自治州\"],\"陕西\":[\"西安市\",\"铜川市\",\"宝鸡市\",\"咸阳市\",\"渭南市\",\"延安市\",\"汉中市\",\"榆林市\",\"安康市\",\"商洛市\"],\"甘肃\":[\"兰州市\",\"嘉峪关市\",\"金昌市\",\"白银市\",\"天水市\",\"武威市\",\"酒泉市\",\"张掖市\",\"庆阳市\",\"平凉市\",\"定西市\",\"陇南市\",\"临夏回族自治州\",\"甘南藏族自治州\"],\"青海\":[\"西宁市\",\"海东地区\",\"海北藏族自治州\",\"海南藏族自治州\",\"黄南藏族自治州\",\"果洛藏族自治州\",\"玉树藏族自治州\",\"海西蒙古族藏族自治州\"],\"内蒙古\":[\"呼和浩特市\",\"包头市\",\"乌海市\",\"赤峰市\",\"通辽市\",\"鄂尔多斯市\",\"呼伦贝尔市\",\"巴彦淖尔市\",\"乌兰察布市\",\"锡林郭勒盟\",\"兴安盟\",\"阿拉善盟\"],\"广西\":[\"南宁市\",\"柳州市\",\"桂林市\",\"梧州市\",\"北海市\",\"防城港市\",\"钦州市\",\"贵港市\",\"玉林市\",\"百色市\",\"贺州市\",\"河池市\",\"来宾市\",\"崇左市\"],\"西藏\":[\"拉萨市\",\"那曲地区\",\"昌都地区\",\"林芝地区\",\"山南地区\",\"日喀则地区\",\"阿里地区\"],\"宁夏\":[\"银川市\",\"石嘴山市\",\"吴忠市\",\"固原市\",\"中卫市\"],\"新疆\":[\"乌鲁木齐市\",\"克拉玛依市\",\"吐鲁番地区\",\"哈密地区\",\"和田地区\",\"阿克苏地区\",\"喀什地区\",\"克孜勒苏柯尔克孜自治州\",\"巴音郭楞蒙古自治州\",\"昌吉回族自治州\",\"博尔塔拉蒙古自治州\",\"石河子市\",\"阿拉尔市\",\"图木舒克市\",\"五家渠市\",\"伊犁哈萨克自治州\",\"塔城地区\",\"阿勒泰地区\"],\"香港\":[\"中西区\",\"湾仔区\",\"东区\",\"南区\",\"黄大仙区\",\"观塘区\",\"深水埗区\",\"油尖旺区\",\"九龙城区\",\"北区\",\"大埔区\",\"沙田区\",\"西贡区\",\"元朗区\",\"屯门区\",\"荃湾区\",\"葵青区\",\"离岛区\"],\"澳门\":[\"花地玛堂区\",\"圣安多尼堂区\",\"大堂区\",\"望德堂区\",\"风顺堂区\",\"氹仔\",\"路环\",\"路氹城\"],\"台湾\":[\"台北市\",\"高雄市\",\"基隆市\",\"新竹市\",\"台中市\",\"嘉义市\",\"台南市\",\"台北县\",\"桃园县\",\"新竹县\",\"苗栗县\",\"台中县\",\"彰化县\",\"南投县\",\"云林县\",\"嘉义县\",\"台南县\",\"高雄县\",\"屏东县\",\"宜兰县\",\"花莲县\",\"台东县\",\"澎湖县\",\"金门县\",\"连江县\"]}"); + protected readonly static JObject XIAN_JSON = JObject.Parse("{\"北京市\":[\"东城区\",\"西城区\",\"崇文区\",\"宣武区\",\"朝阳区\",\"丰台区\",\"石景山区\",\"海淀区\",\"门头沟区\",\"房山区\",\"通州区\",\"顺义区\",\"昌平区\",\"大兴区\",\"怀柔区\",\"平谷区\",\"密云县\",\"延庆县\"],\"天津市\":[\"和平区\",\"河东区\",\"河西区\",\"南开区\",\"河北区\",\"红桥区\",\"塘沽区\",\"汉沽区\",\"大港区\",\"东丽区\",\"西青区\",\"北辰区\",\"津南区\",\"武清区\",\"宝坻区\",\"静海县\",\"宁河县\",\"蓟县\"],\"上海市\":[\"黄浦区\",\"卢湾区\",\"徐汇区\",\"长宁区\",\"静安区\",\"普陀区\",\"闸北区\",\"虹口区\",\"杨浦区\",\"宝山区\",\"闵行区\",\"嘉定区\",\"松江区\",\"金山区\",\"青浦区\",\"奉贤区\",\"浦东新区\",\"崇明县\"],\"重庆市\":[\"渝中区\",\"大渡口区\",\"江北区\",\"南岸区\",\"北碚区\",\"渝北区\",\"巴南区\",\"长寿区\",\"双桥区\",\"沙坪坝区\",\"万盛区\",\"万州区\",\"涪陵区\",\"黔江区\",\"永川区\",\"合川区\",\"江津区\",\"九龙坡区\",\"南川区\",\"綦江县\",\"潼南县\",\"荣昌县\",\"璧山县\",\"大足县\",\"铜梁县\",\"梁平县\",\"开县\",\"忠县\",\"城口县\",\"垫江县\",\"武隆县\",\"丰都县\",\"奉节县\",\"云阳县\",\"巫溪县\",\"巫山县\",\"石柱土家族自治县\",\"秀山土家族苗族自治县\",\"酉阳土家族苗族自治县\",\"彭水苗族土家族自治县\"],\"石家庄市\":[\"长安区\",\"桥东区\",\"桥西区\",\"新华区\",\"裕华区\",\"井陉矿区\",\"鹿泉市\",\"辛集市\",\"藁城市\",\"晋州市\",\"新乐市\",\"深泽县\",\"无极县\",\"赵县\",\"灵寿县\",\"高邑县\",\"元氏县\",\"赞皇县\",\"平山县\",\"井陉县\",\"栾城县\",\"正定县\",\"行唐县\"],\"唐山市\":[\"路北区\",\"路南区\",\"古冶区\",\"开平区\",\"丰南区\",\"丰润区\",\"遵化市\",\"迁安市\",\"迁西县\",\"滦南县\",\"玉田县\",\"唐海县\",\"乐亭县\",\"滦县\",\"汉沽管理区\"],\"秦皇岛市\":[\"海港区\",\"山海关区\",\"北戴河区\",\"昌黎县\",\"抚宁县\",\"卢龙县\",\"青龙满族自治县\"],\"邯郸市\":[\"邯山区\",\"丛台区\",\"复兴区\",\"峰峰矿区\",\"武安市\",\"邱县\",\"大名县\",\"魏县\",\"曲周县\",\"鸡泽县\",\"肥乡县\",\"广平县\",\"成安县\",\"临漳县\",\"磁县\",\"涉县\",\"永年县\",\"馆陶县\",\"邯郸县\"],\"邢台市\":[\"桥东区\",\"桥西区\",\"南宫市\",\"沙河市\",\"临城县\",\"内丘县\",\"柏乡县\",\"隆尧县\",\"任县\",\"南和县\",\"宁晋县\",\"巨鹿县\",\"新河县\",\"广宗县\",\"平乡县\",\"威县\",\"清河县\",\"临西县\",\"邢台县\"],\"保定市\":[\"新市区\",\"北市区\",\"南市区\",\"定州市\",\"涿州市\",\"安国市\",\"高碑店市\",\"易县\",\"徐水县\",\"涞源县\",\"顺平县\",\"唐县\",\"望都县\",\"涞水县\",\"高阳县\",\"安新县\",\"雄县\",\"容城县\",\"蠡县\",\"曲阳县\",\"阜平县\",\"博野县\",\"满城县\",\"清苑县\",\"定兴县\"],\"张家口市\":[\"桥东区\",\"桥西区\",\"宣化区\",\"下花园区\",\"张北县\",\"康保县\",\"沽源县\",\"尚义县\",\"蔚县\",\"阳原县\",\"怀安县\",\"万全县\",\"怀来县\",\"赤城县\",\"崇礼县\",\"宣化县\",\"涿鹿县\",\"塞北管理区\"],\"承德市\":[\"双桥区\",\"双滦区\",\"鹰手营子矿区\",\"兴隆县\",\"平泉县\",\"滦平县\",\"隆化县\",\"承德县\",\"丰宁满族自治县\",\"宽城满族自治县\",\"围场满族蒙古族自治县\"],\"沧州市\":[\"新华区\",\"运河区\",\"泊头市\",\"任丘市\",\"黄骅市\",\"河间市\",\"献县\",\"吴桥县\",\"沧县\",\"东光县\",\"肃宁县\",\"南皮县\",\"盐山县\",\"青县\",\"海兴县\",\"孟村回族自治县\"],\"廊坊市\":[\"安次区\",\"广阳区\",\"霸州市\",\"三河市\",\"香河县\",\"永清县\",\"固安县\",\"文安县\",\"大城县\",\"大厂回族自治县\"],\"衡水市\":[\"桃城区\",\"冀州市\",\"深州市\",\"枣强县\",\"武邑县\",\"武强县\",\"饶阳县\",\"安平县\",\"故城县\",\"景县\",\"阜城县\"],\"太原市\":[\"杏花岭区\",\"小店区\",\"迎泽区\",\"尖草坪区\",\"万柏林区\",\"晋源区\",\"古交市\",\"阳曲县\",\"清徐县\",\"娄烦县\"],\"大同市\":[\"城区\",\"矿区\",\"南郊区\",\"新荣区\",\"大同县\",\"天镇县\",\"灵丘县\",\"阳高县\",\"左云县\",\"广灵县\",\"浑源县\"],\"阳泉市\":[\"城区\",\"矿区\",\"郊区\",\"平定县\",\"盂县\"],\"长治市\":[\"城区\",\"郊区\",\"潞城市\",\"长治县\",\"长子县\",\"平顺县\",\"襄垣县\",\"沁源县\",\"屯留县\",\"黎城县\",\"武乡县\",\"沁县\",\"壶关县\"],\"晋城市\":[\"城区\",\"高平市\",\"泽州县\",\"陵川县\",\"阳城县\",\"沁水县\"],\"朔州市\":[\"朔城区\",\"平鲁区\",\"山阴县\",\"右玉县\",\"应县\",\"怀仁县\"],\"晋中市\":[\"榆次区\",\"介休市\",\"昔阳县\",\"灵石县\",\"祁县\",\"左权县\",\"寿阳县\",\"太谷县\",\"和顺县\",\"平遥县\",\"榆社县\"],\"运城市\":[\"盐湖区\",\"河津市\",\"永济市\",\"闻喜县\",\"新绛县\",\"平陆县\",\"垣曲县\",\"绛县\",\"稷山县\",\"芮城县\",\"夏县\",\"万荣县\",\"临猗县\"],\"忻州市\":[\"忻府区\",\"原平市\",\"代县\",\"神池县\",\"五寨县\",\"五台县\",\"偏关县\",\"宁武县\",\"静乐县\",\"繁峙县\",\"河曲县\",\"保德县\",\"定襄县\",\"岢岚县\"],\"临汾市\":[\"尧都区\",\"侯马市\",\"霍州市\",\"汾西县\",\"吉县\",\"安泽县\",\"大宁县\",\"浮山县\",\"古县\",\"隰县\",\"襄汾县\",\"翼城县\",\"永和县\",\"乡宁县\",\"曲沃县\",\"洪洞县\",\"蒲县\"],\"吕梁市\":[\"离石区\",\"孝义市\",\"汾阳市\",\"文水县\",\"中阳县\",\"兴县\",\"临县\",\"方山县\",\"柳林县\",\"岚县\",\"交口县\",\"交城县\",\"石楼县\"],\"沈阳市\":[\"沈河区\",\"皇姑区\",\"和平区\",\"大东区\",\"铁西区\",\"苏家屯区\",\"东陵区\",\"沈北新区\",\"于洪区\",\"新民市\",\"法库县\",\"辽中县\",\"康平县\"],\"大连市\":[\"西岗区\",\"中山区\",\"沙河口区\",\"甘井子区\",\"旅顺口区\",\"金州区\",\"瓦房店市\",\"普兰店市\",\"庄河市\",\"长海县\"],\"鞍山市\":[\"铁东区\",\"铁西区\",\"立山区\",\"千山区\",\"海城市\",\"台安县\",\"岫岩满族自治县\"],\"抚顺市\":[\"顺城区\",\"新抚区\",\"东洲区\",\"望花区\",\"抚顺县\",\"清原满族自治县\",\"新宾满族自治县\"],\"本溪市\":[\"平山区\",\"明山区\",\"溪湖区\",\"南芬区\",\"本溪满族自治县\",\"桓仁满族自治县\"],\"丹东市\":[\"振兴区\",\"元宝区\",\"振安区\",\"东港市\",\"凤城市\",\"宽甸满族自治县\"],\"锦州市\":[\"太和区\",\"古塔区\",\"凌河区\",\"凌海市\",\"北镇市\",\"黑山县\",\"义县\"],\"营口市\":[\"站前区\",\"西市区\",\"鲅鱼圈区\",\"老边区\",\"大石桥市\",\"盖州市\"],\"阜新市\":[\"海州区\",\"新邱区\",\"太平区\",\"清河门区\",\"细河区\",\"彰武县\",\"阜新蒙古族自治县\"],\"辽阳市\":[\"白塔区\",\"文圣区\",\"宏伟区\",\"太子河区\",\"弓长岭区\",\"灯塔市\",\"辽阳县\"],\"盘锦市\":[\"双台子区\",\"兴隆台区\",\"盘山县\",\"大洼县\"],\"铁岭市\":[\"银州区\",\"清河区\",\"调兵山市\",\"开原市\",\"铁岭县\",\"昌图县\",\"西丰县\"],\"朝阳市\":[\"双塔区\",\"龙城区\",\"凌源市\",\"北票市\",\"朝阳县\",\"建平县\",\"喀喇沁左翼蒙古族自治县\"],\"葫芦岛市\":[\"龙港区\",\"南票区\",\"连山区\",\"兴城市\",\"绥中县\",\"建昌县\"],\"长春市\":[\"朝阳区\",\"宽城区\",\"二道区\",\"南关区\",\"绿园区\",\"双阳区\",\"九台市\",\"榆树市\",\"德惠市\",\"农安县\"],\"吉林市\":[\"船营区\",\"昌邑区\",\"龙潭区\",\"丰满区\",\"舒兰市\",\"桦甸市\",\"蛟河市\",\"磐石市\",\"永吉县\"],\"四平市\":[\"铁西区\",\"铁东区\",\"公主岭市\",\"双辽市\",\"梨树县\",\"伊通满族自治县\"],\"辽源市\":[\"龙山区\",\"西安区\",\"东辽县\",\"东丰县\"],\"通化市\":[\"东昌区\",\"二道江区\",\"梅河口市\",\"集安市\",\"通化县\",\"辉南县\",\"柳河县\"],\"白山市\":[\"八道江区\",\"江源区\",\"临江市\",\"靖宇县\",\"抚松县\",\"长白朝鲜族自治县\"],\"松原市\":[\"宁江区\",\"乾安县\",\"长岭县\",\"扶余县\",\"前郭尔罗斯蒙古族自治县\"],\"白城市\":[\"洮北区\",\"大安市\",\"洮南市\",\"镇赉县\",\"通榆县\"],\"延边朝鲜族自治州\":[\"延吉市\",\"图们市\",\"敦化市\",\"龙井市\",\"珲春市\",\"和龙市\",\"安图县\",\"汪清县\"],\"哈尔滨市\":[\"松北区\",\"道里区\",\"南岗区\",\"平房区\",\"香坊区\",\"道外区\",\"呼兰区\",\"阿城区\",\"双城市\",\"尚志市\",\"五常市\",\"宾县\",\"方正县\",\"通河县\",\"巴彦县\",\"延寿县\",\"木兰县\",\"依兰县\"],\"齐齐哈尔市\":[\"龙沙区\",\"昂昂溪区\",\"铁锋区\",\"建华区\",\"富拉尔基区\",\"碾子山区\",\"梅里斯达斡尔族区\",\"讷河市\",\"富裕县\",\"拜泉县\",\"甘南县\",\"依安县\",\"克山县\",\"泰来县\",\"克东县\",\"龙江县\"],\"鹤岗市\":[\"兴山区\",\"工农区\",\"南山区\",\"兴安区\",\"向阳区\",\"东山区\",\"萝北县\",\"绥滨县\"],\"双鸭山市\":[\"尖山区\",\"岭东区\",\"四方台区\",\"宝山区\",\"集贤县\",\"宝清县\",\"友谊县\",\"饶河县\"],\"鸡西市\":[\"鸡冠区\",\"恒山区\",\"城子河区\",\"滴道区\",\"梨树区\",\"麻山区\",\"密山市\",\"虎林市\",\"鸡东县\"],\"大庆市\":[\"萨尔图区\",\"红岗区\",\"龙凤区\",\"让胡路区\",\"大同区\",\"林甸县\",\"肇州县\",\"肇源县\",\"杜尔伯特蒙古族自治县\"],\"伊春市\":[\"伊春区\",\"带岭区\",\"南岔区\",\"金山屯区\",\"西林区\",\"美溪区\",\"乌马河区\",\"翠峦区\",\"友好区\",\"上甘岭区\",\"五营区\",\"红星区\",\"新青区\",\"汤旺河区\",\"乌伊岭区\",\"铁力市\",\"嘉荫县\"],\"牡丹江市\":[\"爱民区\",\"东安区\",\"阳明区\",\"西安区\",\"绥芬河市\",\"宁安市\",\"海林市\",\"穆棱市\",\"林口县\",\"东宁县\"],\"佳木斯市\":[\"前进区\",\"向阳区\",\"东风区\",\"郊区\",\"同江市\",\"富锦市\",\"桦川县\",\"抚远县\",\"桦南县\",\"汤原县\"],\"七台河市\":[\"桃山区\",\"新兴区\",\"茄子河区\",\"勃利县\"],\"黑河市\":[\"爱辉区\",\"北安市\",\"五大连池市\",\"逊克县\",\"嫩江县\",\"孙吴县\"],\"绥化市\":[\"北林区\",\"安达市\",\"肇东市\",\"海伦市\",\"绥棱县\",\"兰西县\",\"明水县\",\"青冈县\",\"庆安县\",\"望奎县\"],\"大兴安岭地区\":[\"呼玛县\",\"塔河县\",\"漠河县\"],\"南京市\":[\"玄武区\",\"白下区\",\"秦淮区\",\"建邺区\",\"鼓楼区\",\"下关区\",\"栖霞区\",\"雨花台区\",\"浦口区\",\"江宁区\",\"六合区\",\"溧水县\",\"高淳县\"],\"苏州市\":[\"金阊区\",\"平江区\",\"沧浪区\",\"吴中区\",\"相城区\",\"虎丘区\",\"张家港市\",\"常熟市\",\"太仓市\",\"昆山市\",\"吴江市\"],\"无锡市\":[\"崇安区\",\"南长区\",\"北塘区\",\"滨湖区\",\"锡山区\",\"惠山区\",\"江阴市\",\"宜兴市\"],\"常州市\":[\"钟楼区\",\"天宁区\",\"戚墅堰区\",\"新北区\",\"武进区\",\"金坛市\",\"溧阳市\"],\"镇江市\":[\"京口区\",\"润州区\",\"丹徒区\",\"丹阳市\",\"扬中市\",\"句容市\"],\"南通市\":[\"崇川区\",\"港闸区\",\"通州区\",\"如皋市\",\"海门市\",\"启东市\",\"海安县\",\"如东县\"],\"泰州市\":[\"海陵区\",\"高港区\",\"姜堰市\",\"泰兴市\",\"靖江市\",\"兴化市\"],\"扬州市\":[\"广陵区\",\"维扬区\",\"邗江区\",\"江都市\",\"仪征市\",\"高邮市\",\"宝应县\"],\"盐城市\":[\"亭湖区\",\"盐都区\",\"大丰市\",\"东台市\",\"建湖县\",\"射阳县\",\"阜宁县\",\"滨海县\",\"响水县\"],\"连云港市\":[\"新浦区\",\"海州区\",\"连云区\",\"东海县\",\"灌云县\",\"赣榆县\",\"灌南县\"],\"徐州市\":[\"云龙区\",\"鼓楼区\",\"九里区\",\"泉山区\",\"贾汪区\",\"邳州市\",\"新沂市\",\"铜山县\",\"睢宁县\",\"沛县\",\"丰县\"],\"淮安市\":[\"清河区\",\"清浦区\",\"楚州区\",\"淮阴区\",\"涟水县\",\"洪泽县\",\"金湖县\",\"盱眙县\"],\"宿迁市\":[\"宿城区\",\"宿豫区\",\"沭阳县\",\"泗阳县\",\"泗洪县\"],\"杭州市\":[\"拱墅区\",\"西湖区\",\"上城区\",\"下城区\",\"江干区\",\"滨江区\",\"余杭区\",\"萧山区\",\"建德市\",\"富阳市\",\"临安市\",\"桐庐县\",\"淳安县\"],\"宁波市\":[\"海曙区\",\"江东区\",\"江北区\",\"镇海区\",\"北仑区\",\"鄞州区\",\"余姚市\",\"慈溪市\",\"奉化市\",\"宁海县\",\"象山县\"],\"温州市\":[\"鹿城区\",\"龙湾区\",\"瓯海区\",\"瑞安市\",\"乐清市\",\"永嘉县\",\"洞头县\",\"平阳县\",\"苍南县\",\"文成县\",\"泰顺县\"],\"嘉兴市\":[\"南湖区\",\"秀洲区\",\"海宁市\",\"平湖市\",\"桐乡市\",\"嘉善县\",\"海盐县\"],\"湖州市\":[\"吴兴区\",\"南浔区\",\"长兴县\",\"德清县\",\"安吉县\"],\"绍兴市\":[\"越城区\",\"诸暨市\",\"上虞市\",\"嵊州市\",\"绍兴县\",\"新昌县\"],\"金华市\":[\"婺城区\",\"金东区\",\"兰溪市\",\"义乌市\",\"东阳市\",\"永康市\",\"武义县\",\"浦江县\",\"磐安县\"],\"衢州市\":[\"柯城区\",\"衢江区\",\"江山市\",\"龙游县\",\"常山县\",\"开化县\"],\"舟山市\":[\"定海区\",\"普陀区\",\"岱山县\",\"嵊泗县\"],\"台州市\":[\"椒江区\",\"黄岩区\",\"路桥区\",\"临海市\",\"温岭市\",\"玉环县\",\"天台县\",\"仙居县\",\"三门县\"],\"丽水市\":[\"莲都区\",\"龙泉市\",\"缙云县\",\"青田县\",\"云和县\",\"遂昌县\",\"松阳县\",\"庆元县\",\"景宁畲族自治县\"],\"合肥市\":[\"蜀山区\",\"庐阳区\",\"瑶海区\",\"包河区\",\"长丰县\",\"肥东县\",\"肥西县\"],\"芜湖市\":[\"镜湖区\",\"弋江区\",\"鸠江区\",\"三山区\",\"芜湖县\",\"南陵县\",\"繁昌县\"],\"蚌埠市\":[\"蚌山区\",\"龙子湖区\",\"禹会区\",\"淮上区\",\"怀远县\",\"固镇县\",\"五河县\"],\"淮南市\":[\"田家庵区\",\"大通区\",\"谢家集区\",\"八公山区\",\"潘集区\",\"凤台县\"],\"马鞍山市\":[\"雨山区\",\"花山区\",\"金家庄区\",\"当涂县\"],\"淮北市\":[\"相山区\",\"杜集区\",\"烈山区\",\"濉溪县\"],\"铜陵市\":[\"铜官山区\",\"狮子山区\",\"郊区\",\"铜陵县\"],\"安庆市\":[\"迎江区\",\"大观区\",\"宜秀区\",\"桐城市\",\"宿松县\",\"枞阳县\",\"太湖县\",\"怀宁县\",\"岳西县\",\"望江县\",\"潜山县\"],\"黄山市\":[\"屯溪区\",\"黄山区\",\"徽州区\",\"休宁县\",\"歙县\",\"祁门县\",\"黟县\"],\"滁州市\":[\"琅琊区\",\"南谯区\",\"天长市\",\"明光市\",\"全椒县\",\"来安县\",\"定远县\",\"凤阳县\"],\"阜阳市\":[\"颍州区\",\"颍东区\",\"颍泉区\",\"界首市\",\"临泉县\",\"颍上县\",\"阜南县\",\"太和县\"],\"宿州市\":[\"埇桥区\",\"萧县\",\"泗县\",\"砀山县\",\"灵璧县\"],\"巢湖市\":[\"居巢区\",\"含山县\",\"无为县\",\"庐江县\",\"和县\"],\"六安市\":[\"金安区\",\"裕安区\",\"寿县\",\"霍山县\",\"霍邱县\",\"舒城县\",\"金寨县\"],\"亳州市\":[\"谯城区\",\"利辛县\",\"涡阳县\",\"蒙城县\"],\"池州市\":[\"贵池区\",\"东至县\",\"石台县\",\"青阳县\"],\"宣城市\":[\"宣州区\",\"宁国市\",\"广德县\",\"郎溪县\",\"泾县\",\"旌德县\",\"绩溪县\"],\"福州市\":[\"鼓楼区\",\"台江区\",\"仓山区\",\"马尾区\",\"晋安区\",\"福清市\",\"长乐市\",\"闽侯县\",\"闽清县\",\"永泰县\",\"连江县\",\"罗源县\",\"平潭县\"],\"厦门市\":[\"思明区\",\"海沧区\",\"湖里区\",\"集美区\",\"同安区\",\"翔安区\"],\"莆田市\":[\"城厢区\",\"涵江区\",\"荔城区\",\"秀屿区\",\"仙游县\"],\"三明市\":[\"梅列区\",\"三元区\",\"永安市\",\"明溪县\",\"将乐县\",\"大田县\",\"宁化县\",\"建宁县\",\"沙县\",\"尤溪县\",\"清流县\",\"泰宁县\"],\"泉州市\":[\"鲤城区\",\"丰泽区\",\"洛江区\",\"泉港区\",\"石狮市\",\"晋江市\",\"南安市\",\"惠安县\",\"永春县\",\"安溪县\",\"德化县\",\"金门县\"],\"漳州市\":[\"芗城区\",\"龙文区\",\"龙海市\",\"平和县\",\"南靖县\",\"诏安县\",\"漳浦县\",\"华安县\",\"东山县\",\"长泰县\",\"云霄县\"],\"南平市\":[\"延平区\",\"建瓯市\",\"邵武市\",\"武夷山市\",\"建阳市\",\"松溪县\",\"光泽县\",\"顺昌县\",\"浦城县\",\"政和县\"],\"龙岩市\":[\"新罗区\",\"漳平市\",\"长汀县\",\"武平县\",\"上杭县\",\"永定县\",\"连城县\"],\"宁德市\":[\"蕉城区\",\"福安市\",\"福鼎市\",\"寿宁县\",\"霞浦县\",\"柘荣县\",\"屏南县\",\"古田县\",\"周宁县\"],\"南昌市\":[\"东湖区\",\"西湖区\",\"青云谱区\",\"湾里区\",\"青山湖区\",\"新建县\",\"南昌县\",\"进贤县\",\"安义县\"],\"景德镇市\":[\"珠山区\",\"昌江区\",\"乐平市\",\"浮梁县\"],\"萍乡市\":[\"安源区\",\"湘东区\",\"莲花县\",\"上栗县\",\"芦溪县\"],\"九江市\":[\"浔阳区\",\"庐山区\",\"瑞昌市\",\"九江县\",\"星子县\",\"武宁县\",\"彭泽县\",\"永修县\",\"修水县\",\"湖口县\",\"德安县\",\"都昌县\"],\"新余市\":[\"渝水区\",\"分宜县\"],\"鹰潭市\":[\"月湖区\",\"贵溪市\",\"余江县\"],\"赣州市\":[\"章贡区\",\"瑞金市\",\"南康市\",\"石城县\",\"安远县\",\"赣县\",\"宁都县\",\"寻乌县\",\"兴国县\",\"定南县\",\"上犹县\",\"于都县\",\"龙南县\",\"崇义县\",\"信丰县\",\"全南县\",\"大余县\",\"会昌县\"],\"吉安市\":[\"吉州区\",\"青原区\",\"井冈山市\",\"吉安县\",\"永丰县\",\"永新县\",\"新干县\",\"泰和县\",\"峡江县\",\"遂川县\",\"安福县\",\"吉水县\",\"万安县\"],\"宜春市\":[\"袁州区\",\"丰城市\",\"樟树市\",\"高安市\",\"铜鼓县\",\"靖安县\",\"宜丰县\",\"奉新县\",\"万载县\",\"上高县\"],\"抚州市\":[\"临川区\",\"南丰县\",\"乐安县\",\"金溪县\",\"南城县\",\"东乡县\",\"资溪县\",\"宜黄县\",\"广昌县\",\"黎川县\",\"崇仁县\"],\"上饶市\":[\"信州区\",\"德兴市\",\"上饶县\",\"广丰县\",\"鄱阳县\",\"婺源县\",\"铅山县\",\"余干县\",\"横峰县\",\"弋阳县\",\"玉山县\",\"万年县\"],\"济南市\":[\"市中区\",\"历下区\",\"天桥区\",\"槐荫区\",\"历城区\",\"长清区\",\"章丘市\",\"平阴县\",\"济阳县\",\"商河县\"],\"青岛市\":[\"市南区\",\"市北区\",\"四方区\",\"李沧区\",\"崂山区\",\"城阳区\",\"黄岛区\",\"即墨市\",\"胶州市\",\"胶南市\",\"平度市\",\"莱西市\"],\"淄博市\":[\"张店区\",\"临淄区\",\"淄川区\",\"博山区\",\"周村区\",\"桓台县\",\"高青县\",\"沂源县\"],\"枣庄市\":[\"市中区\",\"山亭区\",\"峄城区\",\"台儿庄区\",\"薛城区\",\"滕州市\"],\"东营市\":[\"东营区\",\"河口区\",\"垦利县\",\"广饶县\",\"利津县\"],\"烟台市\":[\"芝罘区\",\"福山区\",\"牟平区\",\"莱山区\",\"龙口市\",\"莱阳市\",\"莱州市\",\"招远市\",\"蓬莱市\",\"栖霞市\",\"海阳市\",\"长岛县\"],\"潍坊市\":[\"潍城区\",\"寒亭区\",\"坊子区\",\"奎文区\",\"青州市\",\"诸城市\",\"寿光市\",\"安丘市\",\"高密市\",\"昌邑市\",\"昌乐县\",\"临朐县\"],\"济宁市\":[\"市中区\",\"任城区\",\"曲阜市\",\"兖州市\",\"邹城市\",\"鱼台县\",\"金乡县\",\"嘉祥县\",\"微山县\",\"汶上县\",\"泗水县\",\"梁山县\"],\"泰安市\":[\"泰山区\",\"岱岳区\",\"新泰市\",\"肥城市\",\"宁阳县\",\"东平县\"],\"威海市\":[\"环翠区\",\"乳山市\",\"文登市\",\"荣成市\"],\"日照市\":[\"东港区\",\"岚山区\",\"五莲县\",\"莒县\"],\"莱芜市\":[\"莱城区\",\"钢城区\"],\"临沂市\":[\"兰山区\",\"罗庄区\",\"河东区\",\"沂南县\",\"郯城县\",\"沂水县\",\"苍山县\",\"费县\",\"平邑县\",\"莒南县\",\"蒙阴县\",\"临沭县\"],\"德州市\":[\"德城区\",\"乐陵市\",\"禹城市\",\"陵县\",\"宁津县\",\"齐河县\",\"武城县\",\"庆云县\",\"平原县\",\"夏津县\",\"临邑县\"],\"聊城市\":[\"东昌府区\",\"临清市\",\"高唐县\",\"阳谷县\",\"茌平县\",\"莘县\",\"东阿县\",\"冠县\"],\"滨州市\":[\"滨城区\",\"邹平县\",\"沾化县\",\"惠民县\",\"博兴县\",\"阳信县\",\"无棣县\"],\"菏泽市\":[\"牡丹区\",\"鄄城县\",\"单县\",\"郓城县\",\"曹县\",\"定陶县\",\"巨野县\",\"东明县\",\"成武县\"],\"郑州市\":[\"中原区\",\"金水区\",\"二七区\",\"管城回族区\",\"上街区\",\"惠济区\",\"巩义市\",\"新郑市\",\"新密市\",\"登封市\",\"荥阳市\",\"中牟县\"],\"开封市\":[\"鼓楼区\",\"龙亭区\",\"顺河回族区\",\"禹王台区\",\"金明区\",\"开封县\",\"尉氏县\",\"兰考县\",\"杞县\",\"通许县\"],\"洛阳市\":[\"西工区\",\"老城区\",\"涧西区\",\"瀍河回族区\",\"洛龙区\",\"吉利区\",\"偃师市\",\"孟津县\",\"汝阳县\",\"伊川县\",\"洛宁县\",\"嵩县\",\"宜阳县\",\"新安县\",\"栾川县\"],\"平顶山市\":[\"新华区\",\"卫东区\",\"湛河区\",\"石龙区\",\"汝州市\",\"舞钢市\",\"宝丰县\",\"叶县\",\"郏县\",\"鲁山县\"],\"安阳市\":[\"北关区\",\"文峰区\",\"殷都区\",\"龙安区\",\"林州市\",\"安阳县\",\"滑县\",\"内黄县\",\"汤阴县\"],\"鹤壁市\":[\"淇滨区\",\"山城区\",\"鹤山区\",\"浚县\",\"淇县\"],\"新乡市\":[\"卫滨区\",\"红旗区\",\"凤泉区\",\"牧野区\",\"卫辉市\",\"辉县市\",\"新乡县\",\"获嘉县\",\"原阳县\",\"长垣县\",\"封丘县\",\"延津县\"],\"焦作市\":[\"解放区\",\"中站区\",\"马村区\",\"山阳区\",\"沁阳市\",\"孟州市\",\"修武县\",\"温县\",\"武陟县\",\"博爱县\"],\"濮阳市\":[\"华龙区\",\"濮阳县\",\"南乐县\",\"台前县\",\"清丰县\",\"范县\"],\"许昌市\":[\"魏都区\",\"禹州市\",\"长葛市\",\"许昌县\",\"鄢陵县\",\"襄城县\"],\"漯河市\":[\"源汇区\",\"郾城区\",\"召陵区\",\"临颍县\",\"舞阳县\"],\"三门峡市\":[\"湖滨区\",\"义马市\",\"灵宝市\",\"渑池县\",\"卢氏县\",\"陕县\"],\"南阳市\":[\"卧龙区\",\"宛城区\",\"邓州市\",\"桐柏县\",\"方城县\",\"淅川县\",\"镇平县\",\"唐河县\",\"南召县\",\"内乡县\",\"新野县\",\"社旗县\",\"西峡县\"],\"商丘市\":[\"梁园区\",\"睢阳区\",\"永城市\",\"宁陵县\",\"虞城县\",\"民权县\",\"夏邑县\",\"柘城县\",\"睢县\"],\"信阳市\":[\"浉河区\",\"平桥区\",\"潢川县\",\"淮滨县\",\"息县\",\"新县\",\"商城县\",\"固始县\",\"罗山县\",\"光山县\"],\"周口市\":[\"川汇区\",\"项城市\",\"商水县\",\"淮阳县\",\"太康县\",\"鹿邑县\",\"西华县\",\"扶沟县\",\"沈丘县\",\"郸城县\"],\"驻马店市\":[\"驿城区\",\"确山县\",\"新蔡县\",\"上蔡县\",\"西平县\",\"泌阳县\",\"平舆县\",\"汝南县\",\"遂平县\",\"正阳县\"],\"济源市\":[],\"武汉市\":[\"江岸区\",\"武昌区\",\"江汉区\",\"硚口区\",\"汉阳区\",\"青山区\",\"洪山区\",\"东西湖区\",\"汉南区\",\"蔡甸区\",\"江夏区\",\"黄陂区\",\"新洲区\"],\"黄石市\":[\"黄石港区\",\"西塞山区\",\"下陆区\",\"铁山区\",\"大冶市\",\"阳新县\"],\"十堰市\":[\"张湾区\",\"茅箭区\",\"丹江口市\",\"郧县\",\"竹山县\",\"房县\",\"郧西县\",\"竹溪县\"],\"荆州市\":[\"沙市区\",\"荆州区\",\"洪湖市\",\"石首市\",\"松滋市\",\"监利县\",\"公安县\",\"江陵县\"],\"宜昌市\":[\"西陵区\",\"伍家岗区\",\"点军区\",\"猇亭区\",\"夷陵区\",\"宜都市\",\"当阳市\",\"枝江市\",\"秭归县\",\"远安县\",\"兴山县\",\"五峰土家族自治县\",\"长阳土家族自治县\"],\"襄樊市\":[\"襄城区\",\"樊城区\",\"襄阳区\",\"老河口市\",\"枣阳市\",\"宜城市\",\"南漳县\",\"谷城县\",\"保康县\"],\"鄂州市\":[\"鄂城区\",\"华容区\",\"梁子湖区\"],\"荆门市\":[\"东宝区\",\"掇刀区\",\"钟祥市\",\"京山县\",\"沙洋县\"],\"孝感市\":[\"孝南区\",\"应城市\",\"安陆市\",\"汉川市\",\"云梦县\",\"大悟县\",\"孝昌县\"],\"黄冈市\":[\"黄州区\",\"麻城市\",\"武穴市\",\"红安县\",\"罗田县\",\"浠水县\",\"蕲春县\",\"黄梅县\",\"英山县\",\"团风县\"],\"咸宁市\":[\"咸安区\",\"赤壁市\",\"嘉鱼县\",\"通山县\",\"崇阳县\",\"通城县\"],\"随州市\":[\"曾都区\",\"广水市\",\"随县\"],\"恩施土家族苗族自治州\":[\"恩施市\",\"利川市\",\"建始县\",\"来凤县\",\"巴东县\",\"鹤峰县\",\"宣恩县\",\"咸丰县\"],\"仙桃市\":[],\"天门市\":[],\"潜江市\":[],\"神农架林区\":[],\"长沙市\":[\"岳麓区\",\"芙蓉区\",\"天心区\",\"开福区\",\"雨花区\",\"浏阳市\",\"长沙县\",\"望城县\",\"宁乡县\"],\"株洲市\":[\"天元区\",\"荷塘区\",\"芦淞区\",\"石峰区\",\"醴陵市\",\"株洲县\",\"炎陵县\",\"茶陵县\",\"攸县\"],\"湘潭市\":[\"岳塘区\",\"雨湖区\",\"湘乡市\",\"韶山市\",\"湘潭县\"],\"衡阳市\":[\"雁峰区\",\"珠晖区\",\"石鼓区\",\"蒸湘区\",\"南岳区\",\"耒阳市\",\"常宁市\",\"衡阳县\",\"衡东县\",\"衡山县\",\"衡南县\",\"祁东县\"],\"邵阳市\":[\"双清区\",\"大祥区\",\"北塔区\",\"武冈市\",\"邵东县\",\"洞口县\",\"新邵县\",\"绥宁县\",\"新宁县\",\"邵阳县\",\"隆回县\",\"城步苗族自治县\"],\"岳阳市\":[\"岳阳楼区\",\"云溪区\",\"君山区\",\"临湘市\",\"汨罗市\",\"岳阳县\",\"湘阴县\",\"平江县\",\"华容县\"],\"常德市\":[\"武陵区\",\"鼎城区\",\"津市市\",\"澧县\",\"临澧县\",\"桃源县\",\"汉寿县\",\"安乡县\",\"石门县\"],\"张家界市\":[\"永定区\",\"武陵源区\",\"慈利县\",\"桑植县\"],\"益阳市\":[\"赫山区\",\"资阳区\",\"沅江市\",\"桃江县\",\"南县\",\"安化县\"],\"郴州市\":[\"北湖区\",\"苏仙区\",\"资兴市\",\"宜章县\",\"汝城县\",\"安仁县\",\"嘉禾县\",\"临武县\",\"桂东县\",\"永兴县\",\"桂阳县\"],\"永州市\":[\"冷水滩区\",\"零陵区\",\"祁阳县\",\"蓝山县\",\"宁远县\",\"新田县\",\"东安县\",\"江永县\",\"道县\",\"双牌县\",\"江华瑶族自治县\"],\"怀化市\":[\"鹤城区\",\"洪江市\",\"会同县\",\"沅陵县\",\"辰溪县\",\"溆浦县\",\"中方县\",\"新晃侗族自治县\",\"芷江侗族自治县\",\"通道侗族自治县\",\"靖州苗族侗族自治县\",\"麻阳苗族自治县\",\"洪江区\"],\"娄底市\":[\"娄星区\",\"冷水江市\",\"涟源市\",\"新化县\",\"双峰县\"],\"湘西土家族苗族自治州\":[\"吉首市\",\"古丈县\",\"龙山县\",\"永顺县\",\"凤凰县\",\"泸溪县\",\"保靖县\",\"花垣县\"],\"广州市\":[\"越秀区\",\"荔湾区\",\"海珠区\",\"天河区\",\"白云区\",\"黄埔区\",\"番禺区\",\"花都区\",\"南沙区\",\"萝岗区\",\"增城市\",\"从化市\"],\"深圳市\":[\"福田区\",\"罗湖区\",\"南山区\",\"宝安区\",\"龙岗区\",\"盐田区\"],\"珠海市\":[\"香洲区\",\"斗门区\",\"金湾区\"],\"汕头市\":[\"金平区\",\"濠江区\",\"龙湖区\",\"潮阳区\",\"潮南区\",\"澄海区\",\"南澳县\"],\"韶关市\":[\"浈江区\",\"武江区\",\"曲江区\",\"乐昌市\",\"南雄市\",\"始兴县\",\"仁化县\",\"翁源县\",\"新丰县\",\"乳源瑶族自治县\"],\"佛山市\":[\"禅城区\",\"南海区\",\"顺德区\",\"三水区\",\"高明区\"],\"江门市\":[\"蓬江区\",\"江海区\",\"新会区\",\"恩平市\",\"台山市\",\"开平市\",\"鹤山市\"],\"湛江市\":[\"赤坎区\",\"霞山区\",\"坡头区\",\"麻章区\",\"吴川市\",\"廉江市\",\"雷州市\",\"遂溪县\",\"徐闻县\"],\"茂名市\":[\"茂南区\",\"茂港区\",\"化州市\",\"信宜市\",\"高州市\",\"电白县\"],\"肇庆市\":[\"端州区\",\"鼎湖区\",\"高要市\",\"四会市\",\"广宁县\",\"怀集县\",\"封开县\",\"德庆县\"],\"惠州市\":[\"惠城区\",\"惠阳区\",\"博罗县\",\"惠东县\",\"龙门县\"],\"梅州市\":[\"梅江区\",\"兴宁市\",\"梅县\",\"大埔县\",\"丰顺县\",\"五华县\",\"平远县\",\"蕉岭县\"],\"汕尾市\":[\"城区\",\"陆丰市\",\"海丰县\",\"陆河县\"],\"河源市\":[\"源城区\",\"紫金县\",\"龙川县\",\"连平县\",\"和平县\",\"东源县\"],\"阳江市\":[\"江城区\",\"阳春市\",\"阳西县\",\"阳东县\"],\"清远市\":[\"清城区\",\"英德市\",\"连州市\",\"佛冈县\",\"阳山县\",\"清新县\",\"连山壮族瑶族自治县\",\"连南瑶族自治县\"],\"东莞市\":[],\"中山市\":[],\"潮州市\":[\"湘桥区\",\"潮安县\",\"饶平县\"],\"揭阳市\":[\"榕城区\",\"普宁市\",\"揭东县\",\"揭西县\",\"惠来县\"],\"云浮市\":[\"云城区\",\"罗定市\",\"云安县\",\"新兴县\",\"郁南县\"],\"海口市\":[\"龙华区\",\"秀英区\",\"琼山区\",\"美兰区\"],\"三亚市\":[],\"五指山市\":[],\"琼海市\":[],\"儋州市\":[],\"文昌市\":[],\"万宁市\":[],\"东方市\":[],\"澄迈县\":[],\"定安县\":[],\"屯昌县\":[],\"临高县\":[],\"白沙黎族自治县\":[],\"昌江黎族自治县\":[],\"乐东黎族自治县\":[],\"陵水黎族自治县\":[],\"保亭黎族苗族自治县\":[],\"琼中黎族苗族自治县\":[],\"成都市\":[\"青羊区\",\"锦江区\",\"金牛区\",\"武侯区\",\"成华区\",\"龙泉驿区\",\"青白江区\",\"新都区\",\"温江区\",\"都江堰市\",\"彭州市\",\"邛崃市\",\"崇州市\",\"金堂县\",\"郫县\",\"新津县\",\"双流县\",\"蒲江县\",\"大邑县\"],\"自贡市\":[\"大安区\",\"自流井区\",\"贡井区\",\"沿滩区\",\"荣县\",\"富顺县\"],\"攀枝花市\":[\"东区\",\"西区\",\"仁和区\",\"米易县\",\"盐边县\"],\"泸州市\":[\"江阳区\",\"纳溪区\",\"龙马潭区\",\"泸县\",\"合江县\",\"叙永县\",\"古蔺县\"],\"德阳市\":[\"旌阳区\",\"广汉市\",\"什邡市\",\"绵竹市\",\"罗江县\",\"中江县\"],\"绵阳市\":[\"涪城区\",\"游仙区\",\"江油市\",\"盐亭县\",\"三台县\",\"平武县\",\"安县\",\"梓潼县\",\"北川羌族自治县\"],\"广元市\":[\"利州区\",\"元坝区\",\"朝天区\",\"青川县\",\"旺苍县\",\"剑阁县\",\"苍溪县\"],\"遂宁市\":[\"船山区\",\"安居区\",\"射洪县\",\"蓬溪县\",\"大英县\"],\"内江市\":[\"市中区\",\"东兴区\",\"资中县\",\"隆昌县\",\"威远县\"],\"乐山市\":[\"市中区\",\"五通桥区\",\"沙湾区\",\"金口河区\",\"峨眉山市\",\"夹江县\",\"井研县\",\"犍为县\",\"沐川县\",\"马边彝族自治县\",\"峨边彝族自治县\"],\"南充市\":[\"顺庆区\",\"高坪区\",\"嘉陵区\",\"阆中市\",\"营山县\",\"蓬安县\",\"仪陇县\",\"南部县\",\"西充县\"],\"眉山市\":[\"东坡区\",\"仁寿县\",\"彭山县\",\"洪雅县\",\"丹棱县\",\"青神县\"],\"宜宾市\":[\"翠屏区\",\"宜宾县\",\"兴文县\",\"南溪县\",\"珙县\",\"长宁县\",\"高县\",\"江安县\",\"筠连县\",\"屏山县\"],\"广安市\":[\"广安区\",\"华蓥市\",\"岳池县\",\"邻水县\",\"武胜县\"],\"达州市\":[\"通川区\",\"万源市\",\"达县\",\"渠县\",\"宣汉县\",\"开江县\",\"大竹县\"],\"雅安市\":[\"雨城区\",\"芦山县\",\"石棉县\",\"名山县\",\"天全县\",\"荥经县\",\"宝兴县\",\"汉源县\"],\"巴中市\":[\"巴州区\",\"南江县\",\"平昌县\",\"通江县\"],\"资阳市\":[\"雁江区\",\"简阳市\",\"安岳县\",\"乐至县\"],\"阿坝藏族羌族自治州\":[\"马尔康县\",\"九寨沟县\",\"红原县\",\"汶川县\",\"阿坝县\",\"理县\",\"若尔盖县\",\"小金县\",\"黑水县\",\"金川县\",\"松潘县\",\"壤塘县\",\"茂县\"],\"甘孜藏族自治州\":[\"康定县\",\"丹巴县\",\"炉霍县\",\"九龙县\",\"甘孜县\",\"雅江县\",\"新龙县\",\"道孚县\",\"白玉县\",\"理塘县\",\"德格县\",\"乡城县\",\"石渠县\",\"稻城县\",\"色达县\",\"巴塘县\",\"泸定县\",\"得荣县\"],\"凉山彝族自治州\":[\"西昌市\",\"美姑县\",\"昭觉县\",\"金阳县\",\"甘洛县\",\"布拖县\",\"雷波县\",\"普格县\",\"宁南县\",\"喜德县\",\"会东县\",\"越西县\",\"会理县\",\"盐源县\",\"德昌县\",\"冕宁县\",\"木里藏族自治县\"],\"贵阳市\":[\"乌当区\",\"南明区\",\"云岩区\",\"花溪区\",\"白云区\",\"小河区\",\"清镇市\",\"开阳县\",\"息烽县\",\"修文县\"],\"六盘水市\":[\"钟山区\",\"六枝特区\",\"盘县\",\"水城县\"],\"遵义市\":[\"红花岗区\",\"汇川区\",\"赤水市\",\"仁怀市\",\"遵义县\",\"绥阳县\",\"桐梓县\",\"习水县\",\"凤冈县\",\"正安县\",\"余庆县\",\"湄潭县\",\"道真仡佬族苗族自治县\",\"务川仡佬族苗族自治县\"],\"安顺市\":[\"西秀区\",\"普定县\",\"平坝县\",\"镇宁布依族苗族自治县\",\"紫云苗族布依族自治县\",\"关岭布依族苗族自治县\"],\"铜仁地区\":[\"铜仁市\",\"德江县\",\"江口县\",\"思南县\",\"石阡县\",\"玉屏侗族自治县\",\"松桃苗族自治县\",\"印江土家族苗族自治县\",\"沿河土家族自治县\",\"万山特区\"],\"毕节地区\":[\"毕节市\",\"黔西县\",\"大方县\",\"织金县\",\"金沙县\",\"赫章县\",\"纳雍县\",\"威宁彝族回族苗族自治县\"],\"黔西南布依族苗族自治州\":[\"兴义市\",\"望谟县\",\"兴仁县\",\"普安县\",\"册亨县\",\"晴隆县\",\"贞丰县\",\"安龙县\"],\"黔东南苗族侗族自治州\":[\"凯里市\",\"施秉县\",\"从江县\",\"锦屏县\",\"镇远县\",\"麻江县\",\"台江县\",\"天柱县\",\"黄平县\",\"榕江县\",\"剑河县\",\"三穗县\",\"雷山县\",\"黎平县\",\"岑巩县\",\"丹寨县\"],\"黔南布依族苗族自治州\":[\"都匀市\",\"福泉市\",\"贵定县\",\"惠水县\",\"罗甸县\",\"瓮安县\",\"荔波县\",\"龙里县\",\"平塘县\",\"长顺县\",\"独山县\",\"三都水族自治县\"],\"昆明市\":[\"盘龙区\",\"五华区\",\"官渡区\",\"西山区\",\"东川区\",\"安宁市\",\"呈贡县\",\"晋宁县\",\"富民县\",\"宜良县\",\"嵩明县\",\"石林彝族自治县\",\"禄劝彝族苗族自治县\",\"寻甸回族彝族自治县\"],\"曲靖市\":[\"麒麟区\",\"宣威市\",\"马龙县\",\"沾益县\",\"富源县\",\"罗平县\",\"师宗县\",\"陆良县\",\"会泽县\"],\"玉溪市\":[\"红塔区\",\"江川县\",\"澂江县\",\"通海县\",\"华宁县\",\"易门县\",\"峨山彝族自治县\",\"新平彝族傣族自治县\",\"元江哈尼族彝族傣族自治县\"],\"保山市\":[\"隆阳区\",\"施甸县\",\"腾冲县\",\"龙陵县\",\"昌宁县\"],\"昭通市\":[\"昭阳区\",\"鲁甸县\",\"巧家县\",\"盐津县\",\"大关县\",\"永善县\",\"绥江县\",\"镇雄县\",\"彝良县\",\"威信县\",\"水富县\"],\"丽江市\":[\"古城区\",\"永胜县\",\"华坪县\",\"玉龙纳西族自治县\",\"宁蒗彝族自治县\"],\"普洱市\":[\"思茅区\",\"宁洱哈尼族彝族自治县\",\"墨江哈尼族自治县\",\"景东彝族自治县\",\"景谷傣族彝族自治县\",\"镇沅彝族哈尼族拉祜族自治县\",\"江城哈尼族彝族自治县\",\"孟连傣族拉祜族佤族自治县\",\"澜沧拉祜族自治县\",\"西盟佤族自治县\"],\"临沧市\":[\"临翔区\",\"凤庆县\",\"云县\",\"永德县\",\"镇康县\",\"双江拉祜族佤族布朗族傣族自治县\",\"耿马傣族佤族自治县\",\"沧源佤族自治县\"],\"德宏傣族景颇族自治州\":[\"潞西市\",\"瑞丽市\",\"梁河县\",\"盈江县\",\"陇川县\"],\"怒江傈僳族自治州\":[\"泸水县\",\"福贡县\",\"贡山独龙族怒族自治县\",\"兰坪白族普米族自治县\"],\"迪庆藏族自治州\":[\"香格里拉县\",\"德钦县\",\"维西傈僳族自治县\"],\"大理白族自治州\":[\"大理市\",\"祥云县\",\"宾川县\",\"弥渡县\",\"永平县\",\"云龙县\",\"洱源县\",\"剑川县\",\"鹤庆县\",\"漾濞彝族自治县\",\"南涧彝族自治县\",\"巍山彝族回族自治县\"],\"楚雄彝族自治州\":[\"楚雄市\",\"双柏县\",\"牟定县\",\"南华县\",\"姚安县\",\"大姚县\",\"永仁县\",\"元谋县\",\"武定县\",\"禄丰县\"],\"红河哈尼族彝族自治州\":[\"蒙自县\",\"个旧市\",\"开远市\",\"绿春县\",\"建水县\",\"石屏县\",\"弥勒县\",\"泸西县\",\"元阳县\",\"红河县\",\"金平苗族瑶族傣族自治县\",\"河口瑶族自治县\",\"屏边苗族自治县\"],\"文山壮族苗族自治州\":[\"文山县\",\"砚山县\",\"西畴县\",\"麻栗坡县\",\"马关县\",\"丘北县\",\"广南县\",\"富宁县\"],\"西双版纳傣族自治州\":[\"景洪市\",\"勐海县\",\"勐腊县\"],\"西安市\":[\"未央区\",\"莲湖区\",\"新城区\",\"碑林区\",\"雁塔区\",\"灞桥区\",\"阎良区\",\"临潼区\",\"长安区\",\"高陵县\",\"蓝田县\",\"户县\",\"周至县\"],\"铜川市\":[\"耀州区\",\"王益区\",\"印台区\",\"宜君县\"],\"宝鸡市\":[\"金台区\",\"渭滨区\",\"陈仓区\",\"岐山县\",\"凤翔县\",\"陇县\",\"太白县\",\"麟游县\",\"扶风县\",\"千阳县\",\"眉县\",\"凤县\"],\"咸阳市\":[\"秦都区\",\"渭城区\",\"杨陵区\",\"兴平市\",\"礼泉县\",\"泾阳县\",\"永寿县\",\"三原县\",\"彬县\",\"旬邑县\",\"长武县\",\"乾县\",\"武功县\",\"淳化县\"],\"渭南市\":[\"临渭区\",\"韩城市\",\"华阴市\",\"蒲城县\",\"潼关县\",\"白水县\",\"澄城县\",\"华县\",\"合阳县\",\"富平县\",\"大荔县\"],\"延安市\":[\"宝塔区\",\"安塞县\",\"洛川县\",\"子长县\",\"黄陵县\",\"延川县\",\"富县\",\"延长县\",\"甘泉县\",\"宜川县\",\"志丹县\",\"黄龙县\",\"吴起县\"],\"汉中市\":[\"汉台区\",\"留坝县\",\"镇巴县\",\"城固县\",\"南郑县\",\"洋县\",\"宁强县\",\"佛坪县\",\"勉县\",\"西乡县\",\"略阳县\"],\"榆林市\":[\"榆阳区\",\"清涧县\",\"绥德县\",\"神木县\",\"佳县\",\"府谷县\",\"子洲县\",\"靖边县\",\"横山县\",\"米脂县\",\"吴堡县\",\"定边县\"],\"安康市\":[\"汉滨区\",\"紫阳县\",\"岚皋县\",\"旬阳县\",\"镇坪县\",\"平利县\",\"石泉县\",\"宁陕县\",\"白河县\",\"汉阴县\"],\"商洛市\":[\"商州区\",\"镇安县\",\"山阳县\",\"洛南县\",\"商南县\",\"丹凤县\",\"柞水县\"],\"兰州市\":[\"城关区\",\"七里河区\",\"西固区\",\"安宁区\",\"红古区\",\"永登县\",\"皋兰县\",\"榆中县\"],\"嘉峪关市\":[],\"金昌市\":[\"金川区\",\"永昌县\"],\"白银市\":[\"白银区\",\"平川区\",\"靖远县\",\"会宁县\",\"景泰县\"],\"天水市\":[\"秦州区\",\"麦积区\",\"清水县\",\"秦安县\",\"甘谷县\",\"武山县\",\"张家川回族自治县\"],\"武威市\":[\"凉州区\",\"民勤县\",\"古浪县\",\"天祝藏族自治县\"],\"酒泉市\":[\"肃州区\",\"玉门市\",\"敦煌市\",\"金塔县\",\"瓜州县\",\"肃北蒙古族自治县\",\"阿克塞哈萨克族自治县\"],\"张掖市\":[\"甘州区\",\"民乐县\",\"临泽县\",\"高台县\",\"山丹县\",\"肃南裕固族自治县\"],\"庆阳市\":[\"西峰区\",\"庆城县\",\"环县\",\"华池县\",\"合水县\",\"正宁县\",\"宁县\",\"镇原县\"],\"平凉市\":[\"崆峒区\",\"泾川县\",\"灵台县\",\"崇信县\",\"华亭县\",\"庄浪县\",\"静宁县\"],\"定西市\":[\"安定区\",\"通渭县\",\"临洮县\",\"漳县\",\"岷县\",\"渭源县\",\"陇西县\"],\"陇南市\":[\"武都区\",\"成县\",\"宕昌县\",\"康县\",\"文县\",\"西和县\",\"礼县\",\"两当县\",\"徽县\"],\"临夏回族自治州\":[\"临夏市\",\"临夏县\",\"康乐县\",\"永靖县\",\"广河县\",\"和政县\",\"东乡族自治县\",\"积石山保安族东乡族撒拉族自治县\"],\"甘南藏族自治州\":[\"合作市\",\"临潭县\",\"卓尼县\",\"舟曲县\",\"迭部县\",\"玛曲县\",\"碌曲县\",\"夏河县\"],\"西宁市\":[\"城中区\",\"城东区\",\"城西区\",\"城北区\",\"湟源县\",\"湟中县\",\"大通回族土族自治县\"],\"海东地区\":[\"平安县\",\"乐都县\",\"民和回族土族自治县\",\"互助土族自治县\",\"化隆回族自治县\",\"循化撒拉族自治县\"],\"海北藏族自治州\":[\"海晏县\",\"祁连县\",\"刚察县\",\"门源回族自治县\"],\"海南藏族自治州\":[\"共和县\",\"同德县\",\"贵德县\",\"兴海县\",\"贵南县\"],\"黄南藏族自治州\":[\"同仁县\",\"尖扎县\",\"泽库县\",\"河南蒙古族自治县\"],\"果洛藏族自治州\":[\"玛沁县\",\"班玛县\",\"甘德县\",\"达日县\",\"久治县\",\"玛多县\"],\"玉树藏族自治州\":[\"玉树县\",\"杂多县\",\"称多县\",\"治多县\",\"囊谦县\",\"曲麻莱县\"],\"海西蒙古族藏族自治州\":[\"德令哈市\",\"格尔木市\",\"乌兰县\",\"都兰县\",\"天峻县\"],\"呼和浩特市\":[\"回民区\",\"玉泉区\",\"新城区\",\"赛罕区\",\"托克托县\",\"清水河县\",\"武川县\",\"和林格尔县\",\"土默特左旗\"],\"包头市\":[\"昆都仑区\",\"青山区\",\"东河区\",\"九原区\",\"石拐区\",\"白云矿区\",\"固阳县\",\"土默特右旗\",\"达尔罕茂明安联合旗\"],\"乌海市\":[\"海勃湾区\",\"乌达区\",\"海南区\"],\"赤峰市\":[\"红山区\",\"元宝山区\",\"松山区\",\"宁城县\",\"林西县\",\"喀喇沁旗\",\"巴林左旗\",\"敖汉旗\",\"阿鲁科尔沁旗\",\"翁牛特旗\",\"克什克腾旗\",\"巴林右旗\"],\"通辽市\":[\"科尔沁区\",\"霍林郭勒市\",\"开鲁县\",\"科尔沁左翼中旗\",\"科尔沁左翼后旗\",\"库伦旗\",\"奈曼旗\",\"扎鲁特旗\"],\"鄂尔多斯市\":[\"东胜区\",\"准格尔旗\",\"乌审旗\",\"伊金霍洛旗\",\"鄂托克旗\",\"鄂托克前旗\",\"杭锦旗\",\"达拉特旗\"],\"呼伦贝尔市\":[\"海拉尔区\",\"满洲里市\",\"牙克石市\",\"扎兰屯市\",\"根河市\",\"额尔古纳市\",\"陈巴尔虎旗\",\"阿荣旗\",\"新巴尔虎左旗\",\"新巴尔虎右旗\",\"鄂伦春自治旗\",\"莫力达瓦达斡尔族自治旗\",\"鄂温克族自治旗\"],\"巴彦淖尔市\":[\"临河区\",\"五原县\",\"磴口县\",\"杭锦后旗\",\"乌拉特中旗\",\"乌拉特前旗\",\"乌拉特后旗\"],\"乌兰察布市\":[\"集宁区\",\"丰镇市\",\"兴和县\",\"卓资县\",\"商都县\",\"凉城县\",\"化德县\",\"四子王旗\",\"察哈尔右翼前旗\",\"察哈尔右翼中旗\",\"察哈尔右翼后旗\"],\"锡林郭勒盟\":[\"锡林浩特市\",\"二连浩特市\",\"多伦县\",\"阿巴嘎旗\",\"西乌珠穆沁旗\",\"东乌珠穆沁旗\",\"苏尼特左旗\",\"苏尼特右旗\",\"太仆寺旗\",\"正镶白旗\",\"正蓝旗\",\"镶黄旗\"],\"兴安盟\":[\"乌兰浩特市\",\"阿尔山市\",\"突泉县\",\"扎赉特旗\",\"科尔沁右翼前旗\",\"科尔沁右翼中旗\"],\"阿拉善盟\":[\"阿拉善左旗\",\"阿拉善右旗\",\"额济纳旗\"],\"南宁市\":[\"青秀区\",\"兴宁区\",\"西乡塘区\",\"良庆区\",\"江南区\",\"邕宁区\",\"武鸣县\",\"隆安县\",\"马山县\",\"上林县\",\"宾阳县\",\"横县\"],\"柳州市\":[\"城中区\",\"鱼峰区\",\"柳北区\",\"柳南区\",\"柳江县\",\"柳城县\",\"鹿寨县\",\"融安县\",\"融水苗族自治县\",\"三江侗族自治县\"],\"桂林市\":[\"象山区\",\"秀峰区\",\"叠彩区\",\"七星区\",\"雁山区\",\"阳朔县\",\"临桂县\",\"灵川县\",\"全州县\",\"平乐县\",\"兴安县\",\"灌阳县\",\"荔浦县\",\"资源县\",\"永福县\",\"龙胜各族自治县\",\"恭城瑶族自治县\"],\"梧州市\":[\"万秀区\",\"蝶山区\",\"长洲区\",\"岑溪市\",\"苍梧县\",\"藤县\",\"蒙山县\"],\"北海市\":[\"海城区\",\"银海区\",\"铁山港区\",\"合浦县\"],\"防城港市\":[\"港口区\",\"防城区\",\"东兴市\",\"上思县\"],\"钦州市\":[\"钦南区\",\"钦北区\",\"灵山县\",\"浦北县\"],\"贵港市\":[\"港北区\",\"港南区\",\"覃塘区\",\"桂平市\",\"平南县\"],\"玉林市\":[\"玉州区\",\"北流市\",\"容县\",\"陆川县\",\"博白县\",\"兴业县\"],\"百色市\":[\"右江区\",\"凌云县\",\"平果县\",\"西林县\",\"乐业县\",\"德保县\",\"田林县\",\"田阳县\",\"靖西县\",\"田东县\",\"那坡县\",\"隆林各族自治县\"],\"贺州市\":[\"八步区\",\"钟山县\",\"昭平县\",\"富川瑶族自治县\"],\"河池市\":[\"金城江区\",\"宜州市\",\"天峨县\",\"凤山县\",\"南丹县\",\"东兰县\",\"都安瑶族自治县\",\"罗城仫佬族自治县\",\"巴马瑶族自治县\",\"环江毛南族自治县\",\"大化瑶族自治县\"],\"来宾市\":[\"兴宾区\",\"合山市\",\"象州县\",\"武宣县\",\"忻城县\",\"金秀瑶族自治县\"],\"崇左市\":[\"江州区\",\"凭祥市\",\"宁明县\",\"扶绥县\",\"龙州县\",\"大新县\",\"天等县\"],\"拉萨市\":[\"城关区\",\"林周县\",\"当雄县\",\"尼木县\",\"曲水县\",\"堆龙德庆县\",\"达孜县\",\"墨竹工卡县\"],\"那曲地区\":[\"那曲县\",\"嘉黎县\",\"比如县\",\"聂荣县\",\"安多县\",\"申扎县\",\"索县\",\"班戈县\",\"巴青县\",\"尼玛县\"],\"昌都地区\":[\"昌都县\",\"江达县\",\"贡觉县\",\"类乌齐县\",\"丁青县\",\"察雅县\",\"八宿县\",\"左贡县\",\"芒康县\",\"洛隆县\",\"边坝县\"],\"林芝地区\":[\"林芝县\",\"工布江达县\",\"米林县\",\"墨脱县\",\"波密县\",\"察隅县\",\"朗县\"],\"山南地区\":[\"乃东县\",\"扎囊县\",\"贡嘎县\",\"桑日县\",\"琼结县\",\"曲松县\",\"措美县\",\"洛扎县\",\"加查县\",\"隆子县\",\"错那县\",\"浪卡子县\"],\"日喀则地区\":[\"日喀则市\",\"南木林县\",\"江孜县\",\"定日县\",\"萨迦县\",\"拉孜县\",\"昂仁县\",\"谢通门县\",\"白朗县\",\"仁布县\",\"康马县\",\"定结县\",\"仲巴县\",\"亚东县\",\"吉隆县\",\"聂拉木县\",\"萨嘎县\",\"岗巴县\"],\"阿里地区\":[\"噶尔县\",\"普兰县\",\"札达县\",\"日土县\",\"革吉县\",\"改则县\",\"措勤县\"],\"银川市\":[\"兴庆区\",\"西夏区\",\"金凤区\",\"灵武市\",\"永宁县\",\"贺兰县\"],\"石嘴山市\":[\"大武口区\",\"惠农区\",\"平罗县\"],\"吴忠市\":[\"利通区\",\"青铜峡市\",\"盐池县\",\"同心县\"],\"固原市\":[\"原州区\",\"西吉县\",\"隆德县\",\"泾源县\",\"彭阳县\"],\"中卫市\":[\"沙坡头区\",\"中宁县\",\"海原县\"],\"乌鲁木齐市\":[\"天山区\",\"沙依巴克区\",\"新市区\",\"水磨沟区\",\"头屯河区\",\"达坂城区\",\"米东区\",\"乌鲁木齐县\"],\"克拉玛依市\":[\"克拉玛依区\",\"独山子区\",\"白碱滩区\",\"乌尔禾区\"],\"吐鲁番地区\":[\"吐鲁番市\",\"托克逊县\",\"鄯善县\"],\"哈密地区\":[\"哈密市\",\"伊吾县\",\"巴里坤哈萨克自治县\"],\"和田地区\":[\"和田市\",\"和田县\",\"洛浦县\",\"民丰县\",\"皮山县\",\"策勒县\",\"于田县\",\"墨玉县\"],\"阿克苏地区\":[\"阿克苏市\",\"温宿县\",\"沙雅县\",\"拜城县\",\"阿瓦提县\",\"库车县\",\"柯坪县\",\"新和县\",\"乌什县\"],\"喀什地区\":[\"喀什市\",\"巴楚县\",\"泽普县\",\"伽师县\",\"叶城县\",\"岳普湖县\",\"疏勒县\",\"麦盖提县\",\"英吉沙县\",\"莎车县\",\"疏附县\",\"塔什库尔干塔吉克自治县\"],\"克孜勒苏柯尔克孜自治州\":[\"阿图什市\",\"阿合奇县\",\"乌恰县\",\"阿克陶县\"],\"巴音郭楞蒙古自治州\":[\"库尔勒市\",\"和静县\",\"尉犁县\",\"和硕县\",\"且末县\",\"博湖县\",\"轮台县\",\"若羌县\",\"焉耆回族自治县\"],\"昌吉回族自治州\":[\"昌吉市\",\"阜康市\",\"奇台县\",\"玛纳斯县\",\"吉木萨尔县\",\"呼图壁县\",\"木垒哈萨克自治县\"],\"博尔塔拉蒙古自治州\":[\"博乐市\",\"精河县\",\"温泉县\"],\"石河子市\":[],\"阿拉尔市\":[],\"图木舒克市\":[],\"五家渠市\":[],\"伊犁哈萨克自治州\":[\"伊宁市\",\"奎屯市\",\"伊宁县\",\"特克斯县\",\"尼勒克县\",\"昭苏县\",\"新源县\",\"霍城县\",\"巩留县\",\"察布查尔锡伯自治县\"],\"塔城地区\":[\"塔城市\",\"乌苏市\",\"额敏县\",\"裕民县\",\"沙湾县\",\"托里县\",\"和布克赛尔蒙古自治县\"],\"阿勒泰地区\":[\"阿勒泰市\",\"青河县\",\"吉木乃县\",\"富蕴县\",\"布尔津县\",\"福海县\",\"哈巴河县\"],\"中西区\":[],\"湾仔区\":[],\"东区\":[],\"南区\":[],\"黄大仙区\":[],\"观塘区\":[],\"深水埗区\":[],\"油尖旺区\":[],\"九龙城区\":[],\"北区\":[],\"大埔区\":[],\"沙田区\":[],\"西贡区\":[],\"元朗区\":[],\"屯门区\":[],\"荃湾区\":[],\"葵青区\":[],\"离岛区\":[],\"花地玛堂区\":[],\"圣安多尼堂区\":[],\"大堂区\":[],\"望德堂区\":[],\"风顺堂区\":[],\"氹仔\":[],\"路环\":[],\"路氹城\":[],\"台北市\":[],\"高雄市\":[],\"基隆市\":[],\"新竹市\":[],\"台中市\":[],\"嘉义市\":[],\"台南市\":[],\"台北县\":[],\"桃园县\":[],\"新竹县\":[],\"苗栗县\":[],\"台中县\":[],\"彰化县\":[],\"南投县\":[],\"云林县\":[],\"嘉义县\":[],\"台南县\":[],\"高雄县\":[],\"屏东县\":[],\"宜兰县\":[],\"花莲县\":[],\"台东县\":[],\"澎湖县\":[],\"金门县\":[],\"连江县\":[]}"); + + #endregion + + #region 表格相关 + + /// + /// 选中了哪些行 + /// + /// 表格对象 + /// 选中行的描述信息 + protected string HowManyRowsAreSelected(Grid grid) + { + return HowManyRowsAreSelected(grid, false); + } + + /// + /// 选中了哪些行 + /// + /// 表格对象 + /// 在表格数据源中计算序号(而不是在当前分页内计算序号) + /// 选中行的描述信息 + protected string HowManyRowsAreSelected(Grid grid, bool rowNumberInDataSource) + { + StringBuilder sb = new StringBuilder(); + int selectedCount = grid.SelectedRowIndexArray.Length; + if (selectedCount > 0) + { + sb.AppendFormat("

共选中了 {0} 行:

", selectedCount); + sb.Append(""); + + sb.Append(""); + foreach (string datakey in grid.DataKeyNames) + { + sb.AppendFormat("", datakey); + } + sb.Append(""); + + + for (int i = 0; i < selectedCount; i++) + { + int rowIndex = grid.SelectedRowIndexArray[i]; + sb.Append(""); + + int rownumber = rowIndex + 1; + if (rowNumberInDataSource && grid.AllowPaging) + { + rownumber += grid.PageIndex * grid.PageSize; + } + sb.AppendFormat("", rownumber); + + + // 如果是内存分页,所有分页的数据都存在,rowIndex 就是在全部数据中的顺序,而不是当前页的顺序 + if (grid.AllowPaging && !grid.IsDatabasePaging) + { + rowIndex = grid.PageIndex * grid.PageSize + rowIndex; + } + + object[] dataKeys = grid.DataKeys[rowIndex]; + for (int j = 0; j < dataKeys.Length; j++) + { + sb.AppendFormat("", dataKeys[j]); + } + + sb.Append(""); + } + sb.Append("
序号{0}
{0}{0}
"); + } + else + { + sb.Append("没有选中任何一行!"); + } + + return sb.ToString(); + } + + /// + /// 获取性别的字面值,在 ASPX 中调用 + /// + /// + /// + protected string GetGender(object gender) + { + if (Convert.ToInt32(gender) == 1) + { + return "男"; + } + else + { + return "女"; + } + } + + /* + protected DataTable GetClassDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + + DataRow row = table.NewRow(); + + row[0] = 101; + row[1] = "班级一"; + row[2] = 2000; + row[3] = DateTime.Parse("2000-09-01"); + row[4] = "班级一创建于2000年9月1号,班长胡飞,连续三年获得全校优秀班级称号。"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "班级二"; + row[2] = 2005; + row[3] = DateTime.Parse("2005-09-01"); + row[4] = "班级一创建于2005年9月1号,班长董婷婷,连续两年获得全校优秀班级称号。"; + table.Rows.Add(row); + + return table; + } + + + /// + /// 获取模拟表格2 + /// + /// + protected DataTable DataSourceUtil.GetDataTable2() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Group", typeof(int))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + table.Columns.Add(new DataColumn("Guid", typeof(Guid))); + table.Columns.Add(new DataColumn("Hobby", typeof(String))); + table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); + table.Columns.Add(new DataColumn("Donate", typeof(int))); + table.Columns.Add(new DataColumn("Fee", typeof(int))); + // Hobby:reading,basketball,travel,movie,music + // 爱好:读书, 篮球, 旅游, 电影, 音乐 + + // 考试成绩 + table.Columns.Add(new DataColumn("ChineseScore", typeof(Int32))); + table.Columns.Add(new DataColumn("MathScore", typeof(Int32))); + table.Columns.Add(new DataColumn("TotalScore", typeof(Int32))); + + + DataRow row = null; + + row = table.NewRow(); + row[0] = 101; + row[1] = "陈萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "计算机应用技术"; + row[5] = 1; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "陈萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,travel"; + row[11] = "2000-09-01"; + row[12] = 299; + row[13] = 2990; + row[14] = 80; + row[15] = 80; + row[16] = 160; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "胡飞"; + row[2] = 2008; + row[3] = false; + row[4] = "信息工程"; + row[5] = 1; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-90); + row[8] = "胡飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball"; + row[11] = "2008-09-01"; + row[12] = 199; + row[13] = 1990; + row[14] = 90; + row[15] = 80; + row[16] = 170; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 103; + row[1] = "金婷婷"; + row[2] = 2001; + row[3] = true; + row[4] = "会计学"; + row[5] = 2; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-80); + row[8] = "金婷婷,女,28岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,music"; + row[11] = "2001-09-01"; + row[12] = 299; + row[13] = 3990; + row[14] = 85; + row[15] = 85; + row[16] = 170; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 104; + row[1] = "潘国"; + row[2] = 2008; + row[3] = false; + row[4] = "国际经济与贸易"; + row[5] = 2; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-70); + row[8] = "潘国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,music"; + row[11] = "2008-09-01"; + row[12] = 399; + row[13] = 3998; + row[14] = 89; + row[15] = 80; + row[16] = 169; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 105; + row[1] = "吴颖颖"; + row[2] = 2002; + row[3] = true; + row[4] = "市场营销"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-60); + row[8] = "吴颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2002-09-01"; + row[12] = 499; + row[13] = 4992; + row[14] = 92; + row[15] = 85; + row[16] = 177; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 106; + row[1] = "张博"; + row[2] = 2003; + row[3] = false; + row[4] = "财务管理"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "张博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "movie,music"; + row[11] = "2003-09-01"; + row[12] = 99; + row[13] = 997; + row[14] = 88; + row[15] = 86; + row[16] = 174; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 107; + row[1] = "杨倩倩"; + row[2] = 2000; + row[3] = true; + row[4] = "材料物理与化学"; + row[5] = 4; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-40); + row[8] = "杨倩倩,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "travel,movie,music"; + row[11] = "2000-09-01"; + row[12] = 399; + row[13] = 3995; + row[14] = 95; + row[15] = 82; + row[16] = 177; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 108; + row[1] = "董超"; + row[2] = 2004; + row[3] = false; + row[4] = "生物医学工程"; + row[5] = 4; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-30); + row[8] = "董超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,movie,music"; + row[11] = "2004-09-01"; + row[12] = 299; + row[13] = 2996; + row[14] = 86; + row[15] = 98; + row[16] = 184; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 109; + row[1] = "张娟娟"; + row[2] = 2003; + row[3] = true; + row[4] = "土木工程"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-20); + row[8] = "张娟娟,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,movie,music"; + row[11] = "2003-09-01"; + row[12] = 599; + row[13] = 5990; + row[14] = 92; + row[15] = 96; + row[16] = 198; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 110; + row[1] = "叶鹏"; + row[2] = 2006; + row[3] = false; + row[4] = "电子商务"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-10); + row[8] = "叶鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2006-09-01"; + row[12] = 699; + row[13] = 6990; + row[14] = 69; + row[15] = 99; + row[16] = 168; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 111; + row[1] = "李玲玲"; + row[2] = 2002; + row[3] = true; + row[4] = "管理学"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "李玲玲,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,music"; + row[11] = "2002-09-01"; + row[12] = 399; + row[13] = 3990; + row[14] = 88; + row[15] = 92; + row[16] = 180; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 112; + row[1] = "张萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "计算机应用技术"; + row[5] = 1; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "张萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,travel"; + row[11] = "2000-09-01"; + row[12] = 299; + row[13] = 2999; + row[14] = 82; + row[15] = 88; + row[16] = 170; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 113; + row[1] = "曹飞"; + row[2] = 2008; + row[3] = false; + row[4] = "信息工程"; + row[5] = 1; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-90); + row[8] = "曹飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball"; + row[11] = "2008-09-01"; + row[12] = 399; + row[13] = 3996; + row[14] = 96; + row[15] = 85; + row[16] = 181; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 114; + row[1] = "孙婷婷"; + row[2] = 2001; + row[3] = true; + row[4] = "会计学"; + row[5] = 2; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-80); + row[8] = "孙婷婷,女,28岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,music"; + row[11] = "2001-09-01"; + row[12] = 499; + row[13] = 4990; + row[14] = 80; + row[15] = 90; + row[16] = 170; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 115; + row[1] = "董国"; + row[2] = 2008; + row[3] = false; + row[4] = "国际经济与贸易"; + row[5] = 2; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-70); + row[8] = "董国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,music"; + row[11] = "2008-09-01"; + row[12] = 299; + row[13] = 2992; + row[14] = 90; + row[15] = 95; + row[16] = 185; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 116; + row[1] = "习颖颖"; + row[2] = 2002; + row[3] = true; + row[4] = "市场营销"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-60); + row[8] = "习颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2002-09-01"; + row[12] = 199; + row[13] = 1990; + row[14] = 86; + row[15] = 90; + row[16] = 176; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 117; + row[1] = "李博"; + row[2] = 2003; + row[3] = false; + row[4] = "财务管理"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "李博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "movie,music"; + row[11] = "2003-09-01"; + row[12] = 99; + row[13] = 990; + row[14] = 80; + row[15] = 95; + row[16] = 175; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 118; + row[1] = "黄婷婷"; + row[2] = 2000; + row[3] = true; + row[4] = "材料物理与化学"; + row[5] = 4; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-40); + row[8] = "黄婷婷,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "travel,movie,music"; + row[11] = "2000-09-01"; + row[12] = 399; + row[13] = 3990; + row[14] = 95; + row[15] = 88; + row[16] = 183; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 119; + row[1] = "韩超"; + row[2] = 2004; + row[3] = false; + row[4] = "生物医学工程"; + row[5] = 4; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-30); + row[8] = "韩超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,movie,music"; + row[11] = "2004-09-01"; + row[12] = 399; + row[13] = 3991; + row[14] = 88; + row[15] = 86; + row[16] = 174; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 120; + row[1] = "王娟娟"; + row[2] = 2003; + row[3] = true; + row[4] = "土木工程"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-20); + row[8] = "王娟娟,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,movie,music"; + row[11] = "2003-09-01"; + row[12] = 399; + row[13] = 3992; + row[14] = 90; + row[15] = 88; + row[16] = 178; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 121; + row[1] = "周鹏"; + row[2] = 2006; + row[3] = false; + row[4] = "电子商务"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-10); + row[8] = "周鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2006-09-01"; + row[12] = 299; + row[13] = 2992; + row[14] = 92; + row[15] = 96; + row[16] = 186; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 122; + row[1] = "吴玲玲"; + row[2] = 2002; + row[3] = true; + row[4] = "管理学"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "吴玲玲,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,music"; + row[11] = "2002-09-01"; + row[12] = 399; + row[13] = 3993; + row[14] = 95; + row[15] = 89; + row[16] = 184; + table.Rows.Add(row); + + + return table; + } + + /// + /// 获取模拟表格 + /// + /// + protected DataTable DataSourceUtil.GetDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Group", typeof(int))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + table.Columns.Add(new DataColumn("LogTime", typeof(DateTime))); + table.Columns.Add(new DataColumn("Desc", typeof(string))); + table.Columns.Add(new DataColumn("Guid", typeof(Guid))); + + // Hobby:reading,basketball,travel,movie,music + // 爱好:读书, 篮球, 旅游, 电影, 音乐 + table.Columns.Add(new DataColumn("Hobby", typeof(String))); + table.Columns.Add(new DataColumn("EntranceDate", typeof(String))); + + // 考试成绩 + table.Columns.Add(new DataColumn("ChineseScore", typeof(Int32))); + table.Columns.Add(new DataColumn("MathScore", typeof(Int32))); + table.Columns.Add(new DataColumn("TotalScore", typeof(Int32))); + + // 体检结果 + table.Columns.Add(new DataColumn("ShenGao", typeof(Int32))); + table.Columns.Add(new DataColumn("TiZhong", typeof(Int32))); + table.Columns.Add(new DataColumn("XueYaDi", typeof(String))); + table.Columns.Add(new DataColumn("XueYaGao", typeof(String))); + table.Columns.Add(new DataColumn("ShiLiZuo", typeof(Single))); + table.Columns.Add(new DataColumn("ShiLiYou", typeof(Single))); + table.Columns.Add(new DataColumn("ShiLiZuoJiaoZhen", typeof(Single))); + table.Columns.Add(new DataColumn("ShiLiYouJiaoZhen", typeof(Single))); + + // 合并单元格需要的字段 + table.Columns.Add(new DataColumn("GroupB", typeof(int))); + + + DataRow row = table.NewRow(); + row[0] = 101; + row[1] = "张萍萍"; + row[2] = 2000; + row[3] = true; + row[4] = "材料科学与工程系"; + row[5] = 1; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); // DBNull.Value; + row[8] = "张萍萍,女,20岁,出生于中国南方的一个小山村,毕业于中国科学技术大学。
毕业后就职于某大型国有企业,任部门经理,连续三年获得企业优秀员工称号。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,music"; + row[11] = "2000-09-01"; + row[12] = 80; + row[13] = 90; + row[14] = 170; + row[15] = 180; + row[16] = 150; + row[17] = 80; + row[18] = 120; + row[19] = 0.2; + row[20] = 0.5; + row[21] = 1.0; + row[22] = 1.2; + row[23] = 1; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 102; + row[1] = "陈飞"; + row[2] = 2000; + row[3] = false; + row[4] = "化学系"; + row[5] = 1; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "陈飞,男,20岁,出生于中国北方的一个小山村,毕业于南方科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,travel,movie,reading,music"; + row[11] = "2001-09-01"; + row[12] = 85; + row[13] = 90; + row[14] = 175; + row[15] = 160; + row[16] = 120; + row[17] = 70; + row[18] = 110; + row[19] = 0.3; + row[20] = 0.3; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 1; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 103; + row[1] = "董婷婷"; + row[2] = 2000; + row[3] = true; + row[4] = "化学系"; + row[5] = 2; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "董婷婷,女,18岁,出生于中国海南岛的一个小山村,毕业于中国科学技术大学。
董婷婷是在学校认识丈夫刘国的,有一天晚上下自习后,董婷婷发短信给刘国说“做我男朋友吧!”,然后他们就走到了一起。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,movie,music"; + row[11] = "2008-09-01"; + row[12] = 90; + row[13] = 90; + row[14] = 180; + row[15] = 190; + row[16] = 130; + row[17] = 82; + row[18] = 125; + row[19] = 0.8; + row[20] = 0.6; + row[21] = 1.2; + row[22] = 1.0; + row[23] = 2; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 104; + row[1] = "刘国"; + row[2] = 2002; + row[3] = false; + row[4] = "化学系"; + row[5] = 2; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-100); + row[8] = "刘国,男,22岁,出生于中国澳门的一个小山村,毕业于中国科学技术大学。
刘国是作为交换生来中科大学习,在校期间认识了妻子董婷婷,虽然是被追到手了,不过在人前却总是说“老婆是我千辛万苦追来的!”。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,movie"; + row[11] = "2002-09-01"; + row[12] = 95; + row[13] = 95; + row[14] = 190; + row[15] = 170; + row[16] = 130; + row[17] = 76; + row[18] = 112; + row[19] = 1.0; + row[20] = 1.0; + row[21] = 1.0; + row[22] = 1.0; + row[23] = 2; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 105; + row[1] = "康颖颖"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-60); + row[8] = "康颖颖,女,26岁,出生于中国福建的一个小山村,毕业于香港科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,travel,movie,music"; + row[11] = "2008-09-01"; + row[12] = 85; + row[13] = 95; + row[14] = 180; + row[15] = 159; + row[16] = 90; + row[17] = 77; + row[18] = 128; + row[19] = 0.6; + row[20] = 0.9; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 106; + row[1] = "彭博"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "彭博,男,28岁,出生于中国浙江的一个小山村,毕业于电子科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "basketball,travel,music"; + row[11] = "2003-09-01"; + row[12] = 60; + row[13] = 100; + row[14] = 160; + row[15] = 175; + row[16] = 150; + row[17] = 88; + row[18] = 126; + row[19] = 0.1; + row[20] = 0.3; + row[21] = 1.5; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 107; + row[1] = "黄婷婷"; + row[2] = 2008; + row[3] = true; + row[4] = "数学系"; + row[5] = 3; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "黄婷婷,女,25岁,出生于中国北方的一个小山村,毕业于北京科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "travel,movie,music,reading"; + row[11] = "2000-09-01"; + row[12] = 100; + row[13] = 80; + row[14] = 180; + row[15] = 160; + row[16] = 80; + row[17] = 70; + row[18] = 110; + row[19] = 0.8; + row[20] = 0.8; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 108; + row[1] = "唐超"; + row[2] = 2004; + row[3] = false; + row[4] = "物理系"; + row[5] = 3; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "唐超,男,26岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。
作为刘国的同班同学,唐超是班里的尖子生,本科还没毕业就被哈佛大学录取了,现在好像还没毕业呢。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music,basketball"; + row[11] = "2004-09-01"; + row[12] = 80; + row[13] = 80; + row[14] = 160; + row[15] = 188; + row[16] = 130; + row[17] = 82; + row[18] = 130; + row[19] = 0.5; + row[20] = 0.8; + row[21] = 1.3; + row[22] = 1.2; + row[23] = 3; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 109; + row[1] = "杨婷婷"; + row[2] = 2004; + row[3] = true; + row[4] = "物理系"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "杨婷婷,女,25岁,出生于中国广西的一个小山村,毕业于南方科学技术大学。
杨婷婷的父母都是中科大的高材生,他们很高兴送女儿上一所前中科大校长创办的大学,而南科大自己颁发的学位文凭也颇受争议。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,movie"; + row[11] = "2003-09-01"; + row[12] = 90; + row[13] = 60; + row[14] = 150; + row[15] = 166; + row[16] = 110; + row[17] = 70; + row[18] = 116; + row[19] = 0.8; + row[20] = 1.0; + row[21] = 0.8; + row[22] = 1.0; + row[23] = 5; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 110; + row[1] = "徐鹏"; + row[2] = 2002; + row[3] = false; + row[4] = "物理系"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-50); + row[8] = "徐鹏,男,23岁,出生于中国安徽的一个小山村,毕业于国防科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,basketball,travel"; + row[11] = "2002-09-01"; + row[12] = 60; + row[13] = 90; + row[14] = 150; + row[15] = 198; + row[16] = 145; + row[17] = 83; + row[18] = 128; + row[19] = 1.2; + row[20] = 1.5; + row[21] = 1.2; + row[22] = 1.5; + row[23] = 5; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = 111; + row[1] = "纪婷婷"; + row[2] = 2012; + row[3] = true; + row[4] = "自动化系"; + row[5] = 5; + row[6] = 0; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "纪婷婷,女,22岁,出生于中国台湾的一个小山村,毕业于台湾科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music,basketball"; + row[11] = "2006-09-01"; + row[12] = 90; + row[13] = 70; + row[14] = 160; + row[15] = 158; + row[16] = 76; + row[17] = 69; + row[18] = 109; + row[19] = 0.8; + row[20] = 0.6; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 5; + table.Rows.Add(row); + + + row = table.NewRow(); + row[0] = 112; + row[1] = "张一驰"; + row[2] = 2012; + row[3] = true; + row[4] = "材料科学与工程系"; + row[5] = 5; + row[6] = 1; + row[7] = DateTime.Now.AddDays(-5); + row[8] = "张一驰,男,28岁,出生于中国河南的一个小山村,毕业于中国科学技术大学。"; + row[9] = Guid.NewGuid(); + row[10] = "reading,movie,music"; + row[11] = "2000-09-01"; + row[12] = 99; + row[13] = 98; + row[14] = 197; + row[15] = 183; + row[16] = 125; + row[17] = 80; + row[18] = 120; + row[19] = 0.8; + row[20] = 0.6; + row[21] = 1.2; + row[22] = 1.2; + row[23] = 5; + table.Rows.Add(row); + + return table; + } + + /// + /// 获取空数据表 + /// + /// + protected DataTable GetEmptyDataTable() + { + DataTable table = new DataTable(); + table.Columns.Add(new DataColumn("Id", typeof(int))); + table.Columns.Add(new DataColumn("Name", typeof(String))); + table.Columns.Add(new DataColumn("EntranceYear", typeof(int))); + table.Columns.Add(new DataColumn("AtSchool", typeof(bool))); + table.Columns.Add(new DataColumn("Major", typeof(String))); + table.Columns.Add(new DataColumn("Group", typeof(int))); + table.Columns.Add(new DataColumn("Gender", typeof(int))); + + + return table; + } + */ + + #endregion + + #region 压缩ViewState + + //protected override object LoadPageStateFromPersistenceMedium() + //{ + // string gzippedState = Request.Form[StringUtil.GZIPPED_VIEWSTATE_ID]; + // return StringUtil.LoadGzippedViewState(gzippedState); + //} + + //protected override void SavePageStateToPersistenceMedium(object viewState) + //{ + // ClientScript.RegisterHiddenField(StringUtil.GZIPPED_VIEWSTATE_ID, StringUtil.GenerateGzippedViewState(viewState)); + //} + + #endregion + + #region 实用函数 + + /// + /// 获取回发的参数 + /// + /// + public string GetRequestEventArgument() + { + return Request.Form["__EVENTARGUMENT"]; + } + + + /// + /// 显示通知对话框 + /// + /// + public void ShowNotify(string message) + { + Alert.Show(message); + } + + #endregion + + #region GetDeleteSelectedRowsScript + + /// + /// 删除表格选中行(FineUI v6.0更新:必须加上延迟,否则弹出框会阻止事件向上传播,导致不能选中单元格!!) + /// + /// + /// + protected string GetDeleteScript(Grid grid1) + { + string confirmScript = Confirm.GetShowReference("删除选中行?", String.Empty, MessageBoxIcon.Question, grid1.GetDeleteSelectedRowsReference(), String.Empty); + + return String.Format("F.defer(function(){{{0}}},100);", confirmScript); + } + + #endregion + } + +} diff --git a/FineUI_v6/FineUI.Examples/FineUI.Examples.csproj b/FineUI_v6/FineUI.Examples/FineUI.Examples.csproj new file mode 100644 index 0000000..211927f --- /dev/null +++ b/FineUI_v6/FineUI.Examples/FineUI.Examples.csproj @@ -0,0 +1,3481 @@ + + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {CF702D32-2B3C-4FE7-8916-4C09DBF30289} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + FineUI.Examples + FineUI.Examples + v2.0 + + + + + 4.0 + + true + + + + true + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\ + TRACE + prompt + 4 + AllRules.ruleset + + + + False + ..\Newtonsoft.Json\Net20\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + accordion_autopostback.aspx + ASPXCodeBehind + + + accordion_autopostback.aspx + + + accordion_fill.aspx + ASPXCodeBehind + + + accordion_fill.aspx + + + aspnet.aspx + ASPXCodeBehind + + + aspnet.aspx + + + aspnet_literal.aspx + ASPXCodeBehind + + + aspnet_literal.aspx + + + login_enterkey.aspx + ASPXCodeBehind + + + login_enterkey.aspx + + + + loading.aspx + ASPXCodeBehind + + + loading.aspx + + + loading.aspx + ASPXCodeBehind + + + loading.aspx + + + dropdownlist_autopostback.aspx + ASPXCodeBehind + + + dropdownlist_autopostback.aspx + + + dropdownlist_autopostback_enableedit.aspx + ASPXCodeBehind + + + dropdownlist_autopostback_enableedit.aspx + + + dropdownlist_emptytext.aspx + ASPXCodeBehind + + + dropdownlist_emptytext.aspx + + + dropdownlist_emptytext_enableedit.aspx + ASPXCodeBehind + + + dropdownlist_emptytext_enableedit.aspx + + + dropdownlist_focus.aspx + ASPXCodeBehind + + + dropdownlist_focus.aspx + + + dropdownlist_matchfieldwidth.aspx + ASPXCodeBehind + + + dropdownlist_matchfieldwidth.aspx + + + dropdownlist_matchfieldwidth_right.aspx + ASPXCodeBehind + + + dropdownlist_matchfieldwidth_right.aspx + + + dropdownlist_multiselect_scroll.aspx + ASPXCodeBehind + + + dropdownlist_multiselect_scroll.aspx + + + dropdownlist_no_autopostback.aspx + ASPXCodeBehind + + + dropdownlist_no_autopostback.aspx + + + dropdownlist_no_forceselection_initvalue.aspx + ASPXCodeBehind + + + dropdownlist_no_forceselection_initvalue.aspx + + + dropdownlist_scroll.aspx + ASPXCodeBehind + + + dropdownlist_scroll.aspx + + + multiselect.aspx + ASPXCodeBehind + + + multiselect.aspx + + + multiselect_enableedit.aspx + ASPXCodeBehind + + + multiselect_enableedit.aspx + + + multiselect_autopostback.aspx + ASPXCodeBehind + + + multiselect_autopostback.aspx + + + multiselect_autopostback_enableedit.aspx + ASPXCodeBehind + + + multiselect_autopostback_enableedit.aspx + + + dropdownlist_autopostback_enableedit_noforceselection.aspx + ASPXCodeBehind + + + dropdownlist_autopostback_enableedit_noforceselection.aspx + + + calendar_mindate.aspx + ASPXCodeBehind + + + calendar_mindate.aspx + + + form_columnwidths.aspx + ASPXCodeBehind + + + form_columnwidths.aspx + + + form_labelwidth.aspx + ASPXCodeBehind + + + form_labelwidth.aspx + + + form_longlabel.aspx + ASPXCodeBehind + + + form_longlabel.aspx + + + form_textalign.aspx + ASPXCodeBehind + + + form_textalign.aspx + + + layout_center_label.aspx + ASPXCodeBehind + + + layout_center_label.aspx + + + layout_multiline_buttons.aspx + ASPXCodeBehind + + + layout_multiline_buttons.aspx + + + triggerbox_triggerboxurl.aspx + ASPXCodeBehind + + + triggerbox_triggerboxurl.aspx + + + Global.asax + + + grid_checkall_singleselect.aspx + ASPXCodeBehind + + + grid_checkall_singleselect.aspx + + + grid_editor_cell_afteredit_selectcell.aspx + ASPXCodeBehind + + + grid_editor_cell_afteredit_selectcell.aspx + + + grid_editor_cell_client_validate.aspx + ASPXCodeBehind + + + grid_editor_cell_client_validate.aspx + + + grid_editor_cell_newdelete_getmergeddata.aspx + ASPXCodeBehind + + + grid_editor_cell_newdelete_getmergeddata.aspx + + + grid_editor_cell_new_editcolumnid.aspx + ASPXCodeBehind + + + grid_editor_cell_new_editcolumnid.aspx + + + grid_editor_cell_renderfunction_complex.aspx + ASPXCodeBehind + + + grid_editor_cell_renderfunction_complex.aspx + + + grid_editor_cell_updatecellvalue.aspx + ASPXCodeBehind + + + grid_editor_cell_updatecellvalue.aspx + + + grid_editor_cell_updatecellvalue_hiddencolumn.aspx + ASPXCodeBehind + + + grid_editor_cell_updatecellvalue_hiddencolumn.aspx + + + grid_editor_cell_updatecellvalue_noedit.aspx + ASPXCodeBehind + + + grid_editor_cell_updatecellvalue_noedit.aspx + + + grid_editor_cell_updatesummary.aspx + ASPXCodeBehind + + + grid_editor_cell_updatesummary.aspx + + + grid_excel_dblclick_download.aspx + ASPXCodeBehind + + + grid_excel_dblclick_download.aspx + + + grid_excel_findcontrol.aspx + ASPXCodeBehind + + + grid_excel_findcontrol.aspx + + + grid_excel_groupfield.aspx + ASPXCodeBehind + + + grid_excel_groupfield.aspx + + + grid_header_disablemenu.aspx + ASPXCodeBehind + + + grid_header_disablemenu.aspx + + + grid_header_hide.aspx + ASPXCodeBehind + + + grid_header_hide.aspx + + + grid_header_wrap.aspx + ASPXCodeBehind + + + grid_header_wrap.aspx + + + grid_hide_gridheader.aspx + ASPXCodeBehind + + + grid_hide_gridheader.aspx + + + grid_lockcolumn.aspx + ASPXCodeBehind + + + grid_lockcolumn.aspx + + + grid_lockcolumn_many_columns.aspx + ASPXCodeBehind + + + grid_lockcolumn_many_columns.aspx + + + grid_lockcolumn_rowexpander.aspx + ASPXCodeBehind + + + grid_lockcolumn_rowexpander.aspx + + + grid_lockcolumn_groupheader_sort.aspx + ASPXCodeBehind + + + grid_lockcolumn_groupheader_sort.aspx + + + grid_lockcolumn_summary_scrollbar.aspx + ASPXCodeBehind + + + grid_lockcolumn_summary_scrollbar.aspx + + + grid_lockcolumn_editor_cell_new.aspx + ASPXCodeBehind + + + grid_lockcolumn_editor_cell_new.aspx + + + grid_lockcolumn_line_wrap.aspx + ASPXCodeBehind + + + grid_lockcolumn_line_wrap.aspx + + + grid_many_columns.aspx + ASPXCodeBehind + + + grid_many_columns.aspx + + + grid_newtab.aspx + ASPXCodeBehind + + + grid_newtab.aspx + + + grid_newtab_hiderefresh.aspx + ASPXCodeBehind + + + grid_newtab_hiderefresh.aspx + + + grid_newtab_hiderefresh_window.aspx + ASPXCodeBehind + + + grid_newtab_hiderefresh_window.aspx + + + grid_newtab_hideupdate.aspx + ASPXCodeBehind + + + grid_newtab_hideupdate.aspx + + + grid_newtab_hideupdate_window.aspx + ASPXCodeBehind + + + grid_newtab_hideupdate_window.aspx + + + grid_newtab_sametab.aspx + ASPXCodeBehind + + + grid_newtab_sametab.aspx + + + grid_newtab_window.aspx + ASPXCodeBehind + + + grid_newtab_window.aspx + + + grid_paging_aspnet.aspx + ASPXCodeBehind + + + grid_paging_aspnet.aspx + + + grid_paging_database_bbar.aspx + ASPXCodeBehind + + + grid_paging_database_bbar.aspx + + + grid_paging_fineui.aspx + ASPXCodeBehind + + + grid_paging_fineui.aspx + + + grid_prerowdatabound_cancelled.aspx + ASPXCodeBehind + + + grid_prerowdatabound_cancelled.aspx + + + grid_editor_cell_afteredit_rowexpander.aspx + ASPXCodeBehind + + + grid_editor_cell_afteredit_rowexpander.aspx + + + grid_editor_cell_newdelete_rowexpander.aspx + ASPXCodeBehind + + + grid_editor_cell_newdelete_rowexpander.aspx + + + grid_rowexpander_grid.aspx + ASPXCodeBehind + + + grid_rowexpander_grid.aspx + + + grid_rowexpander_grid_data.ashx + + + grid_sorting_nosortfield.aspx + ASPXCodeBehind + + + grid_sorting_nosortfield.aspx + + + grid_style_columnclass.aspx + ASPXCodeBehind + + + grid_style_columnclass.aspx + + + grid_summary_scrollbar_flow.aspx + ASPXCodeBehind + + + grid_summary_scrollbar_flow.aspx + + + grid_style_rowcolor_paging_database.aspx + ASPXCodeBehind + + + grid_style_rowcolor_paging_database.aspx + + + grid_style_rowcolor_paging.aspx + ASPXCodeBehind + + + grid_style_rowcolor_paging.aspx + + + grid_editor_cell_paging.aspx + ASPXCodeBehind + + + grid_editor_cell_paging.aspx + + + grid_rownumber_align.aspx + ASPXCodeBehind + + + grid_rownumber_align.aspx + + + grid_groupheader_hidden.aspx + ASPXCodeBehind + + + grid_groupheader_hidden.aspx + + + grid_editor_cell_textarea.aspx + ASPXCodeBehind + + + grid_editor_cell_textarea.aspx + + + grid_summary_scrollbar_top.aspx + ASPXCodeBehind + + + grid_summary_scrollbar_top.aspx + + + grid_width_boxflex.aspx + ASPXCodeBehind + + + grid_width_boxflex.aspx + + + grid_width_forcefit_minwidth.aspx + ASPXCodeBehind + + + grid_width_forcefit_minwidth.aspx + + + grid_checkall_keepcurrentselection.aspx + ASPXCodeBehind + + + grid_checkall_keepcurrentselection.aspx + + + grid_backup.aspx + ASPXCodeBehind + + + grid_backup.aspx + + + selectprovince_executescript.aspx + ASPXCodeBehind + + + selectprovince_executescript.aspx + + + selectprovince_executescript_child.aspx + ASPXCodeBehind + + + selectprovince_executescript_child.aspx + + + column_autoheight.aspx + ASPXCodeBehind + + + column_autoheight.aspx + + + column_scrollbar.aspx + ASPXCodeBehind + + + column_scrollbar.aspx + + + hbox_autoheight.aspx + ASPXCodeBehind + + + hbox_autoheight.aspx + + + hbox_autoheight_multilevels.aspx + ASPXCodeBehind + + + hbox_autoheight_multilevels.aspx + + + hbox_form.aspx + ASPXCodeBehind + + + hbox_form.aspx + + + hbox_scrollbar.aspx + ASPXCodeBehind + + + hbox_scrollbar.aspx + + + region.aspx + ASPXCodeBehind + + + region.aspx + + + table_form.aspx + ASPXCodeBehind + + + table_form.aspx + + + vbox_autoheight.aspx + ASPXCodeBehind + + + vbox_autoheight.aspx + + + vbox_collapse.aspx + ASPXCodeBehind + + + vbox_collapse.aspx + + + vbox_form.aspx + ASPXCodeBehind + + + vbox_form.aspx + + + vbox_formgrid.aspx + ASPXCodeBehind + + + vbox_formgrid.aspx + + + vbox_hbox.aspx + ASPXCodeBehind + + + vbox_hbox.aspx + + + vbox_scrollbar.aspx + ASPXCodeBehind + + + vbox_scrollbar.aspx + + + formlist.aspx + ASPXCodeBehind + + + formlist.aspx + + + + list.aspx + ASPXCodeBehind + + + list.aspx + + + simple.aspx + ASPXCodeBehind + + + simple.aspx + + + Simple.Master + ASPXCodeBehind + + + Simple.Master + + + simple2.aspx + ASPXCodeBehind + + + simple2.aspx + + + SingleGrid.Master + ASPXCodeBehind + + + SingleGrid.Master + + + alert_download.aspx + ASPXCodeBehind + + + alert_download.aspx + + + alert_download_hide.aspx + ASPXCodeBehind + + + alert_download_hide.aspx + + + alert_download_hideiframe.aspx + ASPXCodeBehind + + + alert_download_hideiframe.aspx + + + alert_download_hideiframe_window.aspx + ASPXCodeBehind + + + alert_download_hideiframe_window.aspx + + + confirm_buttons.aspx + ASPXCodeBehind + + + confirm_buttons.aspx + + + authentication_timeout.aspx + ASPXCodeBehind + + + authentication_timeout.aspx + + + authentication_timeout_async.aspx + ASPXCodeBehind + + + authentication_timeout_async.aspx + + + global_error.aspx + ASPXCodeBehind + + + global_error.aspx + + + pageloading.aspx + ASPXCodeBehind + + + pageloading.aspx + + + tabstrip_position.aspx + ASPXCodeBehind + + + tabstrip_position.aspx + + + checkboxlist_update2.aspx + ASPXCodeBehind + + + checkboxlist_update2.aspx + + + empty.aspx + ASPXCodeBehind + + + empty.aspx + + + activex.aspx + ASPXCodeBehind + + + activex.aspx + + + form2.aspx + ASPXCodeBehind + + + form2.aspx + + + grid_editor_cell2.aspx + ASPXCodeBehind + + + grid_editor_cell2.aspx + + + test2.aspx + ASPXCodeBehind + + + test2.aspx + + + test.aspx + ASPXCodeBehind + + + test.aspx + + + inline_window.aspx + ASPXCodeBehind + + + inline_window.aspx + + + ckeditor_setvalue.aspx + ASPXCodeBehind + + + ckeditor_setvalue.aspx + + + ckeditor.aspx + ASPXCodeBehind + + + ckeditor.aspx + + + tinymce_setvalue.aspx + ASPXCodeBehind + + + tinymce_setvalue.aspx + + + tinymce.aspx + ASPXCodeBehind + + + tinymce.aspx + + + ueditor_setvalue.aspx + ASPXCodeBehind + + + ueditor_setvalue.aspx + + + ueditor.aspx + ASPXCodeBehind + + + ueditor.aspx + + + ueditor_two.aspx + ASPXCodeBehind + + + ueditor_two.aspx + + + button_custom.aspx + ASPXCodeBehind + + + button_custom.aspx + + + button_menu_menuid.aspx + ASPXCodeBehind + + + button_menu_menuid.aspx + + + source.aspx + ASPXCodeBehind + + + source.aspx + + + source_file.aspx + ASPXCodeBehind + + + source_file.aspx + + + form_reset.aspx + ASPXCodeBehind + + + form_reset.aspx + + + form_hide_field.aspx + ASPXCodeBehind + + + form_hide_field.aspx + + + form_center_button.aspx + ASPXCodeBehind + + + form_center_button.aspx + + + fileupload_toolbar.aspx + ASPXCodeBehind + + + fileupload_toolbar.aspx + + + form_disabled.aspx + ASPXCodeBehind + + + form_disabled.aspx + + + layout_contactus.aspx + ASPXCodeBehind + + + layout_contactus.aspx + + + layout_checkout.aspx + ASPXCodeBehind + + + layout_checkout.aspx + + + grid_editor_cell_databind.aspx + ASPXCodeBehind + + + grid_editor_cell_databind.aspx + + + grid_edit_compare.aspx + ASPXCodeBehind + + + grid_edit_compare.aspx + + + grid_edit_dropdownlist_textbox.aspx + ASPXCodeBehind + + + grid_edit_dropdownlist_textbox.aspx + + + grid_excel_dynamic_columns.aspx + ASPXCodeBehind + + + grid_excel_dynamic_columns.aspx + + + grid_simulate_tree_database_paging.aspx + ASPXCodeBehind + + + grid_simulate_tree_database_paging.aspx + + + grid_width_forcefit.aspx + ASPXCodeBehind + + + grid_width_forcefit.aspx + + + grid_width_expandunusedspace.aspx + ASPXCodeBehind + + + grid_width_expandunusedspace.aspx + + + grid_width.aspx + ASPXCodeBehind + + + grid_width.aspx + + + grid_checkboxfield_checkall.aspx + ASPXCodeBehind + + + grid_checkboxfield_checkall.aspx + + + grid_rowclick.aspx + ASPXCodeBehind + + + grid_rowclick.aspx + + + grid_rowdoubleclick.aspx + ASPXCodeBehind + + + grid_rowdoubleclick.aspx + + + grid_rowselect.aspx + ASPXCodeBehind + + + grid_rowselect.aspx + + + grid_edit_save_auto.aspx + ASPXCodeBehind + + + grid_edit_save_auto.aspx + + + grid_text_middle.aspx + ASPXCodeBehind + + + grid_text_middle.aspx + + + grid_simulate_tree_paging.aspx + ASPXCodeBehind + + + grid_simulate_tree_paging.aspx + + + grid_simulate_tree_database_paging_dropdownlist.aspx + ASPXCodeBehind + + + grid_simulate_tree_database_paging_dropdownlist.aspx + + + grid_hdmenu_hidecolumn.aspx + ASPXCodeBehind + + + grid_hdmenu_hidecolumn.aspx + + + grid_hdmenu_sorting.aspx + ASPXCodeBehind + + + grid_hdmenu_sorting.aspx + + + grid_text_top.aspx + ASPXCodeBehind + + + grid_text_top.aspx + + + grid_column_lines.aspx + ASPXCodeBehind + + + grid_column_lines.aspx + + + grid_empty_text.aspx + ASPXCodeBehind + + + grid_empty_text.aspx + + + grid_editor_cell.aspx + ASPXCodeBehind + + + grid_editor_cell.aspx + + + grid_groupheader_sort_hdmenu.aspx + ASPXCodeBehind + + + grid_groupheader_sort_hdmenu.aspx + + + grid_groupheader_sort.aspx + ASPXCodeBehind + + + grid_groupheader_sort.aspx + + + grid_paging_database_sorting.aspx + ASPXCodeBehind + + + grid_paging_database_sorting.aspx + + + grid_checkboxfield_rowcheckall.aspx + ASPXCodeBehind + + + grid_checkboxfield_rowcheckall.aspx + + + grid_editor_cell_new.aspx + ASPXCodeBehind + + + grid_editor_cell_new.aspx + + + grid_editor_cell_delete.aspx + ASPXCodeBehind + + + grid_editor_cell_delete.aspx + + + grid_checkall_only.aspx + ASPXCodeBehind + + + grid_checkall_only.aspx + + + grid_line_wrap.aspx + ASPXCodeBehind + + + grid_line_wrap.aspx + + + grid_editor_cell_renderfunction.aspx + ASPXCodeBehind + + + grid_editor_cell_renderfunction.aspx + + + grid_rowcommand_paging.aspx + ASPXCodeBehind + + + grid_rowcommand_paging.aspx + + + grid_rowcommand_paging_database.aspx + ASPXCodeBehind + + + grid_rowcommand_paging_database.aspx + + + grid_editor_cell_newdelete.aspx + ASPXCodeBehind + + + grid_editor_cell_newdelete.aspx + + + grid_editor_cell_afteredit.aspx + ASPXCodeBehind + + + grid_editor_cell_afteredit.aspx + + + grid_excel_selectcolumns.aspx + ASPXCodeBehind + + + grid_excel_selectcolumns.aspx + + + grid_summary.aspx + ASPXCodeBehind + + + grid_summary.aspx + + + grid_edit_enterkey_v.aspx + ASPXCodeBehind + + + grid_edit_enterkey_v.aspx + + + grid_edit_enterkey_h.aspx + ASPXCodeBehind + + + grid_edit_enterkey_h.aspx + + + grid_summary_currentpage.aspx + ASPXCodeBehind + + + grid_summary_currentpage.aspx + + + grid_checkboxfield_rowcheckall_clientside.aspx + ASPXCodeBehind + + + grid_checkboxfield_rowcheckall_clientside.aspx + + + grid_checkboxfield_rowcheckall_contextmenu.aspx + ASPXCodeBehind + + + grid_checkboxfield_rowcheckall_contextmenu.aspx + + + grid_excel_selectcolumns_iframe_window.aspx + ASPXCodeBehind + + + grid_excel_selectcolumns_iframe_window.aspx + + + grid_edit_cart.aspx + ASPXCodeBehind + + + grid_edit_cart.aspx + + + grid_rowcommand_download.aspx + ASPXCodeBehind + + + grid_rowcommand_download.aspx + + + grid_summary_scrollbar_bottom.aspx + ASPXCodeBehind + + + grid_summary_scrollbar_bottom.aspx + + + selectprovince1.aspx + ASPXCodeBehind + + + selectprovince1.aspx + + + selectprovince1_child.aspx + ASPXCodeBehind + + + selectprovince1_child.aspx + + + selectprovince2.aspx + ASPXCodeBehind + + + selectprovince2.aspx + + + selectprovince2_child.aspx + ASPXCodeBehind + + + selectprovince2_child.aspx + + + selectprovince3.aspx + ASPXCodeBehind + + + selectprovince3.aspx + + + selectprovince3_child.aspx + ASPXCodeBehind + + + selectprovince3_child.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + leftmenu.aspx + ASPXCodeBehind + + + leftmenu.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + leftmenu.aspx + ASPXCodeBehind + + + leftmenu.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + leftmenu.aspx + ASPXCodeBehind + + + leftmenu.aspx + + + window.aspx + ASPXCodeBehind + + + window.aspx + + + window_iframe.aspx + ASPXCodeBehind + + + window_iframe.aspx + + + window2.aspx + ASPXCodeBehind + + + window2.aspx + + + window2_iframe.aspx + ASPXCodeBehind + + + window2_iframe.aspx + + + keydown.aspx + ASPXCodeBehind + + + keydown.aspx + + + captcha.ashx + + + + hello_aspnet.aspx + ASPXCodeBehind + + + hello_aspnet.aspx + + + hello.aspx + ASPXCodeBehind + + + hello.aspx + + + login.aspx + ASPXCodeBehind + + + login.aspx + + + login_captcha.aspx + ASPXCodeBehind + + + login_captcha.aspx + + + button.aspx + ASPXCodeBehind + + + button.aspx + + + button_icon.aspx + ASPXCodeBehind + + + button_icon.aspx + + + button_click.aspx + ASPXCodeBehind + + + button_click.aspx + + + button_menu.aspx + ASPXCodeBehind + + + button_menu.aspx + + + button_linkbutton.aspx + ASPXCodeBehind + + + button_linkbutton.aspx + + + ASPXCodeBehind + + + dropdownlist_compositelist.aspx + ASPXCodeBehind + + + dropdownlist_compositelist.aspx + + + dropdownlist_datatable.aspx + ASPXCodeBehind + + + dropdownlist_datatable.aspx + + + dropdownlist_simulate_tree.aspx + ASPXCodeBehind + + + dropdownlist_simulate_tree.aspx + + + dropdownlist_simplelist.aspx + ASPXCodeBehind + + + dropdownlist_simplelist.aspx + + + dropdownlist_emptyvalue.aspx + ASPXCodeBehind + + + dropdownlist_emptyvalue.aspx + + + dropdownlist_forceselection.aspx + ASPXCodeBehind + + + dropdownlist_forceselection.aspx + + + dropdownlist_enableedit.aspx + ASPXCodeBehind + + + dropdownlist_enableedit.aspx + + + checkbox.aspx + ASPXCodeBehind + + + checkbox.aspx + + + fileupload.aspx + ASPXCodeBehind + + + fileupload.aspx + + + layout_panel.aspx + ASPXCodeBehind + + + layout_panel.aspx + + + twintriggerbox.aspx + ASPXCodeBehind + + + twintriggerbox.aspx + + + textbox.aspx + ASPXCodeBehind + + + textbox.aspx + + + textbox_autopostback.aspx + ASPXCodeBehind + + + textbox_autopostback.aspx + + + htmleditor.aspx + ASPXCodeBehind + + + htmleditor.aspx + + + label.aspx + ASPXCodeBehind + + + label.aspx + + + hyperlink.aspx + ASPXCodeBehind + + + hyperlink.aspx + + + datepicker.aspx + + + numberbox.aspx + ASPXCodeBehind + + + numberbox.aspx + + + tooltip.aspx + ASPXCodeBehind + + + tooltip.aspx + + + textarea_autogrow.aspx + ASPXCodeBehind + + + textarea_autogrow.aspx + + + checkboxlist.aspx + ASPXCodeBehind + + + checkboxlist.aspx + + + layout_panel_column.aspx + ASPXCodeBehind + + + layout_panel_column.aspx + + + datepicker_autopostback.aspx + ASPXCodeBehind + + + datepicker_autopostback.aspx + + + calendar.aspx + ASPXCodeBehind + + + calendar.aspx + + + datepicker_range.aspx + ASPXCodeBehind + + + datepicker_range.aspx + + + checkboxlist_update.aspx + ASPXCodeBehind + + + checkboxlist_update.aspx + + + radiobuttonlist_update.aspx + ASPXCodeBehind + + + radiobuttonlist_update.aspx + + + timepicker.aspx + ASPXCodeBehind + + + timepicker.aspx + + + fileupload_autopostback.aspx + ASPXCodeBehind + + + fileupload_autopostback.aspx + + + grid.aspx + ASPXCodeBehind + + + grid.aspx + + + grid_aspnet.aspx + ASPXCodeBehind + + + grid_aspnet.aspx + + + grid_checkboxfield.aspx + ASPXCodeBehind + + + grid_checkboxfield.aspx + + + grid_complex_property.aspx + ASPXCodeBehind + + + grid_complex_property.aspx + + + grid_paging_database.aspx + ASPXCodeBehind + + + grid_paging_database.aspx + + + grid_dynamic_columns.aspx + ASPXCodeBehind + + + grid_dynamic_columns.aspx + + + grid_excel.aspx + ASPXCodeBehind + + + grid_excel.aspx + + + grid_iframe.aspx + ASPXCodeBehind + + + grid_iframe.aspx + + + grid_iframe_window.aspx + ASPXCodeBehind + + + grid_iframe_window.aspx + + + grid_paging.aspx + ASPXCodeBehind + + + grid_paging.aspx + + + grid_rowdatabound.aspx + ASPXCodeBehind + + + grid_rowdatabound.aspx + + + grid_style_rowcolor.aspx + ASPXCodeBehind + + + grid_style_rowcolor.aspx + + + grid_simulate_tree.aspx + ASPXCodeBehind + + + grid_simulate_tree.aspx + + + grid_sorting.aspx + ASPXCodeBehind + + + grid_sorting.aspx + + + grid_checkall.aspx + ASPXCodeBehind + + + grid_checkall.aspx + + + grid_hidecolumn.aspx + ASPXCodeBehind + + + grid_hidecolumn.aspx + + + grid_rowcommand.aspx + ASPXCodeBehind + + + grid_rowcommand.aspx + + + grid_centercolumn.aspx + ASPXCodeBehind + + + grid_centercolumn.aspx + + + grid_rowexpander.aspx + ASPXCodeBehind + + + grid_rowexpander.aspx + + + grid_rowcheckall.aspx + ASPXCodeBehind + + + grid_rowcheckall.aspx + + + grid_paging_sorting.aspx + ASPXCodeBehind + + + grid_paging_sorting.aspx + + + grid_edit.aspx + ASPXCodeBehind + + + grid_edit.aspx + + + grid_edit_dropdownlist.aspx + ASPXCodeBehind + + + grid_edit_dropdownlist.aspx + + + grid_edit_dropdownlist2.aspx + ASPXCodeBehind + + + grid_edit_dropdownlist2.aspx + + + grid_edit_dropdownlist_update.aspx + ASPXCodeBehind + + + grid_edit_dropdownlist_update.aspx + + + grid_checkboxfield_autopostback.aspx + ASPXCodeBehind + + + grid_checkboxfield_autopostback.aspx + + + grid_twogrid.aspx + ASPXCodeBehind + + + grid_twogrid.aspx + + + grid_prerowdatabound.aspx + ASPXCodeBehind + + + grid_prerowdatabound.aspx + + + grid_rowexpander_expandall_js.aspx + ASPXCodeBehind + + + grid_rowexpander_expandall_js.aspx + + + grid_aspnet_rowdatabound.aspx + ASPXCodeBehind + + + grid_aspnet_rowdatabound.aspx + + + grid_rowexpander_expandall.aspx + ASPXCodeBehind + + + grid_rowexpander_expandall.aspx + + + grid_textselection.aspx + ASPXCodeBehind + + + grid_textselection.aspx + + + grid_groupheader.aspx + ASPXCodeBehind + + + grid_groupheader.aspx + + + grid_dynamic_columns2.aspx + ASPXCodeBehind + + + grid_dynamic_columns2.aspx + + + grid_excel_aspnet.aspx + ASPXCodeBehind + + + grid_excel_aspnet.aspx + + + grid_edit_radiobuttonlist.aspx + ASPXCodeBehind + + + grid_edit_radiobuttonlist.aspx + + + grid_edit_checkboxlist.aspx + ASPXCodeBehind + + + grid_edit_checkboxlist.aspx + + + grid_pageitems_pagesize.aspx + ASPXCodeBehind + + + grid_pageitems_pagesize.aspx + + + grid_pageitems_rowexpander.aspx + ASPXCodeBehind + + + grid_pageitems_rowexpander.aspx + + + grid_pageitems.aspx + ASPXCodeBehind + + + grid_pageitems.aspx + + + grid_pageitems_pagesize_database.aspx + ASPXCodeBehind + + + grid_pageitems_pagesize_database.aspx + + + grid_rownumber_paging.aspx + ASPXCodeBehind + + + grid_rownumber_paging.aspx + + + grid_rownumber_width.aspx + ASPXCodeBehind + + + grid_rownumber_width.aspx + + + grid_rownumber_paging_database.aspx + ASPXCodeBehind + + + grid_rownumber_paging_database.aspx + + + grid_paging_selection.aspx + ASPXCodeBehind + + + grid_paging_selection.aspx + + + grid_paging_database_selection.aspx + ASPXCodeBehind + + + grid_paging_database_selection.aspx + + + passvalue_iframe.aspx + ASPXCodeBehind + + + passvalue_iframe.aspx + + + passvalue_iframe_iframe.aspx + ASPXCodeBehind + + + passvalue_iframe_iframe.aspx + + + parent_postback_top.aspx + ASPXCodeBehind + + + parent_postback_top.aspx + + + parent_postback_top2.aspx + ASPXCodeBehind + + + parent_postback_top2.aspx + + + parent_postback_top3.aspx + ASPXCodeBehind + + + parent_postback_top3.aspx + + + parent_simplepostback.aspx + ASPXCodeBehind + + + parent_simplepostback.aspx + + + parent_simplepostback2.aspx + ASPXCodeBehind + + + parent_simplepostback2.aspx + + + table.aspx + ASPXCodeBehind + + + table.aspx + + + hbox.aspx + ASPXCodeBehind + + + hbox.aspx + + + vbox.aspx + ASPXCodeBehind + + + vbox.aspx + + + alert.aspx + ASPXCodeBehind + + + alert.aspx + + + confirm_cancel.aspx + ASPXCodeBehind + + + confirm_cancel.aspx + + + cssclass.aspx + ASPXCodeBehind + + + cssclass.aspx + + + confirm_cancel_customevent.aspx + ASPXCodeBehind + + + confirm_cancel_customevent.aspx + + + custom_postback2.aspx + ASPXCodeBehind + + + custom_postback2.aspx + + + tabstrip_iframe_disabled.aspx + ASPXCodeBehind + + + tabstrip_iframe_disabled.aspx + + + tabstrip_iframe_disabled_tab1.aspx + ASPXCodeBehind + + + tabstrip_iframe_disabled_tab1.aspx + + + custom_display.aspx + ASPXCodeBehind + + + custom_display.aspx + + + email.aspx + ASPXCodeBehind + + + email.aspx + + + inline.aspx + ASPXCodeBehind + + + inline.aspx + + + multi_values.aspx + ASPXCodeBehind + + + multi_values.aspx + + + multi_values_remote.aspx + ASPXCodeBehind + + + multi_values_remote.aspx + + + remote_with_cache.aspx + ASPXCodeBehind + + + remote_with_cache.aspx + + + search.ashx + + + my97.aspx + ASPXCodeBehind + + + my97.aspx + + + umeditor_setvalue.aspx + ASPXCodeBehind + + + umeditor_setvalue.aspx + + + umeditor.aspx + ASPXCodeBehind + + + umeditor.aspx + + + form.aspx + ASPXCodeBehind + + + form.aspx + + + formfields.aspx + ASPXCodeBehind + + + formfields.aspx + + + multi_toolbars.aspx + ASPXCodeBehind + + + multi_toolbars.aspx + + + toolbar_fill.aspx + ASPXCodeBehind + + + toolbar_fill.aspx + + + toolbar_iframe.aspx + ASPXCodeBehind + + + toolbar_iframe.aspx + + + cssstyle.aspx + ASPXCodeBehind + + + cssstyle.aspx + + + addtab.aspx + ASPXCodeBehind + + + addtab.aspx + + + ajax_loading.aspx + ASPXCodeBehind + + + ajax_loading.aspx + + + menu.aspx + ASPXCodeBehind + + + menu.aspx + + + menucheckbox.aspx + ASPXCodeBehind + + + menucheckbox.aspx + + + menu_hideonclick.aspx + ASPXCodeBehind + + + menu_hideonclick.aspx + + + toolbar_images.aspx + ASPXCodeBehind + + + toolbar_images.aspx + + + toolbar_images_fixedwidth.aspx + ASPXCodeBehind + + + toolbar_images_fixedwidth.aspx + + + tree_checked.aspx + ASPXCodeBehind + + + tree_checked.aspx + + + tree_multi_select_selectable.aspx + ASPXCodeBehind + + + tree_multi_select_selectable.aspx + + + tree_nodecommand.aspx + ASPXCodeBehind + + + tree_nodecommand.aspx + + + tree_contextmenu.aspx + ASPXCodeBehind + + + tree_contextmenu.aspx + + + tree_icon.aspx + ASPXCodeBehind + + + tree_icon.aspx + + + tree_select.aspx + ASPXCodeBehind + + + tree_select.aspx + + + tree_sitemap.aspx + ASPXCodeBehind + + + tree_sitemap.aspx + + + tree_datasource.aspx + ASPXCodeBehind + + + tree_datasource.aspx + + + tree_document.aspx + ASPXCodeBehind + + + tree_document.aspx + + + tree.aspx + ASPXCodeBehind + + + tree.aspx + + + tree_ajax.aspx + ASPXCodeBehind + + + tree_ajax.aspx + + + tree_datatable.aspx + ASPXCodeBehind + + + tree_datatable.aspx + + + tree_checkall.aspx + ASPXCodeBehind + + + tree_checkall.aspx + + + shengshixian.aspx + ASPXCodeBehind + + + shengshixian.aspx + + + dropdownlist.aspx + ASPXCodeBehind + + + dropdownlist.aspx + + + default.aspx + ASPXCodeBehind + + + default.aspx + + + form_dynamic.aspx + ASPXCodeBehind + + + form_dynamic.aspx + + + form_compare.aspx + ASPXCodeBehind + + + form_compare.aspx + + + form.aspx + ASPXCodeBehind + + + form.aspx + + + radiobutton.aspx + ASPXCodeBehind + + + radiobutton.aspx + + + datepicker.aspx + ASPXCodeBehind + + + triggerbox.aspx + ASPXCodeBehind + + + triggerbox.aspx + + + image.aspx + ASPXCodeBehind + + + image.aspx + + + form_validate.aspx + ASPXCodeBehind + + + form_validate.aspx + + + icons.aspx + ASPXCodeBehind + + + icons.aspx + + + radiobuttonlist.aspx + ASPXCodeBehind + + + radiobuttonlist.aspx + + + button_iframe.aspx + ASPXCodeBehind + + + button_iframe.aspx + + + grid_iframe.aspx + ASPXCodeBehind + + + grid_iframe.aspx + + + iframe_iframe.aspx + ASPXCodeBehind + + + iframe_iframe.aspx + + + iframe_iframe_window1.aspx + ASPXCodeBehind + + + iframe_iframe_window1.aspx + + + iframe_iframe_window2.aspx + ASPXCodeBehind + + + iframe_iframe_window2.aspx + + + triggerbox_iframe.aspx + ASPXCodeBehind + + + triggerbox_iframe.aspx + + + triggerbox_iframe_iframe.aspx + ASPXCodeBehind + + + triggerbox_iframe_iframe.aspx + + + parent_postback.aspx + ASPXCodeBehind + + + parent_postback.aspx + + + parent_postback2.aspx + ASPXCodeBehind + + + parent_postback2.aspx + + + parent_postback3.aspx + ASPXCodeBehind + + + parent_postback3.aspx + + + absolute.aspx + ASPXCodeBehind + + + absolute.aspx + + + accordion.aspx + ASPXCodeBehind + + + accordion.aspx + + + anchor.aspx + ASPXCodeBehind + + + anchor.aspx + + + card.aspx + ASPXCodeBehind + + + card.aspx + + + column.aspx + ASPXCodeBehind + + + column.aspx + + + fit.aspx + ASPXCodeBehind + + + fit.aspx + + + tabstrip_iframe.aspx + ASPXCodeBehind + + + tabstrip_iframe.aspx + + + tabstrip.aspx + ASPXCodeBehind + + + tabstrip.aspx + + + menu_dynamic2.aspx + ASPXCodeBehind + + + menu_dynamic2.aspx + + + menu_dynamic.aspx + ASPXCodeBehind + + + menu_dynamic.aspx + + + toolbar.aspx + ASPXCodeBehind + + + toolbar.aspx + + + accordion_tree.aspx + ASPXCodeBehind + + + accordion_tree.aspx + + + timer.aspx + ASPXCodeBehind + + + timer.aspx + + + custom_postback.aspx + ASPXCodeBehind + + + custom_postback.aspx + + + + tabstrip_enableclose.aspx + ASPXCodeBehind + + + tabstrip_enableclose.aspx + + + tabstrip_addtab.aspx + ASPXCodeBehind + + + tabstrip_addtab.aspx + + + tabstrip_autopostback.aspx + ASPXCodeBehind + + + tabstrip_autopostback.aspx + + + ajax.aspx + ASPXCodeBehind + + + ajax.aspx + + + tree_multi_select.aspx + ASPXCodeBehind + + + tree_multi_select.aspx + + + tree_expand.aspx + ASPXCodeBehind + + + tree_expand.aspx + + + tree_nodedatabound.aspx + ASPXCodeBehind + + + tree_nodedatabound.aspx + + + tree_node_cssclass.aspx + ASPXCodeBehind + + + tree_node_cssclass.aspx + + + tree_singleexpand.aspx + ASPXCodeBehind + + + tree_singleexpand.aspx + + + tree_textselection.aspx + ASPXCodeBehind + + + tree_textselection.aspx + + + UserInfoControl.ascx + ASPXCodeBehind + + + UserInfoControl.ascx + + + userinfo.aspx + ASPXCodeBehind + + + userinfo.aspx + + + userinfo2.aspx + ASPXCodeBehind + + + userinfo2.aspx + + + userinfo_dynamic.aspx + ASPXCodeBehind + + + userinfo_dynamic.aspx + + + group_panel.aspx + ASPXCodeBehind + + + group_panel.aspx + + + panel.aspx + ASPXCodeBehind + + + panel.aspx + + + panel_disabled.aspx + ASPXCodeBehind + + + panel_disabled.aspx + + + window.aspx + ASPXCodeBehind + + + window.aspx + + + window_minwidth.aspx + ASPXCodeBehind + + + window_minwidth.aspx + + + window_multi.aspx + ASPXCodeBehind + + + window_multi.aspx + + + window_toolbar.aspx + ASPXCodeBehind + + + window_toolbar.aspx + + + panel_collapse.aspx + ASPXCodeBehind + + + panel_collapse.aspx + + + window_form.aspx + ASPXCodeBehind + + + window_form.aspx + + + window_maximized.aspx + ASPXCodeBehind + + + window_maximized.aspx + + + window_maximized_fixed.aspx + ASPXCodeBehind + + + window_maximized_fixed.aspx + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0f8bf1f6-ddc2-43da-bb0b-416cc287ac1b} + FineUI + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + + True + True + 62105 + / + http://localhost:62106/ + False + False + + + False + + + + + \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/Global.asax b/FineUI_v6/FineUI.Examples/Global.asax new file mode 100644 index 0000000..3cd1abf --- /dev/null +++ b/FineUI_v6/FineUI.Examples/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="FineUI.Examples.Global" Language="C#" %> diff --git a/FineUI_v6/FineUI.Examples/Global.asax.cs b/FineUI_v6/FineUI.Examples/Global.asax.cs new file mode 100644 index 0000000..e6f771b --- /dev/null +++ b/FineUI_v6/FineUI.Examples/Global.asax.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.Security; +using System.Web.SessionState; + +namespace FineUI.Examples +{ + public class Global : System.Web.HttpApplication + { + + protected void Application_Start(object sender, EventArgs e) + { + Application["OnlineUserCount"] = 0; + } + + protected void Session_Start(object sender, EventArgs e) + { + // 这种统计在线人数的做法会有一定的误差 + Application.Lock(); + Application["OnlineUserCount"] = (int)Application["OnlineUserCount"] + 1; + Application.UnLock(); + } + + protected void Application_BeginRequest(object sender, EventArgs e) + { + + } + + protected void Application_AuthenticateRequest(object sender, EventArgs e) + { + + } + + protected void Application_Error(object sender, EventArgs e) + { + + } + + protected void Session_End(object sender, EventArgs e) + { + Application.Lock(); + Application["OnlineUserCount"] = (int)Application["OnlineUserCount"] - 1; + Application.UnLock(); + } + + protected void Application_End(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/Properties/AssemblyInfo.cs b/FineUI_v6/FineUI.Examples/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7db6077 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FineUI.Examples")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("FineUI")] +[assembly: AssemblyProduct("FineUI.Examples")] +[assembly: AssemblyCopyright("Copyright (C) 2008-2009 sanshi.ustc@gmail.com")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3d5900ae-111a-45be-96b3-d9e4606ca793")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/FineUI_v6/FineUI.Examples/Web.config b/FineUI_v6/FineUI.Examples/Web.config new file mode 100644 index 0000000..024bb7f --- /dev/null +++ b/FineUI_v6/FineUI.Examples/Web.config @@ -0,0 +1,85 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/Web.config_for_VS2013 b/FineUI_v6/FineUI.Examples/Web.config_for_VS2013 new file mode 100644 index 0000000..7c3ff43 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/Web.config_for_VS2013 @@ -0,0 +1,84 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion.aspx b/FineUI_v6/FineUI.Examples/accordion/accordion.aspx new file mode 100644 index 0000000..cc79b8b --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion.aspx @@ -0,0 +1,47 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion.aspx.cs" Inherits="FineUI.Examples.accordion.accordion" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion.aspx.cs b/FineUI_v6/FineUI.Examples/accordion/accordion.aspx.cs new file mode 100644 index 0000000..dbc371b --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion.aspx.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.accordion +{ + public partial class accordion : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void Button1_Click(object sender, EventArgs e) + { + Alert.ShowInTop(String.Format("当前展开的是第 {0} 个面板", Accordion1.ActivePaneIndex + 1)); + } + + protected void Button2_Click(object sender, EventArgs e) + { + var nextIndex = Accordion1.ActivePaneIndex + 1; + if (nextIndex >= Accordion1.Panes.Count) + { + nextIndex = 0; + } + + Accordion1.ActivePaneIndex = nextIndex; + } + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion.aspx.designer.cs b/FineUI_v6/FineUI.Examples/accordion/accordion.aspx.designer.cs new file mode 100644 index 0000000..5186617 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion.aspx.designer.cs @@ -0,0 +1,114 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.accordion { + + + public partial class accordion { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Accordion1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Accordion Accordion1; + + /// + /// AccordionPane1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane1; + + /// + /// Label1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label1; + + /// + /// AccordionPane2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane2; + + /// + /// Label2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label2; + + /// + /// AccordionPane3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane3; + + /// + /// Label3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label3; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx b/FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx new file mode 100644 index 0000000..44f4886 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx @@ -0,0 +1,43 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion_autopostback.aspx.cs" Inherits="FineUI.Examples.accordion.accordion_autopostback" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx.cs b/FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx.cs new file mode 100644 index 0000000..63423b9 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.accordion +{ + public partial class accordion_autopostback : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void Button1_Click(object sender, EventArgs e) + { + Alert.ShowInTop(String.Format("当前展开的是第 {0} 个面板", Accordion1.ActivePaneIndex + 1)); + } + + protected void Accordion1_PaneIndexChanged(object sender, EventArgs e) + { + Alert.ShowInTop(String.Format("当前展开的是第 {0} 个面板", Accordion1.ActivePaneIndex + 1)); + } + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx.designer.cs b/FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx.designer.cs new file mode 100644 index 0000000..9e5af00 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_autopostback.aspx.designer.cs @@ -0,0 +1,105 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.accordion { + + + public partial class accordion_autopostback { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Accordion1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Accordion Accordion1; + + /// + /// AccordionPane1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane1; + + /// + /// Label1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label1; + + /// + /// AccordionPane2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane2; + + /// + /// Label2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label2; + + /// + /// AccordionPane3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane3; + + /// + /// Label3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label3; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx b/FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx new file mode 100644 index 0000000..cb00f39 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx @@ -0,0 +1,47 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion_fill.aspx.cs" Inherits="FineUI.Examples.accordion.accordion_fill" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx.cs b/FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx.cs new file mode 100644 index 0000000..a1a6235 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.accordion +{ + public partial class accordion_fill : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void Button1_Click(object sender, EventArgs e) + { + ShowNotify(String.Format("当前展开的是第 {0} 个面板", Accordion1.ActivePaneIndex + 1)); + } + + protected void Button2_Click(object sender, EventArgs e) + { + var nextIndex = Accordion1.ActivePaneIndex + 1; + if (nextIndex >= Accordion1.Panes.Count) + { + nextIndex = 0; + } + + Accordion1.ActivePaneIndex = nextIndex; + } + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx.designer.cs b/FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx.designer.cs new file mode 100644 index 0000000..dd74458 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_fill.aspx.designer.cs @@ -0,0 +1,114 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.accordion { + + + public partial class accordion_fill { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Accordion1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Accordion Accordion1; + + /// + /// AccordionPane1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane1; + + /// + /// Label1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label1; + + /// + /// AccordionPane2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane2; + + /// + /// Label2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label2; + + /// + /// AccordionPane3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.AccordionPane AccordionPane3; + + /// + /// Label3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label Label3; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx b/FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx new file mode 100644 index 0000000..d945717 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx @@ -0,0 +1,71 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion_links.aspx.cs" + Inherits="ExtAspNet.Examples.accordion.accordion_links" %> + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Select Link 1 in Panel 3 +
+ + + + + + + diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx.cs b/FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx.cs new file mode 100644 index 0000000..042a28a --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace ExtAspNet.Examples.accordion +{ + public partial class accordion_links : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + + } + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx.designer.cs b/FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx.designer.cs new file mode 100644 index 0000000..4aa933d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_links.aspx.designer.cs @@ -0,0 +1,88 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:2.0.50727.3603 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace ExtAspNet.Examples.accordion { + + + public partial class accordion_links { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.PageManager PageManager1; + + /// + /// accordionMenu 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.Accordion accordionMenu; + + /// + /// AccordionPane1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionPane AccordionPane1; + + /// + /// AccordionPane2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionPane AccordionPane2; + + /// + /// linkFYBX 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionLink linkFYBX; + + /// + /// AccordionPane3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionPane AccordionPane3; + + /// + /// linkDSP 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::ExtAspNet.AccordionLink linkDSP; + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_links_iframe.htm b/FineUI_v6/FineUI.Examples/accordion/accordion_links_iframe.htm new file mode 100644 index 0000000..c4c03fa --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_links_iframe.htm @@ -0,0 +1,17 @@ + + + + + + + + This is a page in iframe. +
+ Select Link 2 in Panel 2 + + diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx b/FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx new file mode 100644 index 0000000..6adbb93 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx @@ -0,0 +1,45 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accordion_tree.aspx.cs" + Inherits="FineUI.Examples.accordion.accordion_tree" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx.cs b/FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx.cs new file mode 100644 index 0000000..1d13316 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.accordion +{ + public partial class accordion_tree : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + // 绑定 XML 数据源到树控件 + treeMenu.DataSource = XmlDataSource1; + treeMenu.DataBind(); + + ResolveTreeNode(treeMenu.Nodes); + } + } + + private void ResolveTreeNode(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (node.Nodes.Count == 0) + { + if (!String.IsNullOrEmpty(node.NavigateUrl)) + { + node.Target = "main"; + } + } + else + { + ResolveTreeNode(node.Nodes); + } + } + + } + + + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx.designer.cs b/FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx.designer.cs new file mode 100644 index 0000000..b52da00 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_tree.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.accordion { + + + public partial class accordion_tree { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// RegionPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.RegionPanel RegionPanel1; + + /// + /// Region2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Region Region2; + + /// + /// treeMenu 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Tree treeMenu; + + /// + /// Region3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Region Region3; + + /// + /// XmlDataSource1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.XmlDataSource XmlDataSource1; + } +} diff --git a/FineUI_v6/FineUI.Examples/accordion/accordion_tree_index.htm b/FineUI_v6/FineUI.Examples/accordion/accordion_tree_index.htm new file mode 100644 index 0000000..be012f5 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/accordion/accordion_tree_index.htm @@ -0,0 +1,15 @@ + + + + + + + 请注意,本示例如何做到如下几点: +
    +
  • 如何将树控件放在Accordion控件中;
  • +
  • 如何从XML文件加载树控件;
  • +
  • 如何在后台通过递归改变每个树节点的Target属性;
  • +
  • 树节点的Target属性是如何影响链接的打开位置。
  • +
+ + diff --git a/FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx b/FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx new file mode 100644 index 0000000..7574d2e --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx @@ -0,0 +1,24 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestWindow.aspx.cs" Inherits="FineUI.Examples.aspnet.TestWindow" %> + + + + + + + + +
+ + + + +
+
+ + + diff --git a/FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx.cs b/FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx.cs new file mode 100644 index 0000000..9d49c54 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; + +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.aspnet +{ + public partial class TestWindow : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnTest_Click(object sender, EventArgs e) + { + FineUI.Alert.Show("出现滚动条后,出错了吗?"); + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx.designer.cs b/FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx.designer.cs new file mode 100644 index 0000000..cfe85b3 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/TestWindow.aspx.designer.cs @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class TestWindow { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnTest 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnTest; + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx b/FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx new file mode 100644 index 0000000..fbf1545 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx @@ -0,0 +1,36 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="aspnet.aspx.cs" Inherits="FineUI.Examples.aspnet.aspnet" %> + + + + + + + +
+ + + + +
+ +
+ + + + +
+ + +
+ 注意: +
    +
  • 【3. ASP.NET 按钮(AJAX)】设置了属性UseSubmitBehavior=false,点击此按钮是AJAX回发。
  • +
  • 【4. ASP.NET 按钮】设置了属性UseSubmitBehavior=true,点击此按钮会导致整个页面回发。
  • +
  • 由于【4. ASP.NET 按钮】在客户端会被渲染为input[type=submit],所以在两个文本输入框内按回车键都会导致整个页面回发。
  • +
+ + + diff --git a/FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx.cs b/FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx.cs new file mode 100644 index 0000000..c41c23d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.aspnet +{ + public partial class aspnet : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void Button1_Click(object sender, EventArgs e) + { + aspBox.Text = "1. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); + extBox.Text = "1. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); + } + + protected void Button2_Click(object sender, EventArgs e) + { + aspBox.Text = "2. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); + extBox.Text = "2. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); + } + + protected void Button3_Click(object sender, EventArgs e) + { + aspBox.Text = "3. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); + extBox.Text = "3. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); + } + + + protected void Button4_Click(object sender, EventArgs e) + { + aspBox.Text = "4. ASP.NET 输入框 - " + DateTime.Now.ToLongTimeString(); + extBox.Text = "4. FineUI 输入框 - " + DateTime.Now.ToLongTimeString(); + } + + + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx.designer.cs b/FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx.designer.cs new file mode 100644 index 0000000..ce6ac29 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/aspnet.aspx.designer.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class aspnet { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// ContentPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.ContentPanel ContentPanel1; + + /// + /// extBox 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox extBox; + + /// + /// aspBox 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.TextBox aspBox; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + + /// + /// Button3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Button Button3; + + /// + /// Button4 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Button Button4; + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx b/FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx new file mode 100644 index 0000000..c0babf8 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx @@ -0,0 +1,26 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="aspnet_literal.aspx.cs" + Inherits="FineUI.Examples.aspnet.aspnet_literal" %> + + + + + + + +
+ + +
+ +
+
+ +
+
+ + +
+ 注意:只有Label1和Literal2的值更新了。 + + + diff --git a/FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx.cs b/FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx.cs new file mode 100644 index 0000000..35334c0 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.aspnet +{ + public partial class aspnet_literal : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void Button1_Click(object sender, EventArgs e) + { + Label1.Text = "Label1 - " + DateTime.Now.ToLongTimeString(); + Literal1.Text = "Literal1 - " + DateTime.Now.ToLongTimeString(); + Literal2.Text = "Literal2 - " + DateTime.Now.ToLongTimeString(); + } + + + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx.designer.cs b/FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx.designer.cs new file mode 100644 index 0000000..227e39c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/aspnet_literal.aspx.designer.cs @@ -0,0 +1,69 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class aspnet_literal { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Label1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Label Label1; + + /// + /// Literal1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal Literal1; + + /// + /// Literal2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal Literal2; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx b/FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx new file mode 100644 index 0000000..8bd9bb3 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx @@ -0,0 +1,44 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ckeditor.aspx.cs" ValidateRequest="false" + Inherits="FineUI.Examples.aspnet.ckeditor" %> + +<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %> + + + + + + + +
+ + + + <p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p> + + +
+ + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx.cs b/FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx.cs new file mode 100644 index 0000000..7da48e0 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.aspnet +{ + public partial class ckeditor : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + //CKEditor1.config.toolbar = new object[] + // { + // new object[] { "Source", "-", "Save", "NewPage", "Preview", "-", "Templates" }, + // new object[] { "Cut", "Copy", "Paste", "PasteText", "PasteFromWord", "-", "Print", "SpellChecker", "Scayt" }, + // new object[] { "Undo", "Redo", "-", "Find", "Replace", "-", "SelectAll", "RemoveFormat" }, + // new object[] { "Form", "Checkbox", "Radio", "TextField", "Textarea", "Select", "Button", "ImageButton", "HiddenField" }, + // "/", + // new object[] { "Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript" }, + // new object[] { "NumberedList", "BulletedList", "-", "Outdent", "Indent", "Blockquote", "CreateDiv" }, + // new object[] { "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock" }, + // new object[] { "BidiLtr", "BidiRtl" }, + // new object[] { "Link", "Unlink", "Anchor" }, + // new object[] { "Image", "Flash", "Table", "HorizontalRule", "Smiley", "SpecialChar", "PageBreak", "Iframe" }, + // "/", + // new object[] { "Styles", "Format", "Font", "FontSize" }, + // new object[] { "TextColor", "BGColor" }, + // new object[] { "Maximize", "ShowBlocks", "-", "About" } + // }; + + //CKEditor1.config.toolbar = new object[] + // { + // new object[] { "Bold", "Italic", "-", "NumberedList", "BulletedList", "-", "Link", "Unlink", "-", "About" }, + // new object[] { "Cut", "Copy", "Paste", "PasteText", "PasteFromWord", "-", "Print", "SpellChecker", "Scayt" }, + // }; + + } + } + + protected void Button1_Click(object sender, EventArgs e) + { + Alert.ShowInTop(HttpUtility.HtmlEncode(CKEditor1.Text)); + } + + protected void Button2_Click(object sender, EventArgs e) + { + string content = "

FineUI - 基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。

"; + + PageContext.RegisterStartupScript(String.Format("updateCKEditor({0});", JsHelper.Enquote(content))); + } + + + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx.designer.cs b/FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx.designer.cs new file mode 100644 index 0000000..c755433 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/ckeditor.aspx.designer.cs @@ -0,0 +1,69 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class ckeditor { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// ContentPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.ContentPanel ContentPanel1; + + /// + /// CKEditor1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::CKEditor.NET.CKEditorControl CKEditor1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx b/FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx new file mode 100644 index 0000000..3ac0bfe --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx @@ -0,0 +1,34 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="fckeditor.aspx.cs" ValidateRequest="false" + Inherits="FineUI.Examples.aspnet.fckeditor2" %> + +<%@ Register Assembly="FredCK.FCKeditorV2" Namespace="FredCK.FCKeditorV2" TagPrefix="FCKeditorV2" %> + + + + + + + +
+ + + + + +
+ + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx.cs b/FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx.cs new file mode 100644 index 0000000..e6a6dfa --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.aspnet +{ + public partial class fckeditor2 : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + FCKeditor1.Value = "

This is some sample text. You are using FCKEditor.

"; + } + } + + protected void Button1_Click(object sender, EventArgs e) + { + Alert.ShowInTop(HttpUtility.HtmlEncode(FCKeditor1.Value)); + } + + protected void Button2_Click(object sender, EventArgs e) + { + string content = "

FineUI - 基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。

"; + + PageContext.RegisterStartupScript(String.Format("updateFCKEditor({0});", JsHelper.Enquote(content))); + } + + + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx.designer.cs b/FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx.designer.cs new file mode 100644 index 0000000..b23bc4c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/fckeditor.aspx.designer.cs @@ -0,0 +1,69 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class fckeditor2 { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// ContentPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.ContentPanel ContentPanel1; + + /// + /// FCKeditor1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FredCK.FCKeditorV2.FCKeditor FCKeditor1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx b/FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx new file mode 100644 index 0000000..d67c635 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx @@ -0,0 +1,36 @@ +<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" CodeBehind="fileupload.aspx.cs" + Inherits="FineUI.Examples.aspnet.fileupload2" %> + +<%@ Register Assembly="FredCK.FCKeditorV2" Namespace="FredCK.FCKeditorV2" TagPrefix="FCKeditorV2" %> + + + + + + + +
+ + + Asp.Net上传控件: + +
+
+ + +
+ +
+
+ 注意:在页面上使用 asp:FileUpload 控件时,必须设置 PageManager 的 EnableAjax 为 false。 +
+
+
+ 推荐使用 FineUI 提供的 FileUpload 控件,这样就不需要设置 EnableAjax 为 false 了。 +
+
+ + + diff --git a/FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx.cs b/FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx.cs new file mode 100644 index 0000000..f3ca339 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.aspnet +{ + public partial class fileupload2 : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + + protected void btnCloseWindow2_Click(object sender, EventArgs e) + { + if (FileUpload1.HasFile) + { + FileUpload1.SaveAs(Server.MapPath("~/upload/" + FileUpload1.FileName)); + } + Alert.ShowInTop("FCKEditor的值:" + HttpUtility.HtmlEncode(FCKeditor1.Value)); + } + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx.designer.cs b/FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx.designer.cs new file mode 100644 index 0000000..fcdc6bc --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/fileupload.aspx.designer.cs @@ -0,0 +1,69 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class fileupload2 { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// ContentPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.ContentPanel ContentPanel1; + + /// + /// FileUpload1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.FileUpload FileUpload1; + + /// + /// FCKeditor1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FredCK.FCKeditorV2.FCKeditor FCKeditor1; + + /// + /// btnCloseWindow2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Button btnCloseWindow2; + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/test.aspx b/FineUI_v6/FineUI.Examples/aspnet/test.aspx new file mode 100644 index 0000000..7f77f71 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/test.aspx @@ -0,0 +1,35 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="FineUI.Examples.aspnet.test" %> + + + + + + + + +
+ + +
+ +
+
+ +
+
+ + +
+ +
+ +
+ + + diff --git a/FineUI_v6/FineUI.Examples/aspnet/test.aspx.cs b/FineUI_v6/FineUI.Examples/aspnet/test.aspx.cs new file mode 100644 index 0000000..88b37c0 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/test.aspx.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.aspnet +{ + public partial class test : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void Button1_Click(object sender, EventArgs e) + { + //Label1.Text = "Label1 - " + DateTime.Now.ToLongTimeString(); + //Literal1.Text = "Literal1 - " + DateTime.Now.ToLongTimeString(); + //Literal2.Text = "Literal2 - " + DateTime.Now.ToLongTimeString(); + EditTaskWin.IFrameUrl = "TestWindow.aspx"; + EditTaskWin.Hidden = false; + } + + + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/test.aspx.designer.cs b/FineUI_v6/FineUI.Examples/aspnet/test.aspx.designer.cs new file mode 100644 index 0000000..b061228 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/test.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class test { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Label1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Label Label1; + + /// + /// Literal1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal Literal1; + + /// + /// Literal2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal Literal2; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// EditTaskWin 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Window EditTaskWin; + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx b/FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx new file mode 100644 index 0000000..f0444e5 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx @@ -0,0 +1,83 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ueditor.aspx.cs" ValidateRequest="false" + Inherits="FineUI.Examples.aspnet.ueditor" %> + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx.cs b/FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx.cs new file mode 100644 index 0000000..8d36bb5 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.aspnet +{ + public partial class ueditor : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + //string content = "初始化内容"; + //PageContext.RegisterStartupScript(String.Format("updateUEditor({0});", JsHelper.Enquote(content))); + + } + } + + protected void Button1_Click(object sender, EventArgs e) + { + string ueditorContent = Request.Form["UEditor1"].ToString(); + Alert.ShowInTop(HttpUtility.HtmlEncode(ueditorContent)); + } + + protected void Button2_Click(object sender, EventArgs e) + { + string content = "

FineUI - 基于 ExtJS 的专业 ASP.NET 控件库,拥有完善的 AJAX 支持和丰富的界面效果。

"; + + PageContext.RegisterStartupScript(String.Format("updateUEditor({0});", JsHelper.Enquote(content))); + } + + + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx.designer.cs b/FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx.designer.cs new file mode 100644 index 0000000..37f268b --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/ueditor.aspx.designer.cs @@ -0,0 +1,60 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class ueditor { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// ContentPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.ContentPanel ContentPanel1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx b/FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx new file mode 100644 index 0000000..1cd9705 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx @@ -0,0 +1,151 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ueditor_two.aspx.cs" ValidateRequest="false" + Inherits="FineUI.Examples.aspnet.ueditor_two" %> + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
文章正文: + +
文章摘要: + +
+
+ +
+ + + + + + + + + + +
+ + +
+ + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx.cs b/FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx.cs new file mode 100644 index 0000000..f967299 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; +using System.Text.RegularExpressions; + +namespace FineUI.Examples.aspnet +{ + public partial class ueditor_two : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + + } + } + + protected void Button1_Click(object sender, EventArgs e) + { + string editor1Content = Request.Form["UEditor1"].ToString(); + string editor2Content = Request.Form["UEditor2"].ToString(); + if (String.IsNullOrEmpty(editor1Content)) + { + Alert.ShowInTop("文章正文不能为空!"); + return; + } + + Alert.ShowInTop("文章标题:" + tbxTitle.Text + + "
" + "文章正文:" + HttpUtility.HtmlEncode(editor1Content) + + "
" + "文章摘要:" + HttpUtility.HtmlEncode(editor2Content)); + } + + protected void Button2_Click(object sender, EventArgs e) + { + string content = Request.Form["UEditor1"].ToString(); + Regex regex = new Regex(@"<[^>]+>|]+>"); + content = regex.Replace(content, ""); + if (content.Length > 100) + { + content = content.Substring(0, 97) + "..."; + } + + PageContext.RegisterStartupScript(String.Format("updateUEditor2({0});", JsHelper.Enquote(content))); + } + + + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx.designer.cs b/FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx.designer.cs new file mode 100644 index 0000000..664d4d8 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/aspnet/ueditor_two.aspx.designer.cs @@ -0,0 +1,87 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.aspnet { + + + public partial class ueditor_two { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// tbxTitle 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxTitle; + + /// + /// ContentPanel1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.ContentPanel ContentPanel1; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/Captcha/CaptchaImage.cs b/FineUI_v6/FineUI.Examples/basic/Captcha/CaptchaImage.cs new file mode 100644 index 0000000..e402dde --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/Captcha/CaptchaImage.cs @@ -0,0 +1,198 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Drawing.Text; + + +namespace CaptchaImage +{ + /// + /// ֤ͼƬĴԣhttp://www.codeproject.com/KB/aspnet/CaptchaImage.aspx + /// + public class CaptchaImage + { + // Public properties (all read-only). + public string Text + { + get { return this.text; } + } + public Bitmap Image + { + get { return this.image; } + } + public int Width + { + get { return this.width; } + } + public int Height + { + get { return this.height; } + } + + // Internal properties. + private string text; + private int width; + private int height; + private string familyName; + private Bitmap image; + + // For generating random numbers. + private Random random = new Random(); + + // ==================================================================== + // Initializes a new instance of the CaptchaImage class using the + // specified text, width and height. + // ==================================================================== + public CaptchaImage(string s, int width, int height) + { + this.text = s; + this.SetDimensions(width, height); + this.GenerateImage(); + } + + // ==================================================================== + // Initializes a new instance of the CaptchaImage class using the + // specified text, width, height and font family. + // ==================================================================== + public CaptchaImage(string s, int width, int height, string familyName) + { + this.text = s; + this.SetDimensions(width, height); + this.SetFamilyName(familyName); + this.GenerateImage(); + } + + // ==================================================================== + // This member overrides Object.Finalize. + // ==================================================================== + ~CaptchaImage() + { + Dispose(false); + } + + // ==================================================================== + // Releases all resources used by this object. + // ==================================================================== + public void Dispose() + { + GC.SuppressFinalize(this); + this.Dispose(true); + } + + // ==================================================================== + // Custom Dispose method to clean up unmanaged resources. + // ==================================================================== + protected virtual void Dispose(bool disposing) + { + if (disposing) + // Dispose of the bitmap. + this.image.Dispose(); + } + + // ==================================================================== + // Sets the image width and height. + // ==================================================================== + private void SetDimensions(int width, int height) + { + // Check the width and height. + if (width <= 0) + throw new ArgumentOutOfRangeException("width", width, "Argument out of range, must be greater than zero."); + if (height <= 0) + throw new ArgumentOutOfRangeException("height", height, "Argument out of range, must be greater than zero."); + this.width = width; + this.height = height; + } + + // ==================================================================== + // Sets the font used for the image text. + // ==================================================================== + private void SetFamilyName(string familyName) + { + // If the named font is not installed, default to a system font. + try + { + Font font = new Font(this.familyName, 13F); + this.familyName = familyName; + font.Dispose(); + } + catch (Exception) + { + this.familyName = System.Drawing.FontFamily.GenericSerif.Name; + } + } + + // ==================================================================== + // Creates the bitmap image. + // ==================================================================== + private void GenerateImage() + { + // Create a new 32-bit bitmap image. + Bitmap bitmap = new Bitmap(this.width, this.height, PixelFormat.Format32bppArgb); + + // Create a graphics object for drawing. + Graphics g = Graphics.FromImage(bitmap); + g.SmoothingMode = SmoothingMode.AntiAlias; + Rectangle rect = new Rectangle(0, 0, this.width, this.height); + + // Fill in the background. + HatchBrush hatchBrush = new HatchBrush(HatchStyle.SmallConfetti, Color.LightGray, Color.White); + g.FillRectangle(hatchBrush, rect); + + // Set up the text font. + SizeF size; + float fontSize = rect.Height + 1; + Font font; + // Adjust the font size until the text fits within the image. + do + { + fontSize--; + font = new Font(this.familyName, fontSize, FontStyle.Bold); + size = g.MeasureString(this.text, font); + } while (size.Width > rect.Width); + + // Set up the text format. + StringFormat format = new StringFormat(); + format.Alignment = StringAlignment.Center; + format.LineAlignment = StringAlignment.Center; + + // Create a path using the text and warp it randomly. + GraphicsPath path = new GraphicsPath(); + path.AddString(this.text, font.FontFamily, (int)font.Style, font.Size, rect, format); + float v = 8F; + PointF[] points = + { + new PointF(this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v), + new PointF(rect.Width - this.random.Next(rect.Width) / v, this.random.Next(rect.Height) / v), + new PointF(this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v), + new PointF(rect.Width - this.random.Next(rect.Width) / v, rect.Height - this.random.Next(rect.Height) / v) + }; + Matrix matrix = new Matrix(); + matrix.Translate(0F, 0F); + path.Warp(points, rect, matrix, WarpMode.Perspective, 0F); + + // Draw the text. + hatchBrush = new HatchBrush(HatchStyle.LargeConfetti, Color.Green, Color.DarkGray); + g.FillPath(hatchBrush, path); + + // Add some random noise. + int m = Math.Max(rect.Width, rect.Height); + for (int i = 0; i < (int)(rect.Width * rect.Height / 30F); i++) + { + int x = this.random.Next(rect.Width); + int y = this.random.Next(rect.Height); + int w = this.random.Next(m / 50); + int h = this.random.Next(m / 50); + g.FillEllipse(hatchBrush, x, y, w, h); + } + + // Clean up. + font.Dispose(); + hatchBrush.Dispose(); + g.Dispose(); + + // Set the image. + this.image = bitmap; + } + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/Captcha/captcha.ashx b/FineUI_v6/FineUI.Examples/basic/Captcha/captcha.ashx new file mode 100644 index 0000000..eb23e17 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/Captcha/captcha.ashx @@ -0,0 +1 @@ +<%@ WebHandler Language="C#" CodeBehind="captcha.ashx.cs" Class="FineUI.Examples.basic.Captcha.captcha" %> diff --git a/FineUI_v6/FineUI.Examples/basic/Captcha/captcha.ashx.cs b/FineUI_v6/FineUI.Examples/basic/Captcha/captcha.ashx.cs new file mode 100644 index 0000000..76fd6c0 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/Captcha/captcha.ashx.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.Services; +using System.Web.SessionState; +using System.Drawing.Imaging; + +namespace FineUI.Examples.basic.Captcha +{ + /// + /// 生成验证码图片 + /// + [WebService(Namespace = "http://tempuri.org/")] + [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] + public class captcha : IHttpHandler, IReadOnlySessionState + { + + public void ProcessRequest(HttpContext context) + { + int width = 200; + int height = 30; + + try + { + width = Convert.ToInt32(context.Request.QueryString["w"]); + height = Convert.ToInt32(context.Request.QueryString["h"]); + } + catch (Exception) + { + // Nothing + } + + // 从 Session 中读取验证码,并创建图片 + CaptchaImage.CaptchaImage ci = new CaptchaImage.CaptchaImage(context.Session["CaptchaImageText"].ToString(), width, height, "Consolas"); + + // 输出图片 + context.Response.Clear(); + context.Response.ContentType = "image/jpeg"; + + ci.Image.Save(context.Response.OutputStream, ImageFormat.Jpeg); + + ci.Dispose(); + } + + public bool IsReusable + { + get + { + return false; + } + } + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/hello.aspx b/FineUI_v6/FineUI.Examples/basic/hello.aspx new file mode 100644 index 0000000..628f23e --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/hello.aspx @@ -0,0 +1,19 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="hello.aspx.cs" Inherits="FineUI.Examples.basic.hello" %> + + + + + + + +
+ + + +
+
+ + + + + diff --git a/FineUI_v6/FineUI.Examples/basic/hello.aspx.cs b/FineUI_v6/FineUI.Examples/basic/hello.aspx.cs new file mode 100644 index 0000000..408d526 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/hello.aspx.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.basic +{ + public partial class hello : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnHello_Click(object sender, EventArgs e) + { + Alert.Show("你好 FineUI!", MessageBoxIcon.Warning); + } + + protected void btnHello2_Click(object sender, EventArgs e) + { + Alert.ShowInTop("你好 FineUI!", MessageBoxIcon.Information); + } + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/hello.aspx.designer.cs b/FineUI_v6/FineUI.Examples/basic/hello.aspx.designer.cs new file mode 100644 index 0000000..77b5c4f --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/hello.aspx.designer.cs @@ -0,0 +1,51 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class hello { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnHello 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnHello; + + /// + /// btnHello2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnHello2; + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx b/FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx new file mode 100644 index 0000000..b4beba6 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx @@ -0,0 +1,13 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="hello_aspnet.aspx.cs" Inherits="FineUI.Examples.basic.hello_aspnet" %> + + + + + + + +
+ + + + diff --git a/FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx.cs b/FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx.cs new file mode 100644 index 0000000..b28e4d1 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.basic +{ + public partial class hello_aspnet : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnHello_Click(object sender, EventArgs e) + { + Page.ClientScript.RegisterStartupScript(this.GetType(), "alert_hello", "alert('你好 Asp.Net!');", true); + } + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx.designer.cs b/FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx.designer.cs new file mode 100644 index 0000000..836ee0b --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/hello_aspnet.aspx.designer.cs @@ -0,0 +1,33 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class hello_aspnet { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// btnHello 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Button btnHello; + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/login.aspx b/FineUI_v6/FineUI.Examples/basic/login.aspx new file mode 100644 index 0000000..93d238c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/login.aspx @@ -0,0 +1,46 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="FineUI.Examples.basic.login" %> + + + + + + + +
+ + 用户名:admin +
+ 密码:admin +
+
+
+ 注意:在任意输入框内按回车键都会触发表单的提交(相当于点击【登陆】按钮)。 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/basic/login.aspx.cs b/FineUI_v6/FineUI.Examples/basic/login.aspx.cs new file mode 100644 index 0000000..5611edb --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/login.aspx.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.basic +{ + public partial class login : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnLogin_Click(object sender, EventArgs e) + { + if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin") + { + Alert.ShowInTop("成功登录!"); + } + else + { + Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error); + } + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/login.aspx.designer.cs b/FineUI_v6/FineUI.Examples/basic/login.aspx.designer.cs new file mode 100644 index 0000000..2aca126 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/login.aspx.designer.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class login { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Window1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Window Window1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// tbxUserName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxUserName; + + /// + /// tbxPassword 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxPassword; + + /// + /// Toolbar1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Toolbar Toolbar1; + + /// + /// btnLogin 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnLogin; + + /// + /// btnReset 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnReset; + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/login_captcha.aspx b/FineUI_v6/FineUI.Examples/basic/login_captcha.aspx new file mode 100644 index 0000000..0daed1e --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/login_captcha.aspx @@ -0,0 +1,57 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login_captcha.aspx.cs" + Inherits="FineUI.Examples.basic.login_captcha" %> + + + + + + + +
+ + 用户名:admin +
+ 密码:admin +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/basic/login_captcha.aspx.cs b/FineUI_v6/FineUI.Examples/basic/login_captcha.aspx.cs new file mode 100644 index 0000000..f04b4c0 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/login_captcha.aspx.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.basic +{ + public partial class login_captcha : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + LoadData(); + } + } + + + private void LoadData() + { + InitCaptchaCode(); + } + + /// + /// 初始化验证码 + /// + private void InitCaptchaCode() + { + // 创建一个 6 位的随机数并保存在 Session 对象中 + Session["CaptchaImageText"] = GenerateRandomCode(); + imgCaptcha.ImageUrl = "~/basic/captcha/captcha.ashx?w=150&h=30&t=" + DateTime.Now.Ticks; + } + + /// + /// 创建一个 6 位的随机数 + /// + /// + private string GenerateRandomCode() + { + string s = String.Empty; + Random random = new Random(); + for (int i = 0; i < 6; i++) + { + s += random.Next(10).ToString(); + } + return s; + } + + protected void btnRefresh_Click(object sender, EventArgs e) + { + InitCaptchaCode(); + } + + protected void btnLogin_Click(object sender, EventArgs e) + { + if (tbxCaptcha.Text != Session["CaptchaImageText"].ToString()) + { + Alert.ShowInTop("验证码错误!"); + return; + } + + if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin") + { + Alert.ShowInTop("成功登录!"); + } + else + { + Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error); + } + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/login_captcha.aspx.designer.cs b/FineUI_v6/FineUI.Examples/basic/login_captcha.aspx.designer.cs new file mode 100644 index 0000000..9435b78 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/login_captcha.aspx.designer.cs @@ -0,0 +1,123 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class login_captcha { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Window1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Window Window1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// tbxUserName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxUserName; + + /// + /// tbxPassword 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxPassword; + + /// + /// tbxCaptcha 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxCaptcha; + + /// + /// imgCaptcha 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Image imgCaptcha; + + /// + /// btnRefresh 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.LinkButton btnRefresh; + + /// + /// Toolbar1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Toolbar Toolbar1; + + /// + /// btnLogin 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnLogin; + + /// + /// btnReset 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnReset; + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx b/FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx new file mode 100644 index 0000000..aaca7cb --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx @@ -0,0 +1,46 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login_enterkey.aspx.cs" Inherits="FineUI.Examples.basic.login_enterkey" %> + + + + + + + +
+ + 用户名:admin +
+ 密码:admin +
+
+
+ 注意:在表单内按回车键会导航到下一个控件。 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx.cs b/FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx.cs new file mode 100644 index 0000000..d0c3af2 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.basic +{ + public partial class login_enterkey : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnLogin_Click(object sender, EventArgs e) + { + if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin") + { + Alert.ShowInTop("成功登录!"); + } + else + { + Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error); + } + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx.designer.cs b/FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx.designer.cs new file mode 100644 index 0000000..98d797a --- /dev/null +++ b/FineUI_v6/FineUI.Examples/basic/login_enterkey.aspx.designer.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.basic { + + + public partial class login_enterkey { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Window1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Window Window1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// tbxUserName 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxUserName; + + /// + /// tbxPassword 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TextBox tbxPassword; + + /// + /// Toolbar1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Toolbar Toolbar1; + + /// + /// btnLogin 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnLogin; + + /// + /// btnReset 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnReset; + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button.aspx b/FineUI_v6/FineUI.Examples/button/button.aspx new file mode 100644 index 0000000..8e64cb4 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button.aspx @@ -0,0 +1,39 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button.aspx.cs" Inherits="FineUI.Examples.button.button" %> + + + + + + + + +
+ + + +
+
+ + +
+
+ + +
+
+ + + + + + diff --git a/FineUI_v6/FineUI.Examples/button/button.aspx.cs b/FineUI_v6/FineUI.Examples/button/button.aspx.cs new file mode 100644 index 0000000..19ce00f --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button.aspx.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnChangeEnable_Click(object sender, EventArgs e) + { + btnEnable.Enabled = true; + btnEnable.Text = "本按钮已经启用(点击弹出对话框)"; + } + + protected void btnEnable_Click(object sender, EventArgs e) + { + Alert.ShowInTop("你点击了刚刚启用的按钮"); + } + + + protected void btnTooltip_Click(object sender, EventArgs e) + { + btnTooltip.ToolTip = "这是改变后的提示信息"; + } + + + protected void btnChangePressed_Click(object sender, EventArgs e) + { + btnPressed.Pressed = !btnPressed.Pressed; + } + + + + + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button.aspx.designer.cs b/FineUI_v6/FineUI.Examples/button/button.aspx.designer.cs new file mode 100644 index 0000000..b028af1 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button.aspx.designer.cs @@ -0,0 +1,105 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnChangeEnable 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnChangeEnable; + + /// + /// btnEnable 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnEnable; + + /// + /// btnChangePressed 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnChangePressed; + + /// + /// btnPressed 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnPressed; + + /// + /// btnTooltip 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnTooltip; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + + /// + /// Button3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button3; + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_click.aspx b/FineUI_v6/FineUI.Examples/button/button_click.aspx new file mode 100644 index 0000000..9793e4d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_click.aspx @@ -0,0 +1,24 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_click.aspx.cs" Inherits="FineUI.Examples.button.button_click" %> + + + + + + + +
+ + + +
+
+ + + + +
+
+ + + diff --git a/FineUI_v6/FineUI.Examples/button/button_click.aspx.cs b/FineUI_v6/FineUI.Examples/button/button_click.aspx.cs new file mode 100644 index 0000000..fcaf6a5 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_click.aspx.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_click : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + btnClientClick2.OnClientClick = Alert.GetShowInTopReference("这是在服务器端生成的客户端事件"); + } + } + + + protected void btnServerClick_Click(object sender, EventArgs e) + { + Alert.ShowInTop("这是服务器端事件"); + } + + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_click.aspx.designer.cs b/FineUI_v6/FineUI.Examples/button/button_click.aspx.designer.cs new file mode 100644 index 0000000..0b36d49 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_click.aspx.designer.cs @@ -0,0 +1,60 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_click { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnServerClick 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnServerClick; + + /// + /// btnClientClick 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnClientClick; + + /// + /// btnClientClick2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnClientClick2; + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_custom.aspx b/FineUI_v6/FineUI.Examples/button/button_custom.aspx new file mode 100644 index 0000000..88d927c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_custom.aspx @@ -0,0 +1,35 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_custom.aspx.cs" Inherits="FineUI.Examples.button.button_custom" %> + + + + + + + + +
+ + +
+
+ + + + + + diff --git a/FineUI_v6/FineUI.Examples/button/button_custom.aspx.cs b/FineUI_v6/FineUI.Examples/button/button_custom.aspx.cs new file mode 100644 index 0000000..b6752d6 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_custom.aspx.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_custom : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + + protected void Button1_Click(object sender, EventArgs e) + { + Alert.ShowInTop("点击了普通按钮"); + } + + protected void Button2_Click(object sender, EventArgs e) + { + Alert.ShowInTop("点击了自定义按钮"); + } + + + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_custom.aspx.designer.cs b/FineUI_v6/FineUI.Examples/button/button_custom.aspx.designer.cs new file mode 100644 index 0000000..42e725d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_custom.aspx.designer.cs @@ -0,0 +1,51 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_custom { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_icon.aspx b/FineUI_v6/FineUI.Examples/button/button_icon.aspx new file mode 100644 index 0000000..92401e3 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_icon.aspx @@ -0,0 +1,32 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_icon.aspx.cs" Inherits="FineUI.Examples.button.button_icon" %> + + + + + + + +
+ + + +
+
+ + +
+
+ +
+
+ 只有图片的按钮: +
+
+ + +
+ + + diff --git a/FineUI_v6/FineUI.Examples/button/button_icon.aspx.cs b/FineUI_v6/FineUI.Examples/button/button_icon.aspx.cs new file mode 100644 index 0000000..110a3f9 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_icon.aspx.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_icon : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + + } + + protected void btnCustomIcon_Click(object sender, EventArgs e) + { + if (btnCustomIcon.IconUrl.EndsWith("1.png")) + { + btnCustomIcon.IconUrl = "~/res/images/16/8.png"; + } + else + { + btnCustomIcon.IconUrl = "~/res/images/16/1.png"; + } + } + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_icon.aspx.designer.cs b/FineUI_v6/FineUI.Examples/button/button_icon.aspx.designer.cs new file mode 100644 index 0000000..3e6a6ab --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_icon.aspx.designer.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_icon { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnIcon1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnIcon1; + + /// + /// btnIcon2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnIcon2; + + /// + /// btnIcon3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnIcon3; + + /// + /// btnIcon4 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnIcon4; + + /// + /// btnCustomIcon 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnCustomIcon; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// Button2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button2; + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx b/FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx new file mode 100644 index 0000000..2c07183 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx @@ -0,0 +1,31 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_linkbutton.aspx.cs" + Inherits="FineUI.Examples.button.button_linkbutton" %> + + + + + + + +
+ + + +
+ + +
+
+ + +
+ + + + + diff --git a/FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx.cs b/FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx.cs new file mode 100644 index 0000000..cb0fce5 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_linkbutton : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + LinkButton2.OnClientClick = Alert.GetShowInTopReference("这是在服务器端生成的客户端事件"); + } + } + + protected void LinkButton3_Click(object sender, EventArgs e) + { + Alert.ShowInTop("这是服务器端事件"); + } + + protected void btnChangeEnable_Click(object sender, EventArgs e) + { + LinkButton1.Enabled = !LinkButton1.Enabled; + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx.designer.cs b/FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx.designer.cs new file mode 100644 index 0000000..6fcac91 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_linkbutton.aspx.designer.cs @@ -0,0 +1,69 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_linkbutton { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// LinkButton2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.LinkButton LinkButton2; + + /// + /// LinkButton3 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.LinkButton LinkButton3; + + /// + /// LinkButton1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.LinkButton LinkButton1; + + /// + /// btnChangeEnable 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnChangeEnable; + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_menu.aspx b/FineUI_v6/FineUI.Examples/button/button_menu.aspx new file mode 100644 index 0000000..e6ae928 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_menu.aspx @@ -0,0 +1,37 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_menu.aspx.cs" Inherits="FineUI.Examples.button.button_menu" %> + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+ + +
+
+ + + diff --git a/FineUI_v6/FineUI.Examples/button/button_menu.aspx.cs b/FineUI_v6/FineUI.Examples/button/button_menu.aspx.cs new file mode 100644 index 0000000..b9a5cd9 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_menu.aspx.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_menu : PageBase + { + protected void Page_Init(object sender, EventArgs e) + { + MenuHyperLink menuSCMS = new MenuHyperLink(); + menuSCMS.Target = "_blank"; + menuSCMS.Text = "化学与材料科学学院"; + menuSCMS.Icon = Icon.TagGreen; + menuSCMS.NavigateUrl = "http://scms.ustc.edu.cn/"; + Button1.Menu.Items.Add(menuSCMS); + + MenuHyperLink menuBZ = new MenuHyperLink(); + menuBZ.Target = "_blank"; + menuBZ.Text = "管理学院"; + menuBZ.Icon = Icon.TagBlue; + menuBZ.NavigateUrl = "http://business.ustc.edu.cn/zh_CN/"; + Button1.Menu.Items.Add(menuBZ); + + MenuHyperLink menuIS = new MenuHyperLink(); + menuIS.Target = "_blank"; + menuIS.Text = "工商管理系"; + menuIS.Icon = Icon.TagPink; + menuIS.NavigateUrl = "http://is.ustc.edu.cn/"; + menuBZ.Menu.Items.Add(menuIS); + + + MenuHyperLink menuSTAT = new MenuHyperLink(); + menuSTAT.Target = "_blank"; + menuSTAT.Text = "统计与金融系"; + menuSTAT.Icon = Icon.TagPink; + menuSTAT.NavigateUrl = "http://stat.ustc.edu.cn/"; + menuBZ.Menu.Items.Add(menuSTAT); + + } + + + protected void Page_Load(object sender, EventArgs e) + { + + } + + + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_menu.aspx.designer.cs b/FineUI_v6/FineUI.Examples/button/button_menu.aspx.designer.cs new file mode 100644 index 0000000..95bfe5d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_menu.aspx.designer.cs @@ -0,0 +1,51 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_menu { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnMenu 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnMenu; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx b/FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx new file mode 100644 index 0000000..d1600af --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx @@ -0,0 +1,38 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="button_menu_menuid.aspx.cs" Inherits="FineUI.Examples.button.button_menu_menuid" %> + + + + + + + +
+ + + +
+
+ + + + + + + + + + + + + + +
+
+ 注:本示例有问题,extjs v6.0不支持共享MenuID的情况。 + + + diff --git a/FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx.cs b/FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx.cs new file mode 100644 index 0000000..80ab9c1 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI.Examples.button +{ + public partial class button_menu_menuid : PageBase + { + + protected void Page_Load(object sender, EventArgs e) + { + + } + + + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx.designer.cs b/FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx.designer.cs new file mode 100644 index 0000000..7c2e27f --- /dev/null +++ b/FineUI_v6/FineUI.Examples/button/button_menu_menuid.aspx.designer.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.button { + + + public partial class button_menu_menuid { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// btnMenu control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnMenu; + + /// + /// Button1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button Button1; + + /// + /// Menu1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Menu Menu1; + + /// + /// MenuHyperLink1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuHyperLink MenuHyperLink1; + + /// + /// MenuHyperLink2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuHyperLink MenuHyperLink2; + + /// + /// MenuHyperLink3 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuHyperLink MenuHyperLink3; + + /// + /// MenuHyperLink4 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuHyperLink MenuHyperLink4; + } +} diff --git a/FineUI_v6/FineUI.Examples/common/loading.aspx b/FineUI_v6/FineUI.Examples/common/loading.aspx new file mode 100644 index 0000000..492ea77 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/loading.aspx @@ -0,0 +1,79 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="loading.aspx.cs" Inherits="FineUI.Examples.common.loading" %> + + + + + + + + +
+ + +
+ + + + + + diff --git a/FineUI_v6/FineUI.Examples/common/loading.aspx.cs b/FineUI_v6/FineUI.Examples/common/loading.aspx.cs new file mode 100644 index 0000000..706966d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/loading.aspx.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; +using Newtonsoft.Json.Linq; + +namespace FineUI.Examples.common +{ + public partial class loading : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + LoadData(); + } + + } + + + + private void LoadData() + { + StringBuilder sb = new StringBuilder(); + + sb.Append("
    "); + for (int i = 1; i <= 30; i++) + { + string imageUrl = PageManager1.GetLoadingImageUrl(i); + + sb.AppendFormat("
  • {1}
  • ", imageUrl, i); + } + sb.Append("
"); + + litIcons.Text = sb.ToString(); + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/common/loading.aspx.designer.cs b/FineUI_v6/FineUI.Examples/common/loading.aspx.designer.cs new file mode 100644 index 0000000..a0c6ae5 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/loading.aspx.designer.cs @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.common { + + + public partial class loading { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// litIcons control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal litIcons; + } +} diff --git a/FineUI_v6/FineUI.Examples/common/menu.xml b/FineUI_v6/FineUI.Examples/common/menu.xml new file mode 100644 index 0000000..43b3438 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/menu.xml @@ -0,0 +1,823 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/common/source.aspx b/FineUI_v6/FineUI.Examples/common/source.aspx new file mode 100644 index 0000000..430288d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/source.aspx @@ -0,0 +1,22 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="source.aspx.cs" Inherits="FineUI.Examples.source" %> + + + + + + + + +
+ + + +
+ + diff --git a/FineUI_v6/FineUI.Examples/common/source.aspx.cs b/FineUI_v6/FineUI.Examples/common/source.aspx.cs new file mode 100644 index 0000000..ccccdd2 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/source.aspx.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.IO; + +namespace FineUI.Examples +{ + public partial class source : PageBase + { + protected void Page_Init(object sender, EventArgs e) + { + if (!IsPostBack) + { + string files = Request.QueryString["files"]; + + if (String.IsNullOrEmpty(files)) + { + return; + } + + if (!String.IsNullOrEmpty(files)) + { + string[] fileNames = files.Split(';'); + + for (int i = 0; i < fileNames.Length; i++) + { + string fileName = fileNames[i]; + string shortFileName = GetShortFileName(fileName); + string iframeUrl = "./source_file.aspx?file=" + fileName; + + Tab tab = new Tab(); + tab.Title = shortFileName; + tab.EnableIFrame = true; + tab.IFrameUrl = iframeUrl; + tab.IconUrl = GetIconUrl(tab.IFrameUrl); + TabStrip1.Tabs.Add(tab); + + // End with .aspx. + if (fileName.ToLower().EndsWith(".aspx") || fileName.ToLower().EndsWith(".ashx") || fileName.ToLower().EndsWith(".ascx") || fileName.ToLower().EndsWith(".master")) + { + tab = new FineUI.Tab(); + tab.Title = shortFileName + ".cs"; + tab.EnableIFrame = true; + tab.IFrameUrl = iframeUrl + ".cs"; + tab.IconUrl = GetIconUrl(tab.IFrameUrl); + TabStrip1.Tabs.Add(tab); + } + } + } + } + } + + protected void Page_Load(object sender, EventArgs e) + { + + } + + private string GetIconUrl(string url) + { + string suffix = url.Substring(url.LastIndexOf('.') + 1); + return "~/res/images/filetype/vs_" + suffix + ".png"; + //string fileName = "vs_unknow.png"; + //if (url.EndsWith(".aspx")) + //{ + // fileName = "vs_aspx.png"; + //} + //else if (url.EndsWith(".cs")) + //{ + // fileName = "vs_cs.png"; + //} + //else if (url.EndsWith(".xml")) + //{ + // fileName = "vs_xml.png"; + //} + //else if (url.EndsWith(".config")) + //{ + // fileName = "vs_config.png"; + //} + //else if (url.EndsWith(".js")) + //{ + // fileName = "vs_js.png"; + //} + //else if (url.EndsWith(".css")) + //{ + // fileName = "vs_css.png"; + //} + //else if (url.EndsWith(".html") || url.EndsWith(".htm")) + //{ + // fileName = "vs_htm.png"; + //} + } + + private string GetShortFileName(string fileName) + { + int index = fileName.LastIndexOf("/"); + + if (index >= 0) + { + return fileName.Substring(index + 1); + } + + return fileName; + } + } +} diff --git a/FineUI_v6/FineUI.Examples/common/source.aspx.designer.cs b/FineUI_v6/FineUI.Examples/common/source.aspx.designer.cs new file mode 100644 index 0000000..0a7347c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/source.aspx.designer.cs @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class source { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// TabStrip1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.TabStrip TabStrip1; + } +} diff --git a/FineUI_v6/FineUI.Examples/common/source_file.aspx b/FineUI_v6/FineUI.Examples/common/source_file.aspx new file mode 100644 index 0000000..32cb124 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/source_file.aspx @@ -0,0 +1,37 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="source_file.aspx.cs" Inherits="FineUI.Examples.source_file" %> + + + + + + + + + +
+ +
+ + + + diff --git a/FineUI_v6/FineUI.Examples/common/source_file.aspx.cs b/FineUI_v6/FineUI.Examples/common/source_file.aspx.cs new file mode 100644 index 0000000..3a99dde --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/source_file.aspx.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.IO; + +namespace FineUI.Examples +{ + public partial class source_file : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + string file = Request.QueryString["file"].ToLower(); + + if (file.StartsWith("http://") || file.StartsWith("https://")) + { + desc.Text = String.Format("

在新窗口打开", file); + return; + } + + // 不是网站根目录下的文件 + if (!UnderRootPath(file)) + { + return; + } + + // 不允许下载文件的目录 + string basePath = GetBasePath(file); + List disallowPaths = new List { "bin", "obj", "upload", "res", "Properties" }; + if (disallowPaths.Contains(basePath)) + { + return; + } + + + // 只能下载指定类型文件 + string fileType = GetFileType(file); + List allowFileTypes = new List { "aspx", "ascx", "master", "ashx", "cs", "xml" }; + if (!allowFileTypes.Contains(fileType)) + { + return; + } + + + string content = File.ReadAllText(Server.MapPath(file)); + desc.Text = "
" + HttpUtility.HtmlEncode(content) + "
"; // linenums + + } + } + + private bool UnderRootPath(string fileName) + { + string filePath = Server.MapPath(fileName); + string rootPath = Server.MapPath("~/"); + + return filePath.StartsWith(rootPath); + } + + private string GetBasePath(string fileName) + { + string filePath = Server.MapPath(fileName); + string rootPath = Server.MapPath("~/"); + + string basePath = filePath.Substring(rootPath.Length); + int slashIndex = basePath.IndexOf("\\"); + if (slashIndex >= 0) + { + basePath = basePath.Substring(0, slashIndex); + } + + return basePath; + } + + private string GetFileType(string fileName) + { + string fileType = String.Empty; + + int lastDotIndex = fileName.ToLower().LastIndexOf("."); + if (lastDotIndex >= 0) + { + fileType = fileName.Substring(lastDotIndex + 1); + } + + return fileType; + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/common/source_file.aspx.designer.cs b/FineUI_v6/FineUI.Examples/common/source_file.aspx.designer.cs new file mode 100644 index 0000000..2202c3b --- /dev/null +++ b/FineUI_v6/FineUI.Examples/common/source_file.aspx.designer.cs @@ -0,0 +1,33 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class source_file { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// desc control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal desc; + } +} diff --git a/FineUI_v6/FineUI.Examples/config/ajax.aspx b/FineUI_v6/FineUI.Examples/config/ajax.aspx new file mode 100644 index 0000000..0c02c6e --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/ajax.aspx @@ -0,0 +1,46 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ajax.aspx.cs" Inherits="FineUI.Examples.ajax" %> + + + + + + + + +
+
+ FineUI 有原生的 AJAX 支持,也就是说不需要做任何配置,控件属性在服务器端的改变都能以 AJAX 的方式影响到前端界面的显示。 +
+
+ 但是,并非控件的所有属性都支持 AJAX 改变,下面列表展示了每个控件有哪些属性支持 AJAX 改变。 +
+
+ +
+ + diff --git a/FineUI_v6/FineUI.Examples/config/ajax.aspx.cs b/FineUI_v6/FineUI.Examples/config/ajax.aspx.cs new file mode 100644 index 0000000..2663533 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/ajax.aspx.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + + +namespace FineUI.Examples +{ + public partial class ajax : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + LoadData(); + } + } + + private void LoadData() + { + string content = ReadFile("~/config/ajax_properties.txt"); + Dictionary allControls = new Dictionary(); + List publicControls = new List(); + JArray ja = JArray.Parse(content); + foreach (JObject jo in ja) + { + if (jo.Value("public")) // .getBool("public")) + { + publicControls.Add(jo.Value("name")); //jo.getString("name")); + } + allControls.Add(jo.Value("name"), jo); //jo.getString("name"), jo); + } + publicControls.Sort(); + + StringBuilder sb = new StringBuilder(); + sb.Append(""); + sb.Append(""); + for (int i = 0, count = publicControls.Count; i < count; i++) + { + string name = publicControls[i]; + + sb.Append(""); + + if ((i + 1) % 6 == 0) + { + sb.Append(""); + } + } + sb.Append(""); + sb.Append("
"); + sb.AppendFormat("
{0}
", name); + + // 计算控件name的所有AJAX属性 + List ajaxProperties = new List(); + + string parentControlName = name; + do + { + JObject control = allControls[parentControlName]; + foreach (string property in control.Value("ajax")) // .getJSONArray("ajax").getArrayList()) + { + if (!ajaxProperties.Contains(property)) + { + ajaxProperties.Add(property); + } + } + parentControlName = control.Value("parent"); //.getString("parent"); + + } while (!String.IsNullOrEmpty(parentControlName)); + + ajaxProperties.Sort(); + + + sb.Append("
    "); + foreach (string property in ajaxProperties) + { + sb.AppendFormat("
  • {0}
  • ", property); + } + sb.Append("
"); + + sb.Append("
"); + + litResult.Text = sb.ToString(); + } + + private string ReadFile(string filePath) + { + string content = String.Empty; + + using (System.IO.StreamReader sr = new System.IO.StreamReader(Server.MapPath(filePath))) + { + content = sr.ReadToEnd(); + } + + return content; + } + } +} diff --git a/FineUI_v6/FineUI.Examples/config/ajax.aspx.designer.cs b/FineUI_v6/FineUI.Examples/config/ajax.aspx.designer.cs new file mode 100644 index 0000000..aab982c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/ajax.aspx.designer.cs @@ -0,0 +1,33 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class ajax { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// litResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.WebControls.Literal litResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/config/ajax_properties.txt b/FineUI_v6/FineUI.Examples/config/ajax_properties.txt new file mode 100644 index 0000000..fa72525 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/ajax_properties.txt @@ -0,0 +1,360 @@ +[{ + "name": "ControlBase", + "ajax": ["Hidden", "Enabled"], + "parent": "", + "public": false +}, +{ + "name": "Component", + "ajax": ["CssClass", "FormItemClass", "CssStyle"], + "parent": "ControlBase", + "public": false +}, +{ + "name": "BoxComponent", + "ajax": [], + "parent": "Component", + "public": false +}, +{ + "name": "Container", + "ajax": [], + "parent": "BoxComponent", + "public": false +}, +{ + "name": "PanelBase", + "ajax": ["IFrameUrl"], + "parent": "Container", + "public": false +}, +{ + "name": "CollapsablePanel", + "ajax": ["Expanded", "Collapsed", "Title"], + "parent": "PanelBase", + "public": false +}, +{ + "name": "Field", + "ajax": ["Readonly"], + "parent": "BoxComponent", + "public": false +}, +{ + "name": "TextField", + "ajax": [], + "parent": "Field", + "public": false +}, +{ + "name": "RealTextField", + "ajax": ["Text"], + "parent": "TextField", + "public": false +}, +{ + "name": "Toolbar", + "ajax": [], + "parent": "BoxComponent", + "public": true +}, +{ + "name": "ToolbarFill", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "ToolbarSeparator", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "ToolbarText", + "ajax": ["Text"], + "parent": "Component", + "public": true +}, +{ + "name": "Button", + "ajax": ["Text", "Icon", "IconUrl", "ToolTip", "OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmIcon", "ConfirmTarget", "Pressed"], + "parent": "Component", + "public": true +}, +{ + "name": "Calendar", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "Menu", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "BaseMenuItem", + "ajax": [], + "parent": "Component", + "public": false +}, +{ + "name": "MenuItem", + "ajax": [], + "parent": "BaseMenuItem", + "public": false +}, +{ + "name": "MenuButton", + "ajax": ["ClickScriptFunction"], + "parent": "MenuItem", + "public": true +}, +{ + "name": "MenuHyperLink", + "ajax": [], + "parent": "MenuItem", + "public": true +}, +{ + "name": "MenuSeparator", + "ajax": [], + "parent": "BaseMenuItem", + "public": true +}, +{ + "name": "MenuText", + "ajax": [], + "parent": "MenuItem", + "public": true +}, +{ + "name": "SplitButton", + "ajax": [], + "parent": "Button", + "public": true +}, +{ + "name": "PageLoading", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "PageManager", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "Timer", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "CheckBox", + "ajax": ["Checked"], + "parent": "Field", + "public": true +}, +{ + "name": "CheckBoxList", + "ajax": ["SelectedIndexArray", "SelectedValueArray", "SelectedItemArray"], + "parent": "Field", + "public": true +}, +{ + "name": "HtmlEditor", + "ajax": ["Text"], + "parent": "Field", + "public": true +}, +{ + "name": "Label", + "ajax": ["Text"], + "parent": "Field", + "public": true +}, +{ + "name": "HyperLink", + "ajax": ["Text", "NavigateUrl", "Target", "OnClientClick"], + "parent": "Field", + "public": true +}, +{ + "name": "Image", + "ajax": ["ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt"], + "parent": "Field", + "public": true +}, +{ + "name": "LinkButton", + "ajax": ["Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"], + "parent": "Field", + "public": true +}, +{ + "name": "RadioButton", + "ajax": ["Checked"], + "parent": "Field", + "public": true +}, +{ + "name": "RadioButtonList", + "ajax": ["SelectedIndex", "SelectedValue", "SelectedItem"], + "parent": "Field", + "public": true +}, +{ + "name": "DropDownList", + "ajax": ["SelectedIndex", "SelectedValue", "SelectedItem", "DataSource", "Items"], + "parent": "TextField", + "public": true +}, +{ + "name": "DatePicker", + "ajax": ["SelectedDate"], + "parent": "RealTextField", + "public": true +}, +{ + "name": "HiddenField", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "FileUpload", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "NumberBox", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TextArea", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TextBox", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TriggerBox", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TwinTriggerBox", + "ajax": ["ShowTrigger1", "ShowTrigger2"], + "parent": "RealTextField", + "public": true +}, +{ + "name": "RegionPanel", + "ajax": [], + "parent": "PanelBase", + "public": true +}, +{ + "name": "Region", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Accordion", + "ajax": ["ActivePaneIndex"], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "AccordionPane", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "AccordionLink", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "ContentPanel", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Form", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "FormRow", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "GroupPanel", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Panel", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "SimpleForm", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Tree", + "ajax": ["Nodes", "SelectedNodeIDArray"], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Window", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Grid", + "ajax": ["PageIndex", "PageSize", "RecordCount", "SortColumnIndex", "SortDirection", "SelectedRowIndexArray", "DataSource"], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "TabStrip", + "ajax": ["ActiveTabIndex"], + "parent": "PanelBase", + "public": true +}, +{ + "name": "Tab", + "ajax": [], + "parent": "PanelBase", + "public": true +}] \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/config/enable_gzip_iis6.htm b/FineUI_v6/FineUI.Examples/config/enable_gzip_iis6.htm new file mode 100644 index 0000000..40eba27 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/enable_gzip_iis6.htm @@ -0,0 +1,63 @@ + + + + 如何在IIS6中启用GZIP压缩 + + + + +
+ 如何在IIS6中启用GZIP压缩 +
+
+ 启用GZIP压缩可以大大减少网络传输的数据量,比如使用FineUI v3.x的网站,首次下载的JavaScript由未启用的650K左右减少为启用GZIP后的250k左右。 +
+
    +
  1. 展开IIS管理器,在网站菜单上点击右键,点击属性菜单,选择服务选项卡,按下图选中启用压缩的复选框。 +
    + +
    + +
    +
  2. +
  3. 这里下载IIS + 6.0资源工具包,安装后运行Metabase Explorer。 +
    + +
    +
  4. +
  5. 展开 LM>W3SVC>Filters>Compression,你需要如下编辑 gzip 和 deflate 两个菜单。 +
    + HcScriptFileExtensions:asp,dll,aspx,axd,asmx,php,exe +
    + HcDynamicCompressionLevel:10 +
    + HcFileExtensions:htm,html,js,css +
    + +
    +
  6. +
  7. 重启IIS。 +
    + +
  8. +
+ + + diff --git a/FineUI_v6/FineUI.Examples/config/icons.aspx b/FineUI_v6/FineUI.Examples/config/icons.aspx new file mode 100644 index 0000000..1c45225 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/icons.aspx @@ -0,0 +1,24 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="icons.aspx.cs" Inherits="FineUI.Examples.icons" %> + + + + + + + + +
+ FineUI Icons + <%----%> +
+ + diff --git a/FineUI_v6/FineUI.Examples/config/icons.aspx.cs b/FineUI_v6/FineUI.Examples/config/icons.aspx.cs new file mode 100644 index 0000000..d7a8f99 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/icons.aspx.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; + +namespace FineUI.Examples +{ + public partial class icons : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + //LoadData(); + } + } + + //private void LoadData() + //{ + // StringBuilder sb = new StringBuilder(); + // int index = 0; + // sb.Append(""); + // foreach (string icon in Enum.GetNames(typeof(FineUI.IconType))) + // { + // //string iconName = FineUI.IconTypeName.GetName((FineUI.IconType)Enum.Parse(typeof(FineUI.IconType), icon)); + // //string iconUrl = FineUI.ResourceHelper.GetWebResourceUrl(Page, String.Format("FineUI.res.box.icons.{0}", iconName)); + // FineUI.IconType iconType = (FineUI.IconType)Enum.Parse(typeof(FineUI.IconType), icon); + + // if (iconType != FineUI.IconType.None) + // { + // string iconUrl = FineUI.IconTypeName.GetIconUrl(iconType); + // sb.AppendFormat("", iconUrl, icon); + // } + + // if (index % 5 == 0 && index != 0) + // { + // sb.Append(""); + // } + + // index++; + // } + // sb.Append("
{1}
"); + // litIcons.Text = sb.ToString(); + //} + + } +} diff --git a/FineUI_v6/FineUI.Examples/config/icons.aspx.designer.cs b/FineUI_v6/FineUI.Examples/config/icons.aspx.designer.cs new file mode 100644 index 0000000..f301885 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/icons.aspx.designer.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class icons { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + } +} diff --git a/FineUI_v6/FineUI.Examples/config/icons.htm b/FineUI_v6/FineUI.Examples/config/icons.htm new file mode 100644 index 0000000..019392e --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/icons.htm @@ -0,0 +1,10 @@ + + + + + + + + FineUI Icons + + diff --git a/FineUI_v6/FineUI.Examples/config/install_toolbox.htm b/FineUI_v6/FineUI.Examples/config/install_toolbox.htm new file mode 100644 index 0000000..866ce7c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/install_toolbox.htm @@ -0,0 +1,33 @@ + + + + + + + + +
+ 安装工具箱 +
+
    +
  1. 打开 Visual Studio,新建一个 Web 项目;
  2. +
  3. 打开 Default.aspx 页面;
  4. +
  5. 打开工具箱,在空白处点击右键选择“添加选项卡”,输入“FineUI”;
  6. +
  7. 在“FineUI”选项卡内,单击右键选择“选择项...”;
  8. +
  9. 在弹出的窗口的下面,选择“浏览...”按钮;
  10. +
  11. 打开“FineUI.dll”并确定;
  12. +
  13. 完成后的截图: +
    + FineUI toolbox +
  14. +
+ + diff --git a/FineUI_v6/FineUI.Examples/config/loading.aspx b/FineUI_v6/FineUI.Examples/config/loading.aspx new file mode 100644 index 0000000..96064d6 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/loading.aspx @@ -0,0 +1,39 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="loading.aspx.cs" Inherits="FineUI.Examples.config.loading" %> + + + + + + + + + + +
+ +
+
+ 注:图片来自 http://loadinfo.net/ (Generated gifs are free)。 + + + diff --git a/FineUI_v6/FineUI.Examples/config/loading.aspx.cs b/FineUI_v6/FineUI.Examples/config/loading.aspx.cs new file mode 100644 index 0000000..3d05fc5 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/loading.aspx.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; +using Newtonsoft.Json.Linq; + +namespace FineUI.Examples.config +{ + public partial class loading : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + LoadData(); + } + + } + + + + private void LoadData() + { + StringBuilder sb = new StringBuilder(); + + sb.Append("
    "); + for (int i = 1; i <= 30; i++) + { + string imageUrl = PageManager1.GetLoadingImageUrl(i); + + sb.AppendFormat("
  • {1}
  • ", imageUrl, i); + } + sb.Append("
"); + + litIcons.Text = sb.ToString(); + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/config/loading.aspx.designer.cs b/FineUI_v6/FineUI.Examples/config/loading.aspx.designer.cs new file mode 100644 index 0000000..3a1f5c0 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/loading.aspx.designer.cs @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.config { + + + public partial class loading { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// litIcons control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal litIcons; + } +} diff --git a/FineUI_v6/FineUI.Examples/config/modify_webconfig.htm b/FineUI_v6/FineUI.Examples/config/modify_webconfig.htm new file mode 100644 index 0000000..37eeca1 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/modify_webconfig.htm @@ -0,0 +1,183 @@ + + + + + + + + +
+ 在开发项目之前请配置好 Web.config: +
+
    +
  1. 设置 configuration 配置节: +
    +
    +    <configSections>
    +        <section name="FineUI" type="FineUI.ConfigSection, FineUI"/>
    +    </configSections>
    +
    +    <!-- 可用的配置项(这里列的都是默认值):
    +            Theme="Neptune" 
    +            Language="zh_CN" 
    +            AjaxTimeout="120" 
    +            EnableAjax="true" 
    +            DebugMode="false"
    +            FormMessageTarget="Qtip" 
    +            FormOffsetRight="0" 
    +            FormLabelWidth="100" 
    +            FormLabelSeparator=":" 
    +            FormLabelAlign="Left" 
    +            EnableAjaxLoading="true" 
    +            AjaxLoadingType="Default" 
    +            CustomTheme="" 
    +            IconBasePath="~/res/icon" 
    +            CustomThemeBasePath="~/res/theme" 
    +            JSBasePath="~/extjs"
    +            IEEdge="true"
    +            LoadingImageNumber="1"
    +    -->
    +    <FineUI DebugMode="false" />
    +            
    + FineUI 配置节中的参数: +
    +
      +
    • Theme: 控件主题,内置 5 种主题风格(Triton/Crisp/Neptune/Blue/Gray,默认值:Neptune)
    • +
    • Language: 控件语言(en/zh_CN/zh_TW,默认值:zh_CN)
    • +
    • FormMessageTarget: 表单字段错误提示信息的显示位置(Title/Side/Qtip,默认值:Side)
    • +
    • FormOffsetRight: 表单字段右侧距离边界的宽度(默认值:0px)
    • +
    • FormLabelWidth: 表单字段标签的宽度(默认值:100px)
    • +
    • FormLabelSeparator: 表单字段标签与内容的分隔符(默认值:":")
    • +
    • EnableAjax: 是否启用AJAX(默认值:true)
    • +
    • AjaxTimeout: Ajax超时时间(单位:秒,默认值:120s)
    • +
    • DebugMode: 是否开发模式,启用时格式化输出页面的JavaScript代码,便于调试(默认值:false)
    • +
    • EnableAjaxLoading: 是否启用Ajax提示(默认值:true)
    • +
    • AjaxLoadingType: Ajax提示类型,默认在页面顶部显示黄色提示框(Default/Mask,默认值:Default)
    • +
    • LoadingImageNumber: 页面加载动画图片的序号(从 1 到 30,默认值:1)
    • +
    +
    +
    +
  2. +
  3. 设置 system.web 配置节: +
    +<system.web>
    +    <pages>
    +      <controls>
    +        <add assembly="FineUI" namespace="FineUI" tagPrefix="f"/>
    +      </controls>
    +    </pages>
    +    
    +    <httpModules>
    +      <add name="FineUIScriptModule" type="FineUI.ScriptModule, FineUI"/>
    +    </httpModules>
    +
    +    <httpHandlers>
    +      <add verb="GET" path="res.axd" type="FineUI.ResourceHandler, FineUI" validate="false"/>
    +    </httpHandlers>
    +<system.web>
    +        
    +
  4. +
  5. 完成。
  6. +
+
+
+ 常见问题: +
+
    +
  • + Net4.0以上的项目,一定要为Web.config中<page>标签添加controlRenderingCompatibilityVersion和clientIDMode两个属性。 + +
    +<pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID">
    +    <controls>
    +    <add assembly="FineUI" namespace="FineUI" tagPrefix="f" />
    +    </controls>
    +</pages>
    +
    +
    +
  • +
  • + IIS集成模式(VS2013、VS2015的默认设置) +
    +
    + 需要将 httpModules 和 httpHandlers 从 system.web 中删除,并添加到 system.webServer 中,如下所示: +
    +<system.webServer>
    +    <modules>
    +        <add name="FineUIScriptModule" type="FineUI.ScriptModule, FineUI"/>
    +    </modules>
    +    <handlers>
    +        <add name="FineUIResourceHandler" verb="GET" path="res.axd" type="FineUI.ResourceHandler, FineUI"/>
    +    </handlers>
    +</system.webServer>
    +                
    + 你也可以直接将官网示例源代码中的 Web.config_for_VS2013 改名为 Web.config 使用。 +
    +
    +
  • +
  • + 如果项目中使用了表单认证,需要添加 res.axd 的例外 +
    +
    + 如果在 system.web 下有类似如下的表单验证配置: +
    +<system.web>
    +    <authentication mode="Forms">
    +        <forms name=".ASPXFORMSAUTH" loginUrl="~/default.aspx" timeout="120" defaultUrl="~/main.aspx" protection="All" path="/"/>
    +    </authentication>
    +    <authorization>
    +        <deny users="?"/>
    +    </authorization>
    +</system.web>
    +
    + 则需要添加 res.axd 例外,否则所有的图标字体都显示不了: +
    +</system.web>
    +
    +<location path="res.axd">
    +    <system.web>
    +        <authorization>
    +            <allow users ="*" />
    +        </authorization>
    +    </system.web>
    +</location>
    +
    +
  • +
  • + 注意引用的Newtonsoft.Json.dll版本 + +
    +
    + FineUI.dll只有一个版本,无论你的项目是2.0、3.5、4.0、4.5,都只需要引用同一个FineUI.dll即可。 +
    +
    + Newtonsoft.Json.dll在不同的NET版本有不同的DLL,建议您使用Visual Studio的NuGet工具下载最新的JSON库: +
    +
    + Json.NET +
    +
    + Json.NET +
    +
  • +
+ +
+
+ +
+
+
+
+ + diff --git a/FineUI_v6/FineUI.Examples/config/release_time_chart.htm b/FineUI_v6/FineUI.Examples/config/release_time_chart.htm new file mode 100644 index 0000000..657e633 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/config/release_time_chart.htm @@ -0,0 +1,193 @@ + + + + FineUI版本发布周期(天) + + + + +
+
+
+
+ + + + diff --git a/FineUI_v6/FineUI.Examples/default.aspx b/FineUI_v6/FineUI.Examples/default.aspx new file mode 100644 index 0000000..5279dae --- /dev/null +++ b/FineUI_v6/FineUI.Examples/default.aspx @@ -0,0 +1,567 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="FineUI.Examples._default" %> + + + + + FineUI(开源版)在线示例 - 基于 ExtJS 的开源 ASP.NET 控件库 + + + + + + + + + + + + + +
+ + + + +
+ + Home + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

FineUI(开源版)

+ 基于 ExtJS 的开源 ASP.NET 控件库 + +
+

FineUI的使命

+ 创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices 的网站应用程序 + +
+

支持的浏览器

+ Chrome、Firefox、Safari、IE 8.0+ + +
+

授权协议

+ Apache License v2.0(ExtJS 库在 GPL v3 协议下发布) + +
+

相关链接

+ 首页:http://fineui.com/ +
+ 论坛:http://fineui.com/bbs/ +
+ 示例:http://fineui.com/demo/ +
+ 文档:http://fineui.com/doc/ +
+ 下载:http://fineui.codeplex.com/ +
+
+
+ 注:FineUI 不再内置 ExtJS 库,请手工添加 ExtJS 库:http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218 + + +
+
+ 扫描二维码,关注 FineUI 微信公众号 +
+ +
+
+
+
+
+
+
+
+ + + + + + + + + +
 版本:v +    QQ公开群Copyright © 2008-2016 合肥三生石上软件有限公司在线人数: 
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/default.aspx.cs b/FineUI_v6/FineUI.Examples/default.aspx.cs new file mode 100644 index 0000000..b865810 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/default.aspx.cs @@ -0,0 +1,410 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +using System.Xml; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace FineUI.Examples +{ + public partial class _default : PageBase + { + #region Page_Init + + private string _menuType = "menu"; + private bool _showOnlyNew = false; + private int _examplesCount = 0; + + protected void Page_Init(object sender, EventArgs e) + { + HttpCookie menuCookie = Request.Cookies["MenuStyle_v6"]; + if (menuCookie != null) + { + _menuType = menuCookie.Value; + } + + // 从Cookie中读取是否仅显示最新示例 + HttpCookie menuShowOnlyNew = Request.Cookies["ShowOnlyNew_v6"]; + if (menuShowOnlyNew != null) + { + _showOnlyNew = Convert.ToBoolean(menuShowOnlyNew.Value); + } + + + if (_menuType == "accordion") + { + InitAccordionMenu(); + } + else + { + InitTreeMenu(); + } + + + if (_showOnlyNew) + { + leftPanel.Title = String.Format("最新示例({0})", _examplesCount); + } + else + { + leftPanel.Title = String.Format("全部示例({0})", _examplesCount); + } + + } + + private Accordion InitAccordionMenu() + { + Accordion accordionMenu = new Accordion(); + accordionMenu.ID = "accordionMenu"; + accordionMenu.ShowBorder = false; + accordionMenu.ShowHeader = false; + leftPanel.Items.Add(accordionMenu); + + + XmlDocument xmlDoc = XmlDataSource1.GetXmlDocument(); + XmlNodeList xmlNodes = xmlDoc.SelectNodes("/Tree/TreeNode"); + foreach (XmlNode xmlNode in xmlNodes) + { + if (xmlNode.HasChildNodes) + { + AccordionPane accordionPane = new AccordionPane(); + accordionPane.Title = xmlNode.Attributes["Text"].Value; + accordionPane.Layout = Layout.Fit; + accordionPane.ShowBorder = false; + + var accordionPaneIconAttr = xmlNode.Attributes["Icon"]; + if (accordionPaneIconAttr != null) + { + accordionPane.Icon = (Icon)Enum.Parse(typeof(Icon), accordionPaneIconAttr.Value, true); + } + + accordionMenu.Items.Add(accordionPane); + + Tree innerTree = new Tree(); + innerTree.ShowBorder = false; + innerTree.ShowHeader = false; + innerTree.EnableIcons = true; + innerTree.AutoScroll = true; + innerTree.EnableSingleClickExpand = true; + accordionPane.Items.Add(innerTree); + + XmlDocument doc = new XmlDocument(); + doc.LoadXml(String.Format("{0}", xmlNode.InnerXml)); + ResolveXmlDocument(doc); + + // 绑定AccordionPane内部的树控件 + innerTree.NodeDataBound += treeMenu_NodeDataBound; + innerTree.PreNodeDataBound += treeMenu_PreNodeDataBound; + innerTree.DataSource = doc; + innerTree.DataBind(); + } + } + + return accordionMenu; + } + + private Tree InitTreeMenu() + { + Tree treeMenu = new Tree(); + treeMenu.ID = "treeMenu"; + treeMenu.ShowBorder = false; + treeMenu.ShowHeader = false; + treeMenu.EnableIcons = true; + treeMenu.AutoScroll = true; + treeMenu.EnableSingleClickExpand = true; + leftPanel.Items.Add(treeMenu); + + XmlDocument doc = XmlDataSource1.GetXmlDocument(); + ResolveXmlDocument(doc); + + // 绑定 XML 数据源到树控件 + treeMenu.NodeDataBound += treeMenu_NodeDataBound; + treeMenu.PreNodeDataBound += treeMenu_PreNodeDataBound; + treeMenu.DataSource = doc; + treeMenu.DataBind(); + + return treeMenu; + } + + #region ResolveXmlDocument + + private void ResolveXmlDocument(XmlDocument doc) + { + ResolveXmlDocument(doc, doc.DocumentElement.ChildNodes); + } + + private int ResolveXmlDocument(XmlDocument doc, XmlNodeList nodes) + { + // nodes 中渲染到页面上的节点个数 + int nodeVisibleCount = 0; + + foreach (XmlNode node in nodes) + { + // Only process Xml elements (ignore comments, etc) + if (node.NodeType == XmlNodeType.Element) + { + XmlAttribute removedAttr; + + // 是否叶子节点 + bool isLeaf = node.ChildNodes.Count == 0; + + + // 所有过滤条件均是对叶子节点而言,而是否显示目录,要看是否存在叶子节点 + if (isLeaf) + { + // 如果仅显示最新示例 + if (_showOnlyNew) + { + XmlAttribute isNewAttr = node.Attributes["IsNew"]; + if (isNewAttr == null) + { + removedAttr = doc.CreateAttribute("Removed"); + removedAttr.Value = "true"; + + node.Attributes.Append(removedAttr); + + } + } + } + + // 存在子节点 + if (!isLeaf) + { + // 递归 + int childVisibleCount = ResolveXmlDocument(doc, node.ChildNodes); + + if (childVisibleCount == 0) + { + removedAttr = doc.CreateAttribute("Removed"); + removedAttr.Value = "true"; + + node.Attributes.Append(removedAttr); + } + } + + + removedAttr = node.Attributes["Removed"]; + if (removedAttr == null) + { + nodeVisibleCount++; + } + } + } + + return nodeVisibleCount; + } + + #endregion + + /// + /// 树节点的绑定后事件 + /// + /// + /// + private void treeMenu_NodeDataBound(object sender, TreeNodeEventArgs e) + { + // 是否叶子节点 + bool isLeaf = e.XmlNode.ChildNodes.Count == 0; + + string isNewHtml = GetIsNewHtml(e.XmlNode); + if (!String.IsNullOrEmpty(isNewHtml)) + { + e.Node.Text += isNewHtml; + } + + if (isLeaf) + { + // 设置节点的提示信息 + e.Node.ToolTip = e.Node.Text; + } + + // 如果仅显示最新示例 并且 当前节点不是子节点,则展开当前节点 + if (_showOnlyNew && !e.Node.Leaf) + { + e.Node.Expanded = true; + } + + } + + + /// + /// 树节点的预绑定事件 + /// + /// + /// + private void treeMenu_PreNodeDataBound(object sender, TreePreNodeEventArgs e) + { + /* + // 如果仅显示最新示例 + if (showOnlyNew) + { + string isNewHtml = GetIsNewHtml(e.XmlNode); + if (String.IsNullOrEmpty(isNewHtml)) + { + e.Cancelled = true; + } + } + + // 更新示例总数 + if (e.XmlNode.ChildNodes.Count == 0) + { + examplesCount++; + } + */ + + // 是否叶子节点 + bool isLeaf = e.XmlNode.ChildNodes.Count == 0; + + XmlAttribute removedAttr = e.XmlNode.Attributes["Removed"]; + if (removedAttr != null) + { + e.Cancelled = true; + } + + if (isLeaf && !e.Cancelled) + { + _examplesCount++; + } + } + + + private string GetIsNewHtml(XmlNode node) + { + string result = String.Empty; + + XmlAttribute isNewAttr = node.Attributes["IsNew"]; + if (isNewAttr != null) + { + if (Convert.ToBoolean(isNewAttr.Value)) + { + result = " New!"; + } + } + + return result; + } + + + #endregion + + #region Page_Load + + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + InitMenuStyleButton(); + InitLangMenuButton(); + InitThemeMenuButton(); + InitMenuShowOnlyNew(); + + litVersion.Text = FineUI.GlobalConfig.ProductVersion; + litOnlineUserCount.Text = Application["OnlineUserCount"].ToString(); + } + } + + private void InitMenuShowOnlyNew() + { + cbxShowOnlyNew.Checked = _showOnlyNew; + + } + + + private void InitMenuStyleButton() + { + string menuStyleID = "MenuStyleTree"; + + HttpCookie menuStyleCookie = Request.Cookies["MenuStyle_v6"]; + if (menuStyleCookie != null) + { + switch (menuStyleCookie.Value) + { + case "menu": + menuStyleID = "MenuStyleTree"; + break; + case "accordion": + menuStyleID = "MenuStyleAccordion"; + break; + } + } + + + SetSelectedMenuID(MenuStyle, menuStyleID); + } + + + private void InitLangMenuButton() + { + string langMenuID = "MenuLangZHCN"; + + string langValue = PageManager1.Language.ToString().ToLower(); + switch (langValue) + { + case "zh_cn": + langMenuID = "MenuLangZHCN"; + break; + case "zh_tw": + langMenuID = "MenuLangZHTW"; + break; + case "en": + langMenuID = "MenuLangEN"; + break; + } + + + SetSelectedMenuID(MenuLang, langMenuID); + } + + private void InitThemeMenuButton() + { + string themeMenuID = "MenuThemeNeptune"; + + string themeValue = PageManager1.Theme.ToString().ToLower(); + switch (themeValue) + { + case "classic": + case "blue": + themeMenuID = "MenuThemeBlue"; + break; + case "gray": + themeMenuID = "MenuThemeGray"; + break; + case "neptune": + themeMenuID = "MenuThemeNeptune"; + break; + case "crisp": + themeMenuID = "MenuThemeCrisp"; + break; + case "triton": + themeMenuID = "MenuThemeTriton"; + break; + } + + SetSelectedMenuID(MenuTheme, themeMenuID); + } + + + private void SetSelectedMenuID(MenuButton menuButton, string selectedMenuID) + { + foreach (MenuItem item in menuButton.Menu.Items) + { + MenuCheckBox menu = (item as MenuCheckBox); + if (menu != null && menu.ID == selectedMenuID) + { + menu.Checked = true; + } + else + { + menu.Checked = false; + } + } + } + + #endregion + + + } +} diff --git a/FineUI_v6/FineUI.Examples/default.aspx.designer.cs b/FineUI_v6/FineUI.Examples/default.aspx.designer.cs new file mode 100644 index 0000000..b461f44 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/default.aspx.designer.cs @@ -0,0 +1,348 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples { + + + public partial class _default { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// RegionPanel1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.RegionPanel RegionPanel1; + + /// + /// Region1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Region Region1; + + /// + /// leftPanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Region leftPanel; + + /// + /// mainRegion control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Region mainRegion; + + /// + /// mainTabStrip control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.TabStrip mainTabStrip; + + /// + /// ToolbarFill2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.ToolbarFill ToolbarFill2; + + /// + /// btnGotoOpenSourceSite control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnGotoOpenSourceSite; + + /// + /// ToolbarSeparator2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.ToolbarSeparator ToolbarSeparator2; + + /// + /// Button1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button Button1; + + /// + /// bottomPanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Region bottomPanel; + + /// + /// litVersion control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal litVersion; + + /// + /// litOnlineUserCount control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal litOnlineUserCount; + + /// + /// windowSourceCode control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Window windowSourceCode; + + /// + /// windowLoadingSelector control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Window windowLoadingSelector; + + /// + /// menuSettings control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Menu menuSettings; + + /// + /// btnExpandAll control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuButton btnExpandAll; + + /// + /// btnCollapseAll control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuButton btnCollapseAll; + + /// + /// MenuSeparator4 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuSeparator MenuSeparator4; + + /// + /// cbxShowOnlyNew control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox cbxShowOnlyNew; + + /// + /// MenuSeparator1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuSeparator MenuSeparator1; + + /// + /// MenuTheme control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuButton MenuTheme; + + /// + /// MenuThemeTriton control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuThemeTriton; + + /// + /// MenuThemeCrisp control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuThemeCrisp; + + /// + /// MenuThemeNeptune control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuThemeNeptune; + + /// + /// MenuThemeBlue control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuThemeBlue; + + /// + /// MenuThemeGray control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuThemeGray; + + /// + /// MenuStyle control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuButton MenuStyle; + + /// + /// MenuStyleTree control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuStyleTree; + + /// + /// MenuStyleAccordion control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuStyleAccordion; + + /// + /// MenuLang control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuButton MenuLang; + + /// + /// MenuLangZHCN control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuLangZHCN; + + /// + /// MenuLangZHTW control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuLangZHTW; + + /// + /// MenuLangEN control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuCheckBox MenuLangEN; + + /// + /// MenuSeparator2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.MenuSeparator MenuSeparator2; + + /// + /// XmlDataSource1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.XmlDataSource XmlDataSource1; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx new file mode 100644 index 0000000..bb0ec96 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx @@ -0,0 +1,31 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_compositelist.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_compositelist" %> + + + + + + + +
+ + + + + + + + + + + + +
+ + +
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.cs new file mode 100644 index 0000000..44a3020 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_compositelist : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindEnumrableToDropDownList(); + } + } + + #region CustomClass + + public class CustomClass + { + private string _id; + + public string ID + { + get { return _id; } + set { _id = value; } + } + private string _name; + + public string Name + { + get { return _name; } + set { _name = value; } + } + + public CustomClass(string id, string name) + { + _id = id; + _name = name; + } + } + #endregion + + #region BindEnumrableToDropDownList + + private void BindEnumrableToDropDownList() + { + List myList = new List(); + myList.Add(new CustomClass("1", "可选项1")); + myList.Add(new CustomClass("2", "可选项2")); + myList.Add(new CustomClass("3", "可选项3")); + myList.Add(new CustomClass("4", "可选项4")); + myList.Add(new CustomClass("5", "可选项5")); + myList.Add(new CustomClass("6", "可选项6")); + myList.Add(new CustomClass("7", "可选择项7")); + myList.Add(new CustomClass("8", "可选择项8")); + myList.Add(new CustomClass("9", "可选择项9")); + + DropDownList1.DataTextField = "Name"; + DropDownList1.DataValueField = "ID"; + DropDownList1.DataSource = myList; + DropDownList1.DataBind(); + + } + + #endregion + + #region Events + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.designer.cs new file mode 100644 index 0000000..0e1ed9c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_compositelist.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_compositelist { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx new file mode 100644 index 0000000..93ab980 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx @@ -0,0 +1,28 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_datatable.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_datatable" %> + + + + + + + +
+ + + + + + + + + + + +
+ + + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.cs new file mode 100644 index 0000000..1e03d05 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_datatable : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindDataTableToDropDownList(); + } + } + + #region BindDataTableToDropDownList + + private void BindDataTableToDropDownList() + { + DataTable table = new DataTable(); + DataColumn column1 = new DataColumn("MyText", typeof(String)); + DataColumn column2 = new DataColumn("MyValue", typeof(String)); + table.Columns.Add(column1); + table.Columns.Add(column2); + + DataRow row = table.NewRow(); + row[0] = "可选项1"; + row[1] = "1"; + table.Rows.Add(row); + row = table.NewRow(); + + row[0] = "可选项2"; + row[1] = "2"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选项3"; + row[1] = "3"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选项4"; + row[1] = "4"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选项5"; + row[1] = "5"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选项6"; + row[1] = "6"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选择项7"; + row[1] = "7"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选择项8"; + row[1] = "8"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "可选择项9"; + row[1] = "9"; + table.Rows.Add(row); + + row = table.NewRow(); + row[0] = "这是一个很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的可选项"; + row[1] = "10"; + table.Rows.Add(row); + + DropDownList1.DataTextField = "MyText"; + DropDownList1.DataValueField = "MyValue"; + DropDownList1.DataSource = table; + DropDownList1.DataBind(); + } + + #endregion + + #region Events + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.designer.cs new file mode 100644 index 0000000..667a6eb --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_datatable.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_datatable { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx new file mode 100644 index 0000000..c9c083b --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx @@ -0,0 +1,31 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_simplelist.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_simplelist" %> + + + + + + + +
+ + + + + + + + + + + + +
+ + +
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.cs new file mode 100644 index 0000000..54596a1 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_simplelist : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindStringListToDropDownList(); + } + } + + #region BindStringListToDropDownList + + private void BindStringListToDropDownList() + { + List strList = new List(); + strList.Add("可选项1"); + strList.Add("可选项2"); + strList.Add("可选项3"); + strList.Add("可选项4"); + strList.Add("可选项5"); + strList.Add("可选项6"); + strList.Add("可选择项7"); + strList.Add("可选择项8"); + strList.Add("可选择项9"); + strList.Add("这是一个很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的可选项"); + + DropDownList1.DataSource = strList; + DropDownList1.DataBind(); + + } + #endregion + + #region Events + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "可选项6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.designer.cs new file mode 100644 index 0000000..9576f2e --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/databind/dropdownlist_simplelist.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_simplelist { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx new file mode 100644 index 0000000..0bb0dae --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx @@ -0,0 +1,41 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx.cs new file mode 100644 index 0000000..765a012 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx.designer.cs new file mode 100644 index 0000000..d486fbd --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx new file mode 100644 index 0000000..6da4012 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx @@ -0,0 +1,40 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_autopostback.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_autopostback" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx.cs new file mode 100644 index 0000000..9439c2c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_autopostback : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + private void CheckSelection() + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + CheckSelection(); + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + CheckSelection(); + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx.designer.cs new file mode 100644 index 0000000..7b83f30 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_autopostback { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx new file mode 100644 index 0000000..8e1a2b4 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx @@ -0,0 +1,42 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_autopostback_enableedit.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_autopostback_enableedit" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx.cs new file mode 100644 index 0000000..7451047 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_autopostback_enableedit : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + private void CheckSelection() + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + CheckSelection(); + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + CheckSelection(); + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx.designer.cs new file mode 100644 index 0000000..a73b8a6 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_autopostback_enableedit { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx new file mode 100644 index 0000000..e14a392 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx @@ -0,0 +1,44 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_autopostback_enableedit_noforceselection.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_autopostback_enableedit_noforceselection" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+ 注:本示例有BUG,用户输入值并且下拉列表失去焦点时不能自动回发。 + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx.cs new file mode 100644 index 0000000..cd9f159 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_autopostback_enableedit_noforceselection : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + private void CheckSelection() + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = String.Format("用户输入值:{0}", DropDownList1.Text); + } + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + CheckSelection(); + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + CheckSelection(); + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx.designer.cs new file mode 100644 index 0000000..824db7a --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_autopostback_enableedit_noforceselection.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_autopostback_enableedit_noforceselection { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx new file mode 100644 index 0000000..652de42 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx @@ -0,0 +1,41 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_emptytext.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_emptytext" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx.cs new file mode 100644 index 0000000..4caa57a --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_emptytext : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx.designer.cs new file mode 100644 index 0000000..238cf64 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_emptytext { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx new file mode 100644 index 0000000..57254fa --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx @@ -0,0 +1,41 @@ +<%@ Page Language="C#" AutoEventWireup="True" CodeBehind="dropdownlist_emptytext_enableedit.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_emptytext_enableedit" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx.cs new file mode 100644 index 0000000..ba50730 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_emptytext_enableedit : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx.designer.cs new file mode 100644 index 0000000..b697db2 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptytext_enableedit.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_emptytext_enableedit { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx new file mode 100644 index 0000000..fc0ee40 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx @@ -0,0 +1,46 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_emptyvalue.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_emptyvalue" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ 注:[可选项6]的Value属性为空字符串。 + + + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.cs new file mode 100644 index 0000000..2a24998 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_emptyvalue : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = ""; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + Result(); + } + + private void Result() + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.designer.cs new file mode 100644 index 0000000..1654bc0 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_emptyvalue.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_emptyvalue { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx new file mode 100644 index 0000000..6ae7ae1 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx @@ -0,0 +1,44 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_enableedit.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_enableedit" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ 注:下拉列表的属性设置为EnableEdit=true(ForceSelection默认为true),可以在输入文本以过滤下拉项。 + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.cs new file mode 100644 index 0000000..eb8894c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_enableedit : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.designer.cs new file mode 100644 index 0000000..48641da --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_enableedit.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_enableedit { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx new file mode 100644 index 0000000..7f5dab3 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx @@ -0,0 +1,42 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_focus.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_focus" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ 注:页面加载完毕后,下拉列表默认获取焦点。 + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx.cs new file mode 100644 index 0000000..242d008 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_focus : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx.designer.cs new file mode 100644 index 0000000..4d7a886 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_focus.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_focus { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx new file mode 100644 index 0000000..ccf2909 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx @@ -0,0 +1,44 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_forceselection.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_forceselection" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ 注:下拉列表的属性设置为EnableEdit="true" ForceSelection="false"。 + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.cs new file mode 100644 index 0000000..c265ed2 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_forceselection : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = String.Format("用户输入值:{0}", DropDownList1.Text); + } + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.designer.cs new file mode 100644 index 0000000..e32c1b8 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_forceselection.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_forceselection { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx new file mode 100644 index 0000000..293f432 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx @@ -0,0 +1,52 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_matchfieldwidth.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_matchfieldwidth" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ 注:ExtJS这个地方有问题,可能会有横向滚动体出来。查看专业版示例 + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.cs new file mode 100644 index 0000000..4752921 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_matchfieldwidth : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.designer.cs new file mode 100644 index 0000000..7f73d5d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_matchfieldwidth { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx new file mode 100644 index 0000000..c93ac71 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx @@ -0,0 +1,53 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_matchfieldwidth_right.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_matchfieldwidth_right" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx.cs new file mode 100644 index 0000000..04de16b --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_matchfieldwidth_right : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx.designer.cs new file mode 100644 index 0000000..aafd190 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_matchfieldwidth_right.aspx.designer.cs @@ -0,0 +1,87 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_matchfieldwidth_right { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// Panel1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Panel Panel1; + + /// + /// SimpleForm1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx new file mode 100644 index 0000000..ec36cad --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx @@ -0,0 +1,52 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_multiselect_scroll.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_multiselect_scroll" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx.cs new file mode 100644 index 0000000..b337c79 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_multiselect_scroll : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + List texts = new List(); + List values = new List(); + foreach (ListItem item in DropDownList1.SelectedItemArray) + { + texts.Add(item.Text); + values.Add(item.Value); + } + + labResult.Text = String.Format("选中项文本:{0}
选中项值:{1}", + String.Join("  ", texts.ToArray()), + String.Join("  ", values.ToArray())); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx.designer.cs new file mode 100644 index 0000000..50daa37 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_multiselect_scroll.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_multiselect_scroll { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx new file mode 100644 index 0000000..2bc1488 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx @@ -0,0 +1,58 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_no_autopostback.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_no_autopostback" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ 注:下拉列表不自动回发(AutoPostBack=false),但是定义了SelectedIndexChanged事件,可以尝试进行如下操作: +
    +
  • + 改变下拉列表的选择项,比如选中[可选项4]; +
  • +
  • + 点击按钮[获取此下拉列表的选中项],此时会触发下拉列表的SelectedIndexChanged事件。 +
  • +
+
    +
  • + 点击按钮[选中[可选项6]]; +
  • +
  • + 点击按钮[获取此下拉列表的选中项],此时不会触发下拉列表的SelectedIndexChanged事件。 +
  • +
+
+ + +
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx.cs new file mode 100644 index 0000000..fa75e27 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_no_autopostback : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + Alert.Show("触发了下拉列表的自动回发事件"); + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx.designer.cs new file mode 100644 index 0000000..ce8a6bd --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_autopostback.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_no_autopostback { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx new file mode 100644 index 0000000..d5c3f24 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx @@ -0,0 +1,48 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_no_forceselection_initvalue.aspx.cs" + Inherits="FineUI.Examples.dropdownlist.dropdownlist_no_forceselection_initvalue" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ 下拉列表的属性设置为: +
    +
  • AutoSelectFirstItem="false":初始不强制选中第一项
  • +
  • EnableEdit="true":可以手工编辑
  • +
  • ForceSelection="false":不强制选择
  • +
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx.cs new file mode 100644 index 0000000..f2dd32a --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_no_forceselection_initvalue : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + // 设置下拉列表的初始值为自定义文本 + DropDownList1.Text = "初始自定义值"; + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = String.Format("用户输入值:{0}", DropDownList1.Text); + } + } + + protected void btnSetText_Click(object sender, EventArgs e) + { + DropDownList1.Text = "用户输入值"; + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx.designer.cs new file mode 100644 index 0000000..8315b8c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_no_forceselection_initvalue.aspx.designer.cs @@ -0,0 +1,87 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_no_forceselection_initvalue { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnSetText control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnSetText; + + /// + /// btnGetSelection control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx new file mode 100644 index 0000000..e0f5d28 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx @@ -0,0 +1,51 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_scroll.aspx.cs" Inherits="FineUI.Examples.dropdownlist.dropdownlist_scroll" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx.cs new file mode 100644 index 0000000..7977bb4 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.dropdownlist +{ + public partial class dropdownlist_scroll : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", DropDownList1.SelectedItem.Text, DropDownList1.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx.designer.cs new file mode 100644 index 0000000..61df8de --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_scroll.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class dropdownlist_scroll { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx new file mode 100644 index 0000000..b44c0bd --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx @@ -0,0 +1,31 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dropdownlist_simulate_tree.aspx.cs" + Inherits="FineUI.Examples.data.dropdownlist_simulate_tree" %> + + + + + + + +
+ + + + + + + + + + + + +
+ + +
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.cs new file mode 100644 index 0000000..4955ff0 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; + +namespace FineUI.Examples.data +{ + public partial class dropdownlist_simulate_tree : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindEnumrable(); + } + } + + #region JQueryFeature + + public class JQueryFeature + { + private string _id; + + public string Id + { + get { return _id; } + set { _id = value; } + } + private string _name; + + public string Name + { + get { return _name; } + set { _name = value; } + } + + private int _level; + + public int Level + { + get { return _level; } + set { _level = value; } + } + + private bool _enableSelect; + + public bool EnableSelect + { + get { return _enableSelect; } + set { _enableSelect = value; } + } + + public JQueryFeature(string id, string name, int level, bool enableSelect) + { + _id = id; + _name = name; + _level = level; + _enableSelect = enableSelect; + } + + public override string ToString() + { + return String.Format("Name:{0}+Id:{1}", Name, Id); + } + } + #endregion + + #region BindEnumrable + + private void BindEnumrable() + { + List myList = new List(); + myList.Add(new JQueryFeature("0", "jQuery", 0, false)); + myList.Add(new JQueryFeature("1", "核心", 1, false)); + myList.Add(new JQueryFeature("2", "选择符", 1, false)); + myList.Add(new JQueryFeature("3", "基本选择符", 2, true)); + myList.Add(new JQueryFeature("4", "内容选择符", 2, true)); + myList.Add(new JQueryFeature("5", "属性选择符", 2, true)); + myList.Add(new JQueryFeature("6", "筛选", 1, false)); + myList.Add(new JQueryFeature("7", "过滤", 2, true)); + myList.Add(new JQueryFeature("8", "查找", 2, true)); + myList.Add(new JQueryFeature("9", "事件", 1, false)); + myList.Add(new JQueryFeature("10", "页面载入", 2, true)); + myList.Add(new JQueryFeature("11", "事件处理", 2, true)); + myList.Add(new JQueryFeature("12", "事件委托", 2, true)); + + ddlBox.DataTextField = "Name"; + ddlBox.DataValueField = "Id"; + ddlBox.DataSimulateTreeLevelField = "Level"; + ddlBox.DataEnableSelectField = "EnableSelect"; + ddlBox.DataSource = myList; + ddlBox.DataBind(); + + ddlBox.SelectedValue = "3"; + } + #endregion + + #region Events + + protected void Button1_Click(object sender, EventArgs e) + { + if (ddlBox.SelectedItem != null) + { + labResult.Text = String.Format("选中项:{0}(值:{1})", ddlBox.SelectedText, ddlBox.SelectedValue); + } + else + { + labResult.Text = "无选中项"; + } + } + #endregion + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.designer.cs new file mode 100644 index 0000000..efaf6bf --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/dropdownlist_simulate_tree.aspx.designer.cs @@ -0,0 +1,69 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.data { + + + public partial class dropdownlist_simulate_tree { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// ddlBox 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList ddlBox; + + /// + /// Button1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button Button1; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx new file mode 100644 index 0000000..d69c7ce --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx @@ -0,0 +1,42 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="multiselect.aspx.cs" Inherits="FineUI.Examples.dropdownlist.multiselect" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx.cs new file mode 100644 index 0000000..ce521d7 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.dropdownlist +{ + public partial class multiselect : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + List texts = new List(); + List values = new List(); + foreach (ListItem item in DropDownList1.SelectedItemArray) + { + texts.Add(item.Text); + values.Add(item.Value); + } + + labResult.Text = String.Format("选中项文本:{0}
选中项值:{1}", + String.Join("  ", texts.ToArray()), + String.Join("  ", values.ToArray())); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx.designer.cs new file mode 100644 index 0000000..21743b9 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class multiselect { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx new file mode 100644 index 0000000..270bcae --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx @@ -0,0 +1,42 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="multiselect_autopostback.aspx.cs" Inherits="FineUI.Examples.dropdownlist.multiselect_autopostback" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.cs new file mode 100644 index 0000000..1493760 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.dropdownlist +{ + public partial class multiselect_autopostback : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + WriteSelection(); + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + WriteSelection(); + } + + private void WriteSelection() + { + if (DropDownList1.SelectedItem != null) + { + List texts = new List(); + List values = new List(); + foreach (ListItem item in DropDownList1.SelectedItemArray) + { + texts.Add(item.Text); + values.Add(item.Value); + } + + labResult.Text = String.Format("选中项文本:{0}
选中项值:{1}", + String.Join("  ", texts.ToArray()), + String.Join("  ", values.ToArray())); + } + else + { + labResult.Text = "无选中项"; + } + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.designer.cs new file mode 100644 index 0000000..d4c3aed --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class multiselect_autopostback { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx new file mode 100644 index 0000000..c2904b9 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx @@ -0,0 +1,43 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="multiselect_autopostback_enableedit.aspx.cs" Inherits="FineUI.Examples.dropdownlist.multiselect_autopostback_enableedit" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx.cs new file mode 100644 index 0000000..3fdfceb --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.dropdownlist +{ + public partial class multiselect_autopostback_enableedit : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + WriteSelection(); + } + + protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) + { + WriteSelection(); + } + + private void WriteSelection() + { + if (DropDownList1.SelectedItem != null) + { + List texts = new List(); + List values = new List(); + foreach (ListItem item in DropDownList1.SelectedItemArray) + { + texts.Add(item.Text); + values.Add(item.Value); + } + + labResult.Text = String.Format("选中项文本:{0}
选中项值:{1}", + String.Join("  ", texts.ToArray()), + String.Join("  ", values.ToArray())); + } + else + { + labResult.Text = "无选中项"; + } + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx.designer.cs new file mode 100644 index 0000000..29d5e33 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_autopostback_enableedit.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class multiselect_autopostback_enableedit { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx new file mode 100644 index 0000000..74ab2d7 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx @@ -0,0 +1,44 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="multiselect_enableedit.aspx.cs" Inherits="FineUI.Examples.dropdownlist.multiselect_enableedit" %> + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.cs new file mode 100644 index 0000000..6b5cd1a --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using System.Text; + +namespace FineUI.Examples.dropdownlist +{ + public partial class multiselect_enableedit : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + + } + } + + protected void btnSelectItem6_Click(object sender, EventArgs e) + { + DropDownList1.SelectedValue = "Value6"; + } + + protected void btnGetSelection_Click(object sender, EventArgs e) + { + if (DropDownList1.SelectedItem != null) + { + List texts = new List(); + List values = new List(); + foreach (ListItem item in DropDownList1.SelectedItemArray) + { + texts.Add(item.Text); + values.Add(item.Value); + } + + labResult.Text = String.Format("选中项文本:{0}
选中项值:{1}", + String.Join("  ", texts.ToArray()), + String.Join("  ", values.ToArray())); + } + else + { + labResult.Text = "无选中项"; + } + } + + + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.designer.cs new file mode 100644 index 0000000..867acc2 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/multiselect_enableedit.aspx.designer.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.dropdownlist { + + + public partial class multiselect_enableedit { + + /// + /// form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// DropDownList1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.DropDownList DropDownList1; + + /// + /// btnSelectItem6 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnSelectItem6; + + /// + /// btnGetSelection control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Button btnGetSelection; + + /// + /// labResult control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx b/FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx new file mode 100644 index 0000000..ceece2c --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx @@ -0,0 +1,37 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="shengshixian.aspx.cs" Inherits="FineUI.Examples.data.shengshixian" %> + + + + + + + +
+ + + + + + + + + + + + + + +
+ + +
+ + + diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx.cs b/FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx.cs new file mode 100644 index 0000000..791ccba --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace FineUI.Examples.data +{ + public partial class shengshixian : PageBase + { + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + BindSheng(); + BindShi(); + BindXian(); + } + } + + + private void BindSheng() + { + ddlSheng.DataSource = SHENG_JSON; + ddlSheng.DataBind(); + + ddlSheng.Items.Insert(0, new ListItem("选择省份", "-1")); + ddlSheng.SelectedValue = "-1"; + } + + private void BindShi() + { + string sheng = ddlSheng.SelectedValue; + + if (sheng != "-1") + { + JArray ja = SHI_JSON.Value(sheng); + ddlShi.DataSource = ja; + ddlShi.DataBind(); + } + + ddlShi.Items.Insert(0, new ListItem("选择地区市", "-1")); + ddlShi.SelectedValue = "-1"; + + // 是否禁用 + ddlShi.Enabled = !(ddlShi.Items.Count == 1); + } + + private void BindXian() + { + string shi = ddlShi.SelectedValue; + + if (shi != "-1") + { + JArray ja = XIAN_JSON.Value(shi); + ddlXian.DataSource = ja; + ddlXian.DataBind(); + } + + ddlXian.Items.Insert(0, new ListItem("选择县级市", "-1")); + ddlXian.SelectedValue = "-1"; + + // 是否禁用 + ddlXian.Enabled = !(ddlXian.Items.Count == 1); + } + + protected void ddlSheng_SelectedIndexChanged(object sender, EventArgs e) + { + ddlShi.Items.Clear(); + BindShi(); + + ddlXian.Items.Clear(); + BindXian(); + } + + protected void ddlShi_SelectedIndexChanged(object sender, EventArgs e) + { + ddlXian.Items.Clear(); + BindXian(); + } + + protected void btnSubmit_Click(object sender, EventArgs e) + { + labResult.Text = "您选择为:" + ddlSheng.SelectedValue + " | " + ddlShi.SelectedValue + (ddlXian.SelectedValue == "-1" ? "" : " | " + ddlXian.SelectedValue); + } + + } +} diff --git a/FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx.designer.cs b/FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx.designer.cs new file mode 100644 index 0000000..6c8db6d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/dropdownlist/shengshixian.aspx.designer.cs @@ -0,0 +1,87 @@ +//------------------------------------------------------------------------------ +// <自动生成> +// 此代码由工具生成。 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FineUI.Examples.data { + + + public partial class shengshixian { + + /// + /// form1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// + /// PageManager1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.PageManager PageManager1; + + /// + /// SimpleForm1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.SimpleForm SimpleForm1; + + /// + /// ddlSheng 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList ddlSheng; + + /// + /// ddlShi 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList ddlShi; + + /// + /// ddlXian 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.DropDownList ddlXian; + + /// + /// btnSubmit 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Button btnSubmit; + + /// + /// labResult 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUI.Label labResult; + } +} diff --git a/FineUI_v6/FineUI.Examples/extjs_builder/ajaxminifier/AjaxMinifier.exe b/FineUI_v6/FineUI.Examples/extjs_builder/ajaxminifier/AjaxMinifier.exe new file mode 100644 index 0000000000000000000000000000000000000000..127aaea3625d771cfe83ab21fc2f7721dabf1203 GIT binary patch literal 552448 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%0AD{hD1`!wrnri*6m&{K`VfiSK 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 EU$u}OcmMzZ literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI.Examples/extjs_builder/build.bat b/FineUI_v6/FineUI.Examples/extjs_builder/build.bat new file mode 100644 index 0000000..1285d6f --- /dev/null +++ b/FineUI_v6/FineUI.Examples/extjs_builder/build.bat @@ -0,0 +1,151 @@ + + +mkdir ..\extjs +mkdir ..\extjs\lang +mkdir ..\extjs\res +mkdir ..\extjs\res\images +mkdir ..\extjs\res\css +mkdir ..\extjs\res\ext-theme-classic +mkdir ..\extjs\res\ext-theme-classic\images +mkdir ..\extjs\res\ext-theme-gray +mkdir ..\extjs\res\ext-theme-gray\images +mkdir ..\extjs\res\ext-theme-neptune +mkdir ..\extjs\res\ext-theme-neptune\images +mkdir ..\extjs\res\ext-theme-crisp +mkdir ..\extjs\res\ext-theme-crisp\images +mkdir ..\extjs\res\ext-theme-triton +mkdir ..\extjs\res\ext-theme-triton\images +mkdir ..\extjs\res\ext-theme-triton\fonts +mkdir ..\extjs\res\ext-theme-triton\font-ext +mkdir ..\extjs\res\ext-theme-triton\font-awesome + + + +xcopy extjs_source_all\build\classic\theme-classic\resources\images ..\extjs\res\ext-theme-classic\images /Y /E +xcopy extjs_source_all\build\classic\theme-gray\resources\images ..\extjs\res\ext-theme-gray\images /Y /E +xcopy extjs_source_all\build\classic\theme-neptune\resources\images ..\extjs\res\ext-theme-neptune\images /Y /E +xcopy extjs_source_all\build\classic\theme-crisp\resources\images ..\extjs\res\ext-theme-crisp\images /Y /E +xcopy extjs_source_all\build\classic\theme-triton\resources\images ..\extjs\res\ext-theme-triton\images /Y /E +xcopy res\images ..\extjs\res\images /Y /E +type res\images\s.gif > ..\extjs\res\s.gif + + +xcopy extjs_source_all\build\classic\theme-triton\resources\fonts ..\extjs\res\ext-theme-triton\fonts /Y /E +xcopy extjs_source_all\build\classic\theme-triton\resources\font-ext ..\extjs\res\ext-theme-triton\font-ext /Y /E +xcopy extjs_source_all\build\classic\theme-triton\resources\font-awesome ..\extjs\res\ext-theme-triton\font-awesome /Y /E + + + +type res\FineUI.css > _f +type res\PageLoading.css >> _f +type res\Grid.css >> _f +type res\Tree.css >> _f + +type _f > _f2 +type res\theme-classic.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-classic.css + +type _f > _f2 +type res\theme-gray.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-gray.css + +type _f > _f2 +type res\theme-neptune.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-neptune.css + +type _f > _f2 +type res\theme-triton.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-triton.css + +type _f > _f2 +type res\theme-crisp.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-crisp.css + + +type extjs_source_all\build\classic\theme-classic\resources\theme-classic-all_1.css > ..\extjs\res\ext-theme-classic\theme-classic-all_1.css +type extjs_source_all\build\classic\theme-classic\resources\theme-classic-all_2.css > ..\extjs\res\ext-theme-classic\theme-classic-all_2.css + +type extjs_source_all\build\classic\theme-gray\resources\theme-gray-all_1.css > ..\extjs\res\ext-theme-gray\theme-gray-all_1.css +type extjs_source_all\build\classic\theme-gray\resources\theme-gray-all_2.css > ..\extjs\res\ext-theme-gray\theme-gray-all_2.css + +type extjs_source_all\build\classic\theme-neptune\resources\theme-neptune-all_1.css > ..\extjs\res\ext-theme-neptune\theme-neptune-all_1.css +type extjs_source_all\build\classic\theme-neptune\resources\theme-neptune-all_2.css > ..\extjs\res\ext-theme-neptune\theme-neptune-all_2.css + +type extjs_source_all\build\classic\theme-crisp\resources\theme-crisp-all_1.css > ..\extjs\res\ext-theme-crisp\theme-crisp-all_1.css +type extjs_source_all\build\classic\theme-crisp\resources\theme-crisp-all_2.css > ..\extjs\res\ext-theme-crisp\theme-crisp-all_2.css + +type extjs_source_all\build\classic\theme-triton\resources\theme-triton-all_1.css > ..\extjs\res\ext-theme-triton\theme-triton-all_1.css +type extjs_source_all\build\classic\theme-triton\resources\theme-triton-all_2.css > ..\extjs\res\ext-theme-triton\theme-triton-all_2.css + + + +type extjs_source_all\build\classic\theme-classic\theme-classic.js > ..\extjs\res\ext-theme-classic\theme-classic.js +type extjs_source_all\build\classic\theme-gray\theme-gray.js > ..\extjs\res\ext-theme-gray\theme-gray.js +type extjs_source_all\build\classic\theme-neptune\theme-neptune.js > ..\extjs\res\ext-theme-neptune\theme-neptune.js +type extjs_source_all\build\classic\theme-crisp\theme-crisp.js > ..\extjs\res\ext-theme-crisp\theme-crisp.js +type extjs_source_all\build\classic\theme-triton\theme-triton.js > ..\extjs\res\ext-theme-triton\theme-triton.js + + + +type extjs_source_all\build\classic\locale\locale-en.js > _f +type js\lang\f-lang-en.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\en.js + +type extjs_source_all\build\classic\locale\locale-pt_BR.js > _f +type js\lang\f-lang-pt_BR.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\pt_BR.js + +type extjs_source_all\build\classic\locale\locale-tr.js > _f +type js\lang\f-lang-tr.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\tr.js + +type extjs_source_all\build\classic\locale\locale-zh_CN.js > _f +type js\lang\f-lang-zh_CN.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\zh_CN.js + +type extjs_source_all\build\classic\locale\locale-zh_TW.js > _f +type js\lang\f-lang-zh_TW.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\zh_TW.js + +type extjs_source_all\build\classic\locale\locale-ru.js > _f +type js\lang\f-lang-ru.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\ru.js + + + + + + + + + + + + +type extjs_source_all\build\ext-all.js > ..\extjs\ext-all.js + +type js\lib\json2.js > _f +type js\lib\Base64.js >> _f +type js\F\F.util.js >> _f +type js\F\F.ajax.js >> _f +type js\F\F.wnd.js >> _f +type js\F\extender.js >> _f +type js\F\F.simulateTree.js >> _f +type js\F\F.format.js >> _f +type js\ux\FormViewport.js >> _f +type js\ux\SimplePagingToolbar.js >> _f +::type js\ux\TabCloseMenu.js >> _f +type extjs_source_all\classic\classic\src\grid\plugin\RowExpander.js >> _f +type extjs_source_all\packages\ux\classic\src\RowExpander.js >> _f +type extjs_source_all\packages\ux\classic\src\TabCloseMenu.js >> _f + +type _f > ..\extjs\ext-fineui.js + + + +type version.txt > ..\extjs\version.txt + +del _f /Q +del _f2 /Q + + diff --git a/FineUI_v6/FineUI.Examples/extjs_builder/build_only_js_css.bat b/FineUI_v6/FineUI.Examples/extjs_builder/build_only_js_css.bat new file mode 100644 index 0000000..b228fce --- /dev/null +++ b/FineUI_v6/FineUI.Examples/extjs_builder/build_only_js_css.bat @@ -0,0 +1,136 @@ + + +mkdir ..\extjs +mkdir ..\extjs\lang +mkdir ..\extjs\res +mkdir ..\extjs\res\images +mkdir ..\extjs\res\css +mkdir ..\extjs\res\ext-theme-classic +mkdir ..\extjs\res\ext-theme-classic\images +mkdir ..\extjs\res\ext-theme-gray +mkdir ..\extjs\res\ext-theme-gray\images +mkdir ..\extjs\res\ext-theme-neptune +mkdir ..\extjs\res\ext-theme-neptune\images +mkdir ..\extjs\res\ext-theme-crisp +mkdir ..\extjs\res\ext-theme-crisp\images +mkdir ..\extjs\res\ext-theme-triton +mkdir ..\extjs\res\ext-theme-triton\images + + + + + + +type res\FineUI.css > _f +type res\PageLoading.css >> _f +type res\Grid.css >> _f +type res\Tree.css >> _f + +type _f > _f2 +type res\theme-classic.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-classic.css + +type _f > _f2 +type res\theme-gray.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-gray.css + +type _f > _f2 +type res\theme-neptune.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-neptune.css + +type _f > _f2 +type res\theme-triton.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-triton.css + +type _f > _f2 +type res\theme-crisp.css >> _f2 +ajaxminifier\ajaxminifier -css _f2 -o ..\extjs\res\theme-crisp.css + + + +type extjs_source_all\build\classic\theme-classic\resources\theme-classic-all_1.css > ..\extjs\res\ext-theme-classic\theme-classic-all_1.css +type extjs_source_all\build\classic\theme-classic\resources\theme-classic-all_2.css > ..\extjs\res\ext-theme-classic\theme-classic-all_2.css + +type extjs_source_all\build\classic\theme-gray\resources\theme-gray-all_1.css > ..\extjs\res\ext-theme-gray\theme-gray-all_1.css +type extjs_source_all\build\classic\theme-gray\resources\theme-gray-all_2.css > ..\extjs\res\ext-theme-gray\theme-gray-all_2.css + +type extjs_source_all\build\classic\theme-neptune\resources\theme-neptune-all_1.css > ..\extjs\res\ext-theme-neptune\theme-neptune-all_1.css +type extjs_source_all\build\classic\theme-neptune\resources\theme-neptune-all_2.css > ..\extjs\res\ext-theme-neptune\theme-neptune-all_2.css + +type extjs_source_all\build\classic\theme-crisp\resources\theme-crisp-all_1.css > ..\extjs\res\ext-theme-crisp\theme-crisp-all_1.css +type extjs_source_all\build\classic\theme-crisp\resources\theme-crisp-all_2.css > ..\extjs\res\ext-theme-crisp\theme-crisp-all_2.css + +type extjs_source_all\build\classic\theme-triton\resources\theme-triton-all_1.css > ..\extjs\res\ext-theme-triton\theme-triton-all_1.css +type extjs_source_all\build\classic\theme-triton\resources\theme-triton-all_2.css > ..\extjs\res\ext-theme-triton\theme-triton-all_2.css + + + +type extjs_source_all\build\classic\theme-classic\theme-classic.js > ..\extjs\res\ext-theme-classic\theme-classic.js +type extjs_source_all\build\classic\theme-gray\theme-gray.js > ..\extjs\res\ext-theme-gray\theme-gray.js +type extjs_source_all\build\classic\theme-neptune\theme-neptune.js > ..\extjs\res\ext-theme-neptune\theme-neptune.js +type extjs_source_all\build\classic\theme-crisp\theme-crisp.js > ..\extjs\res\ext-theme-crisp\theme-crisp.js +type extjs_source_all\build\classic\theme-triton\theme-triton.js > ..\extjs\res\ext-theme-triton\theme-triton.js + + + +type extjs_source_all\build\classic\locale\locale-en.js > _f +type js\lang\f-lang-en.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\en.js + +type extjs_source_all\build\classic\locale\locale-pt_BR.js > _f +type js\lang\f-lang-pt_BR.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\pt_BR.js + +type extjs_source_all\build\classic\locale\locale-tr.js > _f +type js\lang\f-lang-tr.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\tr.js + +type extjs_source_all\build\classic\locale\locale-zh_CN.js > _f +type js\lang\f-lang-zh_CN.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\zh_CN.js + +type extjs_source_all\build\classic\locale\locale-zh_TW.js > _f +type js\lang\f-lang-zh_TW.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\zh_TW.js + +type extjs_source_all\build\classic\locale\locale-ru.js > _f +type js\lang\f-lang-ru.js >> _f +ajaxminifier\ajaxminifier -js -evals:immediate _f -o ..\extjs\lang\ru.js + + + + + + + + + + + + +type extjs_source_all\build\ext-all.js > ..\extjs\ext-all.js + +type js\lib\json2.js > _f +type js\lib\Base64.js >> _f +type js\F\F.util.js >> _f +type js\F\F.ajax.js >> _f +type js\F\F.wnd.js >> _f +type js\F\extender.js >> _f +type js\F\F.simulateTree.js >> _f +type js\F\F.format.js >> _f +type js\ux\FormViewport.js >> _f +type js\ux\SimplePagingToolbar.js >> _f +::type js\ux\TabCloseMenu.js >> _f +type extjs_source_all\classic\classic\src\grid\plugin\RowExpander.js >> _f +type extjs_source_all\packages\ux\classic\src\RowExpander.js >> _f +type extjs_source_all\packages\ux\classic\src\TabCloseMenu.js >> _f + +type _f > ..\extjs\ext-fineui.js + + + +type version.txt > ..\extjs\version.txt + +del _f /Q +del _f2 /Q + diff --git a/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.ajax.js b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.ajax.js new file mode 100644 index 0000000..1a491ea --- /dev/null +++ b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.ajax.js @@ -0,0 +1,662 @@ + +(function () { + + // 正在进行中的AJAX请求个数 + var __ajaxUnderwayCount = 0; + + F.ajax = { + + timeoutErrorMsg: "Request timeout, please refresh the page and try again!", + errorMsg: "Error! {0} ({1})", + errorWindow: null, + + hookPostBack: function () { + if (typeof (__doPostBack) != 'undefined') { + __doPostBack = f__doPostBack; + } + } + + }; + + function enableAjax() { + if (typeof (F.controlEnableAjax) === 'undefined') { + return F.enableAjax; + } + return F.controlEnableAjax; + } + + function enableAjaxLoading() { + if (typeof (F.controlEnableAjaxLoading) === 'undefined') { + return F.enableAjaxLoading; + } + return F.controlEnableAjaxLoading; + } + + function ajaxLoadingType() { + if (typeof (F.controlAjaxLoadingType) === 'undefined') { + return F.ajaxLoadingType; + } + return F.controlAjaxLoadingType; + } + + + function f__doPostBack_internal() { + //if (typeof (F.util.beforeAjaxPostBackScript) === 'function') { + // F.util.beforeAjaxPostBackScript(); + //} + + // 如果显式返回false,则阻止AJAX回发 + if(F.util.triggerBeforeAjax() === false) { + return; + } + + + // Ext.encode will convert Chinese characters. Ext.encode({a:"你好"}) => '{"a":"\u4f60\u597d"}' + // We will include the official JSON object from http://json.org/ + // 现在还是用的 Ext.encode,在 IETester的 IE8下 JSON.stringify 生成的中文是\u9009\u9879形式。 + //F.util.setHiddenFieldValue('F_STATE', encodeURIComponent(JSON.stringify(getFState()))); + + var fstate = Ext.encode(getFState()); + if (Ext.isIE6 || Ext.isIE7) { + F.util.setHiddenFieldValue('F_STATE_URI', 'true'); + fstate = encodeURIComponent(fstate); + } else { + fstate = Base64.encode(fstate); + } + F.util.setHiddenFieldValue('F_STATE', fstate); + + //F.util.setHiddenFieldValue('F_STATE', encodeURIComponent(Ext.encode(getFState()))); + if (!enableAjax()) { + // 当前请求结束后必须重置 F.controlEnableAjax + F.controlEnableAjax = undefined; + F.util.setHiddenFieldValue('F_AJAX', 'false'); + theForm.submit(); + } else { + // 当前请求结束后必须重置 F.controlEnableAjax + F.controlEnableAjax = undefined; + F.util.setHiddenFieldValue('F_AJAX', 'true'); + var url = document.location.href; + var urlHashIndex = url.indexOf('#'); + if (urlHashIndex >= 0) { + url = url.substring(0, urlHashIndex); + } + + var viewStateBeforeAJAX = F.util.getHiddenFieldValue('__VIEWSTATE'); + var disabledButtonIdBeforeAJAX = F.getHidden('F_TARGET'); + + function processEnd() { + //隐藏正在加载提示 + ajaxStop(); + } + + function ajaxSuccess(data, viewStateBeforeAJAX) { + + // 如果显式返回false,则阻止AJAX回发 + if (F.util.triggerBeforeAjaxSuccess(data) === false) { + processEnd(); + return; + } + + try { + new Function('__VIEWSTATE', data)(viewStateBeforeAJAX); + + // 有可能响应返回后即关闭本窗体 + if (F && F.util) { + F.util.triggerAjaxReady(); + } + } catch (e) { + + // 重新抛出异常 + throw e; + + } finally { + + processEnd(); + } + + } + + ajaxStart(); + + + // 判断是否有文件上传 + var isFileUpload = !!Ext.get(theForm).query('input[type=file]').length; + + Ext.Ajax.request({ + form: theForm.id, + url: url, + isUpload: isFileUpload, //F.form_upload_file, + //params: serializeForm(theForm) + '&X_AJAX=true', + success: function (data) { + var scripts = data.responseText; + + if (scripts && isFileUpload) { + // 文件上传时,输出内容经过encodeURIComponent编码(在ResponseFilter中的Close函数中) + //scripts = scripts.replace(/<\/?pre[^>]*>/ig, ''); + scripts = decodeURIComponent(scripts); + } + + // 启用AJAX发起时禁用的按钮 + if (disabledButtonIdBeforeAJAX) { + F.enable(disabledButtonIdBeforeAJAX); + } + + // 因为这里调用后(可能会关闭当前页面),extjs还有代码要执行(Ext.callback...),所以这里要延迟一下,等 extjs 代码执行完毕后再执行这里代码 + window.setTimeout(function () { + ajaxSuccess(scripts, viewStateBeforeAJAX); + }, 0); + }, + failure: function (data) { + //var lastDisabledButtonId = F.util.getHiddenFieldValue('F_TARGET'); + if (disabledButtonIdBeforeAJAX) { + F.enable(disabledButtonIdBeforeAJAX); + } + + processEnd(); // v6.0.0:失败也要做清理工作 + createErrorWindow(data); + }, + callback: function (options, success, response) { + // AJAX结束时需要清空此字段,否则下一次的type=submit提交(ASP.NET回发方式之一)会被误认为是AJAX提交 + if (F && F.util) { + F.util.setHiddenFieldValue('F_AJAX', 'false'); + } + } + }); + } + } + + + // 如果启用 Ajax,则所有对 __doPostBack 的调用都会到这里来 + function f__doPostBack(eventTarget, eventArgument) { + var enableAjax; + if (typeof (eventTarget) === 'boolean') { + enableAjax = eventTarget; + eventTarget = eventArgument; + eventArgument = arguments[2]; + } + + // 回发页面之前延时 100 毫秒,确保页面上的操作完成(比如选中复选框的动作) + window.setTimeout(function () { + + // theForm variable will always exist, because we invoke the GetPostBackEventReference in PageManager. + if (!theForm.onsubmit || (theForm.onsubmit() != false)) { + theForm.__EVENTTARGET.value = eventTarget; + theForm.__EVENTARGUMENT.value = eventArgument; + + // 设置当前请求是否为AJAX请求 + if (typeof (enableAjax) === 'boolean') { + F.controlEnableAjax = enableAjax; + } + + f__doPostBack_internal(); + } + }, 100); + } + + + function writeContentToIFrame(iframe, content) { + // http://stackoverflow.com/questions/1477547/getelementbyid-contentdocument-error-in-ie + // contentWindow is always there. + if (iframe) { + var doc = iframe.contentWindow.document; + if (doc) { + doc.open(); + doc.write(content); + doc.close(); + } + } + } + + // 创建出错窗口 + function createErrorWindow(data) { + // 如果是请求超时错误,则弹出简单提醒对话框 + if (data.isTimeout) { + F.util.alert(F.ajax.timeoutErrorMsg); + return; + } + + // 如果响应正文为空,则弹出简单提醒对话框 + if (!data.responseText) { + F.util.alert(Ext.String.format(F.ajax.errorMsg, data.statusText, data.status)); + return; + } + + if (!F.ajax.errorWindow) { + F.ajax.errorWindow = F.create('Ext.window.Window', { + id: "FINEUI_ERROR", + renderTo: window.body, + width: 550, + height: 350, + border: true, + animCollapse: true, + collapsible: false, + collapsed: false, + closeAction: "hide", + plain: false, + modal: true, + draggable: true, + minimizable: false, + minHeight: 100, + minWidth: 200, + resizable: true, + maximizable: true, + closable: true + }); + } + + F.ajax.errorWindow.show(); + F.ajax.errorWindow.body.dom.innerHTML = F.wnd.createIFrameHtml('about:blank', 'FINEUI_ERROR'); + F.ajax.errorWindow.setTitle(Ext.String.format(F.ajax.errorMsg, data.statusText, data.status)); + writeContentToIFrame(F.ajax.errorWindow.body.query('iframe')[0], data.responseText); + } + + // 序列化表单为 URL 编码字符串,除去 的按钮 + var extjsSerializeForm = Ext.Element.serializeForm; + Ext.Element.serializeForm = function (form) { + var el, originalStr = extjsSerializeForm(form); + for (var i = 0; i < form.elements.length; i++) { + el = form.elements[i]; + if (el.type === 'submit') { + var submitStr = encodeURIComponent(el.name) + '=' + encodeURIComponent(el.value); + if (originalStr.indexOf(submitStr) == 0) { + originalStr = originalStr.replace(submitStr, ''); + } else { + originalStr = originalStr.replace('&' + submitStr, ''); + } + } + } + return originalStr; + }; + + + function getFState() { + var state = {}; + Ext.ComponentManager.each(function (key, cmp) { + // 只处理FineUI服务器端生成的控件(f_state表明这个控件对应一个服务器端控件) + if (cmp.fineui && cmp.f_state) { + resolveCmpHiddenFields(cmp); + + var fstate = cmp['f_state']; + if (fstate && !F.isEOBJ(fstate)) { + if (F.fstateValidation) { + // 如果验证信息不存在,则不添加f_state + var fstatev = cmp['f_state_v']; + if (fstatev) { + state[cmp.id] = [fstate, fstatev]; + } + } else { + state[cmp.id] = fstate; + } + } + } + /* + if (cmp.isXType) { + var fstate = cmp['f_state']; + if (fstate && Ext.isObject(fstate)) { + var cmpState = getFStateViaCmp(cmp, fstate); + if (!F.util.isObjectEmpty(cmpState)) { + state[cmp.id] = cmpState; + } + } + } + */ + }); + return state; + } + + //F.ajax.getFState = getFState; + + // 设置控件相关隐藏字段的值 + function resolveCmpHiddenFields(cmp) { + //var state = {}; + //Ext.apply(state, fstate); + + function saveInHiddenField(property, currentValue) { + // Save this client-changed property in a form hidden field. + F.util.setHiddenFieldValue(cmp.id + '_' + property, currentValue); + } + function removeHiddenField(property) { + F.util.removeHiddenField(cmp.id + '_' + property); + } + + /* + // 如果存在Gzip压缩的属性,就删除原来的属性 + function resolveGZProperty(property) { + var gzProperty = property + '_GZ'; + if (state[gzProperty]) { + delete state[property]; + } else { + delete state[gzProperty]; + } + } + */ + + + // 有些属性可以在客户端改变,因此需要在每个请求之前计算 + if (cmp.isXType('menucheckitem')) { + saveInHiddenField('Checked', cmp.checked); + } + + if (cmp.isXType('checkbox')) { + // 包含RadioButton + saveInHiddenField('Checked', cmp.getValue()); + } + + if (cmp.isXType('checkboxgroup')) { + var selected = cmp.f_getSelectedValues(); + if (selected.length > 0) { + saveInHiddenField('SelectedValueArray', selected.join(',')); + } else { + removeHiddenField('SelectedValueArray'); + } + } + + if (cmp.isXType('panel') || cmp.isXType('fieldset')) { + saveInHiddenField('Collapsed', cmp.f_isCollapsed()); + } + + if (cmp.isXType('datepicker')) { + saveInHiddenField('SelectedDate', Ext.Date.format(cmp.getValue(), cmp.initialConfig.format)); + } + + if (cmp.isXType('button')) { + if (cmp.initialConfig.enableToggle) { + saveInHiddenField('Pressed', cmp.pressed); + } + } + + if (cmp.isXType('grid')) { + + // 启用分页 + if (cmp.f_paging) { + var pagingBar = cmp.f_getPaging(); + saveInHiddenField('PageIndex', pagingBar.f_pageIndex); + } + + // 启用排序 + if (cmp.f_sorting) { + var sorters = cmp.getStore().sorters; + + if(sorters) { + var gridSorter = sorters.get(0); + + // 如果启用排序,但是默认没有排序,则可能 gridSorter 不存在 + if (gridSorter) { + saveInHiddenField('SortField', gridSorter.property); + saveInHiddenField('SortDirection', gridSorter.direction); + } + } + } + + + //if (cmp.getPlugin(cmp.id + '_celledit')) { + if(cmp.f_cellEditing) { + // 可编辑单元格的表格 + // 选中单元格 + //saveInHiddenField('SelectedCell', cmp.f_getSelectedCell().join(',')); + + // 选中单元格 + var selectedCell = cmp.f_getSelectedCell(); + if (selectedCell && selectedCell.length) { + saveInHiddenField('SelectedCell', JSON.stringify(selectedCell)); + } else { + removeHiddenField('SelectedCell'); + } + + //// 新增行 + //var newAddedRows = cmp.f_getNewAddedRows(); + //if (newAddedRows.length > 0) { + // saveInHiddenField('NewAddedRows', newAddedRows.join(',')); + //} else { + // removeHiddenField('NewAddedRows'); + //} + + // 修改的数据 + var modifiedData = cmp.f_getModifiedData(); + if (modifiedData.length > 0) { + saveInHiddenField('ModifiedData', Ext.encode(modifiedData)); + } else { + removeHiddenField('ModifiedData'); + } + + /* + // 删除的行索引列表 + var deletedRows = cmp.f_getDeletedRows(); + if (deletedRows.length > 0) { + saveInHiddenField('DeletedRows', deletedRows.join(',')); + } else { + removeHiddenField('DeletedRows'); + } + */ + + } else { + // 普通的表格 + // 选中行索引列表 + //saveInHiddenField('SelectedRowIndexArray', cmp.f_getSelectedRows().join(',')); + // 选中行标识符列表 + var selectedRows = cmp.f_getSelectedRows(); + if (selectedRows && selectedRows.length) { + saveInHiddenField('SelectedRows', JSON.stringify(selectedRows)); + } else { + removeHiddenField('SelectedRows'); + } + } + + + // 隐藏的列索引列表 + var gridHiddenColumns = cmp.f_getHiddenColumns(); + if (gridHiddenColumns.length > 0) { + saveInHiddenField('HiddenColumns', gridHiddenColumns.join(',')); + } else { + removeHiddenField('HiddenColumns'); + } + + // 目前States仅用于CheckBoxField + var gridStates = cmp.f_getStates(); + if (gridStates.length > 0) { + saveInHiddenField('States', Ext.encode(gridStates)); + } else { + removeHiddenField('States'); + } + + //// 如果存在 GZIPPED 的属性,就用 GZIPPED 属性 + //resolveGZProperty('F_Rows'); + } + + //if (cmp.isXType('combo') || cmp.isXType('checkboxgroup') || cmp.isXType('radiogroup')) { + + // // 如果存在 GZIPPED 的属性,就用 GZIPPED 属性 + // resolveGZProperty('F_Items'); + //} + + if (cmp.isXType('field')) { + + //// 如果存在 GZIPPED 的属性,就用 GZIPPED 属性 + //resolveGZProperty('Text'); + } + + if (cmp.isXType('treepanel')) { + saveInHiddenField('ExpandedNodes', cmp.f_getExpandedNodes(cmp.getRootNode().childNodes).join(',')); + saveInHiddenField('CheckedNodes', cmp.f_getCheckedNodes().join(',')); + saveInHiddenField('SelectedNodeIDArray', cmp.f_getSelectedNodes().join(',')); + + //// 如果存在 GZIPPED 的属性,就用 GZIPPED 属性 + //resolveGZProperty('F_Nodes'); + } + + if (cmp.isXType('tabpanel')) { + saveInHiddenField('ActiveTabIndex', cmp.f_getActiveTabIndex()); + } + + if (cmp.isXType('panel') && cmp.getLayout().type === 'accordion') { + saveInHiddenField('ActivePaneIndex', cmp.f_getActiveIndex()); + } + + if (cmp['f_type'] && cmp['f_type'] === 'tab') { + saveInHiddenField('Hidden', cmp.tab.isHidden()); + } + + //return state; + } + + + function showMaskAjaxLoading() { + + var loadingMaskNode = Ext.get('f_ajax_loading_mask_mask'); + var loadingNode = Ext.get('f_ajax_loading_mask'); + // 如果还没有创建,则创建节点 + if (!loadingNode) { + + var loadingMaskHtml = '
' + + '
'; + + Ext.DomHelper.append(Ext.getBody(), loadingMaskHtml); + + + loadingMaskNode = Ext.get('f_ajax_loading_mask_mask'); + loadingNode = Ext.get('f_ajax_loading_mask'); + } + + + loadingMaskNode.show(); + loadingNode.show(); + } + + + function hideMaskAjaxLoading() { + Ext.get('f_ajax_loading_mask_mask').hide(); + Ext.get('f_ajax_loading_mask').hide(); + } + + // 显示“正在载入...”的提示信息 + function _showAjaxLoading(ajaxLoadingType) { + // 延迟后,要再次检查当前有 AJAX 正在进行,才显示提示信息 + if (__ajaxUnderwayCount > 0) { + + if (ajaxLoadingType === "default") { + F.ajaxLoadingDefault.setStyle('left', (Ext.getBody().getWidth() - F.ajaxLoadingDefault.getWidth()) / 2 + 'px'); + F.ajaxLoadingDefault.show(); + } else { + //F.ajaxLoadingMask.show(); + //Ext.getBody().mask(F.util.loading); + showMaskAjaxLoading(); + } + + } + } + + // 隐藏“正在载入...”的提示信息 + function _hideAjaxLoading(ajaxLoadingType) { + if (__ajaxUnderwayCount === 0) { + + if (ajaxLoadingType === "default") { + F.ajaxLoadingDefault.hide(); + } else { + //F.ajaxLoadingMask.hide(); + //Ext.getBody().unmask(); + hideMaskAjaxLoading(); + } + + } + } + + function ajaxStart() { + + // 计数加一 + __ajaxUnderwayCount++; + + // 仅在第一个 AJAX 发起时,延迟显示提示信息 + if (__ajaxUnderwayCount !== 1) { + return; + } + + if (!enableAjaxLoading()) { + // Do nothing + } else { + Ext.defer(_showAjaxLoading, 50, window, [ajaxLoadingType()]); + } + + } + + function ajaxStop() { + // 计数减一 + __ajaxUnderwayCount--; + if (__ajaxUnderwayCount < 0) { + __ajaxUnderwayCount = 0; + } + + if (!enableAjaxLoading()) { + // ... + } else { + Ext.defer(_hideAjaxLoading, 0, window, [ajaxLoadingType()]); + } + + if (__ajaxUnderwayCount === 0) { + F.controlEnableAjaxLoading = undefined; + F.controlAjaxLoadingType = undefined; + } + } + + /* + // 当前 Ajax 的并发请求数 + //var _requestCount = 0; + var _ajaxStarted = false; + + // 发起 Ajax 请求之前事件处理 + Ext.Ajax.on('beforerequest', function (conn, options) { + //_requestCount++; + + _ajaxStarted = true; + ajaxStart(); + }); + + // Ajax 请求结束 + Ext.Ajax.on('requestcomplete', function (conn, options) { + //_requestCount--; + _ajaxStarted = false; + + }); + + // Ajax 请求发生异常 + Ext.Ajax.on('requestexception', function (conn, options) { + //_requestCount--; + _ajaxStarted = false; + + + }); + */ + + + + + + // // 不适用于所有Extjs控件(比如Toolbar中放置按钮,这个按钮就没有ownerCt对象) + // // 更新一个Javascript对象 + // updateObject: function(obj, newObjFunction, renderImmediately) { + // var id = obj.id; + // if (Ext.type(renderImmediately) == 'boolean' && !renderImmediately) { + + // // 1.取得父容器 + // var owner = obj.ownerCt; + // // 2.本控件在父容器的位置 + // var insertIndex = owner.items.indexOf(obj); + // // 3.从父容器中销毁此控件 + // owner.remove(obj); + // // 4.创建新的控件 + // newObjFunction(); + // // 5.将新的控件添加到删除的位置 + // owner.insert(insertIndex, Ext.getCmp(id)); + // // 6.父容器重新布局 + // owner.doLayout(); + + // } + // else { + + // // 1.销毁此控件 + // obj.destroy(); + // // 2.新建此控件 + // newObjFunction(); + // } + // } + +})(); \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.format.js b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.format.js new file mode 100644 index 0000000..2453296 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.format.js @@ -0,0 +1,45 @@ + +(function () { + + var ExtF = Ext.util.Format; + + F.format = { + + capitalize: ExtF.capitalize, + + dateRenderer: ExtF.dateRenderer, + + ellipsisRenderer: function (length) { + return function (value) { + return ExtF.ellipsis(value, length, false); + }; + }, + + fileSize: ExtF.fileSize, + + htmlEncode: ExtF.htmlEncode, + + htmlDecode: ExtF.htmlDecode, + + lowercase: ExtF.lowercase, + + uppercase: ExtF.uppercase, + + nl2br: ExtF.nl2br, + + //number: ExtF.numberRenderer, + + stripScripts: ExtF.stripScripts, + + stripTags: ExtF.stripTags, + + trim: ExtF.trim + + //usMoney: ExtF.usMoney + + + + }; + + +})(); \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.simulateTree.js b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.simulateTree.js new file mode 100644 index 0000000..d7b682e --- /dev/null +++ b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.simulateTree.js @@ -0,0 +1,118 @@ + +(function() { + + function getParentIndex(levels, level, index) { + if (level > 0) { + for (var i = index - 1; i >= 0; i--) { + if (levels[i] == level - 1) { + return i; + } + } + } + return -1; + } + + function hasLittleBrother(levels, level, index) { + if (index < levels.length - 1) { + for (var i = index + 1; i < levels.length; i++) { + if (levels[i] == level) { + return true; + } else if (levels[i] < level) { + return false; + } + } + } + return false; + } + + function getParentTempData(tempdatas, tempdata, prefixIndex) { + for (var i = 0; i < prefixIndex - 1; i++) { + tempdata = tempdatas[tempdata.parentIndex]; + } + return tempdata; + } + + function getPrefixInner(tempdatas, tempdata, prefixIndex) { + // If level = 3, then prefixIndex array will be: [3, 2, 1] + // prefixIndex === 1 will always present the nearest prefix next to the Text. + if (prefixIndex === 1) { + if (tempdata.littleBrother) { + return '
'; + } + else { + return '
'; + } + } else { + var parentdata = getParentTempData(tempdatas, tempdata, prefixIndex); + if (parentdata.littleBrother) { + return '
'; + } + else { + return '
'; + } + } + return ""; + } + + function getPrefix(tempdatas, index) { + var tempdata = tempdatas[index]; + var level = tempdata.level; + var prefix = []; + for (var i = level; i > 0; i--) { + prefix.push(getPrefixInner(tempdatas, tempdata, i)); + } + return prefix.join(''); + } + + F.simulateTree = { + + transform: function(datas) { + if (!datas.length || datas[0].length < 4) { + return datas; + } + + //// store: new Ext.data.ArrayStore({ fields: ['value', 'text', 'enabled', 'prefix'] }) + //// Sample data: + //[ + // ["0", "jQuery", 0, 0], + // ["1", "Core", 0, 1], + // ["2", "Selectors", 0, 1], + // ["3", "Basic Filters", 1, 2], + // ["4", "Content Filters", 1, 2], + // ["41", "Contains", 1, 3], + // ["5", "Attribute Filters", 1, 2], + // ["6", "Traversing", 1, 1], + // ["7", "Filtering", 1, 2], + // ["8", "Finding", 1, 2], + // ["9", "Events", 0, 1], + // ["10", "Page Load", 1, 2], + // ["11", "Event Handling", 1, 2], + // ["12", "Interaction Helpers", 1, 2], + // ["13", "Ajax", 1, 1] + //] + var levels = []; + Ext.Array.each(datas, function (data, index) { + levels.push(data[3]); + }); + + var tempdatas = []; + Ext.Array.each(levels, function (level, index) { + tempdatas.push({ + 'level': level, + 'parentIndex': getParentIndex(levels, level, index), + 'littleBrother': hasLittleBrother(levels, level, index) + }); + }); + + var newdatas = []; + Ext.Array.each(datas, function (data, index) { + newdatas.push([data[0], data[1], data[2], getPrefix(tempdatas, index)]); + }); + return newdatas; + + } + + + }; + +})(); \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.util.js b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.util.js new file mode 100644 index 0000000..73bda4b --- /dev/null +++ b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.util.js @@ -0,0 +1,1623 @@ + +// FineUI应用程序域 +var F = function (cmpName) { + return Ext.getCmp(cmpName); +}; + +// 标识这个页面是由 FineUI 创建的 +F.fineui = '6.0.2'; + +F.target = function (target) { + return F.util.getTargetWindow(target); +}; + +F.alert = function () { + F.util.alert.apply(window, arguments); +}; + +F.f_init = function () { + F.util.init.apply(window, arguments); +}; + +F.load = function () { + F.util.load.apply(window, arguments); +}; + +F.ready = function () { + F.util.ready.apply(window, arguments); +}; + +F.ajaxReady = function () { + F.util.ajaxReady.apply(window, arguments); +}; + +F.beforeAjax = function () { + F.util.beforeAjax.apply(window, arguments); +}; +F.beforeAjaxSuccess = function () { + F.util.beforeAjaxSuccess.apply(window, arguments); +}; + + +F.stop = function () { + var event = arguments.callee.caller.arguments[0] || window.event; + F.util.stopEventPropagation(event); +}; + +F.confirm = function () { + F.util.confirm.apply(null, arguments); +}; + +F.toggle = function (el, className) { + Ext.get(el).toggleCls(className); +}; + +F.fieldValue = function (cmp) { + return F.util.getFormFieldValue(cmp); +}; + +F.getHidden = function () { + return F.util.getHiddenFieldValue.apply(window, arguments); +}; +F.setHidden = function () { + return F.util.setHiddenFieldValue.apply(window, arguments); +}; + +F.addCSS = function () { + F.util.addCSS.apply(window, arguments); +}; + +F.initTreeTabStrip = function () { + F.util.initTreeTabStrip.apply(window, arguments); +}; + + +F.addMainTab = function () { + F.util.addMainTab.apply(window, arguments); +}; + +F.getActiveWindow = function () { + return F.wnd.getActiveWindow.apply(window, arguments); +}; + +F.isEOBJ = function (value) { + return F.util.isObjectEmpty(value); +}; + +F.defer = function (fn, miliseconds, scope) { + if (scope) { + return window.setTimeout(function () { + fn.apply(scope); + }, miliseconds); + } else { + return window.setTimeout(fn, miliseconds); + } +}; + +// 创建客户端控件,标识这是一个FineUI服务器端创建的控件 +F.ui = F.create = function () { + var cmp = Ext.create.apply(window, arguments); + + // 是个UI组件(排除 Ext.data.ArrayStore...) + if (cmp instanceof Ext.Component) { + cmp.fineui = true; + } + + return cmp; +}; + +// 记录最后一个控件的序号 +F.f_objectIndex = 0; + + +// 为了兼容保留函数签名:F.customEvent +F.f_customEvent = F.customEvent = function (argument, validate) { + //var pmv = F.f_pagemanager.validate; + //if (validate && pmv) { + // if (!F.util.validForms(pmv.forms, pmv.target, pmv.messagebox)) { + // return false; + // } + //} + //__doPostBack(F.f_pagemanager.name, argument); + + var enableAjax; + if (typeof (argument) === 'boolean') { + enableAjax = argument; + argument = validate; + validate = arguments[2]; + } + + var pmv = F.f_pagemanager.validate; + if (validate && pmv) { + if (!F.util.validateForms(pmv.forms, pmv.target, pmv.messagebox)) { + return false; + } + } + + if (typeof (enableAjax) === 'boolean') { + __doPostBack(enableAjax, F.f_pagemanager.name, argument); + } else { + __doPostBack(F.f_pagemanager.name, argument); + } +}; + + +// 更新EventValidation的值 +F.f_eventValidation = function (newValue) { + F.setHidden("__EVENTVALIDATION", newValue); +}; + +F.f_state = function (cmp, state, statev) { + F.util.setFState(cmp, state, statev); +}; + +// 为了兼容保留函数签名:F.enable +F.f_enable = F.enable = function (id) { + F.util.enableSubmitControl(id); +}; + +// 为了兼容保留函数签名:F.disable +F.f_disable = F.disable = function (id) { + F.util.disableSubmitControl(id); +}; + +// 更新ViewState的值 +F.f_viewState = function (viewStateBeforeAJAX, newValue, startIndex) { + var viewStateHiddenFiledId = '__VIEWSTATE'; + + var oldValue = F.getHidden(viewStateHiddenFiledId); + var viewStateChanged = false; + if (oldValue !== viewStateBeforeAJAX) { + viewStateChanged = true; + } + + if (typeof (newValue) === 'undefined') { + // AJAX过程中ViewState值没变化 + if (viewStateChanged) { + F.setHidden(viewStateHiddenFiledId, viewStateBeforeAJAX); + } + } else { + // AJAX过程中ViewState值有变化 + if (typeof (startIndex) === 'number' && startIndex > 0) { + // 只返回startIndex之后的内容 + if (viewStateChanged) { + // 无法处理! + return false; + } else { + F.setHidden(viewStateHiddenFiledId, oldValue.substr(0, startIndex) + newValue); + } + } else { + // 返回完整的ViewState + F.setHidden(viewStateHiddenFiledId, newValue); + } + } + + // 更新成功! + return true; +}; + +// cookie('theme'); +// cookie('theme', 'gray'); +// cookie('theme', 'gray', { 'expires': 3 }); +// expires: 天 +// 新增 或者 修改Cookie +F.cookie = function (key, value, options) { + if (typeof (value) === 'undefined') { + var cookies = document.cookie ? document.cookie.split('; ') : []; + var result = key ? '' : {}; + Ext.Array.each(cookies, function (cookie, index) { + var parts = cookie.split('='); + var partName = decodeURIComponent(Ext.String.trim(parts[0])); + var partValue = decodeURIComponent(Ext.String.trim(parts[1])); + + if (key) { + if (key === partName) { + result = partValue; + return false; + } + } else { + result[partName] = partValue; + } + }); + return result; + } else { + // Set cookie + options = Ext.apply(options || {}, { + path: '/' + }); + + var expTime; + if (typeof (options.expires) === 'number') { + expTime = new Date(); + expTime.setTime(expTime.getTime() + options.expires * 24 * 60 * 60 * 1000); + } + + document.cookie = [ + encodeURIComponent(key), '=', encodeURIComponent(value), + options.expires ? '; expires=' + expTime.toUTCString() : '', + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join(''); + } +}; + +// 删除Cookie +F.removeCookie = function (key, options) { + options = Ext.apply(options || {}, { + path: '/', + 'expires': -1 + }); + + F.cookie(key, '', options); +}; + + +// 能否访问 iframe 中的 window.F 对象 +F.canAccess = function (iframeWnd) { + + // 访问 iframeWnd.F 时,可能出现错误 Blocked a frame with origin "http://fineui.com/" from accessing a cross-origin frame. + // Blocked:这个问题出现在 http://fineui.com/ 页面加载一个 http://baidu.com/ 的 iframe 页面 + try { + iframeWnd.F; + iframeWnd.window; + } catch (e) { + return false; + } + + if (!iframeWnd.F || !iframeWnd.window) { + return false; + } + + return true; +}; + + +Ext.onReady(function () { + + // 加延迟,以保证在 zh_CN 中通过 Ext.onReady 注册的脚本先执行(其中对 Ext.Date 进行了初始化) + window.setTimeout(function () { + F.util.triggerLoad(); + F.util.triggerReady(); + F.util.hidePageLoading(); + }, 0); + +}); + +(function () { + + // 遍历定义了 renderTo 属性的对象 + // callback: 'return false' to prevent loop continue + function resolveRenderToObj(callback) { + Ext.ComponentManager.each(function (key, cmp) { + if (cmp.isXType && cmp.renderTo) { + + var result = callback.apply(cmp, [cmp]); + if (result === false) { + return false; // break + } + + } + }); + } + + function isUND(value) { + return typeof (value) === 'undefined' || value === null; + } + + /* + // 能否访问 iframe 中的 window.F 对象 + function canIFrameWindowAccessed(iframeWnd) { + + // 访问 iframeWnd.F 时,可能出现错误 Blocked a frame with origin "http://fineui.com/" from accessing a cross-origin frame. + // Blocked:这个问题出现在 http://fineui.com/ 页面加载一个 http://baidu.com/ 的 iframe 页面 + try { + iframeWnd.F; + } catch (e) { + return false; + } + + if (!iframeWnd.F) { + return false; + } + + return true; + } + */ + + + // FineUI常用函数域(Utility) + F.util = { + + alertTitle: "Alert Dialog", + confirmTitle: "Confirm Dialog", + //formAlertMsg: "Please provide valid value for {0}!", + formAlertTitle: "Form Invalid", + loading: "Loading...", + + // 下拉列表的模板 + ddlTPL: '
x-boundlist-item-disabled">{prefix}{text}
', + + // 初始化 + init: function (options) { // msgTarget, labelWidth, labelSeparator, blankImageUrl, enableAjaxLoading, ajaxLoadingType, enableAjax, themeName, formChangeConfirm) { + + Ext.apply(F, options, { + language: 'zh_CN', + msgTarget: 'side', + labelWidth: 100, + labelSeparator: ':', + //blankImageUrl: '', + enableAjaxLoading: true, + ajaxLoadingType: 'default', + enableAjax: true, + theme: 'neptune', + formChangeConfirm: false, + ajaxTimeout: 120, + fstateValidation: false + }); + + + // Ext.QuickTips.init(true); 在原生的IE7(非IE8下的IE7模式)会有问题 + // 表现为iframe中的页面出现滚动条时,页面上的所有按钮都不能点击了。 + // 测试例子在:aspnet/test.aspx + //Ext.QuickTips.init(false); + Ext.tip.QuickTipManager.init(); + + F.ajax.hookPostBack(); + + //F.global_enable_ajax = F.enableAjax; + //F.global_enable_ajax_loading = F.enableAjaxLoading; + //F.global_ajax_loading_type = F.ajaxLoadingType; + + // 添加Ajax Loading提示节点 + F.ajaxLoadingDefault = Ext.get(F.util.appendLoadingNode()); + /* + F.ajaxLoadingMask = Ext.create('Ext.LoadMask', Ext.getBody(), { + hidden: true, + msg: F.util.loading + }); + */ + + + //F.form_upload_file = false; + //F.global_disable_ajax = false; + //F.x_window_manager = new Ext.WindowManager(); + //F.x_window_manager.zseed = 6000; + + F.util.setHiddenFieldValue('F_CHANGED', 'false'); + document.forms[0].autocomplete = 'off'; + + Ext.getBody().addCls('f-body'); + + Ext.Ajax.setTimeout(F.ajaxTimeout * 1000); + + // 向document.body添加主题类 + if (F.theme) { + Ext.getBody().addCls('f-theme-' + F.theme); + } + + if (Ext.form.field) { + var fieldPro = Ext.form.field.Base.prototype; + fieldPro.msgTarget = F.msgTarget; + fieldPro.labelWidth = F.labelWidth; + fieldPro.labelSeparator = F.labelSeparator; + fieldPro.autoFitErrors = true; + } + if (Ext.form.CheckboxGroup) { + var checkboxgroupPro = Ext.form.CheckboxGroup.prototype; + checkboxgroupPro.msgTarget = F.msgTarget; + checkboxgroupPro.labelWidth = F.labelWidth; + checkboxgroupPro.labelSeparator = F.labelSeparator; + checkboxgroupPro.autoFitErrors = true; + } + + F.beforeunloadCheck = true; + // 启用表单改变确认对话框 + if (F.formChangeConfirm) { + // 下面这个方法在 Chrome、 Firefox下无效 + //Ext.EventManager.on(window, 'beforeunload', function (event) { + window.onbeforeunload = function () { + // 允许关闭页面前提示,并且表单改变 + if (F.beforeunloadCheck && F.util.formChanged()) { + return F.wnd.formChangeConfirmMsg; + } + }; + } + + //if (enableBigFont) { + // Ext.getBody().addCls('bigfont'); + //} + + /* + // IE6&7不支持,IE8以上支持"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" + if (Ext.isIE6 || Ext.isIE7) { + Ext.BLANK_IMAGE_URL = F.blankImageUrl; + } + */ + + // Submit + F.ready(function () { + if (F.submitbutton) { + Ext.ComponentManager.each(function (key, cmp) { + if (cmp.isXType && cmp.renderTo) { + if (cmp.isXType('tooltip')) { + return true; // continue + } + + if (cmp.isXType('panel') || cmp.isXType('formviewport')) { + F.util.registerPanelEnterKey(cmp); + } + } + }); + } + + }); + + + + // 为了防止【页面中只有一个input[type=text],则回车会提交表单】的问题,现在页面上创建一个input[type=text]的空元素 + //F.util.appendFormNode(''); + Ext.DomHelper.insertFirst(document.forms[0], ''); + + }, + + _readyList: [], + _ajaxReadyList: [], + _beforeAjaxList: [], + _beforeAjaxSuccessList: [], + _loadList: [], + + ready: function (callback) { + F.util._readyList.push(callback); + }, + triggerReady: function () { + Ext.Array.each(F.util._readyList, function (item, index) { + item.apply(window); + }); + }, + + + ajaxReady: function (callback) { + F.util._ajaxReadyList.push(callback); + }, + triggerAjaxReady: function () { + Ext.Array.each(F.util._ajaxReadyList, function (item, index) { + item.apply(window); + }); + }, + + beforeAjax: function (callback) { + F.util._beforeAjaxList.push(callback); + }, + triggerBeforeAjax: function () { + var result = true, args = arguments; + Ext.Array.each(F.util._beforeAjaxList, function (item, index) { + if (item.apply(window, args) === false) { + result = false; + } + }); + return result; + }, + + beforeAjaxSuccess: function (callback) { + F.util._beforeAjaxSuccessList.push(callback); + }, + triggerBeforeAjaxSuccess: function () { + var result = true, args = arguments; + Ext.Array.each(F.util._beforeAjaxSuccessList, function (item, index) { + if (item.apply(window, args) === false) { + result = false; + } + }); + return result; + }, + + + load: function (callback) { + F.util._loadList.push(callback); + }, + triggerLoad: function () { + Ext.Array.each(F.util._loadList, function (item, index) { + item.apply(window); + }); + }, + + setFState: function (cmp, state, statev) { + if (!cmp) { + return; + } + + // 如果不存在,则初始化为空对象 + if (!cmp['f_state']) { + cmp['f_state'] = {}; + } + + var oldValue, newValue, el; + // 如果state中包含CssClass,也就是在服务器端修改了CssClass属性,则需要首先删除原来的CssClass属性。 + if (typeof (state['CssClass']) !== 'undefined') { + newValue = state['CssClass']; + oldValue = cmp['f_state']['CssClass']; + if (!oldValue) { + oldValue = cmp.initialConfig.cls; + } + el = cmp.el; + el.removeCls(oldValue); + el.addCls(newValue); + } + + //if (typeof (state['FormItemClass']) !== 'undefined') { + // newValue = state['FormItemClass']; + // oldValue = cmp['f_state']['FormItemClass']; + // if (!oldValue) { + // oldValue = cmp.initialConfig.itemCls; + // } + // // Search for max 10 depth. + // el = cmp.el.findParent('.x-form-item', 10, true); + // el.removeCls(oldValue); + // el.addCls(newValue); + //} + + // 注意:f_state是更新属性(可能只更新其中一个属性),而非覆盖属性 + Ext.apply(cmp['f_state'], state); + if (F.fstateValidation && statev) { + // 注意:f_state_v是覆盖 + cmp.f_state_v = statev; + } + }, + + stopEventPropagation: function (event) { + event = event || window.event; + if (typeof (event.cancelBubble) === 'boolean') { + event.cancelBubble = true; + } else { + event.stopPropagation(); + } + }, + + // 绑定函数的上下文 + bind: function (fn, scope) { + return function () { + return fn.apply(scope, arguments); + }; + }, + + // 在页面上查找id为findId的节点,替换成replaceHtml + replace: function (findId, replaceHtml) { + // 在findId外面添加一个DIV层,然后更新此wrapper的InnerHTML + var findedControl = Ext.get(findId); + if (findedControl) { + var wrapper = findedControl.wrap().update(replaceHtml); + // 将新增的节点移到wrapper上面 + wrapper.first().insertBefore(wrapper); + // 然后删除wrapper + wrapper.remove(); + } + }, + + // 隐藏PageLoading节点 + hidePageLoading: function () { + /* + if (fadeOut) { + Ext.get("loading").remove(); + Ext.get("loading-mask").fadeOut({ remove: true }); + } + else { + Ext.get("loading").remove(); + Ext.get("loading-mask").remove(); + } + */ + + Ext.get("f_loading").hide(); + Ext.get("f_loading_mask").hide(); + }, + + + // 去掉字符串中的html标签 + stripHtmlTags: function (str) { + return str.replace(/<[^>]*>/g, ""); + }, + + + + + // 向页面添加Loading...节点 + appendLoadingNode: function () { + return F.util.appendFormNode({ tag: 'div', id: 'f_ajax_loading', cls: 'f-ajax-loading', html: F.util.loading }); + }, + + // 向页面的 form 节点最后添加新的节点 + appendFormNode: function (htmlOrObj) { + return Ext.DomHelper.append(document.forms[0], htmlOrObj); + }, + + // 向页面添加一个隐藏字段,如果已经存在则更新值 + setHiddenFieldValue: function (fieldId, fieldValue) { + var itemNode = Ext.get(fieldId); + if (!itemNode) { + // Ext.DomHelper.append 有问题,例如下面这个例子得到的结果是错的;变通一下,先插入节点,在设置节点的值。 + // Ext.DomHelper.append(document.forms[0], { tag: "input", type: "hidden", value: '{"X_Items":[["Value1","可选项1",1],["Value2","可选项2(不可选择)",0],["Value3","可选项3(不可选择)",0],["Value4","可选项4",1],["Value5","可选项5",1],["Value6","可选项6",1],["Value7","可选择项7",1],["Value8","可选择项8",1],["Value9","可选择项9",1]],"SelectedValue":"Value1"}'}); + // 上面的这个字符串,在IETest的IE8模式下会变成: + // {"DropDownList1":{"X_Items":[["Value1","\u9009\u9879 1",1],["Value2","\u9009\u9879 2\uff08\u4e0d\u53ef\u9009\u62e9\uff09",0],["Value3","\u9009\u9879 3\uff08\u4e0d\u53ef\u9009\u62e9\uff09",0],["Value4","\u9009\u9879 4",1],["Value5","\u9009\u9879 5",1],["Value6","\u9009\u9879 6",1],["Value7","\u9009\u9879 7",1],["Value8","\u9009\u9879 8",1],["Value9","\u9009\u9879 9",1]],"SelectedValue":"Value1"}} + + F.util.appendFormNode({ tag: "input", type: "hidden", id: fieldId, name: fieldId }); + Ext.get(fieldId).dom.value = fieldValue; + } + else { + itemNode.dom.value = fieldValue; + } + }, + // 从表单中删除隐藏字段 + removeHiddenField: function (fieldId) { + var itemNode = Ext.get(fieldId); + if (itemNode) { + itemNode.remove(); + } + }, + // 获取页面中一个隐藏字段的值 + getHiddenFieldValue: function (fieldId) { + var itemNode = Ext.get(fieldId); + if (itemNode) { + return itemNode.getValue(); + } + return null; + }, + + // 禁用提交按钮(在回发之前禁用以防止重复提交) + disableSubmitControl: function (controlClientID) { + F(controlClientID).disable(); + // extjs v6.0需要,如果禁用按钮,则会查找页面上第一个可以获取焦点的元素,并使其获得焦点(对于面板而言,就是右上角的折叠按钮) + Ext.query('.f-input-text-hidden')[0].focus(); + F.util.setHiddenFieldValue('F_TARGET', controlClientID); + }, + // 启用提交按钮(在回发之后启用提交按钮) + enableSubmitControl: function (controlClientID) { + F(controlClientID).enable(); + // extjs v6.0需要,启用按钮并不会使其获取焦点,必须手工调用 + F(controlClientID).focus(); + F.util.setHiddenFieldValue('F_TARGET', ''); + }, + + + + /* + // 更新ViewState的值 + updateViewState: function (newValue, startIndex, gzipped) { + if (typeof (startIndex) === 'boolean') { + gzipped = startIndex; + startIndex = -1; + } + + var viewStateHiddenFiledID = "__VIEWSTATE"; + if (gzipped) { + viewStateHiddenFiledID = "__VIEWSTATE_GZ"; + } + + var oldValue = F.util.getHiddenFieldValue(viewStateHiddenFiledID); + if (Ext.type(startIndex) == "number" && startIndex > 0) { + if (startIndex < oldValue.length) { + oldValue = oldValue.substr(0, startIndex); + } + } else { + // Added on 2011-5-2, this is a horrible mistake. + oldValue = ''; + } + F.util.setHiddenFieldValue(viewStateHiddenFiledID, oldValue + newValue); + }, + + // 更新EventValidation的值 + updateEventValidation: function (newValue) { + F.util.setHiddenFieldValue("__EVENTVALIDATION", newValue); + }, + */ + + // 设置页面状态是否改变 + setPageStateChanged: function (changed) { + var pageState = Ext.get("F_CHANGED"); + if (pageState) { + pageState.dom.value = changed; + } + }, + + // 页面状态是否改变 + isPageStateChanged: function () { + var pageState = Ext.get("F_CHANGED"); + if (pageState && pageState.getValue() == "true") { + return true; + } + return false; + }, + + + // 阻止页面关闭(页面中iframe内的表单已改变,或者页面中iframe定义了beforeunload) + preventPageClose: function (el) { + var me = this; + + // 是否阻止关闭 + var preventClose = false; + + var iframeEls; + if (el) { + iframeEls = el.select('iframe'); + } else { + iframeEls = Ext.select('iframe'); + } + + iframeEls.each(function (iframeEl) { + var iframeWnd = iframeEl.dom.contentWindow; + + if (!F.canAccess(iframeWnd)) { + return true; // continue + } + + if (iframeWnd && iframeWnd.F) { + var iframeF = iframeWnd.F; + + // 启用表单改变确认对话框 并且 表单已改变 + if (iframeF.formChangeConfirm && iframeF.util.formChanged()) { + // 阻止关闭当前面板 + if (!window.confirm(F.wnd.formChangeConfirmMsg)) { + preventClose = true; + return false; // break + } else { + // 没有阻止,不要在触发 $(window).beforeunload 事件了 + iframeF.beforeunloadCheck = false; + } + } + + /* + // 是否自定义了 beforeunload 事件 + var beforeunloadCallbacks = iframeF.util._fjs_getEvent('beforeunload'); + if (beforeunloadCallbacks) { + for (var i = 0, count = beforeunloadCallbacks.length; i < count; i++) { + var beforeunloadCallback = beforeunloadCallbacks[i]; + + var confirmMsg = beforeunloadCallback.apply(iframeWnd); + if (confirmMsg) { + // 阻止关闭当前面板 + if (!window.confirm(confirmMsg)) { + preventClose = true; + return false; // break + } else { + // 没有阻止,不要在触发 $(window).beforeunload 事件了 + iframeF.beforeunloadCheck = false; + } + } + } + } + */ + + // 子页面是否阻止关闭 + var childrenPreventClose = iframeF.util.preventPageClose(); + if (childrenPreventClose) { + + // 被子页面阻止了,则恢复父页面的 beforeunloadCheck 标识 + iframeF.beforeunloadCheck = true; + + preventClose = true; + return false; // break + } + } + + }); + + return preventClose; + }, + + // 页面中表单字段是否改变 + formChanged: function () { + var changed = false; + resolveRenderToObj(function (obj) { + if (obj.isXType('container') && obj.f_isDirty()) { + changed = true; + return false; // break + } + }); + + return changed; + }, + + trim: function (source) { + return Ext.String.trim(source); + }, + + + // 验证多个表单,返回数组[是否验证通过,第一个不通过的表单字段] + validForms: function (forms, targetName, showBox) { + var util = F.util; + var target = util.getTargetWindow(targetName); + var valid = true; + var firstInvalidField = null; + for (var i = 0; i < forms.length; i++) { + var result = F(forms[i]).f_isValid(); + if (!result[0]) { + valid = false; + if (firstInvalidField == null) { + firstInvalidField = result[1]; + } + } + } + + if (!valid) { + if (showBox) { + // var alertMsg = Ext.String.format(F.util.formAlertMsg, firstInvalidField.fieldLabel); + + var fieldLabel = util.trim(util.stripHtmlTags(firstInvalidField.fieldLabel)); + // 去除后面的* + if (fieldLabel.charAt(fieldLabel.length - 1) === '*') { + fieldLabel = fieldLabel.substr(0, fieldLabel.length - 1); + } + var activeError = util.trim(util.stripHtmlTags(firstInvalidField.activeError)); + + var alertMsg = '
' + fieldLabel + '
' + activeError + '
'; + + target.F.util.alert(alertMsg, util.formAlertTitle, Ext.MessageBox.INFO, function () { + // 第一次验证失败的字段获取焦点(选中文本,延迟执行) + firstInvalidField.focus(true, 200); + }); + } else { + firstInvalidField.focus(true, 200); + } + + return false; + } + return true; + }, + + + // 判断隐藏字段值(数组)是否包含value + isHiddenFieldContains: function (domId, testValue) { + testValue += ""; + var domValue = Ext.get(domId).dom.value; + if (domValue === "") { + //console.log(domId); + return false; + } + else { + var sourceArray = domValue.split(","); + return Ext.Array.indexOf(sourceArray, testValue) >= 0 ? true : false; + } + }, + + + // 将一个字符添加到字符列表中,将2添加到[5,3,4] + addValueToHiddenField: function (domId, addValue) { + addValue += ""; + var domValue = Ext.get(domId).dom.value; + if (domValue == "") { + Ext.get(domId).dom.value = addValue + ""; + } + else { + var sourceArray = domValue.split(","); + if (Ext.Array.indexOf(sourceArray, addValue) < 0) { + sourceArray.push(addValue); + Ext.get(domId).dom.value = sourceArray.join(","); + } + } + }, + + + // 从字符列表中移除一个字符,将2从dom的值"5,3,4,2"移除 + removeValueFromHiddenField: function (domId, addValue) { + addValue += ""; + var domValue = Ext.get(domId).dom.value; + if (domValue != "") { + var sourceArray = domValue.split(","); + if (Ext.Array.indexOf(sourceArray, addValue) >= 0) { + sourceArray = sourceArray.remove(addValue); + Ext.get(domId).dom.value = sourceArray.join(","); + } + } + }, + + + // 取得隐藏字段的值 + getHiddenFieldValue: function (fieldId) { + var itemNode = Ext.get(fieldId); + if (!itemNode) { + return ""; + } + else { + return itemNode.dom.value; + } + }, + + + // 取得表单字段的值 + getFormFieldValue: function (cmp) { + if (typeof (cmp) === 'string') { + cmp = F(cmp); + } + var value = cmp.getValue(); + if (cmp.isXType('displayfield')) { + value = value.replace(/<\/?span[^>]*>/ig, ''); + } + return value; + }, + + + // 由target获取window对象 + getTargetWindow: function (target) { + var wnd = window; + if (target === '_self') { + wnd = window; + } else if (target === '_parent') { + wnd = parent; + } else if (target === '_top') { + wnd = top; + } + return wnd; + }, + + + // 预加载图片 + preloadImages: function (images) { + var imageInstance = []; + for (var i = 0; i < images.length; i++) { + imageInstance[i] = new Image(); + imageInstance[i].src = images[i]; + } + }, + + hasCSS: function (id) { + return !!Ext.get(id); + }, + + addCSS: function (id, content, isCSSFile) { + + // 如果此节点已经存在,则先删除此节点 + var node = Ext.get(id); + if (node) { + Ext.removeNode(node.dom); + } + + /* + var ss1; + + if (isCSSFile) { + ss1 = document.createElement('link'); + ss1.setAttribute('type', 'text/css'); + ss1.setAttribute('rel', 'stylesheet'); + ss1.setAttribute('id', id); + ss1.setAttribute('href', content); + } else { + // Tricks From: http://www.phpied.com/dynamic-script-and-style-elements-in-ie/ + ss1 = document.createElement("style"); + ss1.setAttribute("type", "text/css"); + ss1.setAttribute("id", id); + if (ss1.styleSheet) { // IE + ss1.styleSheet.cssText = content; + } else { // the world + var tt1 = document.createTextNode(content); + ss1.appendChild(tt1); + } + } + + var hh1 = document.getElementsByTagName("head")[0]; + hh1.appendChild(ss1); + */ + + var ss1; + var hh1 = document.getElementsByTagName('head')[0]; + if (isCSSFile) { + ss1 = document.createElement('link'); + //ss1.setAttribute('type', 'text/css'); + ss1.setAttribute('rel', 'stylesheet'); + ss1.setAttribute('id', id); + ss1.setAttribute('href', content); + hh1.appendChild(ss1); + } else { + // Tricks From: http://www.phpied.com/dynamic-script-and-style-elements-in-ie/ + ss1 = document.createElement('style'); + //ss1.setAttribute('type', 'text/css'); + ss1.setAttribute('id', id); + // Update: note that it's important for IE that you append the style to the head *before* setting its content. Otherwise IE678 will *crash* is the css string contains an @import. + hh1.appendChild(ss1); + if (ss1.styleSheet) { // IE + ss1.styleSheet.cssText = content; + } else { // the world + var tt1 = document.createTextNode(content); + ss1.appendChild(tt1); + } + } + + }, + + /* + // 在启用AJAX的情况下,使所有的Asp.net的提交按钮(type="submit")不要响应默认的submit行为,而是自定义的AJAX + makeAspnetSubmitButtonAjax: function (buttonId) { + + // 低版本IE浏览器不允许使用JS修改input标签的type属性,导致此函数无效 + function resetButton(button) { + button.set({ "type": "button" }); + button.addListener("click", function (event, el) { + __doPostBack(el.getAttribute("name"), ""); + event.stopEvent(); + }); + } + + if (typeof (buttonId) === "undefined") { + Ext.Array.each(Ext.DomQuery.select("input[type=submit]"), function (item, index) { + resetButton(Ext.get(item)); + }); + } else { + var button = Ext.get(buttonId); + if (button.getAttribute("type") === "submit") { + resetButton(button); + } + } + + }, + + */ + + htmlEncode: function (str) { + var div = document.createElement("div"); + div.appendChild(document.createTextNode(str)); + return div.innerHTML; + }, + + htmlDecode: function (str) { + var div = document.createElement("div"); + div.innerHTML = str; + return div.innerHTML; + }, + + + // Whether a object is empty (With no property) or not. + // 可以使用 Ext.Object.isEmpty + isObjectEmpty: function (obj) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + return false; + } + } + return true; + }, + + // Convert an array to object. + // ['Text', 'Icon'] -> {'Text':true, 'Icon': true} + arrayToObject: function (arr) { + var obj = {}; + Ext.Array.each(arr, function (item, index) { + obj[item] = true; + }); + return obj; + }, + + hideScrollbar: function () { + if (Ext.isIE) { + window.document.body.scroll = 'no'; + } else { + window.document.body.style.overflow = 'hidden'; + } + }, + + + // 动态添加一个标签页 + // mainTabStrip: 选项卡实例 + // id: 选项卡ID + // iframeUrl: 选项卡IFrame地址 + // title: 选项卡标题 + // icon: 选项卡图标 + // createToolbar: 创建选项卡前的回调函数(接受tabConfig参数) + // refreshWhenExist: 添加选项卡时,如果选项卡已经存在,是否刷新内部IFrame + addMainTab: function (mainTabStrip, tabOptions) { + + /* + // 兼容 addMainTab(mainTabStrip, treeNode, createToolbar, refreshWhenExist) 调用方式 + if (typeof (id) !== 'string') { + refreshWhenExist = text; + createToolbar = url; + url = id.data.href; + icon = id.data.icon; + text = id.data.text; + + id = id.getId(); + } + */ + + // 兼容之前的写法 + if (typeof (tabOptions) === 'string') { + tabOptions = { + id: arguments[1], + iframeUrl: arguments[2], + title: arguments[3], + icon: arguments[4], + createToolbar: arguments[5], + refreshWhenExist: arguments[6] + }; + } else if (typeof (tabOptions) === 'object' && tabOptions.data) { + var paramTreeNode = tabOptions; + tabOptions = { + id: paramTreeNode.getId(), + iframeUrl: paramTreeNode.data.href, + title: paramTreeNode.data.text, + icon: paramTreeNode.data.icon, + createToolbar: arguments[2], + refreshWhenExist: arguments[3] + }; + } + + //var href = node.attributes.href; + if (tabOptions.icon) { + var iconId = tabOptions.icon.replace(/\W/ig, '_'); + if (!F.util.hasCSS(iconId)) { + var iconCss = []; + iconCss.push('.'); + iconCss.push(iconId); + iconCss.push('{background-image:url("'); + iconCss.push(tabOptions.icon); + iconCss.push('")}'); + F.util.addCSS(iconId, iconCss.join('')); + } + } + // 动态添加一个带工具栏的标签页 + //tabId = 'dynamic_added_tab' + id.replace('__', '-'); + var currentTab = mainTabStrip.getTab(tabOptions.id); + if (!currentTab) { + var tabConfig = { + 'id': tabOptions.id, + 'url': tabOptions.iframeUrl, + 'title': tabOptions.title, + 'closable': true, + 'bodyStyle': 'padding:0px;' + }; + if (tabOptions.icon) { + tabConfig['iconCls'] = iconId; + } + + if (tabOptions.createToolbar) { + var addTabCallbackResult = tabOptions.createToolbar.apply(window, [tabConfig]); + // 兼容之前的方法,函数返回值如果不为空,则将返回值作为顶部工具条实例 + if (addTabCallbackResult) { + tabConfig['tbar'] = addTabCallbackResult; + } + } + mainTabStrip.addTab(tabConfig); + } else { + mainTabStrip.setActiveTab(currentTab); + currentTab.setTitle(tabOptions.title); + if (tabOptions.icon) { + currentTab.setIconCls(iconId); + } + if (tabOptions.refreshWhenExist) { + var iframeNode = currentTab.body.query('iframe')[0]; + if (iframeNode) { + if (tabOptions.iframeUrl) { + iframeNode.contentWindow.location.href = tabOptions.iframeUrl; + } else { + iframeNode.contentWindow.location.reload(); + } + } + } + + } + }, + + // 初始化左侧树(或者手风琴+树)与右侧选项卡控件的交互 + // treeMenu: 主框架中的树控件实例,或者内嵌树控件的手风琴控件实例 + // mainTabStrip: 选项卡实例 + // createToolbar: 创建选项卡前的回调函数(接受tabConfig参数) + // updateHash: 切换Tab时,是否更新地址栏Hash值 + // refreshWhenExist: 添加选项卡时,如果选项卡已经存在,是否刷新内部IFrame + // refreshWhenTabChange: 切换选项卡时,是否刷新内部IFrame + // hashWindow:需要更新Hash值的窗口对象,默认为当前window + // maxTabCount: 最大允许打开的选项卡数量 + // maxTabMessage: 超过最大允许打开选项卡数量时的提示信息 + initTreeTabStrip: function (treeMenu, mainTabStrip, createToolbar, + updateHash, refreshWhenExist, refreshWhenTabChange, hashWindow, maxTabCount, maxTabMessage) { + + // 如果传入的对象 - (treeMenu, mainTabStrip, options) + if (createToolbar && typeof (createToolbar) === 'object') { + maxTabCount = createToolbar.maxTabCount; + maxTabMessage = createToolbar.maxTabMessage; + hashWindow = createToolbar.hashWindow; + refreshWhenTabChange = createToolbar.refreshWhenTabChange; + refreshWhenExist = createToolbar.refreshWhenExist; + updateHash = createToolbar.updateHash; + // 放到最后 + createToolbar = createToolbar.createToolbar; + } else { + // 处理忽略 createToolbar 参数的情况 + if (typeof (createToolbar) === 'boolean') { + maxTabMessage = maxTabCount; + maxTabCount = hashWindow; + hashWindow = refreshWhenTabChange; + refreshWhenTabChange = refreshWhenExist; + refreshWhenExist = updateHash; + updateHash = createToolbar; + createToolbar = undefined; + } + } + + if (!hashWindow) { + hashWindow = window; + } + + // 默认值 + if (isUND(refreshWhenTabChange)) { + refreshWhenTabChange = false; + } + if (isUND(refreshWhenExist)) { + refreshWhenExist = false; + } + if (isUND(updateHash)) { + updateHash = true; + } + + + // 注册树的节点点击事件 + function registerTreeClickEvent(treeInstance) { + + // https://www.sencha.com/forum/showthread.php?286719-preventDefault-does-not-work-on-IE10-IE11 + // https://www.sencha.com/forum/showthread.php?303907 + // https://www.sencha.com/blog/delegated-events-and-gestures-in-ext-js-5/ + treeInstance.el.on({ + click: function (event) { + }, + delegate: 'a.x-tree-node-text', + translate: false, + stopEvent: true + }); + + + treeInstance.on('itemclick', function (view, record, item, index, event) { + var href = record.data.href; + // 不管当前节点是否子节点,只要有 href 属性,都需要打开一个新Tab + if (href) { + + // 定义了 maxTabCount,并且当前打开的选项卡已经达到最大值了 + if (!isUND(maxTabCount) && mainTabStrip.items.length >= maxTabCount) { + F.alert(maxTabMessage); + return; + } + + // 阻止事件传播 + event.stopEvent(); + + if (updateHash) { + // 修改地址栏 + hashWindow.location.hash = '#' + href; + } + + // 新增Tab节点 + F.util.addMainTab(mainTabStrip, record, createToolbar, refreshWhenExist); + } + }); + + + + } + + // treeMenu可能是Accordion或者Tree + if (treeMenu.getXType() === 'panel') { + treeMenu.items.each(function (item) { + var tree = item.items.getAt(0); + if (tree && tree.getXType() === 'treepanel') { + registerTreeClickEvent(tree); + } + }); + } else if (treeMenu.getXType() === 'treepanel') { + registerTreeClickEvent(treeMenu); + } + + // 切换主窗口的Tab + mainTabStrip.on('tabchange', function (tabStrip, tab) { + var tabHash = '#' + (tab.url || ''); + + // 只有当浏览器地址栏的Hash值和将要改变的不一样时,才进行如下两步处理: + // 1. 更新地址栏Hash值 + // 2. 刷新Tab内的IFrame + if (tabHash !== hashWindow.location.hash) { + + if (updateHash) { + hashWindow.location.hash = tabHash; + } + + if (refreshWhenTabChange) { + var iframeNode = tab.body.query('iframe')[0]; + if (iframeNode) { + var currentLocationHref = iframeNode.contentWindow.location.href; + if (/^http(s?):\/\//.test(currentLocationHref)) { + iframeNode.contentWindow.location.reload(); + } + } + } + } + + }); + + + // 页面第一次加载时,根据URL地址在主窗口加载页面 + var HASH = hashWindow.location.hash.substr(1); + if (HASH) { + var FOUND = false; + + function initTreeMenu(treeInstance, node) { + var i, currentNode, nodes, node, path; + if (!FOUND && node.hasChildNodes()) { + nodes = node.childNodes; + for (i = 0; i < nodes.length; i++) { + currentNode = nodes[i]; + if (currentNode.isLeaf()) { + if (currentNode.data.href === HASH) { + path = currentNode.getPath(); + treeInstance.expandPath(path); //node.expand(); + treeInstance.selectPath(path); // currentNode.select(); + F.util.addMainTab(mainTabStrip, currentNode, createToolbar); + FOUND = true; + return; + } + } else { + arguments.callee(treeInstance, currentNode); + } + } + } + } + + if (treeMenu.getXType() === 'panel') { + treeMenu.items.each(function (item) { + var tree = item.items.getAt(0); + if (tree && tree.getXType() === 'treepanel') { + initTreeMenu(tree, tree.getRootNode()); + + // 找到树节点 + if (FOUND) { + item.expand(); + return false; + } + } + }); + } else if (treeMenu.getXType() === 'treepanel') { + initTreeMenu(treeMenu, treeMenu.getRootNode()); + } + } + + }, + + // 复选框分组处理 + resolveCheckBoxGroup: function (name, xstateContainer, isradiogroup) { + var items = [], i, count, xitem, xitemvalue, xitems, xselectedarray, xselected, xchecked, xitemname; + + xitems = xstateContainer.F_Items; + xselectedarray = xstateContainer.SelectedValueArray; + xselected = xstateContainer.SelectedValue; + + if (xitems && xitems.length > 0) { + for (i = 0, count = xitems.length; i < count; i++) { + xitem = xitems[i]; + xitemvalue = xitem[1]; + xchecked = false; + if (!isradiogroup) { + // xselectedarray 可能是undefined, [], ["value1", "value2"] + if (xselectedarray) { + xchecked = (Ext.Array.indexOf(xselectedarray, xitemvalue) >= 0) ? true : false; + } + xitemname = name + '_' + i; + } else { + xchecked = (xselected === xitemvalue) ? true : false; + xitemname = name; + } + items.push({ + 'inputValue': xitemvalue, + 'boxLabel': xitem[0], + 'name': xitemname, + 'checked': xchecked + }); + } + } + /* + else { + items.push({ + 'inputValue': "tobedeleted", + 'boxLabel': " ", + 'name': "tobedeleted" + }); + } + */ + return items; + + }, + + // 防止在短时间内,同一GroupName的单选框触发两次事件 + // 用于 MenuCheckBox 和 RadioButton + checkGroupLastTime: function (groupName) { + var checkName = groupName + '_lastupdatetime'; + var checkValue = F.util[checkName]; + F.util[checkName] = new Date(); + if (typeof (checkValue) === 'undefined') { + return true; + } else { + if ((new Date() - checkValue) < 100) { + return false; + } else { + return true; + } + } + }, + + // 对话框图标 + getMessageBoxIcon: function (iconShortName) { + var icon = iconShortName || Ext.MessageBox.WARNING; + if (iconShortName === 'info') { + icon = Ext.MessageBox.INFO; + } else if (iconShortName === 'warning') { + icon = Ext.MessageBox.WARNING; + } else if (iconShortName === 'question') { + icon = Ext.MessageBox.QUESTION; + } else if (iconShortName === 'error') { + icon = Ext.MessageBox.ERROR; + } + return icon; + }, + + // 弹出Alert对话框 + alert: function (target, message, title, messageIcon, ok) { // 老的顺序:msg, title, icon, okscript + var args = [].slice.call(arguments, 0); + + var options = args[0]; + if (typeof (options) === 'string') { + if (!/^_self|_parent|_top$/.test(args[0])) { + args.splice(0, 0, '_self'); + } + options = { + target: args[0], + message: args[1], + title: args[2], + messageIcon: args[3], + ok: args[4] + }; + } + + var wnd = F.util.getTargetWindow(options.target); + if (!F.canAccess(wnd)) { + return; // return + } + + var icon = Ext.MessageBox.INFO; + if (options.messageIcon) { + icon = F.util.getMessageBoxIcon(options.messageIcon); + } + + wnd.Ext.MessageBox.show({ + cls: options.cls || '', + title: options.title || F.util.alertTitle, + msg: options.message, + buttons: Ext.MessageBox.OK, + icon: icon, + fn: function (buttonId) { + if (buttonId === "ok") { + if (typeof (options.ok) === "function") { + options.ok.call(window); + } + } + } + }); + }, + + + + // 确认对话框 + confirm: function (target, message, title, messageIcon, ok, cancel) { // 老的顺序:targetName, title, msg, okScript, cancelScript, iconShortName) + + var args = [].slice.call(arguments, 0); //$.makeArray(arguments); + + var options = args[0]; + if (typeof (options) === 'string') { + if (!/^_self|_parent|_top$/.test(args[0])) { + args.splice(0, 0, '_self'); + } + options = { + target: args[0], + message: args[1], + title: args[2], + messageIcon: args[3], + ok: args[4], + cancel: args[5] + }; + } + + + var wnd = F.util.getTargetWindow(options.target); + if (!F.canAccess(wnd)) { + return; // return + } + + var icon = F.util.getMessageBoxIcon(options.messageIcon); + wnd.Ext.MessageBox.show({ + cls: options.cls || '', + title: options.title || F.util.confirmTitle, + msg: options.message, + buttons: Ext.MessageBox.OKCANCEL, + icon: icon, + fn: function (btn) { + if (btn == 'cancel') { + if (options.cancel) { + if (typeof (options.cancel) === 'string') { + new Function(options.cancel)(); + } else { + options.cancel.apply(wnd); + } + } else { + return false; + } + } else { + if (options.ok) { + if (typeof (options.ok) === 'string') { + new Function(options.ok)(); + } else { + options.ok.apply(wnd); + } + } else { + return false; + } + } + } + }); + }, + + + + summaryRenderer: function (gridId) { + return function (value, summaryData, dataIndex) { + var summary = F(gridId).f_state['SummaryData']; + if (summary) { + var summaryValue = summary[dataIndex]; + if (typeof (summaryValue) !== 'undefined') { + return summaryValue; + } + } + return ''; + }; + }, + + // 表单字段内按回车键触发提交按钮 + registerPanelEnterKey: function (panel) { + if (F.submitbutton) { + F.create('Ext.util.KeyNav', panel.el, { + enter: function (e) { + var el = Ext.Element.getActiveElement(); + if (el.type !== 'textarea') { + F(F.submitbutton).el.dom.click(); + } + }, + scope: panel + }); + } + }, + + reset: function () { + Ext.ComponentManager.each(function (key, cmp) { + if (cmp.isXType && cmp.isXType('panel') && cmp.renderTo) { + cmp.f_reset(); + } + }); + }, + + + isDate: function (value) { + return Object.prototype.toString.call(value) === '[object Date]'; + }, + + resolveGridDateToString: function (fields, fieldName, fieldValue) { + var i, fieldConfig, result = fieldValue; + for (i = 0, count = fields.length; i < count; i++) { + fieldConfig = fields[i]; + if (fieldConfig.name === fieldName && fieldConfig.type === 'date' && fieldConfig.dateFormat) { + result = Ext.util.Format.date(fieldValue, fieldConfig.dateFormat); + } + } + return result; + }, + + + + + noop: function () { } + + }; + + + + +})(); \ No newline at end of file diff --git a/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.wnd.js b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.wnd.js new file mode 100644 index 0000000..db0b263 --- /dev/null +++ b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/F.wnd.js @@ -0,0 +1,418 @@ + + +(function () { + + // 计算黄金分割点的位置 + // bodySize : 整个页面的Body的大小 + // windowSize : 窗口的大小 + function _calculateGoldenPosition(bodySize, windowSize) { + var top = (bodySize.height - (bodySize.height / 1.618)) - windowSize.height / 2; + if (top < 0) { + top = 0; + } + var left = (bodySize.width - windowSize.width) / 2; + if (left < 0) { + left = 0; + } + return { left: left, top: top }; + } + + // 计算中间的位置 + // bodySize : 整个页面的Body的大小 + // windowSize : 窗口的大小 + function _calculateCenterPosition(bodySize, windowSize) { + var top = (bodySize.height - windowSize.height) / 2; + if (top < 0) { + top = 0; + } + var left = (bodySize.width - windowSize.width) / 2; + if (left < 0) { + left = 0; + } + return { left: left, top: top }; + } + + + + // 创建IFrame节点片段 + function _createIFrameHtml(iframeUrl, iframeName) { + return ''; + } + + // 获取窗体的外部容器 + function _getWrapperNode(panel) { + return Ext.get(panel.el.findParentNode('.f-window-wrapper')); + } + + // FineUI窗口域(Window) + F.wnd = { + + closeButtonTooltip: "Close this window", + formChangeConfirmMsg: "Current form has been modified, abandon changes?", + + createIFrameHtml: function (iframeUrl, iframeName) { + return _createIFrameHtml(iframeUrl, iframeName); + }, + + // 窗体定义:Original Panel / Ghost Panel + + // 显示一个弹出窗体 + // 在 panel 实例中,定义了几个自定义属性,用于标示此实例的状态(在PanelBase中定义) + // 属性 - f_iframe/f_iframe_url/f_iframe_name/f_iframe_loaded + // panel : 当前弹出的窗体(Ext-Window) + // iframeUrl : 弹出窗体中包含的IFrame的地址 + // windowTitle : 弹出窗体的标题 + // left/top : 弹出窗体的左上角坐标(如果为空字符串,则使用中间位置或黄金分隔位置) + // isGoldenSection : 弹出窗体位于页面的黄金分隔位置 + // hiddenHiddenFieldID : 隐藏表单字段记录此窗体是否弹出,也页面回发时保持状态用 + show: function (panel, iframeUrl, windowTitle, left, top, isGoldenSection, hiddenHiddenFieldID, width, height) { + var target = F.util.getTargetWindow(panel.f_property_target); + var guid = panel.f_property_guid; + + // 当前页面在IFrame中(window.frameElement 存在) - 这个判断有问题 + // ----如果外部页面是 http://a.com/ 而内部页面是 http://b.com/ 在 b.com 内弹出窗体时, window.frameElement 就会出现拒绝访问 + + // parent != window - 当前窗体不是顶层窗体 + // target !== window - 并且当前窗体不是需要弹出的位置(target) + if (parent != window && target !== window) { + + if (!target.F[guid]) { + // 父窗口中已经创建了这个Ext-Window对象 + var wrapper = guid + '_wrapper'; + if (!target.Ext.get(wrapper)) { + target.F.util.appendFormNode('
'); + } else { + target.Ext.get(wrapper).dom.innerHTML = ''; + } + // Ext.apply 的第三个参数是default obejct + var config = Ext.apply({}, { + renderTo: wrapper, + id: guid, + f_property_window: window, + f_property_ext_window: panel + }, panel.initialConfig); + delete config.f_state; + delete config.items; + delete config.listeners; + + + // 在父页面中创建一个Ext-Window的幻影(拷贝) + //target.F[guid] = target.Ext.create('Ext.window.Window', config); + target.F.wnd.createGhostWindow(config); + } + panel = target.F[guid]; + } + + + + if (iframeUrl !== '') { + F.wnd.updateIFrameNode(panel, iframeUrl); + } + if (windowTitle != '') { + panel.setTitle(windowTitle); + } + + + if (typeof(width) === 'number' && width) { + panel.setWidth(width); + } + + if (typeof(height) === 'number' && height) { + panel.setHeight(height); + } + + + Ext.get(hiddenHiddenFieldID).dom.value = 'false'; + panel.show(); + + if (left !== '' && top !== '') { + panel.setPosition(parseInt(left, 10), parseInt(top, 10)); + } else { + var bodySize = target.window.Ext.getBody().getViewSize(); + var panelSize = panel.getSize(), leftTop; + if (isGoldenSection) { + leftTop = _calculateGoldenPosition(bodySize, panelSize); + } else { + leftTop = _calculateCenterPosition(bodySize, panelSize); + //panel.alignTo(target.Ext.getBody(), "c-c"); + } + panel.setPosition(leftTop.left, leftTop.top); + } + + F.wnd.fixMaximize(panel); + + }, + + createGhostWindow: function (config) { + + var ghostWnd = F.create('Ext.window.Window', config); + ghostWnd.on('beforeclose', function () { + + // 如果原始窗体所在的页面存在,则触发原始窗体的 beforeclose 事件 + if (F.canAccess(config.f_property_window)) { + config.f_property_ext_window.fireEvent('beforeclose', config.f_property_ext_window); + + return false; + } + + // 如果原始窗体已经被关闭,则不拦截 beforeclose 事件,会简单的关闭窗体 + + }); + + + ghostWnd.on('maximize', function () { + + /* + // 如果原始窗体所在的页面存在,则触发原始窗体的 maximize 事件 + if (F.canAccess(config.f_property_window)) { + config.f_property_ext_window.fireEvent('maximize', config.f_property_ext_window); + } else { + F.wnd.fixMaximize(ghostWnd); + } + */ + + F.wnd.fixMaximize(ghostWnd); + + }); + + + F[config.id] = ghostWnd; + }, + + + // 获取Ghost Panel实例 + getGhostPanel: function (panel, targetName, guid) { + if (typeof (targetName) === 'undefined') { + targetName = panel.f_property_target; + } + if (typeof (guid) === 'undefined') { + guid = panel.f_property_guid; + } + var target = F.util.getTargetWindow(targetName); + if (parent != window && target !== window) { + // 从父页面中查找幻影Ext-Window对象 + panel = target.F[guid]; + } + return panel; + }, + + // 隐藏Ext-Window(比如用户点击了关闭按钮) + hide: function (panel, enableIFrame, hiddenHiddenFieldID) { + var panel = F.wnd.getGhostPanel(panel); + + // 如果返回 false,则说明隐藏操作被阻止了 + if (panel.hide() !== false) { + + // 修改当前页面中记录弹出窗口弹出状态的隐藏表单字段 + Ext.get(hiddenHiddenFieldID).dom.value = 'true'; + // 如果启用IFrame,则清空IFrame的内容,防止下次打开时显示残影 + if (enableIFrame) { + // 如果不加延迟,IE下AJAX会出错,因为在success中已经把当前窗体关闭后,而后面还要继续使用本页面上相关对象 + window.setTimeout(function () { + panel['f_iframe_loaded'] = false; + panel.update(""); + }, 100); + } + + } + }, + + // 最大化 + maximize: function (panel) { + var panel = F.wnd.getGhostPanel(panel); + panel.maximize(); + + F.wnd.fixMaximize(panel); + }, + + // 最小化 + minimize: function (panel) { + var panel = F.wnd.getGhostPanel(panel); + panel.minimize(); + }, + + // 恢复窗体大小 + restore: function (panel) { + var panel = F.wnd.getGhostPanel(panel); + panel.restore(); + }, + + // 这是 Extjs 的一个 bug,如果 Window 控件不是渲染在 document.body 中,则 maximize 函数并不能真正的最大化 + // 现在的 Window 控件时渲染在 from 表单里面的一个 DIV 中的 + fixMaximize: function (panel) { + if (panel.maximized) { + var target = F.util.getTargetWindow(panel.f_property_target); + var bodySize = target.window.Ext.getBody().getViewSize(); + panel.setSize(bodySize.width, bodySize.height); + // 不要忘记左上角坐标 + panel.setPosition(0, 0); + } + }, + + // 创建或更新IFrame节点,同时更新panel实例中的自定义属性值 + updateIFrameNode: function (panel, iframeUrl) { + var iframeUrlChanged = false; + panel = F.wnd.getGhostPanel(panel); + // 如果此Panel中包含有IFrame + if (panel && panel['f_iframe']) { + if (iframeUrl && panel['f_iframe_url'] !== iframeUrl) { + panel['f_iframe_url'] = iframeUrl; + iframeUrlChanged = true; + } + // 如果此Panel中包含的IFrame还没有加载 + if (!panel['f_iframe_loaded']) { + window.setTimeout(function () { + // 如果此Panel已经创建完毕,但有时Panel可能是延迟创建的(比如TabStrip中的Tab,只有点击这个Tab时才创建Tab的内容) + panel['f_iframe_loaded'] = true; + panel.update(_createIFrameHtml(panel['f_iframe_url'], panel['f_iframe_name'])); + }, 0); + } + else { + if (iframeUrlChanged) { + panel.body.query('iframe')[0].src = panel['f_iframe_url']; + } + } + } + }, + + + // 处理表单中有任何字段发生变化时,关闭当前窗口时的提示 + confirmModified: function (closeFn) { + if (F.util.isPageStateChanged()) { + F.util.confirm('_self', F.wnd.formModifiedConfirmTitle, F.wnd.formChangeConfirmMsg, function () { + closeFn.apply(window, arguments); + }); + } else { + closeFn.apply(window, arguments); + } + }, + + + // Ext-Window中IFrame里页面中的表单发生变化时弹出确认消息 + iframeModifiedConfirm: function (panel, closeFn) { + // 这个页面所在的Window对象 + var pageWindow = F.wnd.getIFrameWindowObject(panel); + // 如果弹出的页面没能正常加载(比如说网络暂时连接中断) + // 则直接关闭弹出的Ext-Window,而不会去检查页面表单变化,因为页面对象不存在 + if (pageWindow.F) { + pageWindow.F.wnd.confirmModified(closeFn); + } + else { + panel.f_hide(); + } + }, + + // 取得Ghost Panel所在页面window对象 + getIFrameWindowObject: function (panel) { + // 当前页面在IFrame中(也即时 window.frameElement 存在) + // 此Ext-Window需要在父窗口中弹出 + /* + if (window.frameElement && panel['f_property_show_in_parent']) { + panel = parent.F[panel['f_property_guid']]; + } + */ + panel = F.wnd.getGhostPanel(panel); + var iframeNode = Ext.query('iframe', panel.body.dom); + if (iframeNode.length === 0) { + // 当前panel(Ext-Window)不包含iframe + return window; + } + else { + return iframeNode[0].contentWindow; + } + }, + + // 返回当前活动Window组件对象(浏览器窗口对象通过F.wnd.getActiveWindow().window获取) + getActiveWindow: function (justParentWindow) { + + // Ext.WindowManager.getActive();有可能返回一个弹出对话框 + function getActiveFineUIWindow(wnd) { + var result = wnd.Ext.WindowManager.getActive(); + + // 如果弹出的窗体不是 FineUI.Window 生成的窗体(有可能是Alert、Notify),则需要从排序列表中找 + if (result && !result.f_property_guid) { + wnd.Ext.WindowManager.eachTopDown(function (cmp) { + if (cmp.f_property_guid) { + result = cmp; + return false; + } + }); + } + return result; + } + + var activeWindow = parent.window; + var activeExtWindow = getActiveFineUIWindow(activeWindow); + + if (activeExtWindow) { + if (activeExtWindow.f_property_window && !justParentWindow) { + activeWindow = activeExtWindow.f_property_window; + activeExtWindow = activeExtWindow.f_property_ext_window; + } + activeExtWindow.window = activeWindow; + } + return activeExtWindow; + }, + + + // 向弹出此Ext-Window的页面写入值 + writeBackValue: function () { + var aw = F.wnd.getActiveWindow(); + if (F.canAccess(aw.window)) { + var controlIds = aw.f_property_save_state_control_client_ids; + var controlCount = Math.min(controlIds.length, arguments.length); + for (var i = 0; i < controlCount; i++) { + aw.window.Ext.getCmp(controlIds[i]).setValue(arguments[i]); + } + } + } + + }; + + + + function hideActiveWindow(type, param) { + var aw = F.getActiveWindow(); + if (aw) { + if (F.canAccess(aw.window)) { + if (type === 'hide') { + aw.f_hide(); + } else if (type === 'hiderefresh') { + aw.f_hide_refresh(); + } else if (type === 'hidepostback') { + aw.f_hide_postback.call(aw, param) + } else if (type === 'hideexecutescript') { + aw.f_hide_executescript.call(aw, param) + } + } else { + var parentAW = F.getActiveWindow(true); + parentAW.hide(); + } + } + } + + // 当前激活窗体 + F.activeWnd = { + + hide: function () { + hideActiveWindow('hide'); + }, + + hideRefresh: function () { + hideActiveWindow('hiderefresh'); + }, + + hidePostBack: function (param) { + hideActiveWindow('hidepostback', param); + }, + + hideExecuteScript: function (param) { + hideActiveWindow('hideexecutescript', param); + } + + + }; + + + +})(); diff --git a/FineUI_v6/FineUI.Examples/extjs_builder/js/F/extender.js b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/extender.js new file mode 100644 index 0000000..cd77d1d --- /dev/null +++ b/FineUI_v6/FineUI.Examples/extjs_builder/js/F/extender.js @@ -0,0 +1,2120 @@ + +F.originalComponentHide = Ext.Component.prototype.hide; +Ext.override(Ext.Component, { + + // override + hide: function () { + var me = this; + + if (me.tab && me.tab.isXType('tab')) { + // tabpanel 单独处理 + } else { + // 除了 tabpanel 的其他面板 + if (me.body) { + // 检查当前组件内的表单是否改变(包含组件内 iframe 页面,递归查找所有 iframe) + if (F.util.preventPageClose(me.body)) { + return false; + } + } + } + + return F.originalComponentHide.apply(me, arguments); + }, + + f_setDisabled: function () { + this.setDisabled(!this.f_state['Enabled']); + }, + + f_setVisible: function () { + this.setVisible(!this.f_state['Hidden']); + }, + + f_setWidth: function () { + this.setWidth(this.f_state['Width']); + }, + + f_setHeight: function () { + this.setHeight(this.f_state['Height']); + }, + + + // Extjs v6.0: doLayout method has been removed. Use updateLayout instead. + doLayout: function (params) { + this.updateLayout(params); + } + + + + +}); + +// 1. tabpanel 单独处理,选项卡右上角的关闭按钮 +F.originalTabBarCloseTab = Ext.tab.Bar.prototype.closeTab; +Ext.override(Ext.tab.Bar, { + // override + closeTab: function (toClose) { + var me = this, card = toClose.card; + + if (card.body) { + // 检查当前组件内的表单是否改变(包含组件内 iframe 页面,递归查找所有 iframe) + if (F.util.preventPageClose(card.body)) { + return false; + } + } + + return F.originalTabBarCloseTab.apply(me, arguments); + } + +}); + +// 2. tabpanel 单独处理,选项卡的右键菜单 +F.originalTabPanelRemove = Ext.tab.Panel.prototype.remove; +Ext.override(Ext.tab.Panel, { + + // override + remove: function (comp) { + var me = this, c = me.getComponent(comp); + + if (c && c.body) { + // 检查当前组件内的表单是否改变(包含组件内 iframe 页面,递归查找所有 iframe) + if (F.util.preventPageClose(c.body)) { + return false; + } + } + + return F.originalTabPanelRemove.apply(me, arguments); + } + +}); + + +// 验证一个表单是否有效,会递归查询表单中每个字段 +// 如果表单隐藏或者字段隐藏,则不进行有效性校验 +Ext.override(Ext.container.Container, { + + f_isValid: function () { + var valid = true; + var firstInvalidField = null; + if (!this.hidden) { + this.items.each(function (f) { + if (!f.hidden) { + if (f.isXType('field') || f.isXType('checkboxgroup')) { + if (!f.validate()) { + valid = false; + if (firstInvalidField == null) { + firstInvalidField = f; + } + } + } else if (f.isXType('container') && f.items.length) { + var validResult = f.f_isValid(); + if (!validResult[0]) { + valid = false; + if (firstInvalidField == null) { + firstInvalidField = validResult[1]; + } + } + } + } + }); + } + return [valid, firstInvalidField]; + }, + + f_reset: function () { + var me = this; + if (me.items && me.items.length) { + me.items.each(function (item) { + if (item.isXType('field')) { + item.reset(); + } else if (item.isXType('container') && item.items.length) { + item.f_reset(); + } + }); + } + }, + + // 当前面板内的表单字段是否改变 + f_isDirty: function () { + var me = this, dirty = false; + + if (me.items && me.items.length) { + me.items.each(function (item) { + if (item.isXType('field')) { + if (item.isDirty()) { + dirty = true; + return false; + } + } else if (item.isXType('container') && item.items.length) { + if (item.f_isDirty()) { + dirty = true; + return false; + } + } + }); + } + + return dirty; + }, + + + // 当前面板内的表单字段 + f_clearDirty: function () { + var me = this; + + if (me.items && me.items.length) { + me.items.each(function (item) { + if (item.isXType('field')) { + item.resetOriginalValue(); + } else if (item.isXType('container') && item.items.length) { + item.f_clearDirty() + } + }); + } + } + +}); + +//F.originalPanelClose = Ext.panel.Panel.prototype.close; + +Ext.override(Ext.panel.Panel, { + + //// override + //close: function () { + + // // 检查当前组件内的表单是否改变(包含组件内 iframe 页面,递归查找所有 iframe) + // if (F.util.preventPageClose(this.body)) { + // return false; + // } + + + // return F.originalPanelClose.apply(this, arguments); + //}, + + + f_setCollapse: function () { + var collapsed = this.f_state['Collapsed']; + if (collapsed) { + this.collapse(); + } else { + this.expand(); + } + }, + + f_isCollapsed: function () { + /* + var collapsed = false; + var state = this.getState(); + if (state && state.collapsed) { + collapsed = true; + } + return collapsed; + */ + return !!this.getCollapsed(); + }, + + f_setTitle: function () { + this.setTitle(this.f_state['Title']); + }, + + f_getActiveIndex: function () { + var activeIndex = -1; + this.items.each(function (item, index) { + if (item.f_isCollapsed && !item.f_isCollapsed()) { + activeIndex = index; + return false; + } + }); + return activeIndex; + } + + +}); + +Ext.override(Ext.form.FieldSet, { + f_setCollapse: function () { + var collapsed = this.f_state['Collapsed']; + if (collapsed) { + this.collapse(); + } else { + this.expand(); + } + }, + + f_isCollapsed: function () { + /* + var collapsed = false; + var state = this.getState(); + if (state && state.collapsed) { + collapsed = true; + } + return collapsed; + */ + return !!this.getCollapsed(); + }, + + f_setTitle: function () { + this.setTitle(this.f_state['Title']); + } + +}); + +if (Ext.menu.CheckItem) { + Ext.override(Ext.menu.CheckItem, { + + f_setChecked: function () { + this.setChecked(this.f_state['Checked'], true); + } + + }); +} + +if (Ext.form.field.Base) { + Ext.override(Ext.form.field.Base, { + + // Add functionality to Field's initComponent to enable the change event to bubble + /* + initComponent: Ext.form.Field.prototype.initComponent.createSequence(function () { + this.enableBubble('change'); + }), + */ + + /* 这会导致在文本输入框中按回车键,无法触发type=submit的表单回发事件 + listeners: { + specialkey: function (field, e) { + if (e.getKey() == e.ENTER) { + e.stopEvent(); + } + } + }, + */ + + /* + // When show or hide the field, also hide the label. + hide: function () { + Ext.form.Field.superclass.hide.call(this); + //this.callOverridden(); + + //var label = Ext.get(this.el.findParent('div[class=x-form-item]')).first('label[for=' + this.id + ']'); + var labelAndField = this.el.findParentNode('div[class*=x-form-item]', 10, true); + if (labelAndField) { + if (this.hideMode == 'display') { + labelAndField.setVisibilityMode(Ext.Element.DISPLAY); + } else { + labelAndField.setVisibilityMode(Ext.Element.VISIBILITY); + } + labelAndField.hide(); + } + }, + + show: function () { + Ext.form.Field.superclass.show.call(this); + //this.callOverridden(); + + //var label = Ext.get(this.el.findParent('div[class=x-form-item]')).first('label[for=' + this.id + ']'); + var labelAndField = this.el.findParentNode('div[class*=x-form-item]', 10, true); + if (labelAndField) { + if (this.hideMode == 'display') { + labelAndField.setVisibilityMode(Ext.Element.DISPLAY); + } else { + labelAndField.setVisibilityMode(Ext.Element.VISIBILITY); + } + labelAndField.show(); + } + }, + */ + + f_setValue: function (value) { + if (typeof (value) === 'undefined') { + value = this.f_state['Text']; + } + this.setValue(value); + }, + + f_setLabel: function (text) { + /* + if (this.label && this.label.update) { + this.label.update(text || this.f_state['Label']); + } + */ + var text = text || this.f_state['Label']; + if (this.setFieldLabel) { + this.setFieldLabel(text); + } + }, + + f_setReadOnly: function (readonly) { + var me = this; + + if (typeof (readonly) === 'undefined') { + readonly = me.f_state['Readonly']; + } + + if (me.setReadOnly) { + me.setReadOnly(readonly); + } + + if (readonly) { + me.el.addCls('f-readonly'); + } else { + me.el.removeCls('f-readonly'); + } + } + + }); +} + + +Ext.override(Ext.form.field.Trigger, { + + showTrigger: function () { + this.setTriggerVisible(1, true); + }, + showTrigger1: function () { + this.setTriggerVisible(1, true); + }, + showTrigger2: function () { + this.setTriggerVisible(2, true); + }, + + hideTrigger: function () { + this.setTriggerVisible(1, false); + }, + hideTrigger1: function () { + this.setTriggerVisible(1, false); + }, + hideTrigger2: function () { + this.setTriggerVisible(2, false); + }, + + setTriggerVisible: function (triggerNumber, visible) { + this.triggerCell.item(triggerNumber - 1).setDisplayed(visible); + } + +}); + +if (Ext.form.Label) { + Ext.override(Ext.form.Label, { + + f_setReadOnly: function (readonly) { + var me = this; + + if (typeof (readonly) === 'undefined') { + readonly = me.f_state['Readonly']; + } + + if (me.setReadOnly) { + me.setReadOnly(readonly); + } + + if (readonly) { + me.el.addCls('f-readonly'); + } else { + me.el.removeCls('f-readonly'); + } + } + + }); + +} + + + +if (Ext.form.CheckboxGroup) { + Ext.override(Ext.form.CheckboxGroup, { + + f_setReadOnly: function (readonly) { + var me = this; + + if (typeof (readonly) === 'undefined') { + readonly = me.f_state['Readonly']; + } + + if (me.setReadOnly) { + me.setReadOnly(readonly); + } + + if (readonly) { + me.el.addCls('f-readonly'); + } else { + me.el.removeCls('f-readonly'); + } + }, + + f_reloadData: function (name, isradiogroup) { + var container = this.ownerCt; + var newConfig = Ext.apply(this.initialConfig, { + "f_state": this.f_state, + "f_state_v": this.f_state_v, + "items": F.util.resolveCheckBoxGroup(name, this.f_state, isradiogroup) + }); + + if (container) { + var originalIndex = container.items.indexOf(this); + container.remove(this, true); + + if (isradiogroup) { + container.insert(originalIndex, F.create('Ext.form.RadioGroup', newConfig)); + } else { + container.insert(originalIndex, F.create('Ext.form.CheckboxGroup', newConfig)); + } + + container.doLayout(); + } else { + this.destroy(); + if (isradiogroup) { + F.create('Ext.form.RadioGroup', newConfig); + } else { + F.create('Ext.form.CheckboxGroup', newConfig); + } + + } + }, + + /* + f_toBeDeleted: function () { + var tobedeleted = this.items.items[0]; + if (tobedeleted && tobedeleted.inputValue === 'tobedeleted') { + tobedeleted.destroy(); + this.items.remove(tobedeleted); + } + }, + */ + + // 选中项 + f_setValue: function (values) { + // valueArray:["value1", "value2", "value3"] + var values = values || this.f_state['SelectedValueArray']; + + var selectedObj = {}; + this.items.each(function (item) { + var itemSelected = false; + if (Ext.Array.indexOf(values, item.inputValue) >= 0) { + itemSelected = true; + } + selectedObj[item.name] = itemSelected; + }); + + this.setValue(selectedObj); + }, + + // 返回 ["value1", "value2", "value3"] + f_getSelectedValues: function () { + var selectedValues = []; + var values = this.getValue(); + Ext.Object.each(values, function (key, value) { + selectedValues.push(value); + }); + return selectedValues; + } + + }); +} + + + +if (Ext.form.field.Time) { + Ext.override(Ext.form.field.Time, { + + // Time 继承自 ComboBox,这个函数被覆盖了,因此需要重新定义 + f_setValue: function (value) { + if (typeof (value) === 'undefined') { + value = this.f_state['Text']; + } + this.setValue(value); + } + + }); +} + + +if (Ext.form.field.HtmlEditor) { + Ext.override(Ext.form.field.HtmlEditor, { + + f_setValue: function (text) { + if (typeof (text) === 'undefined') { + text = this.f_state['Text']; + } + this.setValue(text); + } + + }); +} + + +if (Ext.form.field.Checkbox) { + Ext.override(Ext.form.field.Checkbox, { + + f_setValue: function () { + this.setValue(this.f_state['Checked']); + } + + }); +} + + +if (Ext.form.RadioGroup) { + Ext.override(Ext.form.RadioGroup, { + + f_setValue: function (value) { + value = value || this.f_state['SelectedValue']; + var selectedObj = {}; + selectedObj[this.name] = value; + this.setValue(selectedObj); + //Ext.form.CheckboxGroup.prototype.f_setValue.apply(this, [value]); + } + + }); +} + + +if (Ext.form.field.ComboBox) { + Ext.override(Ext.form.field.ComboBox, { + // Load data from local cache. + // mode: "local", + // triggerAction: "all", + displayField: "text", + valueField: "value", + //tpl: "
x-combo-list-item-disable\">{prefix}{text}
", + + // These variables are in the Ext.form.ComboBox.prototype, therefore all instance will refer to the same store instance. + //store: new Ext.data.ArrayStore({ fields: ['value', 'text', 'enabled', 'prefix'] }), + + f_setValue: function (value) { + // value 可以是空字符串 + if (typeof (value) === 'undefined') { + var stateSelectedValueArray = this.f_state['SelectedValueArray']; + if (this.multiSelect) { + value = stateSelectedValueArray; + } else { + value = stateSelectedValueArray[0]; + } + } + this.setValue(value); + }, + + f_loadData: function (data) { + data = data || this.f_state['F_Items']; + if (data) { + this.store.loadData(F.simulateTree.transform(data)); + } + }, + + + f_getTextByValue: function (value, data) { + data = data || this.f_state['F_Items']; + value += ''; // 把Value转换为字符串 + for (var i = 0, count = data.length; i < count; i++) { + var item = data[i]; + if (item[0] === value) { + return item[1]; + } + } + return ''; + } + + }); +} + + +if (Ext.button.Button) { + Ext.override(Ext.button.Button, { + + f_setTooltip: function () { + this.setTooltip(this.f_state['ToolTip']); + }, + + f_toggle: function () { + this.toggle(this.f_state['Pressed']); + }, + + f_setText: function () { + this.setText(this.f_state['Text']); + } + + + }); +} + + + +if (Ext.grid.column.RowNumberer) { + + F.originalRowNumbererRenderer = Ext.grid.column.RowNumberer.prototype.defaultRenderer; + Ext.override(Ext.grid.column.RowNumberer, { + + defaultRenderer: function () { + + var number = F.originalRowNumbererRenderer.apply(this, arguments); + + if (this.f_paging) { + var pagingBar = F(this.f_paging_grid).f_getPaging(); + if (pagingBar) { + number += pagingBar.f_pageIndex * pagingBar.f_pageSize; + } + } + + return number; + } + }); + +} + + +if (Ext.grid.Panel) { + Ext.override(Ext.grid.Panel, { + + f_getData: function () { + var $this = this, rows = this.f_state['F_Rows']; + + + ////////////////////////////////////////////////// + var tpls = this.f_getTpls(this.f_tpls); + + // 将Grid1_ctl37与对应的outHTML放在哈希表中 + var tplsHash = {}; + var e = document.createElement('div'); + e.innerHTML = tpls; + Ext.Array.each(e.childNodes, function (item, index) { + tplsHash[item.id] = item.outerHTML.replace(/\r?\n\s*/ig, ''); + }); + + /* + // 将服务器返回的字符串转换为实际的JavaScript类型 + function resolveActualDataItem(fieldValue, fieldIndex) { + var fieldType = $this.f_fields[fieldIndex].type; + if (fieldType) { + if (fieldType === 'date') { + fieldValue = new Date(fieldValue); + } else if (fieldType === 'boolean') { + if (fieldValue == 'true' || fieldValue == '1') { + fieldValue = true; + } else { + fieldValue = false; + } + } else if (fieldType === 'float') { + fieldValue = parseFloat(fieldValue); + } else if (fieldType === 'int') { + fieldValue = parseInt(fieldValue, 10); + } + } + return fieldValue; + } + */ + + // 不要改变 F_Rows.Values 的原始数据,因为这个值会被POST到后台 + /* + var newdata = [], newdataitem; + Ext.Array.each(data, function (row, rowIndex) { + newdataitem = []; + Ext.Array.each(row, function (item, index) { + if (typeof (item) === 'string' && item.substr(0, 7) === "#@TPL@#") { + var clientId = $this.id + '_' + item.substr(7); + newdataitem.push('
' + tplsHash[clientId] + '
'); + } else { + //newdataitem.push(resolveActualDataItem(item, index)); + newdataitem.push(item); + } + }); + newdata.push(newdataitem); + }); + */ + + var newdata = []; + Ext.Array.each(rows, function (row, rowIndex) { + var newdataitem = []; + + // row['f0'] -> Values + + // [v6.0.1]修正DataKeyNames值是小数(比如9.80),则页面回发时会出现F_STATE验证出错的问题(Fire-8910)。 + var rowf0 = row['f0']; + if(typeof(rowf0) === 'string') { + rowf0 = JSON.parse(rowf0); + } + + Ext.Array.each(rowf0, function (item, cellIndex) { + var newcellvalue = item; + if (typeof (item) === 'string' && item.substr(0, 7) === "#@TPL@#") { + var clientId = $this.id + '_' + item.substr(7); + newcellvalue = '
' + tplsHash[clientId] + '
'; + } + + newdataitem.push(newcellvalue); + }); + + // idProperty + var rowId = row['f6']; + if (typeof (rowId) === 'undefined') { + // 如果未定义 id,要生成一个 id,用来记录选中的行(否则在行调整顺序后,选中的行就乱了) + rowId = 'fineui_row_' + rowIndex; + } + newdataitem.push(rowId); + + + newdata.push(newdataitem); + }); + ////////////////////////////////////////////////// + + return newdata; + }, + + f_getTpls: function (paramTpls) { + var tpls; + if (typeof (paramTpls) !== 'undefined') { + // 1. 如果Tpls存在于函数参数中 + tpls = paramTpls; + this['data-last-tpls'] = tpls; + } else { + var tplsNode = Ext.get(this.id + '_tpls'); + if (tplsNode) { + // 2. 如果Tpls存在于页面节点中 + tpls = tplsNode.dom.innerHTML; + // 获取模板列的内容之后,必须要删除原有的节点,因为会在表格中创建完全相同的新节点 + tplsNode.remove(); + + // 将模板列内容保存到表格实例中 + this['data-last-tpls'] = tpls; + } else { + // 3. 从缓存中读取 + // 从表格实例中读取模板列内容 + tpls = this['data-last-tpls']; + } + } + + return tpls; + }, + + + f_updateTpls: function (tpls) { + tpls = this.f_getTpls(tpls); + + var e = document.createElement('div'); + e.innerHTML = tpls; + Ext.Array.each(e.childNodes, function (item, index) { + var nodeId = item.id; + var tplContainer = Ext.get(nodeId + '_container'); + + // 对于内存分页,模板列的内容可能还没有渲染到页面中 + if (tplContainer) { + tplContainer.dom.innerHTML = item.outerHTML; + } + }); + }, + + f_getPaging: function () { + var toolbar = this.getDockedItems('toolbar[dock="bottom"][xtype="simplepagingtoolbar"]'); + return toolbar.length ? toolbar[0] : undefined; + }, + + f_loadData: function () { + var datas = this.f_getData(); + var pagingBar = this.f_getPaging(); + if (pagingBar) { + var pagingDatas = []; + if (pagingBar.f_databasePaging) { + pagingDatas = datas; + } else { + for (var i = pagingBar.f_startRowIndex; i <= pagingBar.f_endRowIndex; i++) { + pagingDatas.push(datas[i]); + } + } + datas = pagingDatas; + } + + + var store = this.getStore(); + + // 已经设置 Ext.data.Store 的 pruneModifiedRecords ,在重新加载数据时都会清除所有已经改变的数据 + // 所以无需 rejectChanges + // 拒绝之前对表格的编辑,因为接下来就要重新加载数据 + //store.rejectChanges(); + + // 重新加载数据前清空之前的改变 + //this.f_newAddedRows = []; + //this.f_deletedRows = []; + + store.loadData(datas); + + + if (this.f_cellEditing) { + this.f_cellEditing.cancelEdit(); + store.commitChanges(); + this.f_initRecordIDs(); + } + }, + + // 初始化所有记录的ID列表 + f_initRecordIDs: function () { + var $this = this; + this.f_recordIDs = []; + this.getStore().each(function (record, index) { + $this.f_recordIDs.push(record.id); + }); + }, + + // 展开所有的行扩展列 + f_expandAllRows: function () { + var expander = this.getPlugin(this.id + '_rowexpander'); + if (expander) { + var store = this.getStore(); + for (var i = 0, count = store.getCount() ; i < count; i++) { + var record = store.getAt(i); + if (!expander.recordsExpanded[record.internalId]) { + expander.toggleRow(i, record); + } + } + } + }, + + // 隐藏所有的行扩展列 + f_collapseAllRows: function () { + var expander = this.getPlugin(this.id + '_rowexpander'); + if (expander) { + var store = this.getStore(); + for (var i = 0, count = store.getCount() ; i < count; i++) { + var record = store.getAt(i); + if (expander.recordsExpanded[record.internalId]) { + expander.toggleRow(i, record); + } + } + } + }, + + // http://evilcroco.name/2010/10/making-extjs-grid-content-selectable/ + // IE下允许选中表格中的文本 + /* + f_enableTextSelection: function () { + var elems = Ext.DomQuery.select("div[unselectable=on]", this.el.dom); + for (var i = 0, len = elems.length; i < len; i++) { + Ext.get(elems[i]).set({ 'unselectable': 'off' }).removeCls('x-unselectable'); + } + }, + */ + + // 获取选中的行数,或者单元格数(单元格编辑模式) + f_getSelectedCount: function () { + var selectedCount = 0; + var sm = this.getSelectionModel(); + if (sm.hasSelection()) { + if (sm.getCount) { + selectedCount = sm.getCount(); + } else { + // 单元格编辑模式,只可能选中一个单元格 + selectedCount = 1; + } + } + return selectedCount; + }, + + + f_clearSelections: function () { + var me = this; + var sm = me.getSelectionModel(); + + sm.deselectAll(true); + }, + + // 选中某些行 + f_selectRows: function (rows) { + var me = this; + rows = rows || me.f_state['SelectedRowIDArray'] || []; + + var sm = me.getSelectionModel(); + var store = me.getStore(); + + // 如果传入 rows=[],则需要先清空全部选中行 + sm.deselectAll(true); + if (rows.length) { + Ext.Array.each(rows, function (row, index) { + // select( records, [keepExisting], [suppressEvent] ) + // 有可能存在指定的行找不到的情况 + var rowInstance = store.getById(row); + if (rowInstance) { + sm.select(rowInstance, true, true); + } + }); + } + }, + + // 选中全部行 + f_selectAllRows: function () { + var sm = this.getSelectionModel(); + if (sm.selectAll) { + sm.selectAll(true); + } + }, + + // 获取选中的行 + f_getSelectedRows: function () { + var me = this, selectedRows = []; + + var sm = me.getSelectionModel(); + if (sm.getSelection) { + var selection = sm.getSelection(); + var store = me.getStore(); + + Ext.Array.each(selection, function (record, index) { + // 晕倒:新增行的 record.getId() 居然为 undedined,没办法! + selectedRows.push(record.getId()); + }); + } + + return selectedRows; + }, + + + // 选中单元格(AllowCellEditing) + f_selectCell: function (rowId, columnId) { + var me = this; + + var cell = rowId; + if (typeof (cell) === 'undefined') { + cell = me.f_state['SelectedCell'] || []; + } else if (!Ext.isArray(cell)) { + cell = [rowId, columnId]; + } + + if (cell && cell.length === 2) { + // 支持[行索引,列索引],也支持[行Id,列Id] + var row = cell[0]; + var column = cell[1]; + + // 如果未定义,则直接返回 + if (!row || !column) { + return; + } + + if (typeof (row) === 'string') { + row = me.f_getRow(row); + } + + if (typeof (column) === 'string') { + column = me.f_getColumn(column); + } + + var sm = me.getSelectionModel(); + sm.setCurrentPosition({ + row: row, + column: column + }); + } + }, + + // 获取选中的单元格(AllowCellEditing) + f_getSelectedCell: function () { + var me = this, selectedCell = [], currentPos; + var sm = me.getSelectionModel(); + if (sm.getCurrentPosition) { + currentPos = sm.getCurrentPosition(); + if (currentPos) { + selectedCell = [currentPos.record.getId(), currentPos.columnHeader.id]; + } + } + return selectedCell; + }, + + + // 获取隐藏列的名称列表 + f_getHiddenColumns: function () { + var hiddens = [], columns = this.f_getColumns(); + Ext.Array.each(columns, function (column, index) { + var columnId = column.id; + + // 行扩展列需要单独处理,id属性不是 expander + if (!column.dataIndex && column.innerCls && column.innerCls.indexOf('row-expander') > 0) { + columnId = 'expander'; + + } + + if (column.isHidden()) { + hiddens.push(columnId); + } + }); + return hiddens; + }, + + // 隐藏需要隐藏的列,显示不需要隐藏的列 + f_updateColumnsHiddenStatus: function (hiddens) { + hiddens = hiddens || this.f_state['HiddenColumns'] || []; + var columns = this.f_getColumns(); + Ext.Array.each(columns, function (column, index) { + var columnId = column.id; + + // 行扩展列需要单独处理,id属性不是 expander + if (!column.dataIndex && column.innerCls && column.innerCls.indexOf('row-expander') > 0) { + columnId = 'expander'; + } + + if (Ext.Array.indexOf(hiddens, columnId) !== -1) { + column.setVisible(false); + } else { + column.setVisible(true); + } + }); + }, + + // 初始化排序列头 + f_initSortHeaders: function () { + var gridEl = Ext.get(this.id), columns = this.f_getColumns(); + + // 为所有可排序列添加手型光标 + Ext.Array.each(columns, function (item, index) { + if (item['sortable']) { + Ext.get(item.id).addCls('cursor-pointer'); + } + }); + }, + + // 设置表格标题栏的排序图标 + f_setSortIcon: function (sortColumnID, sortDirection) { + var gridEl = Ext.get(this.id), columns = this.f_getColumns(), headers = gridEl.select('.x-column-header'); + + // 清空所有可排序列的排序箭头 + headers.removeCls(['x-column-header-sort-DESC', 'x-column-header-sort-ASC']); + + // 为所有可排序列添加手型光标 + Ext.Array.each(columns, function (item, index) { + if (item['sortable']) { + Ext.get(item.id).addCls('cursor-pointer'); + } + }); + + // 设置当前列的排序箭头 + if (sortColumnID) { + Ext.get(sortColumnID).addCls('x-column-header-sort-' + sortDirection.toUpperCase()); + } + + }, + + // 获取表格列 + f_getColumns: function () { + /* + var columns = []; + var configColumns = this.getColumnModel().config; + Ext.Array.each(configColumns, function (item, index) { + // expander也属于表格列的一种类型,否则设置f_setSortIcon会出错 + if (item.id !== 'numberer' && item.id !== 'checker') { // && item.id !== 'expander' + columns.push(item); + } + }); + */ + + // columns 属性不包含行扩展列 + //return this.columns; + + // this.columnManager.columns 返回相同内容 + return this.headerCt.getGridColumns(); + }, + + // 这个方法用不到了,现在对States的更新会导致Values的改变,进而促使表格的重新加载 + /* + f_setRowStates: function (states) { + var gridEl = Ext.get(this.id), columns = this.f_getColumns(), states = states || this.f_state['f_states'] || []; + + function setCheckBoxStates(columnIndex, stateColumnIndex) { + var checkboxRows = gridEl.select('.x-grid-body .x-grid-item .x-grid-td-' + columns[columnIndex].id + ' .f-grid-checkbox'); + checkboxRows.each(function (row, rows, index) { + if (states[index][stateColumnIndex]) { + if (row.hasCls('box-grid-checkbox-unchecked-disabled')) { + row.removeCls('box-grid-checkbox-unchecked-disabled'); + } else { + row.removeCls('box-grid-checkbox-unchecked'); + } + } else { + if (row.hasCls('box-grid-checkbox-disabled')) { + row.addCls('box-grid-checkbox-unchecked-disabled') + } else { + row.addCls('box-grid-checkbox-unchecked') + } + } + }); + } + + var stateColumnIndex = 0; + Ext.Array.each(columns, function (column, index) { + if (column['f_persistState']) { + if (column['f_persistStateType'] === 'checkbox') { + setCheckBoxStates(index, stateColumnIndex); + stateColumnIndex++; + } + } + }); + }, + */ + + // 获取列状态(目前只有CheckBoxField用到) + f_getStates: function () { + var gridEl = Ext.get(this.id), columns = this.f_getColumns(), states = []; + + function getCheckBoxStates(columnIndex) { + var checkboxRows = gridEl.select('.x-grid-item .x-grid-cell-' + columns[columnIndex].id + ' .f-grid-checkbox'); + var columnStates = []; + checkboxRows.each(function (row, index) { + if (row.hasCls('unchecked')) { + columnStates.push(false); + } else { + columnStates.push(true); + } + }); + return columnStates; + } + + Ext.Array.each(columns, function (column, index) { + if (column['f_persistState']) { + if (column['f_persistStateType'] === 'checkbox') { + states.push(getCheckBoxStates(index)); + } + } + }); + + // 把列状态列表转换为行状态列表,与后台数据保持一致 + var i, resolvedStates = [], rowState, rowCount; + if (states.length > 0) { + rowCount = states[0].length; + for (i = 0; i < rowCount; i++) { + rowState = []; + Ext.Array.each(states, function (state, index) { + rowState.push(state[i]); + }); + resolvedStates.push(rowState); + } + } + + return resolvedStates; + }, + + // 提交客户端改变 + f_commitChanges: function () { + + if (this.f_cellEditing) { + this.f_cellEditing.cancelEdit(); + this.getStore().commitChanges(); + this.f_initRecordIDs(); + } + + }, + + + // 仅内部使用(f_deleteSelectedRows) + f_getSelectedRowsIndex: function () { + var selectedRows = []; + var sm = this.getSelectionModel(); + if (sm.getSelection) { + var selection = sm.getSelection(); + var store = this.getStore(); + + Ext.Array.each(selection, function (record, index) { + selectedRows.push(store.indexOf(record)); + }); + } + + return selectedRows; + }, + + // 仅内部使用(f_deleteSelectedRows) + f_getSelectedCellIndex: function () { + var selectedCell = [], currentPos; + var sm = this.getSelectionModel(); + if (sm.getCurrentPosition) { + currentPos = sm.getCurrentPosition(); + if (currentPos) { + selectedCell = [currentPos.row, currentPos.columnHeader.f_columnIndex]; + } + } + return selectedCell; + }, + + // 从Store中删除选中的行(或者单元格) + f_deleteSelectedRows: function () { + var $this = this; + var store = this.getStore(); + + var sm = this.getSelectionModel(); + if (sm.getSelection) { + var rows = this.f_getSelectedRowsIndex(); + Ext.Array.each(rows, function (rowIndex, index) { + store.removeAt(rowIndex); + }); + } else if (sm.getSelectedCell) { + var selectedCell = this.f_getSelectedCellIndex(); + if (selectedCell.length) { + store.removeAt(selectedCell[0]); + } + } + }, + + f_generateNewId: function () { + var newid = 'fineui_' + F.f_objectIndex; + + F.f_objectIndex++; + + return newid; + }, + + // 添加一条新纪录 + f_addNewRecord: function (defaultObj, appendToEnd, editColumnId) { + var me = this, store = me.getStore(); + var newRecord = defaultObj; //new Ext.data.Model(defaultObj); + + + // 如果设置了 id,则 extjs 认为这不是一个 phantom(幻影),而是一个真实存在的数据,rejectChanges 就不能去除这条数据了 + /* + // 自动生成ID + if(typeof(newRecord.__id) === 'undefined') { + newRecord.__id = me.f_generateNewId(); + } + */ + + // 清空当前选中的单元格 + me.getSelectionModel().setCurrentPosition(); + + + // 取消正在编辑 + me.f_cellEditing.cancelEdit(); + + + + var newAddedRecords; + //var rowIndex = 0; + if (appendToEnd) { + newAddedRecords = store.add(newRecord); + //rowIndex = store.getCount() - 1; + } else { + newAddedRecords = store.insert(0, newRecord); + //rowIndex = 0; + } + + var newAddedRecord = newAddedRecords[0]; + + + // phantom: True when the record does not yet exist in a server-side database (see setDirty). Any record which has a real database pk set as its id property is NOT a phantom -- it's real. + // 如果设置了 id 属性,则 extjs 认为这不是一个 phantom(幻影),而是一个真实存在的数据,然后通过 getStore().getModifiedRecords() 就得不到这条记录了。 + // 所以需要设置 setDirty + //newAddedRecord.setDirty(true); + + var column; + if (typeof (editColumnId) === 'undefined') { + column = me.f_firstEditableColumn(); + } else { + column = me.f_getColumn(editColumnId); + } + + me.f_cellEditing.startEdit(newAddedRecord, column); + }, + + + f_startEdit: function (rowId, columnId) { + var me = this; + + me.f_cellEditing.startEdit(me.f_getRow(rowId), me.f_getColumn(columnId)); + }, + + //// 获取新增的行索引(在修改后的列表中) + //f_getNewAddedRows: function () { + // var $this = this; + // var newAddedRows = []; + // this.getStore().each(function (record, index) { + // if (Ext.Array.indexOf($this.f_recordIDs, record.id) < 0) { + // newAddedRows.push(index); + // } + // }); + // return newAddedRows; + //}, + + /* + // 获取删除的行索引(在原始的列表中) + f_getDeletedRows: function () { + var me = this, currentRecordIDs = [], deletedRows = []; + me.getStore().each(function (record, index) { + currentRecordIDs.push(record.id); + }); + + // 快速判断是否存在行被删除的情况 + if (currentRecordIDs.join('') === me.f_recordIDs.join('')) { + return []; // 没有行被删除 + } + + + // 内存分页,特殊处理 + var originalIndexPlus = 0; + var pagingBar = me.f_getPaging(); + if (pagingBar && !pagingBar.f_databasePaging) { + originalIndexPlus = pagingBar.f_pageIndex * pagingBar.f_pageSize; + } + + + Ext.Array.each(me.f_recordIDs, function (recordID, index) { + if (Ext.Array.indexOf(currentRecordIDs, recordID) < 0) { + //deletedRows.push(index + originalIndexPlus); + deletedRows.push({ + index: -1, + originalIndex: index + originalIndexPlus, + id: recordID, + status: 'deleted' + }); + } + }); + return deletedRows; + }, + */ + + f_firstEditableColumn: function () { + var me = this, columns = me.f_getColumns(); + + for (var i = 0, count = columns.length; i < count; i++) { + var column = columns[i]; + if (me.f_columnEditable(column)) { + return column; + } + } + + return undefined; + }, + + f_columnEditable: function (columnID) { + var me = this, columns = me.f_getColumns(); + + var column = columnID; + if (typeof (columnID) === 'string') { + column = me.f_getColumn(column); + } + + if (column && column.f_editable) { + return true; + /* + if((column.getEditor && column.getEditor()) || column.xtype === 'checkcolumn') { + return true; + } + */ + } + + return false; + }, + + + f_getColumn: function (columnID) { + var me = this, columns = me.f_getColumns(); + + for (var i = 0, count = columns.length; i < count; i++) { + var column = columns[i]; + if (column.id === columnID) { + return column; + } + } + return undefined; + }, + + f_getRow: function (rowId) { + var me = this, store = me.getStore(); + return store.getById(rowId); + }, + + f_getCellValue: function (rowId, columnId) { + var me = this; + + var row = me.f_getRow(rowId); + if (row && row.data) { + return row.data[columnId]; + } + + return undefined; + }, + + f_updateCellValue: function (rowId, columnId, newvalue) { + var me = this; + + var row = me.f_getRow(rowId); + if (row && row.set) { + row.set(columnId, newvalue); + } + }, + + + /* + // 获取用户修改的单元格值 + f_getModifiedData: function () { + var me = this, i, j, count, columns = this.f_getColumns(); + + // 内存分页,特殊处理 + var originalIndexPlus = 0; + var pagingBar = me.f_getPaging(); + if (pagingBar && !pagingBar.f_databasePaging) { + originalIndexPlus = pagingBar.f_pageIndex * pagingBar.f_pageSize; + } + + var modifiedRows = []; + var store = this.getStore(); + var modifiedRecords = store.getModifiedRecords(); + var rowIndex, rowData, newData, modifiedRecord, recordID, rowIndexOriginal; + for (i = 0, count = modifiedRecords.length; i < count; i++) { + modifiedRecord = modifiedRecords[i]; + recordID = modifiedRecord.id; + rowIndex = store.indexOf(modifiedRecord); + rowData = modifiedRecord.data; + if (rowIndex < 0) { + continue; + } + + // 本行数据在原始数据集合中的行索引 + rowIndexOriginal = Ext.Array.indexOf(this.f_recordIDs, recordID); + if (rowIndexOriginal < 0) { + var newRowData = {}; + // 删除那些不能编辑的列 + for (var columnID in rowData) { + if (this.f_columnEditable(columnID)) { + //delete rowData[columnID]; + var rowDataColumn = rowData[columnID]; + // 如果是日期对象,则转化为字符串 + if (F.util.isDate(rowDataColumn)) { + rowDataColumn = F.util.resolveGridDateToString(me.f_fields, columnID, rowDataColumn); + } + newRowData[columnID] = rowDataColumn; + } + } + // 新增数据行 + modifiedRows.push([rowIndex, -1, newRowData]); + } else { + var rowModifiedObj = {}; + for (var columnID in modifiedRecord.modified) { + if (this.f_columnEditable(columnID)) { + newData = rowData[columnID]; + // 如果是日期对象,则转化为字符串 + if (F.util.isDate(newData)) { + newData = F.util.resolveGridDateToString(me.f_fields, columnID, newData); + } + rowModifiedObj[columnID] = newData; + } + } + // 修改现有数据行 + modifiedRows.push([rowIndex, rowIndexOriginal + originalIndexPlus, rowModifiedObj]); + } + } + + // 结果按照 rowIndex 升序排序 + return modifiedRows.sort(function (a, b) { return a[0] - b[0]; }); + }, + */ + + // 获取用户修改的单元格值 + f_getModifiedData: function () { + var me = this, i, j, count, columns = me.f_getColumns(); + + // 内存分页,特殊处理 + var originalIndexPlus = 0; + var pagingBar = me.f_getPaging(); + if (pagingBar && !pagingBar.f_databasePaging) { + originalIndexPlus = pagingBar.f_pageIndex * pagingBar.f_pageSize; + } + + var modifiedRows = []; + var store = me.getStore(); + var modifiedRecords = store.getModifiedRecords(); + for (i = 0, count = modifiedRecords.length; i < count; i++) { + var modifiedRecord = modifiedRecords[i]; + var recordID = modifiedRecord.id; + var rowId = modifiedRecord.getId(); // getId() is not the same as id property + var rowIndex = store.indexOf(modifiedRecord); + var rowData = modifiedRecord.data; + if (rowIndex < 0) { + continue; + } + + // 本行数据在原始数据集合中的行索引 + var rowIndexOriginal = Ext.Array.indexOf(me.f_recordIDs, recordID); + if (rowIndexOriginal < 0) { + var newRowData = {}; + //for (var columnID in rowData) { + Ext.Object.each(rowData, function (columnID, value) { + //if (me.f_columnEditable(columnID)) { + //delete rowData[columnID]; + var column = me.f_getColumn(columnID); + if (column && (column.f_columnType === 'rendercheckfield' || column.f_columnType === 'renderfield')) { + var newData = rowData[columnID]; + // 如果是日期对象,则转化为字符串 + if (F.util.isDate(newData)) { + newData = F.util.resolveGridDateToString(me.f_fields, columnID, newData); + } + newRowData[columnID] = newData; + } + //} + }); + // 新增数据行 + //modifiedRows.push([rowIndex, -1, newRowData]); + modifiedRows.push({ + index: rowIndex, + originalIndex: -1, + id: rowId, + values: newRowData, + status: 'newadded' + }); + } else { + var rowModifiedObj = {}; + Ext.Object.each(modifiedRecord.modified, function (columnID, value) { + //for (var columnID in modifiedRecord.modified) { + // 不删除非可编辑列,比如[总成绩(不可编辑)]列不可编辑,但是可以通过代码更改 + //if (me.f_columnEditable(columnID)) { + var newData = rowData[columnID]; + // 如果是日期对象,则转化为字符串 + if (F.util.isDate(newData)) { + newData = F.util.resolveGridDateToString(me.f_fields, columnID, newData); + } + rowModifiedObj[columnID] = newData; + //} + }); + // 修改现有数据行 + //modifiedRows.push([rowIndex, rowIndexOriginal + originalIndexPlus, rowModifiedObj]); + modifiedRows.push({ + index: rowIndex, + originalIndex: rowIndexOriginal + originalIndexPlus, + id: rowId, + values: rowModifiedObj, + status: 'modified' + }); + } + } + + // 删除的行 + //modifiedRows = modifiedRows.concat(me.f_getDeletedRows()); + var removedRecords = store.getRemovedRecords(); + Ext.Array.each(removedRecords, function (record, index) { + var recordOriginalIndex = Ext.Array.indexOf(me.f_recordIDs, record.id); + modifiedRows.push({ + index: -1, + originalIndex: recordOriginalIndex + originalIndexPlus, + id: record.getId(), + status: 'deleted' + }); + }); + + // 结果按照 originalIndex 升序排序 + return modifiedRows.sort(function (a, b) { return a.originalIndex - b.originalIndex; }); + } + + }); +} + + +if (Ext.tree.Panel) { + Ext.override(Ext.tree.Panel, { + + f_loadData: function () { + var datas = this.f_state['F_Nodes']; + var nodes = this.f_tranformData(datas); + var root = this.getRootNode(); + if (root) { + root.removeAll(); + } + this.setRootNode({ + //id: this.id + '_root', + expanded: true, + children: nodes + }); + }, + + f_tranformData: function (datas) { + var that = this, i = 0, nodes = []; + for (i = 0; i < datas.length; i++) { + var data = datas[i], node = {}; + + // 0 - Text + // 1 - Leaf + // 2 - NodeID + // 3 - Enabled + // 4 - EnableCheckBox + // 5 - Checked + // 6 - Expanded + // 7 - NavigateUrl + // 8 - Target + // 9 - href + // 10 - Icon + // 11 - IconUrl + // 12 - iconUrl + // 13 - ToolTip + // 14 - OnClientClick + // 15 - EnableClickEvent + // 16 - CommandName + // 17 - CommandArgument + + // 18 - EnableCheckEvent + // 19 - EnableExpandEvent + // 20 - EnableCollapseEvent + + // 21 - CssClass + + // 22 - Nodes + node.text = data[0]; + node.leaf = !!data[1]; + node.id = data[2]; + node.disabled = !data[3]; + if (!!data[4]) { + // node.checked === undefined, no checkbox + node.checked = !!data[5]; + } + if (!data[1]) { + node.expanded = !!data[6]; + } + if (data[9]) { + node.href = data[9]; + node.hrefTarget = data[8]; + } + if (data[12]) { + node.icon = data[12]; + } + node.qtip = data[13]; + + if (data[14]) { + node.f_clientclick = data[14]; + } + node.f_enableclickevent = !!data[15]; + node.f_commandname = data[16]; + node.f_commandargument = data[17]; + + node.f_enablecheckevent = !!data[18]; + + node.f_enableexpandevent = !!data[19]; + node.f_enablecollapseevent = !!data[20]; + + if (data[21]) { + node.cls = data[21]; + } + + if (data[22] && data[22].length > 0) { + node.children = that.f_tranformData(data[22]); + } + + nodes.push(node); + } + return nodes; + }, + + f_getExpandedNodes: function (nodes) { + var i = 0, that = this, expandedNodes = []; + + for (; i < nodes.length; i++) { + var node = nodes[i]; + if (node.isExpanded()) { + expandedNodes.push(node.getId()); + } + if (node.hasChildNodes()) { + expandedNodes = expandedNodes.concat(that.f_getExpandedNodes(node.childNodes)); + } + } + + return expandedNodes; + }, + + f_getCheckedNodes: function () { + var checkedIDs = [], checkedArray = this.getChecked(); + Ext.Array.each(checkedArray, function (node, index) { + checkedIDs.push(node.getId()); + }); + return checkedIDs; + }, + + f_getSelectedNodes: function () { + var selectedNodeIDs = []; + var sm = this.getSelectionModel(); + if (sm.getSelection) { + var selection = sm.getSelection(); + + Ext.Array.each(selection, function (node, index) { + selectedNodeIDs.push(node.getId()); + }); + } + + return selectedNodeIDs; + }, + + f_selectNodes: function () { + var nodeIDs = this.f_state['SelectedNodeIDArray'] || []; + var model = this.getSelectionModel(), store = this.getStore(), nodes = [], node; + Ext.Array.each(nodeIDs, function (nodeID, index) { + node = store.getNodeById(nodeID); + if (node) { + nodes.push(node); + } + }); + model.deselectAll(true); + model.select(nodes); + } + + + }); +} + + +if (Ext.PagingToolbar) { + // We don't use this Class in current version. + Ext.override(Ext.PagingToolbar, { + + f_hideRefresh: function () { + var index = this.items.indexOf(this.refresh); + this.items.get(index - 1).hide(); + this.refresh.hide(); + } + + }); +} + + +if (Ext.tab.Panel) { + Ext.override(Ext.tab.Panel, { + + f_autoPostBackTabsContains: function (tabId) { + var tabs = this.f_state['F_AutoPostBackTabs']; + return tabs.indexOf(tabId) !== -1; + }, + + f_setActiveTab: function () { + var tabIndex = this.f_state['ActiveTabIndex']; + this.setActiveTab(tabIndex); + }, + + f_getActiveTabIndex: function () { + return this.items.indexOf(this.getActiveTab()); + }, + + /* + activateNextTab: function (c) { + if (c == this.activeTab) { + var next = this.stack.next(); + if (next) { + this.setActiveTab(next); + } + if (next = this.items.find(function (t) { return t.tabEl.style.display !== 'none'; })) { + // Find the first visible tab and set it active tab. + this.setActiveTab(next); + } else { + this.setActiveTab(null); + } + } + }, + */ + + hideTab: function (tabId) { + var tab = F(tabId).tab; + if (tab) { + tab.hide(); + } + }, + + showTab: function (tabId) { + var tab = F(tabId).tab; + if (tab) { + tab.show(); + } + }, + + addTab: function (id, url, title, closable) { + var options = { + 'cls': 'f-tab' + }, tab; + if (typeof (id) === 'string') { + Ext.apply(options, { + 'id': id, + 'title': title, + 'closable': closable, + 'url': url + }); + } else { + // 如果id不是字符串,则id为对象并且只有一个参数 + Ext.apply(options, id); + } + + tab = this.getTab(options.id); + if (!tab) { + Ext.apply(options, { + 'f_dynamic_added_tab': true, + 'html': '", IFrameUrl, IFrameName)); + //} + + #endregion + + } + + } + + /// + /// 渲染控件的结束标签 + /// + /// 输出流 + protected override void RenderEndTag(HtmlTextWriter writer) + { + + if (RenderChildrenAsContent) + { + writer.Write(""); + } + + + base.RenderEndTag(writer); + } + #endregion + + #region CreateChildControls + + /// + /// 创建子控件 + /// + protected override void CreateChildControls() + { + base.CreateChildControls(); + + if (Content != null) + { + WebControl ctrl = new WebControl(HtmlTextWriterTag.Div); + ctrl.ID = "Content"; + Content.InstantiateIn(ctrl); + + Controls.Add(ctrl); + } + } + + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (EnableIFrame) + { + if (PropertyModified("IFrameUrl")) + { + sb.AppendFormat("F.wnd.updateIFrameNode({0},{1});", XID, JsHelper.Enquote(IFrameUrl)); + } + } + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (EnableFrame) + { + OB.AddProperty("frame", true); + } + + + #region Items + + // 如果是 ContentPanel, 启用 IFrame 或者包含 Content, 则不生成 items + if (RenderChildrenAsContent || EnableIFrame || (Content != null)) + { + if (RenderChildrenAsContent || (Content != null)) + { + OB.AddProperty("contentEl", String.Format("{0}", ContentID)); + + } + } + else + { + if (Items.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (ControlBase item in Items) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + } + + OB.AddProperty("items", ab.ToString(), true); + } + } + + #endregion + + #region Toolbars + + //JsArrayBuilder dockItems = new JsArrayBuilder(); + //foreach (Toolbar bar in Toolbars) + //{ + // dockItems.AddProperty(bar.XID, true); + //} + + //if (this is Grid) + //{ + // Grid grid = this as Grid; + // if (grid.AllowPaging) + // { + // dockItems.AddProperty(grid.Render_PagingID, true); + // } + //} + + Dictionary bars = new Dictionary(); + foreach (Toolbar bar in Toolbars) + { + string barPosition = ToolbarPositionHelper.GetExtName(bar.Position); + + if (!bars.ContainsKey(barPosition)) + { + bars[barPosition] = new JsArrayBuilder(); + } + bars[barPosition].AddProperty(bar.XID, true); + } + + // 将底部工具栏的顺序反转 + if (bars.ContainsKey("bottom")) + { + bars["bottom"].Reverse(); + } + // 表格的分页工具栏 + if (this is Grid) + { + Grid grid = this as Grid; + if (grid.AllowPaging) + { + if (!bars.ContainsKey("bottom")) + { + bars["bottom"] = new JsArrayBuilder(); + } + + bars["bottom"].AddProperty(grid.Render_PagingID, true); + } + } + + + JsArrayBuilder dockItems = new JsArrayBuilder(); + foreach (string barPosition in bars.Keys) + { + foreach (string barItem in bars[barPosition].Properties) + { + dockItems.AddProperty(barItem, true); + } + } + OB.AddProperty("dockedItems", dockItems); + + + #endregion + + #region BodyStyle/ShowBorder + + string bodyStyleStr = BodyStyle; + if (!bodyStyleStr.Contains("padding")) + { + if (!String.IsNullOrEmpty(BodyPadding)) + { + bodyStyleStr += String.Format("padding:{0};", StyleUtil.GetMarginPaddingStyle(BodyPadding)); + } + } + + //if (EnableBackgroundColor) + //{ + // if (!bodyStyleStr.Contains("background-color")) + // { + // string backgroundColorStyleStr = GlobalConfig.GetDefaultBackgroundColor(); + // if (!String.IsNullOrEmpty(backgroundColorStyleStr)) + // { + // bodyStyleStr += String.Format("background-color:{0};", backgroundColorStyleStr); + // } + // } + //} + + OB.AddProperty("bodyStyle", bodyStyleStr); + + OB.AddProperty("border", ShowBorder); + + + #endregion + + #region MinHeight/MinHeight + + if (MinHeight != Unit.Empty) + { + OB.AddProperty("minHeight", MinHeight.Value); + } + if (MinWidth != Unit.Empty) + { + OB.AddProperty("minWidth", MinWidth.Value); + } + if (MaxHeight != Unit.Empty) + { + OB.AddProperty("maxHeight", MaxHeight.Value); + } + if (MaxWidth != Unit.Empty) + { + OB.AddProperty("maxWidth", MaxWidth.Value); + } + + + //// 对于Panel,如果宽度/高度没有定义 + //if (Width == Unit.Empty && AutoWidth) + //{ + // OB.AddProperty("autoWidth", true); + //} + + //if (Height == Unit.Empty && AutoHeight) + //{ + // OB.AddProperty("autoHeight", true); + //} + + + //// 如果父控件是容器控件(不是ContentPanel),并且Layout != LayoutType.Container, + //// 则设置AutoWidth/AutoHeight都为false + //if (Parent is PanelBase) + //{ + // PanelBase parent = Parent as PanelBase; + // if (!(parent is ContentPanel) && parent.Layout != Layout.Container) + // { + // OB.RemoveProperty("autoHeight"); + // OB.RemoveProperty("autoWidth"); + // } + //} + + + + if (AutoScroll) + { + OB.AddProperty("autoScroll", true); + } + + + #region old code + //// 如果是 PageLayout 中的Panel,不能设置AutoWidth + //if (Parent is PageLayout) + //{ + // // region + // if (Region != Region_Default) OB.AddProperty(OptionName.Region, RegionTypeName.GetName(Region.Value)); + //} + //else + //{ + // // 对于Panel,如果宽度/高度没有定义,则使用自动宽度和高度 + // if (Width == Unit.Empty) + // { + // OB.AddProperty(OptionName.AutoWidth, true); + // } + + // if (Height == Unit.Empty) + // { + // OB.AddProperty(OptionName.AutoHeight, true); + // } + + //} + + //// 如果父控件是容器控件,并且Layout=Fit,则设置AutoWidth/AutoHeight都为false + //if (Parent is PanelBase) + //{ + // PanelBase parentPanel = Parent as PanelBase; + // if (parentPanel.Layout == LayoutType.Fit + // || parentPanel.Layout == LayoutType.Anchor + // || parentPanel.Layout == LayoutType.Border) + // { + // OB.RemoveProperty(OptionName.AutoHeight); + // OB.RemoveProperty(OptionName.AutoWidth); + // } + + //} + + #endregion + + #endregion + + #region EnableIFrame + + if (EnableIFrame) + { + #region old code + + //string iframeJsContent = String.Empty; + + //string frameUrl = ResolveUrl(IFrameUrl); + //JsObjectBuilder iframeBuilder = new JsObjectBuilder(); + //if (IFrameDelayLoad) + //{ + // iframeBuilder.AddProperty(OptionName.Src, "#"); + //} + //else + //{ + // iframeBuilder.AddProperty(OptionName.Src, frameUrl); + //} + //iframeBuilder.AddProperty(OptionName.LoadMask, false); + //iframeJsContent += String.Format("var {0}=new Ext.ux.ManagedIFrame('{0}',{1});", IFrameID, iframeBuilder.ToString()); + + //if (IFrameDelayLoad) + //{ + // iframeJsContent += String.Format("{0}_url='{1}';", IFrameID, frameUrl); + //} + + //iframeJsContent += "\r\n"; + + //AddStartupScript(this, iframeJsContent); + + #endregion + + // 注意: + // 如下依附于现有对象的属性名称的定义规则:x_property1 + // 存储于当前对象实例中 + OB.AddProperty("f_iframe", true); + OB.AddProperty("f_iframe_url", IFrameUrl); + OB.AddProperty("f_iframe_name", IFrameName); + + // 如果定义了IFrameUrl,则直接写到页面中,否则先缓存到此对象中 + if (!String.IsNullOrEmpty(IFrameUrl)) + { + //_writeIframeToHtmlDocument = true; + OB.AddProperty("f_iframe_loaded", true); + // 直接添加iframe属性 + OB.AddProperty("html", String.Format("", IFrameUrl, IFrameName)); + } + else + { + //_writeIframeToHtmlDocument = false; + OB.AddProperty("f_iframe_loaded", false); + } + + #region old code + + //// If current panel is Tab, then process the IFrameDelayLoad property. + //Tab tab = this as Tab; + //if (tab != null && tab.IFrameDelayLoad) + //{ + // // 如果是Tab,并且此Tab不是激活的,则不添加iframe + // //_writeIframeToHtmlDocument = false; + // OB.AddProperty("box_property_iframe_loaded", false); + //} + //else + //{ + // // 如果定义了IFrameUrl,则直接写到页面中,否则先缓存到此对象中 + // if (!String.IsNullOrEmpty(IFrameUrl)) + // { + // //_writeIframeToHtmlDocument = true; + // OB.AddProperty("box_property_iframe_loaded", true); + // // 直接添加iframe属性 + // OB.AddProperty("html", String.Format("", IFrameUrl, IFrameName)); + // } + // else + // { + // //_writeIframeToHtmlDocument = false; + // OB.AddProperty("box_property_iframe_loaded", false); + // } + //} + + #endregion + } + + #endregion + + #region RoundBorder + + //if (RoundBorder) OB.AddProperty(OptionName.Frame, true); + + #endregion + + #region oldcode + + //if (EnableLargeHeader) + //{ + // OB.AddProperty("cls", "f-panel-big-header"); + //} + + + //OB.AddProperty("animCollapse", false); + + #endregion + + #region ContentEl + + //string finallyScript = String.Empty; + + if (RenderChildrenAsContent) + { + OB.AddProperty("contentEl", ContentID); + + // 在页面元素渲染完成后,才显示容器控件的内容 + //string renderScript = String.Format("Ext.get('{0}').show();", ContentID); + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript), true); + + //string beforerenderScript = String.Format("Ext.get('{0}').setStyle('display','');", ChildrenContentID); + //OB.Listeners.AddProperty("beforerender", "function(component){" + beforerenderScript + "}", true); + + + // 这一段的逻辑(2008-9-1): + // 如果是页面第一次加载 + 此Panel在Tab中 + 此Tab不是当前激活Tab + 此Tab的TabStrip启用了延迟加载 + // 那么在页面加载完毕后,把此Panel给隐藏掉,等此Panel渲染到页面中时再显示出来 + + //Tab tab = ControlUtil.FindParentControl(this, typeof(Tab)) as Tab; + //if (tab != null) + //{ + // TabStrip tabStrip = tab.Parent as TabStrip; + // if (tabStrip.EnableDeferredRender && tabStrip.Tabs[tabStrip.ActiveTabIndex] != tab) + // { + // // 页面第一次加载时,在显示(控件的render事件)之前要先隐藏 + // AddStartupAbsoluteScript(String.Format("Ext.get('{0}').setStyle('display','none');", ContentID)); + // } + //} + + } + + #endregion + } + + #region oldcode + + //protected void AddItemsToOB() + //{ + // AddItemsToOB(Controls); + //} + + + + ///// + ///// 将controls添加到此控件的Items属性 + ///// + ///// + //protected void AddItemsToOB(ControlCollection controls) + //{ + // // 运行到这里,Controls里全部是ControlBase类型了(在AddParsedSubObject中过滤的)。 + // if (controls.Count > 0) + // { + // JsArrayBuilder ab = new JsArrayBuilder(); + // foreach (Control item in controls) + // { + // // 再次检查是否ControlBase,并且只有Visible时才添加 + // // 还有一个例外情况,Window控件不作为任何控件的子控件,Window的RenderImmediately一定为true + // if (item is ControlBase && item.Visible && !(item is Window)) + // { + // string itemJSId = String.Format("{0}", (item as ControlBase).ClientJavascriptID); + // if (item is Toolbar) + // { + // Toolbar bar = item as Toolbar; + // if (bar.Position == ToolbarPosition.Top) + // { + // OB.AddProperty(OptionName.Tbar, itemJSId, true); + // } + // else + // { + // OB.AddProperty(OptionName.Bbar, itemJSId, true); + // } + // } + // else + // { + // ab.AddProperty(itemJSId, true); + // } + // } + // } + + // // 有内容时才添加items集合 + // if (ab.Count > 0) + // { + // OB.AddProperty(OptionName.Items, ab.ToString(), true); + // } + // } + //} + + + + #endregion + + #endregion + + #region ResolveIFrameUrl + + internal string ResolveIFrameUrl(string url) + { + if (String.IsNullOrEmpty(url)) + { + return String.Empty; + } + + if (url == "#" || url == "about:blank") + { + return url; + } + + //&& IFrameUrl != "#" && IFrameUrl != "about:blank" + + // 可能会通过的方式传递js参数 + if (url.Contains("<")) + { + url = url.Replace("<", "<"); + } + if (url.Contains(">")) + { + url = url.Replace(">", ">"); + } + + + // 这个在 v1.2.9 以后就不需要了 + //// 加上后缀 + //if (this is Window) + //{ + // if (!url.Contains("box_parent_client_id=")) + // { + // if (!url.Contains("?")) + // { + // url += "?"; + // } + // else + // { + // url += "&"; + // } + // url += "box_parent_client_id=" + ClientID; + // } + //} + + + // 转换为客户端Url + url = ResolveUrl(url); + + return url; + } + + #endregion + + #region RefreshIFrame GetRefreshIFrameReference + + /// + /// 刷新面板中的IFrame页面 + /// + public void RefreshIFrame() + { + PageContext.RegisterStartupScript(GetRefreshIFrameReference()); + } + + /// + /// 获取刷新面板中IFrame页面的客户端脚本 + /// + /// 客户端脚本 + public string GetRefreshIFrameReference() + { + return String.Format("{0}.body.query('iframe')[0].contentWindow.location.reload();", ScriptID); + } + + #endregion + + #region Reset + + /// + /// 重置面板中所有字段 + /// + public virtual void Reset() + { + PageContext.RegisterStartupScript(GetResetReference()); + } + + /// + /// 获取重置面板中所有字段的客户端脚本 + /// + /// + public virtual string GetResetReference() + { + return String.Format("{0}.f_reset();", ScriptID); + } + + #endregion + + #region GetClearDirtyReference + + /// + /// 清空面板内表单字段的改变状态 + /// + /// 客户端脚本 + public string GetClearDirtyReference() + { + return String.Format("{0}.f_clearDirty();", ScriptID); + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Container/Container.cs b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Container/Container.cs new file mode 100644 index 0000000..92c2fea --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Container/Container.cs @@ -0,0 +1,181 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Container.cs + * CreatedOn: 2008-04-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// + /// 容器控件基类(抽象类) + /// + public abstract class Container : BoxComponent + { + #region Constructor + + /// + /// 构造函数 + /// + public Container() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Unsupported Properties + + /// + /// 不支持此属性 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool FocusOnPageLoad + { + get + { + return false; + } + } + + #endregion + + #region Layout + + internal override bool WrapperNodeInlineBlock + { + get + { + return false; + } + } + + + /// + /// 布局类型 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Container)] + [Description("布局类型")] + public virtual Layout Layout + { + get + { + object obj = FState["Layout"]; + return obj == null ? Layout.Container : (Layout)obj; + } + set + { + FState["Layout"] = value; + } + } + + #endregion + + #region OnPreRender + + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (Layout != Layout.Container) + { + //OB.AddProperty("layout", LayoutHelper.GetName(Layout)); + string layoutName = LayoutHelper.GetName(Layout); + + JsObjectBuilder layoutConfigOB = new JsObjectBuilder(); + if (Layout == Layout.Table) + { + layoutConfigOB.AddProperty("columns", TableConfigColumns); + + } + else if (Layout == Layout.HBox || Layout == Layout.VBox) + { + layoutConfigOB.AddProperty("align", BoxLayoutAlignHelper.GetName(BoxConfigAlign, Layout)); + + layoutConfigOB.AddProperty("pack", BoxLayoutPositionHelper.GetName(BoxConfigPosition)); + + + if (BoxConfigPadding != "0") + { + layoutConfigOB.AddProperty("padding", BoxConfigPadding); + } + + // extjs 6.0: Another important change to Component is the removal of the margins config, as well as the defaultMargins config of all container layouts. The margin config is now the only way to configure margins on Components. Applications that previously used margins should change to using margin instead. Applications that used defaultMargins on the layout should instead configure a margin in the Container’s defaults block. + if (BoxConfigChildMargin != "0") + { + //layoutConfigOB.AddProperty("defaultMargins", BoxConfigChildMargin); + JsObjectBuilder defaults = new JsObjectBuilder(); + defaults.AddProperty("margin", BoxConfigChildMargin); + OB.AddProperty("defaults", defaults); + } + } + + if (layoutConfigOB.Count > 0) + { + layoutConfigOB.AddProperty("type", layoutName); + + OB.AddProperty("layout", layoutConfigOB); + } + else + { + OB.AddProperty("layout", layoutName); + } + + } + + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field.TextField.RealTextField/RealTextField.cs b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field.TextField.RealTextField/RealTextField.cs new file mode 100644 index 0000000..c4d869d --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field.TextField.RealTextField/RealTextField.cs @@ -0,0 +1,407 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: RealTextField.cs + * CreatedOn: 2008-07-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing.Design; + +namespace FineUI +{ + /// + /// 表单文本输入框字段基类(抽象类) + /// + public abstract class RealTextField : TextField, IPostBackDataHandler, IPostBackEventHandler + { + #region Constructor + + /// + /// 构造函数 + /// + public RealTextField() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Text"); + + //AddGzippedAjaxProperties("Text"); + } + + #endregion + + #region EmptyText + + /// + /// 文本框为空时显示的文本 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本框为空时显示的文本")] + public virtual string EmptyText + { + get + { + object obj = FState["EmptyText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["EmptyText"] = value; + } + } + + + /// + /// [AJAX属性]文本 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// + /// 是否自动回发(文本值改变) + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发(文本值改变)")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + /// + /// 启用失去焦点事件 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用失去焦点事件")] + public bool EnableBlurEvent + { + get + { + object obj = FState["EnableBlurEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableBlurEvent"] = value; + } + } + + ///// + ///// Enable server validate, trigger the Validate event. + ///// + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("Enable server validate, trigger the Validate event.")] + //public bool EnableServerValidate + //{ + // get + // { + // object obj = BoxState["EnableServerValidate"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableServerValidate"] = value; + // } + //} + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Text")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + } + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (!String.IsNullOrEmpty(EmptyText)) + { + OB.AddProperty("emptyText", EmptyText); + } + + if (!String.IsNullOrEmpty(Text)) + { + OB.AddProperty("value", Text); + } + + if (AutoPostBack) + { + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(GetPostBackEventReference()), true); + AddListener("change", GetPostBackEventReference()); + + #region old code + //// First remove change event, because we has already register this event in super class - Field. + //OB.Listeners.RemoveProperty("change"); + + //string changeScript = "F.util.setPageStateChanged();"; + //changeScript += GetPostBackEventReference(); + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(changeScript), true); + + //else if (EnableServerValidate) + //{ + // // The Validate event will not be triggered when the filed fail to pass the client side validte. + // //changeScript += String.Format("if(X.{0}.isValid()){{{1}}}", ClientJavascriptID, GetPostBackEventReference("Validate")); + //} + //else if (AutoPostBack && EnableServerValidate) + //{ + // changeScript += GetPostBackEventReference("#VALIDATE#").Replace("'#VALIDATE#'", String.Format("{0}.isValid() ? 'Validate' : ''")); + //} + #endregion + } + + if (EnableBlurEvent) + { + //OB.Listeners.AddProperty("blur", JsHelper.GetFunction(GetPostBackEventReference("Blur")), true); + AddListener("blur", GetPostBackEventReference("Blur")); + } + + //if (EnableServerValidate) + //{ + // OB.Listeners.AddProperty("blur", JsHelper.GetFunctionWrapper(GetPostBackEventReference("Validate")), true); + //} + } + + #endregion + + #region IPostBackDataHandler Members + + /// + /// 处理回发数据 + /// + /// 回发数据键 + /// 回发数据集 + /// 回发数据是否改变 + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + string postValue = postCollection[UniqueID]; + + // 只有启用表单控件时,才判断Text是否改变 + // 对于TextBox,如果禁用了(disabled="disabled")则postValue == null,也就是说此表单字段不会提交到服务器(这是浏览器行为)。 + if (Enabled) + { + // If post value is empty, null or equals to the EmptyText property, we can consider it to be String.Empty. + if (String.IsNullOrEmpty(postValue) || postValue == EmptyText) + { + postValue = String.Empty; + } + + if (Text != postValue) + { + Text = postValue; + FState.BackupPostDataProperty("Text"); + return true; + } + } + return false; + } + + /// + /// 触发回发数据改变事件 + /// + public virtual void RaisePostDataChangedEvent() + { + OnTextChanged(EventArgs.Empty); + } + + #endregion + + #region OnTextChanged + + private object _handlerKey = new object(); + + /// + /// 文本改变事件(需要启用AutoPostBack) + /// + [Category(CategoryName.ACTION)] + [Description("文本改变事件(需要启用AutoPostBack)")] + public virtual event EventHandler TextChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// + /// 触发文本改变事件 + /// + /// 事件参数 + protected virtual void OnTextChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnBlur + + /// + /// 处理回发事件 + /// + /// 事件参数 + public virtual void RaisePostBackEvent(string eventArgument) + { + if (eventArgument == "Blur") + { + OnBlur(EventArgs.Empty); + } + } + + + private object _handlerKeyBlur = new object(); + + /// + /// 失去焦点事件(需要启用EnableBlurEvent) + /// + [Category(CategoryName.ACTION)] + [Description("失去焦点事件(需要启用EnableBlurEvent)")] + public virtual event EventHandler Blur + { + add + { + Events.AddHandler(_handlerKeyBlur, value); + } + remove + { + Events.RemoveHandler(_handlerKeyBlur, value); + } + } + + /// + /// 触发失去焦点事件 + /// + /// 事件参数 + protected virtual void OnBlur(EventArgs e) + { + EventHandler handler = Events[_handlerKeyBlur] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region old code + + //#region OnValidate + + ///// + ///// Form field server validate event. + ///// + //[Category(CategoryName.ACTION)] + //[Description("Form field server validate event.")] + //public virtual event EventHandler Validate + //{ + // add + // { + // Events.AddHandler(validateHandlerKey, value); + // } + // remove + // { + // Events.RemoveHandler(validateHandlerKey, value); + // } + //} + + //private object validateHandlerKey = new object(); + + //public virtual void OnValidate(EventArgs e) + //{ + // EventHandler handler = Events[validateHandlerKey] as EventHandler; + + // if (handler != null) + // { + // handler(this, e); + // } + //} + + //#endregion + + //#region IPostBackEventHandler + + //public void RaisePostBackEvent(string eventArgument) + //{ + // if (eventArgument == "Validate") + // { + // OnValidate(EventArgs.Empty); + // } + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field.TextField/TextField.cs b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field.TextField/TextField.cs new file mode 100644 index 0000000..05ecb60 --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field.TextField/TextField.cs @@ -0,0 +1,544 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: TextField.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing.Design; + +namespace FineUI +{ + /// + /// 表单文本输入框字段基类(抽象类) + /// + public abstract class TextField : Field + { + #region Constructor + + /// + /// 构造函数 + /// + public TextField() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Validate Properties + + /// + /// 是否必填项 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("是否必填项")] + public bool Required + { + get + { + object obj = FState["Required"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Required"] = value; + } + } + + /// + /// 为空时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("为空时提示信息")] + public string RequiredMessage + { + get + { + object obj = FState["RequiredMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RequiredMessage"] = value; + } + } + + /// + /// 最大长度 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大长度")] + public int? MaxLength + { + get + { + object obj = FState["MaxLength"]; + return obj == null ? null : (int?)obj; + } + set + { + FState["MaxLength"] = value; + } + } + + /// + /// 超过最大长度时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("超过最大长度时提示信息")] + public string MaxLengthMessage + { + get + { + object obj = FState["MaxLengthMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["MaxLengthMessage"] = value; + } + } + + + /// + /// 最小长度 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小长度")] + public int? MinLength + { + get + { + object obj = FState["MinLength"]; + return obj == null ? null : (int?)obj; + } + set + { + FState["MinLength"] = value; + } + } + + + /// + /// 少于最小长度时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("少于最小长度时提示信息")] + public string MinLengthMessage + { + get + { + object obj = FState["MinLengthMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["MinLengthMessage"] = value; + } + } + + /// + /// RegexPattern + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(RegexPattern.None)] + [Description("正则表达式常用类型")] + public RegexPattern RegexPattern + { + get + { + object obj = FState["RegexPattern"]; + return obj == null ? RegexPattern.None : (RegexPattern)obj; + } + set + { + FState["RegexPattern"] = value; + } + } + + + /// + /// 正则表达式 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("正则表达式")] + [Editor("System.Web.UI.Design.WebControls.RegexTypeEditor", typeof(UITypeEditor))] + public string Regex + { + get + { + object obj = FState["Regex"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Regex"] = value; + } + } + + /// + /// 不满足正则表达式时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("不满足正则表达式时提示信息")] + public string RegexMessage + { + get + { + object obj = FState["RegexMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RegexMessage"] = value; + } + } + + + + /// + /// 正则表达式是否忽略大小写 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(true)] + [Description("正则表达式是否忽略大小写")] + public bool RegexIgnoreCase + { + get + { + object obj = FState["RegexIgnoreCase"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["RegexIgnoreCase"] = value; + } + } + + #endregion + + #region Compare + + /// + /// 需要比较的控件ID + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("需要比较的控件ID")] + public string CompareControl + { + get + { + object obj = FState["CompareControl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["CompareControl"] = value; + } + } + + + + /// + /// 需要比较的值 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("需要比较的值")] + public string CompareValue + { + get + { + object obj = FState["CompareValue"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["CompareValue"] = value; + } + } + + + /// + /// 比较操作符 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(Operator.Equal)] + [Description("比较操作符")] + public Operator CompareOperator + { + get + { + object obj = FState["CompareOperator"]; + return obj == null ? Operator.Equal : (Operator)obj; + } + set + { + FState["CompareOperator"] = value; + } + } + + /// + /// 比较的类型 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue(CompareType.String)] + [Description("比较的类型")] + public CompareType CompareType + { + get + { + object obj = FState["CompareType"]; + return obj == null ? CompareType.String : (CompareType)obj; + } + set + { + FState["CompareType"] = value; + } + } + + /// + /// 不满足比较条件时提示信息 + /// + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("不满足比较条件时提示信息")] + public string CompareMessage + { + get + { + object obj = FState["CompareMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["CompareMessage"] = value; + } + } + + #endregion + + #region NextFocusControl + + /// + /// 下一步获得焦点的控件(响应回车事件) + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("下一步获得焦点的控件(响应回车事件)")] + public virtual string NextFocusControl + { + get + { + object obj = FState["NextFocusControl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["NextFocusControl"] = value; + } + } + + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region validate properties + + if (Required) + { + OB.AddProperty("allowBlank", false); + if (!String.IsNullOrEmpty(RequiredMessage)) + { + OB.AddProperty("blankText", RequiredMessage); + } + } + + if (MaxLength != null) + { + OB.AddProperty("maxLength", MaxLength.Value); + if (!String.IsNullOrEmpty(MaxLengthMessage)) + { + OB.AddProperty("maxLengthText", MaxLengthMessage); + } + } + if (MinLength != null) + { + OB.AddProperty("minLength", MinLength.Value); + if (!String.IsNullOrEmpty(MinLengthMessage)) + { + OB.AddProperty("minLengthText", MinLengthMessage); + } + } + + // Calculate regex expression via RegexPattern and Regex + string regexStr = String.Empty; + if (RegexPattern != RegexPattern.None) + { + regexStr = RegexPatternHelper.GetRegexValue(RegexPattern); + } + else if (!String.IsNullOrEmpty(Regex)) + { + regexStr = Regex; + } + + if (!String.IsNullOrEmpty(regexStr)) + { + string ignoreCaseStr = String.Empty; + if (RegexIgnoreCase) + { + ignoreCaseStr = ",'i'"; + } + + OB.AddProperty("regex", String.Format("new RegExp({0}{1})", JsHelper.Enquote(regexStr), ignoreCaseStr), true); + if (!String.IsNullOrEmpty(RegexMessage)) + { + OB.AddProperty("regexText", RegexMessage); + } + } + + #endregion + + //OB.AddProperty("enableKeyEvents", true); + + #region NextFocusControl + + if (!String.IsNullOrEmpty(NextFocusControl)) + { + ControlBase nextControl = ControlUtil.FindControlInUserControlOrPage(this, NextFocusControl) as ControlBase; + + if (nextControl != null) + { + //// true to enable the proxying of key events for the HTML input field (defaults to false) + //OB.AddProperty("enableKeyEvents", true); + // Fires when any key related to navigation (arrows, tab, enter, esc, etc.) is pressed. + //OB.Listeners.AddProperty("specialkey", String.Format("function(field,e){{if(e.getKey()==e.ENTER){{{0}.focus(true,10);e.stopEvent();}}}}", (nextControl as ControlBase).XID), true); + + string enterScript = String.Empty; + + if (nextControl is Button) + { + enterScript = String.Format("{0}.el.dom.click();", nextControl.XID); + } + else + { + enterScript = String.Format("{0}.focus(true,10);", nextControl.XID); + } + + AddListener("specialkey", String.Format("if(e.getKey()==e.ENTER){{{0}e.stopEvent();}}", enterScript), "field","e"); + } + } + + #endregion + + #region ControlToCompare + + string compareValue = String.Empty; + // 如果CompareControl 和 CompareValue 同时存在,则 CompareControl 拥有更高的优先级 + if (!String.IsNullOrEmpty(CompareControl)) + { + Control compareControl = ControlUtil.FindControlInUserControlOrPage(this, CompareControl); + if (compareControl != null && compareControl is ControlBase) + { + compareValue = String.Format("F.fieldValue({0})", JsHelper.Enquote((compareControl as ControlBase).ClientID)); + } + } + else if (!String.IsNullOrEmpty(CompareValue)) + { + compareValue = CompareValue; + if (CompareType == CompareType.String) + { + compareValue = JsHelper.Enquote(compareValue); + } + } + + // Check whether compareValue exist, which may produced from CompareControl or CompareValue. + if (!String.IsNullOrEmpty(compareValue)) + { + string compareOperatorJs = OperatorHelper.GetName(CompareOperator); + string compareExpressionScript = String.Empty; + if (CompareType == CompareType.String) + { + compareExpressionScript = String.Format("value{0}{1}", compareOperatorJs, compareValue); + } + else if (CompareType == CompareType.Int) + { + compareExpressionScript = String.Format("parseInt(value,10){0}parseInt({1},10)", compareOperatorJs, compareValue); + } + else if (CompareType == CompareType.Float) + { + compareExpressionScript = String.Format("parseFloat(value){0}parseFloat({1})", compareOperatorJs, compareValue); + } + + string compareScript = String.Format("if({0}){{return true;}}else{{return {1};}}", compareExpressionScript, JsHelper.Enquote(CompareMessage)); + OB.AddProperty("validator", String.Format("function(){{var value=F.fieldValue(this);{0}}}", compareScript), true); + } + + #endregion + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field/Field.cs b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field/Field.cs new file mode 100644 index 0000000..4a21796 --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field/Field.cs @@ -0,0 +1,637 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace FineUI +{ + /// + /// 表单字段基类(抽象类) + /// + public abstract class Field : BoxComponent + { + #region Constructor + + /// + /// 构造函数 + /// + public Field() + { + AddServerAjaxProperties("Readonly", "Label"); + AddClientAjaxProperties(); + } + + #endregion + + #region Properties + + /// + /// 是否显示标签 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否显示标签")] + public virtual bool ShowLabel + { + get + { + object obj = FState["ShowLabel"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowLabel"] = value; + } + } + + /// + /// 是否显示空白的标签 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否显示空白的标签")] + public virtual bool ShowEmptyLabel + { + get + { + object obj = FState["ShowEmptyLabel"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ShowEmptyLabel"] = value; + } + } + + + /// + /// [AJAX属性]标签文本 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]标签文本")] + public virtual string Label + { + get + { + object obj = FState["Label"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Label"] = value; + } + } + + + + /// + /// 在标签后面显示红色的星号(用来标识必填项) + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("在标签后面显示红色的星号(用来标识必填项)")] + public bool ShowRedStar + { + get + { + object obj = FState["ShowRedStar"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ShowRedStar"] = value; + } + } + + #region old code + + //private string LabelSeparator_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("标签分割符")] + //public string LabelSeparator + //{ + // get + // { + // object obj = BoxState["LabelSeparator"]; + // return obj == null ? LabelSeparator_Default : (string)obj; + // } + // set + // { + // BoxState["LabelSeparator"] = value; + // } + //} + + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(MsgTarget.Qtip)] + //[Description("提示消息类型")] + //public virtual MsgTarget MsgTarget + //{ + // get + // { + // object obj = BoxState["MsgTarget"]; + // return obj == null ? MsgTarget.Qtip : (MsgTarget)obj; + // } + // set + // { + // BoxState["MsgTarget"] = value; + // } + //} + + + #endregion + + + /// + /// [AJAX属性]表单控件的只读状态 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]表单控件的只读状态")] + public virtual bool Readonly + { + get + { + object obj = FState["Readonly"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Readonly"] = value; + } + } + + ///// + ///// 是否可用 + ///// + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("是否可用")] + //public virtual bool Enabled + //{ + // get + // { + // object obj = FState["Enabled"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["Enabled"] = value; + // } + //} + + /// + /// Tab按键的跳转顺序 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("Tab按键的跳转顺序")] + public virtual short? TabIndex + { + get + { + object obj = FState["TabIndex"]; + return obj == null ? null : (short?)obj; + } + set + { + FState["TabIndex"] = value; + } + } + + + /// + /// 表单中字段与标签的分隔符 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(String), ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT)] + [Description("表单中字段与标签的分隔符")] + public virtual string LabelSeparator + { + get + { + object obj = FState["LabelSeparator"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT; + } + else + { + FormBase formBase = ControlUtil.FindParentControl(this, typeof(FormBase), true) as FormBase; + if (formBase != null) + { + return formBase.LabelSeparator; + } + else + { + return PageManager.Instance.FormLabelSeparator; + } + } + } + return (String)obj; + } + set + { + FState["LabelSeparator"] = value; + } + } + + /// + /// 距离右侧边界的宽度 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT_STRING)] + [Description("距离右侧边界的宽度")] + public Unit OffsetRight + { + get + { + object obj = FState["OffsetRight"]; + if (obj == null) + { + if (DesignMode) + { + return (Unit)ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT; + } + else + { + FormBase formBase = ControlUtil.FindParentControl(this, typeof(FormBase), true) as FormBase; + if (formBase != null) + { + return formBase.OffsetRight; + } + else + { + return PageManager.Instance.FormOffsetRight; + } + } + } + return (Unit)obj; + } + set + { + FState["OffsetRight"] = value; + } + } + + /// + /// 标签的宽度 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT_STRING)] + [Description("标签的宽度")] + public Unit LabelWidth + { + get + { + object obj = FState["LabelWidth"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT; + } + else + { + FormBase formBase = ControlUtil.FindParentControl(this, typeof(FormBase), true) as FormBase; + if (formBase != null) + { + return formBase.LabelWidth; + } + else + { + return PageManager.Instance.FormLabelWidth; + } + } + } + return (Unit)obj; + } + set + { + FState["LabelWidth"] = value; + } + } + + + /// + /// 表单中标签的位置 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(LabelAlign.Undefined)] + [Description("表单中标签的位置")] + public LabelAlign LabelAlign + { + get + { + object obj = FState["LabelAlign"]; + return obj == null ? LabelAlign.Undefined : (LabelAlign)obj; + } + set + { + FState["LabelAlign"] = value; + } + } + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Readonly")) + { + sb.AppendFormat("{0}.f_setReadOnly();", XID); + } + + if (PropertyModified("Label")) + { + string newLabel = Label; + if (ShowRedStar) + { + newLabel += GetRedStarHtml(); + } + //newLabel += LabelSeparator; + sb.AppendFormat("{0}.f_setLabel({1});", XID, JsHelper.Enquote(newLabel)); + } + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("form"); + + // 默认隐藏空白标签 + if (ShowEmptyLabel) + { + OB.AddProperty("hideEmptyLabel", false); + } + + // 只有在表单中,有些属性才有效 + //if (ShowLabel) + //{ + // if (!String.IsNullOrEmpty(Label)) + // { + // if (ShowRedStar) + // { + // OB.AddProperty("fieldLabel", Label + GetRedStarHtml()); + // } + // else + // { + // OB.AddProperty("fieldLabel", Label); + // } + // } + //} + if (!ShowLabel) + { + OB.AddProperty("hideLabel", true); + } + + + // 即使ShowLabel=false,也要输出 Label 属性。可能会在标签验证失败对话框中用到[请为 用户名 提供有效值!]。 + if (!String.IsNullOrEmpty(Label)) + { + if (ShowRedStar) + { + OB.AddProperty("fieldLabel", Label + GetRedStarHtml()); + } + else + { + OB.AddProperty("fieldLabel", Label); + } + } + + + if (LabelSeparator != ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT) + { + OB.AddProperty("labelSeparator", LabelSeparator); + } + + if (LabelAlign != LabelAlign.Undefined) + { + OB.AddProperty("labelAlign", LabelAlignHelper.GetName(LabelAlign)); + } + + if (LabelWidth != ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT) + { + OB.AddProperty("labelWidth", LabelWidth.Value); + } + + //if (Width == Unit.Empty) + ControlBase parentControl = GetParentControl(); + if (parentControl != null) + { + // 如果父控件布局是Anchor + if (parentControl is FormRow || + (parentControl is Container && (parentControl as Container).Layout == Layout.Anchor)) + { + // 如果定义了宽度,则不设置anchorValue + if (Width == Unit.Empty) + { + // 这个地方可能会覆盖 BoxComponent 中已经设置的 anchor 属性,不过没关系 + OB.AddProperty("anchor", GetAnchorValue()); + } + } + } + + + // Every Field need a name property, which is used in form submit. + OB.AddProperty("name", UniqueID); + + // Enabled has been processed in ControlBase. + //OB.AddProperty(OptionName.Disabled, !Enabled); + //if (AjaxPropertyChanged("Enabled", Enabled)) + //{ + // AddAjaxPropertyChangedScript(String.Format("{0}.{1}();", XID, Enabled ? "enable" : "disable")); + // //AddAjaxPropertyChangedScript(String.Format("{0}.setDisabled({1});", ClientJavascriptID, !Enabled)); + //} + + if (TabIndex != null) + { + OB.AddProperty("tabIndex", TabIndex.Value); + } + + if (Readonly) + { + OB.AddProperty("readOnly", true); + } + + // We don't need to add this change event to all Field, only SimpleForm and Form has such event. + // We have enableBubble for Ext.form.Field + + //// Fires just before the field blurs if the field value has changed. + //string changeScript = "F.util.setPageStateChanged();"; + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(changeScript), true); + + } + + private string GetAnchorValue() + { + string anchorValue = AnchorValue; + + if (String.IsNullOrEmpty(anchorValue)) + { + if (OffsetRight.Value != 0) + { + anchorValue = "-" + OffsetRight.Value + "px"; + } + else + { + anchorValue = "0"; + } + } + + return anchorValue; + } + + private string GetRedStarHtml() + { + return "*"; + } + + #endregion + + #region Reset + + /// + /// 重置此字段的值(比如用来清空FileUpload的内容) + /// + public void Reset() + { + PageContext.RegisterStartupScript(GetResetReference()); + } + + /// + /// 获取重置此字段的客户端脚本 + /// + /// + public virtual string GetResetReference() + { + return String.Format("{0}.reset();", ScriptID); + } + + #endregion + + #region GetValueReference + + /// + /// 获取此字段值的客户端脚本(注意返回的脚本不带结束分号) + /// + /// 客户端脚本 + public virtual string GetValueReference() + { + // Don't add ; in the end, because we will invoke this code like this: + // windowField1.DataIFrameUrlFormatString = "grid_iframe_run_window1.aspx?id={0}&page={1}¶m1="; + return String.Format("{0}.getValue()", ScriptID); + } + + #endregion + + #region GetMarkInvalidReference GetClearInvalidReference + + /// + /// 设置字段验证失败的提示信息 + /// + /// 提示信息 + public void MarkInvalid(string message) + { + PageContext.RegisterStartupScript(GetMarkInvalidReference(message)); + } + + /// + /// 清除验证失败的提示信息 + /// + public void ClearInvalid() + { + PageContext.RegisterStartupScript(GetClearInvalidReference()); + } + + /// + /// 获取字段验证失败提示信息的客户端脚本 + /// + /// 提示信息 + /// 客户端脚本 + public string GetMarkInvalidReference(string message) + { + return String.Format("{0}.markInvalid({1});", ScriptID, JsHelper.Enquote(message)); + } + + /// + /// 获取清除验证失败提示信息的客户端脚本 + /// + /// 客户端脚本 + public string GetClearInvalidReference() + { + return String.Format("{0}.clearInvalid();", ScriptID); + } + + #endregion + + #region oldcode + + //internal string GetDesignTimeHtml(string content) + //{ + // StringBuilder sb = new StringBuilder(); + // sb.Append("
"); + // if (!ShowLabel) + // { + // sb.AppendFormat("{0} ", content); + // } + // else + // { + // string redstar = String.Empty; + // if (ShowRedStar) + // { + // redstar = "*"; + // } + // sb.AppendFormat("
{0}{1} 
", Label + redstar, content); + // } + // sb.Append("
"); + // return sb.ToString(); + //} + + #endregion + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field/TooltipField.cs b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field/TooltipField.cs new file mode 100644 index 0000000..7eddd23 --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/BoxComponent.Field/TooltipField.cs @@ -0,0 +1,165 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Label.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// + /// 支持提示的表单字段基类(抽象类) + /// + public abstract class TooltipField : Field + { + #region Constructor + + /// + /// 构造函数 + /// + public TooltipField() + { + AddServerAjaxProperties("ToolTip", "ToolTipTitle", "ToolTipAutoHide"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + + #endregion + + #region Properties + + /// + /// [AJAX属性]提示文本 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]提示文本")] + public string ToolTip + { + get + { + object obj = FState["ToolTip"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ToolTip"] = value; + } + } + + /// + /// [AJAX属性]提示文本的标题 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]提示文本的标题")] + public string ToolTipTitle + { + get + { + object obj = FState["ToolTipTitle"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ToolTipTitle"] = value; + } + } + + /// + /// [AJAX属性]是否自动隐藏提示信息 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("[AJAX属性]是否自动隐藏提示信息")] + public bool ToolTipAutoHide + { + get + { + object obj = FState["ToolTipAutoHide"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ToolTipAutoHide"] = value; + } + } + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + } + + /// + /// 添加提示信息 + /// + /// HtmlNodeBuilder实例 + protected void ResolveTooltip(HtmlNodeBuilder htmlBuilder) + { + if (!String.IsNullOrEmpty(ToolTip)) + { + htmlBuilder.SetProperty("data-qtip", ToolTip); + + if (!String.IsNullOrEmpty(ToolTipTitle)) + { + htmlBuilder.SetProperty("data-qtitle", ToolTipTitle); + } + if (!ToolTipAutoHide) + { + htmlBuilder.SetProperty("data-hide", "user"); + } + } + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/ControlBase.Component.BoxComponent/BoxComponent.cs b/FineUI_v6/FineUI/BaseWebControls/ControlBase.Component.BoxComponent/BoxComponent.cs new file mode 100644 index 0000000..ec4e3b0 --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/ControlBase.Component.BoxComponent/BoxComponent.cs @@ -0,0 +1,568 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Component.cs + * CreatedOn: 2008-04-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// + /// 控件基类(抽象类) + /// + public abstract class BoxComponent : Component + { + #region Constructor + + /// + /// 构造函数 + /// + public BoxComponent() + { + AddServerAjaxProperties("Width", "Height"); + AddClientAjaxProperties(); + + } + + #endregion + + #region Properties + + /// + /// 宽度 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), "")] + [Description("宽度")] + public Unit Width + { + get + { + object obj = FState["Width"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["Width"] = value; + } + } + + + /// + /// 高度 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), "")] + [Description("高度")] + public Unit Height + { + get + { + object obj = FState["Height"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["Height"] = value; + } + } + + + #endregion + + #region Layout Properties + + /// + /// 锚点值(当父容器的Layout=Anchor时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("")] + [Description("锚点值(当父容器的Layout=Anchor时有效)")] + public string AnchorValue + { + get + { + object obj = FState["AnchorValue"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["AnchorValue"] = value; + } + } + + + /// + /// 列的宽度(当父容器的Layout=Column时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("")] + [Description("列的宽度(当父容器的Layout=Column时有效)")] + public string ColumnWidth + { + get + { + object obj = FState["ColumnWidth"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ColumnWidth"] = value; + } + } + + + /// + /// 行的宽度(当父容器的Layout=Row时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("")] + [Description("行的宽度(当父容器的Layout=Row时有效)")] + public string RowHeight + { + get + { + object obj = FState["RowHeight"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RowHeight"] = value; + } + } + + + /// + /// 绝对定位的X坐标(当父容器的Layout=Absolute时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), "")] + [Description("绝对定位的X坐标(当父容器的Layout=Absolute时有效)")] + public Unit AbsoluteX + { + get + { + object obj = FState["AbsoluteX"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["AbsoluteX"] = value; + } + } + + + /// + /// 绝对定位的Y坐标(当父容器的Layout=Absolute时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), "")] + [Description("绝对定位的Y坐标(当父容器的Layout=Absolute时有效)")] + public Unit AbsoluteY + { + get + { + object obj = FState["AbsoluteY"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["AbsoluteY"] = value; + } + } + + + /// + /// 表格列数(当父容器的Layout=Table时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(3)] + [Description("表格列数(当父容器的Layout=Table时有效)")] + public int TableConfigColumns + { + get + { + object obj = FState["TableConfigColumns"]; + return obj == null ? 3 : (int)obj; + } + set + { + FState["TableConfigColumns"] = value; + } + } + + /// + /// 表格合并行(当父容器的Layout=Table时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(1)] + [Description("表格合并行(当父容器的Layout=Table时有效)")] + public int TableRowspan + { + get + { + object obj = FState["TableRowspan"]; + return obj == null ? 1 : (int)obj; + } + set + { + FState["TableRowspan"] = value; + } + } + + /// + /// 表格合并列(当父容器的Layout=Table时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(1)] + [Description("表格合并列(当父容器的Layout=Table时有效)")] + public int TableColspan + { + get + { + object obj = FState["TableColspan"]; + return obj == null ? 1 : (int)obj; + } + set + { + FState["TableColspan"] = value; + } + } + + /// + /// 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(BoxLayoutAlign.Stretch)] + [Description("控制子控件的位置(当本容器的Layout=VBox或者HBox时有效)")] + public BoxLayoutAlign BoxConfigAlign + { + get + { + object obj = FState["BoxConfigAlign"]; + return obj == null ? BoxLayoutAlign.Stretch : (BoxLayoutAlign)obj; + } + set + { + FState["BoxConfigAlign"] = value; + } + } + + /// + /// 控制子控件的位置(当本容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(BoxLayoutPosition.Start)] + [Description("控制子控件的位置(当本容器的Layout=VBox或者HBox时有效)")] + public BoxLayoutPosition BoxConfigPosition + { + get + { + object obj = FState["BoxConfigPosition"]; + return obj == null ? BoxLayoutPosition.Start : (BoxLayoutPosition)obj; + } + set + { + FState["BoxConfigPosition"] = value; + } + } + + /// + /// 内边距(当本容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("0")] + [Description("内边距(当本容器的Layout=VBox或者HBox时有效)")] + public string BoxConfigPadding + { + get + { + object obj = FState["BoxConfigPadding"]; + return obj == null ? "0" : (string)obj; + } + set + { + FState["BoxConfigPadding"] = value; + } + } + + /// + /// 子控件的外边距(当本容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("0")] + [Description("子控件的外边距(当本容器的Layout=VBox或者HBox时有效)")] + public string BoxConfigChildMargin + { + get + { + object obj = FState["BoxConfigChildMargin"]; + return obj == null ? "0" : (string)obj; + } + set + { + FState["BoxConfigChildMargin"] = value; + } + } + + /// + /// 控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效) + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue(0)] + [Description("控制子控件的尺寸(当父容器的Layout=VBox或者HBox时有效)")] + public int BoxFlex + { + get + { + object obj = FState["BoxFlex"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["BoxFlex"] = value; + } + } + + + ///// + ///// 外边距 + ///// + //[Category(CategoryName.LAYOUT)] + //[DefaultValue("")] + //[Description("外边距")] + //[Obsolete("已废除,请使用Margin属性")] + //public string BoxMargin + //{ + // get + // { + // return Margin; + // } + // set + // { + // Margin = value; + // } + //} + + + /// + /// 是否显示分隔条 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否显示分隔条")] + public bool RegionSplit + { + get + { + object obj = FState["RegionSplit"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["RegionSplit"] = value; + } + } + + + /// + /// 区域所在的位置 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue(Position.Center)] + [Description("区域所在的位置")] + public Position RegionPosition + { + get + { + object obj = FState["RegionPosition"]; + return obj == null ? Position.Center : (Position)obj; + } + set + { + FState["RegionPosition"] = value; + } + } + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("Width")) + { + sb.AppendFormat("{0}.f_setWidth();", XID); + } + + if (PropertyModified("Height")) + { + sb.AppendFormat("{0}.f_setHeight();", XID); + } + + + AddAjaxScript(sb); + + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (Width != Unit.Empty) + { + OB.AddProperty("width", Width.Value); + } + if (Height != Unit.Empty) + { + OB.AddProperty("height", Height.Value); + } + + + #region Controls in Layout + + + Container parentControl = GetParentControl() as Container; + + if (parentControl != null) + { + if (parentControl.Layout == Layout.Anchor) + { + // 如果父节点是Anchor布局 + if (!String.IsNullOrEmpty(AnchorValue)) + { + OB.AddProperty("anchor", AnchorValue); + } + } + else if (parentControl.Layout == Layout.Column) + { + if (!String.IsNullOrEmpty(ColumnWidth)) + { + string columnWidth = StringUtil.ConvertPercentageToDecimalString(ColumnWidth); + + // 1.00 在IE下会有BUG,把1.00转换为0.999 + if (columnWidth == "1.00") + { + columnWidth = "0.999"; + } + OB.AddProperty("columnWidth", columnWidth, true); + } + } + else if (parentControl.Layout == Layout.Absolute) + { + if (AbsoluteX != Unit.Empty) + { + OB.AddProperty("x", AbsoluteX.Value); + } + if (AbsoluteY != Unit.Empty) + { + OB.AddProperty("y", AbsoluteY.Value); + } + } + else if (parentControl.Layout == Layout.Table) + { + if (TableRowspan != 1) + { + OB.AddProperty("rowspan", TableRowspan); + } + + if (TableColspan != 1) + { + OB.AddProperty("colspan", TableColspan); + } + } + else if (parentControl.Layout == Layout.HBox || parentControl.Layout == Layout.VBox) + { + if (BoxFlex != 0) + { + OB.AddProperty("flex", BoxFlex); + } + + //// 用户可能会设置 BoxMargin="0" 来覆盖 BoxConfigChildMargin 属性。 + //if (BoxMargin != "") + //{ + // OB.AddProperty("margins", BoxMargin); + //} + + } + else if (parentControl.Layout == Layout.Region) + { + OB.AddProperty("region", PositionHelper.GetName(RegionPosition)); + + if (RegionSplit) + { + OB.AddProperty("split", true); + } + + } + } + + #endregion + + } + + /// + /// 获取当前控件的父容器 + /// + /// + protected ControlBase GetParentControl() + { + ControlBase parentControl = null; + + // 此面板放在用户控件中的情况 + if (Parent is UserControl || Parent is ContentPlaceHolder) + { + if (Parent.Parent is UserControlConnector || Parent.Parent is CPHConnector) + { + parentControl = Parent.Parent.Parent as ControlBase; + } + } + else + { + parentControl = Parent as ControlBase; + } + + return parentControl; + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/ControlBase.Component/Component.cs b/FineUI_v6/FineUI/BaseWebControls/ControlBase.Component/Component.cs new file mode 100644 index 0000000..8607f6a --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/ControlBase.Component/Component.cs @@ -0,0 +1,417 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Component.cs + * CreatedOn: 2008-04-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// + /// 控件基类(抽象类) + /// + public abstract class Component : ControlBase + { + #region Constructor + + /// + /// 构造函数 + /// + public Component() + { + AddServerAjaxProperties("CssClass", "CssStyle"); + AddClientAjaxProperties(); + + } + + #endregion + + #region Properties + + + /// + /// 页面加载后立即获得焦点 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(false)] + [Description("页面加载后立即获得焦点")] + public virtual bool FocusOnPageLoad + { + get + { + object obj = FState["FocusOnPageLoad"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["FocusOnPageLoad"] = value; + } + } + + + /// + /// [AJAX属性]控件样式类名 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]控件样式类名")] + public virtual string CssClass + { + get + { + object obj = FState["CssClass"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["CssClass"] = value; + } + } + + ///// + ///// 控件所在容器的样式类名 + ///// + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue("")] + //[Description("控件所在容器的样式类名")] + //public virtual string ContainerClass + //{ + // get + // { + // object obj = FState["ContainerClass"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["ContainerClass"] = value; + // } + //} + + ///// + ///// [AJAX属性]表单中每一项的样式类名 + ///// + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue("")] + //[Description("[AJAX属性]表单中每一项的样式类名")] + //public virtual string FormItemClass + //{ + // get + // { + // object obj = FState["FormItemClass"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["FormItemClass"] = value; + // } + //} + + /// + /// [AJAX属性]控件样式 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]控件样式")] + public virtual string CssStyle + { + get + { + object obj = FState["CssStyle"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["CssStyle"] = value; + } + } + + /// + /// 外边距 + /// + [Category(CategoryName.LAYOUT)] + [DefaultValue("")] + [Description("外边距")] + public string Margin + { + get + { + object obj = FState["Margin"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Margin"] = value; + } + } + + #region old code + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("控件容器样式类")] + //public string ContainerClassName + //{ + // get + // { + // object obj = BoxState["ExtendContainerClassName"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // BoxState["ExtendContainerClassName"] = value; + // } + //} + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("extjs控件类型")] + //public string Xtype + //{ + // get + // { + // object[] xtypeAttributes = GetType().GetCustomAttributes(typeof(XTypeAttribute), true); + // if (xtypeAttributes != null && xtypeAttributes.Length == 1) + // { + // return (xtypeAttributes[0] as XTypeAttribute).Name; + // } + + // return String.Empty; + // } + //} + + //public override string AccessKey + //{ + // get + // { + // return base.AccessKey; + // } + // set + // { + // base.AccessKey = value; + // } + //} + #endregion + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("CssStyle")) + { + sb.AppendFormat("{0}.el.applyStyles({1});", XID, JsHelper.Enquote(CssStyle)); + } + + // 老的 CssClass 会在 X.state(x0,{"CssClass":"green"}) 时自动删除,并自动添加新的 CssClass。 + // 为什么不在这里先removeClass,再addClass?因为此时我们已经不知道之前的CssClass是什么了,这里取得的是已经修改过的。 + // 在X.util的setFState函数中处理的 + if (PropertyModified("CssClass")) + { + //sb.AppendFormat("{0}.el.addClass({1});", XID, JsHelper.Enquote(CssClass)); + } + + //if (PropertyModified("FormItemClass")) + //{ + // sb.AppendFormat("{0}.el.addClass({1});", XID, JsHelper.Enquote(FormItemClass)); + //} + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (!String.IsNullOrEmpty(CssClass)) + { + OB.AddProperty("cls", CssClass); + } + //if (!String.IsNullOrEmpty(ContainerClass)) + //{ + // OB.AddProperty("ctCls", ContainerClass); + //} + //if (!String.IsNullOrEmpty(FormItemClass)) + //{ + // OB.AddProperty("formItemCls", FormItemClass); + //} + + if (!String.IsNullOrEmpty(CssStyle)) + { + OB.AddProperty("style", CssStyle); + } + + //// 不保持状态 + //OB.AddProperty("stateful", false); + + if (!String.IsNullOrEmpty(Margin)) + { + // extjs 6.0: Another important change to Component is the removal of the margins config, as well as the defaultMargins config of all container layouts. The margin config is now the only way to configure margins on Components. Applications that previously used margins should change to using margin instead. Applications that used defaultMargins on the layout should instead configure a margin in the Container’s defaults block. + /* + Container parentControl = Parent as Container; + if (parentControl != null && (parentControl.Layout == Layout.HBox || parentControl.Layout == Layout.VBox)) + { + OB.AddProperty("margins", Margin); + } + else + { + OB.AddProperty("margin", Margin); + } + */ + + OB.AddProperty("margin", Margin); + } + + + #region old code + //if (ContainerClassName != "") OB.AddProperty(OptionName.CtCls, ContainerClassName); + + // 需要为控件添加 display:inline; 属性,否则控件会单独占用一行 + // 这是不可行的解决方法,会造成LayoutPanel莫名奇妙的问题,去掉 + //if (CssStyle == "") + //{ + // CssStyle = "display:inline;"; + //} + //else if (!CssStyle.ToLower().Contains("display")) + //{ + // CssStyle += "display:inline;"; + //} + #endregion + + + if (FocusOnPageLoad) + { + string focusScript = String.Format("{0}.focus(true,500);", XID); + AddStartupAbsoluteScript(focusScript); + } + } + + #endregion + + #region GetFocusReference + + /// + /// 使控件获得焦点 + /// + public new void Focus() + { + PageContext.RegisterStartupScript(GetFocusReference()); + } + + + /// + /// 使控件获得焦点,并选中控件中的文本内容 + /// + /// 是否选中控件中的文本内容 + public void Focus(bool selectText) + { + PageContext.RegisterStartupScript(GetFocusReference(selectText)); + } + + /// + /// 使控件获得焦点,并选中控件中的文本内容 + /// + /// 是否选中控件中的文本内容 + /// 使控件获得焦点前延迟的毫秒数 + public void Focus(bool selectText, int delayMilliseconds) + { + PageContext.RegisterStartupScript(GetFocusReference(selectText, delayMilliseconds)); + } + + /// + /// 获得使控件获得焦点的脚本 + /// + /// JS脚本 + public virtual string GetFocusReference() + { + return String.Format("{0}.focus();", ScriptID); + } + + /// + /// 获得使控件获得焦点,并选中控件中的文本内容的脚本 + /// + /// 是否选中控件中的文本内容 + /// JS脚本 + public virtual string GetFocusReference(bool selectText) + { + return String.Format("{0}.focus({1});", ScriptID, selectText.ToString().ToLower()); + } + + /// + /// 获得使控件获得焦点,并选中控件中的文本内容的脚本 + /// + /// 是否选中控件中的文本内容 + /// 使控件获得焦点前延迟的毫秒数 + /// JS脚本 + public virtual string GetFocusReference(bool selectText, int delayMilliseconds) + { + return String.Format("{0}.focus({1}, {2});", ScriptID, selectText.ToString().ToLower(), delayMilliseconds); + } + + #endregion + + #region AddExtraStyle + + /// + /// 为已经添加到OB中的Style增加新的样式 + /// 注意:这个key-value不会保存到属性CssStyle中 + /// + /// + /// + protected void AddExtraStyle(string key, string value) + { + // string style = OB.GetProperty(OptionName.Style); + // 这样不行,添加到OB中的字符串都是被编码过的 + // 比如"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"",在JsObjectBuilder中的AddProperty中处理的。 + // 这样做是为了在JsObjectBuilder中的ToString中,这样来添加属性:sb.AppendFormat("{0}:{1},", key, _properties[key]); + + + string style = CssStyle.ToLower(); + + if (style == "" || !style.Contains(key)) + { + style += String.Format("{0}:{1};", key, value); + } + + OB.AddProperty("style", style); + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/ControlBase/BaseCollection.cs b/FineUI_v6/FineUI/BaseWebControls/ControlBase/BaseCollection.cs new file mode 100644 index 0000000..19795b4 --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/ControlBase/BaseCollection.cs @@ -0,0 +1,137 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: BaseCollection.cs + * CreatedOn: 2012-11-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// + /// 控件集合 + /// + public class BaseCollection : Collection where T : ControlBase + { + internal delegate void ItemsChangeHandler(); + internal event ItemsChangeHandler ItemsChange; + + + private ControlBase _parent; + private string _groupName; + + /// + /// 构造函数 + /// + /// 父控件实例 + public BaseCollection(ControlBase parentControl) + { + _parent = parentControl; + _groupName = Guid.NewGuid().ToString(); + } + + /// + /// 向集合中插入一个元素 + /// + /// + /// + protected override void InsertItem(int index, T item) + { + item.CollectionGroupName = _groupName; + item.RenderWrapperNode = false; + + int startIndex = GetStartIndex(); + _parent.Controls.AddAt(startIndex + index, item); + + base.InsertItem(index, item); + + if (this.ItemsChange != null) + { + this.ItemsChange(); + } + } + + /// + /// 删除集合中的一个元素 + /// + /// + protected override void RemoveItem(int index) + { + int startIndex = GetStartIndex(); + _parent.Controls.RemoveAt(startIndex + index); + + base.RemoveItem(index); + + if (this.ItemsChange != null) + { + this.ItemsChange(); + } + } + + /// + /// 清空集合 + /// + protected override void ClearItems() + { + int startIndex = GetStartIndex(); + // We should only remove this collection related controls + // Note we must loop from the last element(Count-1) to the first one(0) + for (int i = startIndex + Count - 1; i >= startIndex; i--) + { + _parent.Controls.RemoveAt(i); + } + + base.ClearItems(); + + if (this.ItemsChange != null) + { + this.ItemsChange(); + } + } + + + /// + /// 获取类型 T 在父控件子集中的开始位置 + /// + /// + private int GetStartIndex() + { + int startIndex = 0; + + foreach (Control control in _parent.Controls) + { + if (control is ControlBase && (control as ControlBase).CollectionGroupName == _groupName) + { + break; + } + startIndex++; + } + + return startIndex; + } + + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/ControlBase/ControlBase.cs b/FineUI_v6/FineUI/BaseWebControls/ControlBase/ControlBase.cs new file mode 100644 index 0000000..ecc9f71 --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/ControlBase/ControlBase.cs @@ -0,0 +1,2297 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ControlBase.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + + +using System.Reflection; +using System.Configuration; +using System.IO; +using System.Text.RegularExpressions; +using System.Security.Permissions; +using System.Collections; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.IO.Compression; +using System.ComponentModel.Design; +using System.Security.Cryptography; + + +namespace FineUI +{ + /// + /// 控件基类(抽象类) + /// + [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] + [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] + [ParseChildren(true)] + [PersistChildren(false)] + public abstract class ControlBase : Control, INamingContainer + { + #region Constructor + + /// + /// 构造函数 + /// + public ControlBase() + { + + _state = new FState(this); + + AddServerAjaxProperties("Hidden", "Enabled"); + AddClientAjaxProperties(); + + } + + private FState _state = null; + + /// + /// FState用来在服务器和客户端之间持久化控件状态。 + /// + protected FState FState + { + get + { + return _state; + } + set + { + _state = value; + } + } + + /// + /// 添加服务器AJAX属性 + /// + /// 属性列表 + protected void AddServerAjaxProperties(params string[] props) + { + foreach (string prop in props) + { + if (!_serverAjaxProperties.Contains(prop)) + { + _serverAjaxProperties.Add(prop); + } + if (!_ajaxProperties.Contains(prop)) + { + _ajaxProperties.Add(prop); + } + } + + } + + /// + /// 添加客户端AJAX属性 + /// + /// 属性列表 + protected void AddClientAjaxProperties(params string[] props) + { + foreach (string prop in props) + { + if (!_clientAjaxProperties.Contains(prop)) + { + _clientAjaxProperties.Add(prop); + } + if (!_ajaxProperties.Contains(prop)) + { + _ajaxProperties.Add(prop); + } + } + + } + + ///// + ///// 添加Gzip压缩属性 + ///// + ///// 属性列表 + //protected void AddGzippedAjaxProperties(params string[] props) + //{ + // foreach (string prop in props) + // { + // if (!_gzippedAjaxProperties.Contains(prop)) + // { + // _gzippedAjaxProperties.Add(prop); + // } + // } + //} + + + private List _ajaxProperties = new List(); + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal List AjaxProperties + { + get { return _ajaxProperties; } + set { _ajaxProperties = value; } + } + + private List _serverAjaxProperties = new List(); + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal List ServerAjaxProperties + { + get { return _serverAjaxProperties; } + set { _serverAjaxProperties = value; } + } + + private List _clientAjaxProperties = new List(); + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal List ClientAjaxProperties + { + get { return _clientAjaxProperties; } + set { _clientAjaxProperties = value; } + } + + //private List _gzippedAjaxProperties = new List(); + + ///// + ///// 目前Gzippped的属性支持JObject/JArray/String类型 + ///// + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //internal List GzippedAjaxProperties + //{ + // get { return _gzippedAjaxProperties; } + // set { _gzippedAjaxProperties = value; } + //} + + /// + /// 标示是否初始化完成 + /// + internal bool InitialComplete = false; + + #endregion + + #region Internal Properties + + //private ControlBase _virtualParent; + + ///// + ///// 虚拟的父控件,为了保证生产JS脚本的顺序(比如在处理按钮的MenuID属性时使用) + ///// + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //internal ControlBase VirtualParent + //{ + // get { return _virtualParent; } + // set { _virtualParent = value; } + //} + + + private string _xid = String.Empty; + + /// + /// JavaScript中使用ID(比如:x0, x1) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string XID + { + get + { + if (String.IsNullOrEmpty(_xid)) + { + _xid = ClientJavascriptIDManager.Instance.GetNextJavascriptID(); + } + return _xid; + } + } + + /// + /// 获取控件实例的JavaScript代码(比如:F('RegionPanel1_Button1')) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string ScriptID + { + get + { + return String.Format("F('{0}')", ClientID); + } + } + + + private bool _renderWrapperNode = true; + + /// + /// 是否向页面输出控件的外部容器(默认:true) + /// 否:只创建Javascript对象而不添加到页面中 + /// 是:创建Javascript对象,并添加到页面中,页面上添加占位符 + /// + internal virtual bool RenderWrapperNode + { + get + { + return _renderWrapperNode; + } + set + { + _renderWrapperNode = value; + } + } + + + private bool _wrapperNodeInlineBlock = true; + + internal virtual bool WrapperNodeInlineBlock + { + get + { + return _wrapperNodeInlineBlock; + } + set + { + _wrapperNodeInlineBlock = value; + } + } + + + + private OptionBuilder _optionBuilder; + + /// + /// 参数对象创建器 + /// + internal OptionBuilder OB + { + get + { + if (_optionBuilder == null) + { + _optionBuilder = new OptionBuilder(); + } + return _optionBuilder; + } + } + + + + private JObject _postBackState = null; + + /// + /// 从 HTTP 请求中恢复当前控件的状态 + /// 比如当前请求 Request.Form["F_STATE"] = {"btnClientClick":{"OnClientClick":"F.util.alert(\"This is an alert dialog\",\"\",Ext.MessageBox.INFO,'');"},"btnPressed":{"Pressed":false}} + /// 并且当前控件的 ClientID 是 "btnPressed",则返回值为 JObject 对象 {"Pressed":false} + /// + internal JObject PostBackState + { + get + { + if (_postBackState == null) + { + JObject states = ResourceManager.Instance.PostBackStates; + + if (PageManager.Instance.EnableFStateValidation) + { + JArray postBackStateArray = states.Value(ClientID); + if (postBackStateArray != null) + { + _postBackState = (JObject)postBackStateArray[0]; + + // 如果回发状态不会空,则需要验证 + string stateValidationString = (string)postBackStateArray[1]; + + if (String.IsNullOrEmpty(stateValidationString) || !ValidateFState(_postBackState, stateValidationString)) + { + throw new Exception(String.Format("无效的 F_STATE 状态信息({0})。", ID)); + } + } + } + else + { + _postBackState = states.Value(ClientID); + } + + if (_postBackState == null) + { + _postBackState = new JObject(); + } + + // // 启用FState压缩 + // if (EnableFStateCompress) + // { + // foreach (string property in _gzippedAjaxProperties) + // { + // string gzPropertyName = property + "_GZ"; + // JToken gzToken = _postBackState[gzPropertyName]; + // if (gzToken != null) + // { + // string gzippedString = gzToken.Value(); + // if (!String.IsNullOrEmpty(gzippedString)) + // { + // // 从压缩后的Gzip字符串恢复属性的值(可能为JObject/JArray/String) + // PropertyInfo info = this.GetType().GetProperty(property, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + // if (info != null) + // { + // string ungzippedString = StringUtil.Ungzip(gzippedString); + // if (info.PropertyType == typeof(String)) + // { + // _postBackState[property] = ungzippedString; + // } + // else if (info.PropertyType == typeof(JObject)) + // { + // _postBackState[property] = JObject.Parse(ungzippedString); + // } + // else if (info.PropertyType == typeof(JArray)) + // { + // _postBackState[property] = JArray.Parse(ungzippedString); + // } + // } + // } + + // // 从回发的PostBackState中删除GZ属性,已经还原了压缩之前的属性 + // _postBackState.Remove(gzPropertyName); + // } + // } + // } + } + return _postBackState; + } + } + + + private string _collectionGroupName; + + /// + /// 此控件所在的集合分组,只在BaseCollection中使用 + /// + internal string CollectionGroupName + { + get { return _collectionGroupName; } + set { _collectionGroupName = value; } + } + + #endregion + + #region ReadOnly Properties + + /// + /// 不支持此属性(禁用控件默认的ViewState) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableViewState + { + get + { + return false; + } + } + + + /// + /// 控件的客户端ID(比如:RegionPanel1_Button1) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string ClientID + { + get + { + return base.ClientID; + } + } + + + // ID是设计的时候所指定的ID。 + // ClientID是当这个控件生成到客户端页面时候,需要在客户端访问时候用的。 + // UniqueID是当需要参与服务端回传的时候用的。 + // 备注:当控件是子控件的时候(例如在用户控件中的Button),ClientID在HTML页面中是作为控件的ID属性, + // UniqueID是作为控件的Name属性,如果不是子控件,那么ClientID和UniqueID是相同的 + + /// + /// 控件外部容器的客户端ID(比如:Button1_wrapper) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string WrapperID + { + get + { + return String.Format("{0}_wrapper", ClientID); + } + } + + + /// + /// 产品名称 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string ProductName + { + get + { + return GlobalConfig.ProductName; + } + } + + /// + /// 产品版本 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public virtual string ProductVersion + { + get + { + return GlobalConfig.ProductVersion; + } + } + + #endregion + + #region Properties + + /// + /// HTML标签属性 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JObject Attributes + { + get + { + object obj = FState["Attributes"]; + if (obj == null) + { + FState["Attributes"] = new JObject(); + obj = FState["Attributes"]; + } + return (JObject)obj; + } + set + { + FState["Attributes"] = value; + } + } + + + /// + /// 控件ID + /// + [Category(CategoryName.BASEOPTIONS)] + [Description("控件ID")] + public override string ID + { + get + { + return base.ID; + } + set + { + base.ID = value; + } + } + + + /// + /// [AJAX属性]是否可用 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("[AJAX属性]是否可用")] + public virtual bool Enabled + { + get + { + object obj = FState["Enabled"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["Enabled"] = value; + } + } + + /// + /// 指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool RenderToClient + { + get + { + return base.Visible; + } + set + { + base.Visible = value; + } + } + + + /// + /// 只读属性,指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性) + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("只读属性,指示控件是否被渲染出来(显示隐藏控件,请使用Hidden属性)")] + public override bool Visible + { + get + { + return base.Visible; + } + } + + + /// + /// [AJAX属性]是否隐藏控件 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否隐藏控件")] + public virtual bool Hidden + { + get + { + object obj = FState["Hidden"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Hidden"] = value; + } + } + + /// + /// 隐藏模式 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(HideMode.Display)] + [Description("隐藏的模式")] + public virtual HideMode HideMode + { + get + { + object obj = FState["HideMode"]; + return obj == null ? HideMode.Display : (HideMode)obj; + } + set + { + FState["HideMode"] = value; + } + } + + + /// + /// 是否启用AJAX + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("是否启用AJAX")] + public virtual bool EnableAjax + { + get + { + object obj = FState["EnableAjax"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return PageManager.Instance.EnableAjax; + } + } + return (bool)obj; + } + set + { + FState["EnableAjax"] = value; + } + } + + + ///// + ///// 是否启用FState压缩(默认为false) + ///// + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用FState压缩(默认为false)")] + //public virtual bool EnableFStateCompress + //{ + // get + // { + // object obj = FState["EnableFStateCompress"]; + // if (obj == null) + // { + // if (DesignMode) + // { + // return false; + // } + // else + // { + // return PageManager.Instance.EnableFStateCompress; + // } + // } + // return (bool)obj; + // } + // set + // { + // FState["EnableFStateCompress"] = value; + // } + //} + + + /// + /// 是否启用Ajax正在加载提示 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("是否启用Ajax正在加载提示")] + public bool EnableAjaxLoading + { + get + { + object obj = FState["EnableAjaxLoading"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return PageManager.Instance.EnableAjaxLoading; + } + } + return (bool)obj; + } + set + { + FState["EnableAjaxLoading"] = value; + } + } + + + /// + /// Ajax正在加载提示的类型 + /// + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(AjaxLoadingType.Default)] + [Description("Ajax正在加载提示的类型")] + public AjaxLoadingType AjaxLoadingType + { + get + { + object obj = FState["AjaxLoadingType"]; + if (obj == null) + { + if (DesignMode) + { + return AjaxLoadingType.Default; + } + else + { + return PageManager.Instance.AjaxLoadingType; + } + } + return (AjaxLoadingType)obj; + } + set + { + FState["AjaxLoadingType"] = value; + } + } + + + /// + /// 是否处于FineUI的AJAX回发过程 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool IsFineUIAjaxPostBack + { + get + { + return ResourceManager.Instance.IsFineUIAjaxPostBack; + } + } + + + #endregion + + #region Listeners + + private ListenerCollection _listeners; + + /// + /// 客户端事件列表 + /// + [Description("客户端事件列表")] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ListenerCollection Listeners + { + get + { + if (_listeners == null) + { + _listeners = new ListenerCollection(); + } + return _listeners; + } + } + + #endregion + + #region OnInit + + /// + /// 页面初始化事件 + /// + /// + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!DesignMode) + { + // 确保所有子控件都已经被创建 + EnsureChildControls(); + + // 如果控件没有设置 ID,则自动创建一个(比如:ct100) + base.EnsureID(); + + // 确保ResourceManager实例的Page和当前页面一致 + ResourceManager.EnsureResourceManagerInstance(Page); + + // 如果在Page_Init之后创建的控件,则不会触发InitComplete,就需要立即调用。那么就需要判断当前页面是否已经初始化完成 + if (ResourceManager.Instance.IsPageInitCompleted) + { + Page_InitComplete(null, null); + } + else + { + // 页面初始化完毕后,再进行FState的相关操作(类似LoadViewState阶段,但LoadViewState并非每个控件都会经历,所以只能注册页面的InitComplete) + Page.InitComplete += Page_InitComplete; + } + } + } + + private void Page_InitComplete(object sender, EventArgs e) + { + // 如果是页面回发,则恢复FState + if (Page.IsPostBack) + { + RecoverPropertiesFromJObject(PostBackState); + } + + + // 向子控件公开方法,可以在备份初始化属性之前修改属性值 + OnInitControl(); + + // 备份初始化属性值 + FState.BackupInitializedProperties(); + + // 标识初始化完成 + InitialComplete = true; + + + } + + + /// + /// 在备份初始化属性之前修改属性值 + /// + /// 此时对控件的属性做修改是安全的: + /// 1. 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 + /// 2. 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 F_STATE 已经恢复完毕 + /// + protected virtual void OnInitControl() + { + + } + + #endregion + + #region RenderBeginTag RenderEndTag + + /// + /// 重载 RenderControl,为了向子控件公开 RenderBeginTag 和 RenderEndTag 两个方法 + /// + /// 服务器控件输出流 + public override void RenderControl(HtmlTextWriter writer) + { + RenderBeginTag(writer); + + base.RenderControl(writer); + + RenderEndTag(writer); + } + + + /// + /// 渲染控件的开始标签 + /// + /// 输出流 + protected virtual void RenderBeginTag(HtmlTextWriter writer) + { + if (RenderWrapperNode) + { + if (WrapperNodeInlineBlock) + { + writer.Write(String.Format("
", WrapperID)); + } + else + { + writer.Write(String.Format("
", WrapperID)); + } + } + } + + /// + /// 渲染控件的结束标签 + /// + /// 输出流 + protected virtual void RenderEndTag(HtmlTextWriter writer) + { + if (RenderWrapperNode) + { + writer.Write("
"); + } + } + + + + //protected override void Render(HtmlTextWriter writer) + //{ + // base.Render(writer); + + // if (Page != null) + // { + // Page.VerifyRenderingInServerForm(this); + // } + //} + + #endregion + + #region OnPreRender + + /// + /// 渲染 HTML 之前调用 + /// + /// + protected override void OnPreRender(EventArgs e) + { + base.OnPreRender(e); + + // 在页面第一次加载,正常的 PostBack以及 AJAX 都需要执行下面代码 + if (this is IPostBackDataHandler) + { + // 如果当前控件实现了 IPostBackDataHandler 接口,则需要调用 RegisterRequiresPostBack, + // 以便在 ControlState 中保存这个控件的 ClientID,然后下次回发时会由此调用此控件的 LoadPostData 函数 + // 主要用来处理客户端改变控件属性的情况 + Page.RegisterRequiresPostBack(this); + } + + + OnBothPreRender(); + + // 计算被修改的属性列表 + FState.CalculateModifiedProperties(); + + if (IsFineUIAjaxPostBack) + { + OnAjaxPreRender(); + + if (_ajaxScriptBuilder.Length > 0) + { + ResourceManager.Instance.AjaxScriptList.Add(_ajaxScriptBuilder.ToString()); + + // 添加在 JavaScript 中使用的控件变量的短格式(比如 x0=F('RegionPanel1_Button1')) + ResourceManager.Instance.AddAjaxShortName(ClientID, XID); + } + } + else + { + // 页面第一次加载和正常的回发两种情况 + OnFirstPreRender(); + } + } + + /// + /// 渲染 HTML 之前调用(计算被修改属性列表之前调用,可以在此修改属性) + /// + protected virtual void OnBothPreRender() + { + + } + + /// + /// 渲染 HTML 之前调用(AJAX回发) + /// + protected virtual void OnAjaxPreRender() + { + StringBuilder sb = new StringBuilder(); + #region old code + // There are new properties need to be persisted during the next postback. + // Re-write the "f_props" property of the component instance. + //if (FState.TotalModifiedProperties.Count > PostBackState.Count) + //{ + // sb.AppendFormat("{0}.f_props={1};", XID, new JArray(FState.TotalModifiedProperties)); + //} + + //foreach (string property in FState.ModifiedProperties) + //{ + // string propertyValue = String.Empty; + + // PropertyInfo info = this.GetType().GetProperty(property); + // if (info.PropertyType == typeof(String)) + // { + // propertyValue = JsHelper.Enquote(info.GetValue(this, null).ToString()); + // } + // else if (info.PropertyType == typeof(Boolean)) + // { + // // "true", "false" + // propertyValue = info.GetValue(this, null).ToString().ToLower(); + // } + // else if (info.PropertyType.BaseType == typeof(Enum)) + // { + // // ConfirmTarget -> "Self", "Parent", "Top" + // propertyValue = JsHelper.Enquote(StringUtil.GetEnumName((Enum)info.GetValue(this, null))); + // } + + // sb.AppendFormat("{0}.f_p_{1}={2};", XID, property, propertyValue); + //} + #endregion + + List currentModifiedProperties = FState.ModifiedProperties; + if (currentModifiedProperties.Count > 0) + { + // 更新当前控件的 F_STATE 状态 + string fstate = ConvertPropertiesToJObject(currentModifiedProperties).ToString(Formatting.None); + + if (PageManager.Instance.EnableFStateValidation) + { + // f_state_v是对整个f_state的验证,而非某个属性 + List totalModifiedProperties = FState.GetTotalModifiedProperties(); + JObject fstateall = ConvertPropertiesToJObject(totalModifiedProperties); + + sb.AppendFormat("F.f_state({0},{1},'{2}');", XID, fstate, GetFStateValidation(fstateall)); + } + else + { + sb.AppendFormat("F.f_state({0},{1});", XID, fstate); + } + } + + sb.Append(GetHiddenPropertyChangedScript()); + + sb.Append(GetEnabledPropertyChangedScript()); + + AddAjaxScript(sb); + } + + /// + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// + protected virtual void OnFirstPreRender() + { + #region old code + //foreach (string property in FState.TotalModifiedProperties) + //{ + // object propertyValue = null; + + // PropertyInfo info = this.GetType().GetProperty(property); + // if (info.PropertyType == typeof(String)) + // { + // propertyValue = info.GetValue(this, null).ToString(); + // } + // else if (info.PropertyType == typeof(Boolean)) + // { + // propertyValue = Convert.ToBoolean(info.GetValue(this, null)); + // } + // else if (info.PropertyType.BaseType == typeof(Enum)) + // { + // propertyValue = StringUtil.GetEnumName((Enum)info.GetValue(this, null)); + // } + + // OB.AddProperty("f_p_" + property, propertyValue); + + //} + + //// These properties has been modified in the past postbacks. + //// Every FineUI control should has this property. + //OB.AddProperty("f_props", new JArray(FState.TotalModifiedProperties), true); + + #endregion + + // f_state表明这个控件对应一个服务器端控件 + List totalModifiedProperties = FState.GetTotalModifiedProperties(); + if (totalModifiedProperties.Count > 0) + { + JObject fstateall = ConvertPropertiesToJObject(totalModifiedProperties); + string fstate = fstateall.ToString(Formatting.None); + + // 注:作为变量提取出来,是因为JS端构造函数中可能会用到这个变量 + AddStartupScript(String.Format("var {0}={1};", GetFStateScriptID(), fstate)); + + OB.AddProperty("f_state", GetFStateScriptID(), true); + if (PageManager.Instance.EnableFStateValidation) + { + OB.AddProperty("f_state_v", GetFStateValidation(fstateall)); + } + } + else + { + OB.AddProperty("f_state", "{}", true); + } + + + + // Every component need this property. + OB.AddProperty("id", ClientID); + + if (RenderWrapperNode) + { + OB.AddProperty("renderTo", WrapperID); + } + + if (Hidden) + { + OB.AddProperty("hidden", true); + } + if (HideMode != HideMode.Display) + { + OB.AddProperty("hideMode", HideModeName.GetName(HideMode)); + } + + if (!Enabled) + { + OB.AddProperty("disabled", true); + } + + foreach (Listener listener in Listeners) + { + OB.Listeners.AddProperty(listener.Event, listener.Handler, true); + } + + #region old code + + //if (AjaxPropertyChanged("Hidden", Hidden)) + //{ + // HiddenPropertyChanged(); + //} + + //// 渲染到客户端时的JavascriptId + //OB.AddProperty("id", ClientJavascriptID); + + // 不需要这样做, + //// 判断父控件是否用户控件(UserControl) + //if (Parent is UserControl || Parent is ContentPlaceHolder) + //{ + // if (!ResourceManagerInstance.IsStartupScriptExist(Parent as Control)) + // { + // AddStartupScript(Parent, String.Empty); + // } + //} + + #endregion + } + + + /// + /// 获取FState的JS变量 + /// + /// + protected string GetFStateScriptID() + { + return String.Format("{0}_state", XID); + } + + #endregion + + #region PropertyModified + + /// + /// 回发过程中此属性是否被改变 + /// 如果是客户端可以改变的属性,仅在服务器端改变时才返回 true, + /// (如果仅是客户端改变,则返回 false,因为客户端改变的属性不需要再输出相应的 JavaScript 脚本) + /// + /// + /// + protected bool PropertyModified(string propertyName) + { + bool modified = FState.ModifiedProperties.Contains(propertyName); + if (modified) + { + if (ClientAjaxProperties.Contains(propertyName)) + { + if (FState.ClientPropertiesModifiedInServer.Contains(propertyName)) + { + return true; + } + else + { + return false; + } + } + else + { + return true; + } + } + return false; + } + + /// + /// 回发过程中这些属性是否被改变 + /// 只要任何属性被改变,就返回 true + /// + /// + /// + protected bool PropertyModified(params string[] propertyNames) + { + foreach (string property in propertyNames) + { + if (PropertyModified(property)) + { + return true; + } + } + return false; + } + + //protected bool ClientPropertyModifiedInServer(string propertyName) + //{ + // return FState.ClientPropertiesModifiedInServer.Contains(propertyName); + //} + + + #region old code + ///// + ///// Whether the property has been changed in the past postbacks. + ///// + ///// + ///// + //protected bool TotalPropertyModified(string propertyName) + //{ + // return FState.TotalModifiedProperties.Contains(propertyName); + //} + + ///// + ///// Get client value of a property in the postback state(F_STATE). + ///// + ///// + ///// + //protected object GetPostBackClientValue(string propertyName) + //{ + // return PostBackState["X_" + propertyName]; + //} + #endregion + + #endregion + + #region RecoverPropertiesFromFState ConvertPropertiesToFState + + /// + /// 从JObject恢复控件的属性 + /// + /// 对象属性的JObject形式 + public void RecoverPropertiesFromJObject(JObject state) + { + foreach (JProperty propertyObj in state.Properties()) + { + string property = propertyObj.Name; + PropertyInfo info = this.GetType().GetProperty(property, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (info != null) + { + if (info.PropertyType.BaseType == typeof(Enum)) + { + info.SetValue(this, Enum.Parse(info.PropertyType, state.Value(property)), null); + } + else if (info.PropertyType == typeof(Unit)) + { + info.SetValue(this, Unit.Parse(state.Value(property)), null); + } + else if (info.PropertyType.BaseType == typeof(Array)) + { + if (info.PropertyType == typeof(Int32[])) + { + info.SetValue(this, JSONUtil.IntArrayFromJArray(state.Value(property)), null); + } + else if (info.PropertyType == typeof(String[])) + { + info.SetValue(this, JSONUtil.StringArrayFromJArray(state.Value(property)), null); + } + } + else + { + JToken jtoken = state.Property(property).Value; + if (jtoken is JContainer) + { + info.SetValue(this, jtoken, null); + } + else + { + object propertyValue = ((JValue)jtoken).Value; + + // 类型“System.Int64”的对象无法转换为类型“System.Int32”。 + // 类型“System.Int64”的对象无法转换为类型“System.Nullable`1[System.Int32]”。 + // 类型“System.Int64”的对象无法转换为类型“System.Int16”。 + // 类型“System.Int64”的对象无法转换为类型“System.Nullable`1[System.Int16]”。 + if (propertyValue != null && propertyValue.GetType() == typeof(Int64)) + { + if (info.PropertyType == typeof(Int32) || info.PropertyType == typeof(Int32?)) + { + propertyValue = Convert.ToInt32(propertyValue); + } + + if (info.PropertyType == typeof(Int16) || info.PropertyType == typeof(Int16?)) + { + propertyValue = Convert.ToInt16(propertyValue); + } + + // 类型“System.Int64”的对象无法转换为类型“System.Nullable`1[System.Double]”。 + // 注意:“2.0”会被解析为Int64,而“2.1”会被解析为Double,所以有可能会进入这个分支 + if (info.PropertyType == typeof(Double) || info.PropertyType == typeof(Double?)) + { + propertyValue = Convert.ToDouble(propertyValue); + } + + if (info.PropertyType == typeof(float) || info.PropertyType == typeof(float?)) + { + propertyValue = Convert.ToSingle(propertyValue); + } + } + + info.SetValue(this, propertyValue, null); + } + + } + } + + } + } + + + /// + /// 将控件的属性列表转化为JObject对象 + /// + /// 属性列表 + /// 属性列表的JObject形式 + public JObject ConvertPropertiesToJObject(List propertyList) + { + JObject jo = new JObject(); + foreach (string property in propertyList) + { + //// 如果包含压缩后的属性,则忽略 + //if (property.EndsWith("_GZ")) + //{ + // continue; + //} + + //string propertyStringValueUsedInGzipped = String.Empty; + //bool propertyGzippped = false; + //if (EnableFStateCompress) + //{ + // propertyGzippped = _gzippedAjaxProperties.Contains(property); + //} + + object propertyValue = GetPropertyJSONValue(property); + + + if (propertyValue is JToken) + { + JToken tokenValue = propertyValue as JToken; + jo.Add(property, tokenValue); + + + //// 此属性启用Gzip压缩,则先计算字符串值 + //if (propertyGzippped) + //{ + // propertyStringValueUsedInGzipped = tokenValue.ToString(Newtonsoft.Json.Formatting.None); + //} + + } + else + { + if (propertyValue is String) + { + // The browser HTML parser will see the within the string and it will interpret it as the end of the script element. + // http://www.xiaoxiaozi.com/2010/02/24/1708/ + // http://stackoverflow.com/questions/1659749/script-tag-in-javascript-string + string propertyValueStr = propertyValue.ToString().Replace("", @"<\/script>"); + jo.Add(property, propertyValueStr); + + //// 此属性启用Gzip压缩,则先计算字符串值 + //if (propertyGzippped) + //{ + // propertyStringValueUsedInGzipped = propertyValueStr; + //} + + } + else if (propertyValue is Unit) + { + int intValue = (Int32)((Unit)propertyValue).Value; + jo.Add(property, intValue); + } + else + { + jo.Add(property, new JValue(propertyValue)); + } + } + + + + //if (propertyGzippped && !String.IsNullOrEmpty(propertyStringValueUsedInGzipped)) + //{ + // string propertyGzippedValue = String.Empty; + + // // 1. 小于500个字符,不启用Gzipped压缩 + // if (propertyStringValueUsedInGzipped.Length > 500) + // { + // propertyGzippedValue = StringUtil.Gzip(propertyStringValueUsedInGzipped); + + // // 2. 压缩效果太差(不到原始大小的50%),则不启用Gzipped压缩 + // if (propertyGzippedValue.Length > (propertyStringValueUsedInGzipped.Length / 2)) + // { + // propertyGzippedValue = String.Empty; + // } + // } + + + // // 无论 propertyGzippedValue 是否为空字符串,都要输出来覆盖上次的结果(因为并非每一次的GZipped都有值) + // jo.Add(property + "_GZ", propertyGzippedValue); + + //} + + + } + return jo; //.ToString(Formatting.None); + } + + + // 获取属性的 JSON 对象值 + internal object GetPropertyJSONValue(string prop) + { + object propValue = null; + + PropertyInfo info = this.GetType().GetProperty(prop, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (info != null) + { + propValue = info.GetValue(this, null); + + if (info.PropertyType.BaseType == typeof(Enum)) + { + propValue = StringUtil.EnumToName((Enum)propValue); + } + else if (info.PropertyType.BaseType == typeof(Array)) + { + if (propValue == null) + { + propValue = new JArray(); + } + else + { + propValue = new JArray((Array)propValue); + } + } + } + + return propValue; + } + + #endregion + + #region AddAjaxScript + + private StringBuilder _ajaxScriptBuilder = new StringBuilder(); + + /// + /// AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 + /// + /// + internal void AddAjaxScript(string script) + { + if (!String.IsNullOrEmpty(script)) + { + _ajaxScriptBuilder.Append(script); + } + } + + /// + /// AJAX 回发阶段,添加反映属性改变的 JavaScript 脚本 + /// + /// + internal void AddAjaxScript(StringBuilder sb) + { + if (sb.Length > 0) + { + _ajaxScriptBuilder.Append(sb); + } + } + + + #endregion + + #region AddStartupCSS + + /// + /// 添加CSS样式 + /// + /// 键 + /// CSS内容 + protected void AddStartupCSS(string key, string cssContent) + { + if (!IsFineUIAjaxPostBack) + { + ResourceManager.Instance.AddStartupCSS(key, cssContent); + } + } + + /// + /// 删除CSS样式 + /// + /// 键 + protected void RemoveStartupCSS(string key) + { + if (!IsFineUIAjaxPostBack) + { + ResourceManager.Instance.RemoveStartupCSS(key); + } + } + + #endregion + + #region AddStartupScript AddStartupAbsoluteScript + + /// + /// 向页面添加控件无关脚本 + /// + /// 客户端脚本 + protected void AddStartupAbsoluteScript(string script) + { + if (!IsFineUIAjaxPostBack) + { + ResourceManager.Instance.AddAbsoluteStartupScript(script); + } + } + + /// + /// 向页面添加控件无关脚本 + /// + /// 客户端脚本 + /// 脚本层级 + protected void AddStartupAbsoluteScript(string script, int level) + { + if (!IsFineUIAjaxPostBack) + { + ResourceManager.Instance.AddAbsoluteStartupScript(script, level); + } + } + + /// + /// 添加控件相关脚本 + /// + /// 客户端脚本 + protected void AddStartupScript(string scriptContent) + { + if (!IsFineUIAjaxPostBack) + { + // 合并在基类中注册的脚本,然后整体注册 + if (ResourceManager.Instance.IsStartupScriptExist(this)) + { + scriptContent = ResourceManager.Instance.GetStartupScript(this).Script + scriptContent; + ResourceManager.Instance.RemoveStartupScript(this); + } + + if (Visible) + { + ResourceManager.Instance.AddStartupScript(this, scriptContent); + } + } + + #region old code + + //if (!IsFineUIAjaxPostBack) + //{ + // // 如果是页面第一次加载,或者不是FineUIAjax(比如是普通的PostBack或者是Asp.netAjax回发) + // AddStartupScript(this, scriptContent); + + // if (AjaxForceCompleteUpdate) + // { + // BoxState["__AllScript__"] = scriptContent.GetHashCode().ToString("X8"); + // } + // //SaveAjaxProperty("AllScript", scriptContent, true); + //} + //else + //{ + // if (AjaxForceCompleteUpdate) + // { + // // 如果强制更新控件的整个内容,并且内容变化了,则更新 + // if (BoxState["__AllScript__"].ToString() != scriptContent.GetHashCode().ToString("X8")) + // { + // AjaxCompleteUpdateControl(scriptContent); + // } + // } + // else + // { + // AjaxPartialUpdateControl(); + // } + //} + + #endregion + } + + #endregion + + #region GetHiddenPropertyChangedScript GetEnabledPropertyChangedScript + + /// + /// 获取 Hidden 属性改变的 JavaScript 脚本 + /// 有些控件可能需要特别的逻辑,因此这里为虚函数(比如 Window 控件、Tab 控件) + /// + /// 客户端脚本 + protected virtual string GetHiddenPropertyChangedScript() + { + if (PropertyModified("Hidden")) + { + return String.Format("{0}.f_setVisible();", XID); + } + return String.Empty; + } + + /// + /// 获取 Enabled 属性改变的 JavaScript 脚本 + /// 有些控件可能需要特别的逻辑,因此这里为虚函数 + /// + /// 客户端脚本 + protected virtual string GetEnabledPropertyChangedScript() + { + if (PropertyModified("Enabled")) + { + return String.Format("{0}.f_setDisabled();", XID); + } + return String.Empty; + } + + #endregion + + #region GetPostBackEventReference + + /// + /// 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','');) + /// + /// 客户端脚本 + public string GetPostBackEventReference() + { + return GetPostBackEventReference(String.Empty); + } + + /// + /// 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) + /// + /// 事件参数 + /// 客户端脚本 + public string GetPostBackEventReference(string eventArgument) + { + return GetPostBackEventReference(eventArgument, EnableAjax); + } + + /// + /// 获取回发页面的客户端脚本(比如:__doPostBack('btnChangeEnable','true');) + /// + /// 事件参数 + /// 是否启用AJAX + /// 客户端脚本 + public string GetPostBackEventReference(string eventArgument, bool enableAjax) + { + StringBuilder sb = new StringBuilder(); + + if (enableAjax != PageManager.Instance.EnableAjax) + { + sb.AppendFormat("F.controlEnableAjax={0};", enableAjax ? "true" : "false"); + } + + + if (EnableAjaxLoading != PageManager.Instance.EnableAjaxLoading) + { + sb.AppendFormat("F.controlEnableAjaxLoading={0};", EnableAjaxLoading ? "true" : "false"); + } + + if (AjaxLoadingType != PageManager.Instance.AjaxLoadingType) + { + sb.AppendFormat("F.controlAjaxLoadingType='{0}';", AjaxLoadingTypeName.GetName(AjaxLoadingType)); + } + + sb.Append(Page.ClientScript.GetPostBackEventReference(this, eventArgument)); + sb.Append(";"); + + return sb.ToString(); + } + + // This is the same as UniqueID + // Get PostBackID that can be used in postback event. + //internal string GetPostBackID() + //{ + // string postbackscript = Page.ClientScript.GetPostBackEventReference(this, String.Empty); + // // __doPostBack('regionPanel$leftRegion$Button1','') + // int start = postbackscript.IndexOf("'"), + // end = postbackscript.LastIndexOf("','')"); + // return postbackscript.Substring(start + 1, end - start - 1); + //} + + #endregion + + #region GetSetHiddenFieldValueScript + + /// + /// 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) + /// + /// 隐藏字段ID + /// 隐藏字段值 + /// + protected string GetSetHiddenFieldValueScript(string id, string value) + { + return String.Format("F.setHidden('{0}','{1}');", id, value); + } + + + /// + /// 获取修改隐藏表单字段值的脚本(如果此隐藏表单字段不存在,则添加) + /// + /// 隐藏字段ID + /// 隐藏字段值 + /// 隐藏字段所在的页面对象(JavaScript实例window) + /// 客户端脚本 + protected string GetSetHiddenFieldValueScript(string id, string value, string windowObj) + { + if (String.IsNullOrEmpty(windowObj) || windowObj == "window") + { + return GetSetHiddenFieldValueScript(id, value); + } + return String.Format("{2}.F.setHidden('{0}','{1}');", id, value, windowObj); + } + + #endregion + + #region ResolveAttribuites + + /// + /// 添加Attributes中的属性值 + /// + /// HtmlNodeBuilder对象 + protected void ResolveAttribuites(HtmlNodeBuilder htmlBuilder) + { + foreach (JProperty propertyObj in Attributes.Properties()) + { + string propName = propertyObj.Name; + string propValue = Attributes.Value(propName); + htmlBuilder.SetProperty(propName, propValue); + } + } + + #endregion + + #region protected GetListenerFunction AddListener + + /// + /// 获取客户端事件处理函数 + /// + /// + /// + /// + /// + protected string GetListenerFunction(string eventName, string jsContent, params string[] funParameters) + { + var handler = Listeners.GetEventHandler(eventName); + if (!String.IsNullOrEmpty(handler)) + { + jsContent += String.Format("return {0}.apply(this,arguments);", handler); + } + + return JsHelper.GetFunction(jsContent, funParameters); + } + + /// + /// 向 OB 中添加客户端事件处理函数 + /// + /// + /// + /// + protected void AddListener(string eventName, string jsContent, params string[] funParameters) + { + OB.Listeners.AddProperty(eventName, GetListenerFunction(eventName, jsContent, funParameters), true); + } + + #endregion + + #region GetFStateValidation ValidateFState + + + private static string GetFStateValidation(JObject stateObj) + { + string fstate = stateObj.ToString(Newtonsoft.Json.Formatting.None); + return GetShortMD5HashWithSeed(fstate); + } + + private static bool ValidateFState(JObject stateObj, string validationString) + { + string fstate = stateObj.ToString(Newtonsoft.Json.Formatting.None); + string fstateCode = GetShortMD5HashWithSeed(fstate); //.GetHashCode().ToString(); + + if (fstateCode == validationString) + { + return true; + } + else + { + return false; + } + } + + private static string GetShortMD5HashWithSeed(string fstate) + { + string md5HashStr = StringToMD5Hash(fstate + GetFStateValidationSeed()); + return md5HashStr.Substring(0, 3) + md5HashStr.Substring(md5HashStr.Length - 3, 3); + } + + private static string StringToMD5Hash(string inputString) + { + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString)); + string a = System.Text.Encoding.Default.GetString(encryptedBytes); + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < encryptedBytes.Length; i++) + { + sb.AppendFormat("{0:x2}", encryptedBytes[i]); + } + return sb.ToString(); + } + + private static string _fstateValidationSeed = String.Empty; + private static string GetFStateValidationSeed() + { + if (String.IsNullOrEmpty(_fstateValidationSeed)) + { + _fstateValidationSeed = new Guid().ToString(); + } + return _fstateValidationSeed; + } + + #endregion + + #region oldcode + + //// 获取客户端可用的图标 URL 地址 + //protected string GetResolvedIconUrl(Icon icon, string iconUrl) + //{ + // /* + // string url = iconUrl; + // if (String.IsNullOrEmpty(url)) + // { + // if (icon != Icon.None) + // { + // url = IconHelper.GetIconUrl(icon); + // } + // } + + // return ResolveUrl(url); + // * */ + // return IconHelper.GetResolvedIconUrl(icon, iconUrl); + //} + + #endregion + + #region oldcode + + + //private Dictionary _xProperties = new Dictionary(); + + //internal void SaveXProperty(string key, string value) + //{ + // _xProperties[key] = value; + //} + + //internal bool XPropertyModified(string key, string currentValue) + //{ + // if (_xProperties.ContainsKey(key)) + // { + // string lastValue = _xProperties[key]; + // if (lastValue != currentValue) + // { + // return true; + // } + // } + // return false; + //} + + + + + //private Dictionary _ajaxProperties__ = new Dictionary(); + + ///// + ///// + ///// + ///// + ///// + ///// + //internal bool AjaxPropertyChanged(string key, object objSource) + //{ + // // 如果不是FineUIAjax回发,则不执行此逻辑 + // if (!IsFineUIAjaxPostBack) + // { + // return false; + // } + + // if (!_ajaxProperties__.ContainsKey(key)) + // { + // // 对于在Page_Load之后动态添加的控件,肯定会运行到这里,对这些属性不做处理 + // // 所以动态添加控件,一定要在 Page_Init 中进行 + // // throw new Exception(String.Format("Please set the property [{0}] in Page_OnPreLoad.", key)); + // return false; + // } + + // string objStr = String.Empty; + // if (objSource != null) + // { + // objStr = objSource.ToString(); + // } + + // if (_ajaxProperties__[key] == objStr) + // { + // return false; + // } + // return true; + //} + + //internal void SaveAjaxProperty(string key, object objSource) + //{ + // string saveValue = String.Empty; + // if (objSource != null) + // { + // saveValue = objSource.ToString(); + // } + + // _ajaxProperties__[key] = saveValue; + //} + + + + + #endregion + + #region oldcode + + ///// + ///// 如果不是FineUIAjax回发,则保存值的改变到ViewState,同时返回false + ///// 如果是FineUIAjax回发,则判断此key存储在ViewState的值是否改变,如果改变则返回true + ///// + ///// + ///// + ///// + //internal bool AjaxPropertyChanged(string key, object objSource) + //{ + // string hashCode = CreateAjaxPropertyValue(objSource); + + // // 如果不是FineUIAjax回发,则保存值的改变到ViewState,同时返回false + // if (!IsFineUIAjaxPostBack) + // { + // SaveAjaxProperty(key, hashCode); + // return false; + // } + + // if (GetAjaxProperty(key) != hashCode) + // { + // SaveAjaxProperty(key, hashCode); + // return true; + // } + // else + // { + // return false; + // } + //} + + + ///// + ///// 保存HashCode到ViewState + ///// + ///// + ///// + ///// + //internal void SaveAjaxProperty(string key, object hashCode, bool source) + //{ + // string hashCodeStr = String.Empty; + // if (hashCode != null) + // { + // hashCodeStr = hashCode.ToString(); + // if (source) + // { + // hashCodeStr = CreateAjaxPropertyValue(hashCode); + // } + // } + + // SaveAjaxProperty(key, hashCodeStr); + //} + + ///// + ///// 生成需要保存的Ajax属性的值 + ///// 对于Boolean型的,直接返回"0"或者"1" + ///// 对于其他类型,返回其ToString后的HashCode + ///// + ///// + ///// + //private string CreateAjaxPropertyValue(object objSource) + //{ + // if (objSource is Boolean) + // { + // return (Boolean)objSource ? "1" : "0"; + // } + + // string strSource = objSource.ToString(); + // return String.IsNullOrEmpty(strSource) ? "" : strSource.GetHashCode().ToString("X8"); + //} + + ///// + ///// 保存HashCode到ViewState + ///// + ///// + ///// + //private void SaveAjaxProperty(string key, string hashCode) + //{ + // key = String.Format("{0}", key); + // ViewState[key] = hashCode; + //} + + + ///// + ///// 从ViewState读取HashCode + ///// + ///// + ///// + //private string GetAjaxProperty(string key) + //{ + // key = String.Format("{0}", key); + + // object obj = ViewState[key]; + // return obj == null ? String.Empty : (string)obj; + //} + + #endregion + + #region oldcode + + //private void RenderAjaxUpdateScript() + //{ + // if (_ajaxUpdateScriptList.Count > 0) + // { + // StringBuilder sb = new StringBuilder(); + // foreach (string script in _ajaxUpdateScriptList) + // { + // sb.Append(script); + // } + + // AddStartupScript(this, sb.ToString()); + // } + //} + + + ///// + ///// 全部更新不适用于所有控件 + ///// + ///// + //private void AjaxCompleteUpdateControl(string scriptContent) + //{ + // if (this.Controls.Count > 0) + // { + // // 如果是容器控件,则目前不支持Ajax更新 + // // TODO + // } + // else + // { + + // #region 重要说明 + + // // 这是一个复杂的过程,有两种情况需要考虑: + // // 1.直接渲染的控件,先销毁,在重新渲染 + // // 2.依赖父容器渲染的的控件,首先取得父容器,本控件在父容器的位置,然后从父容器中销毁此控件,创建新的控件,将新的控件添加到删除的位置,父容器重新布局。 + // // 第二种情况的整体结构如下 + // ////// 1.取得父容器 + // ////// var owner=X.i3.ownerCt; + // ////// 2.本控件在父容器的位置 + // ////// var insertIndex=owner.items.indexOf(X.i3); + // ////// 3.从父容器中销毁此控件 + // ////// owner.remove(X.i3); + // ////// 4.创建新的控件 + // ////// X.i3=new Ext.form.TextField({id:"SimpleForm1_tbxUserName",stateful:false,fieldLabel:"用户名2",labelSeparator:" *",anchor:"-25px",name:"SimpleForm1$tbxUserName",disabled:false,allowBlank:false,listeners:{change:function(){box_pageStateChange();}}}); + // ////// 5.将新的控件添加到删除的位置 + // ////// owner.insert(insertIndex,X.i3); + // ////// 6.父容器重新布局 + // ////// owner.doLayout(); + + + // #endregion + + // string startupScript = String.Empty; + + // // 如果是Panel,并且不使用布局,则需要把内容先移出来,否则会在Panel被重建时被清空 + // if (this is PanelBase && (this as PanelBase).RenderChildrenAsContent) + // { + // startupScript += String.Format("Ext.get(X.{0}.contentEl).hide();Ext.get(X.{0}.contentEl).appendTo(document.forms[0]);", ClientJavascriptID); + // } + + // // 更新Javascript对象和UI重新布局 + // startupScript += String.Format("F.ajax.updateObject(X.{0},{1},{2});", + // ClientJavascriptID, + // String.Format("function(){{{0}}}", scriptContent), + // RenderWrapperDiv.ToString().ToLower()); + + // AddStartupScript(this, startupScript); + // } + //} + + + //[Category(CategoryName.BASEOPTIONS)] + //[DefaultValue(false)] + //[Description("Ajax回发时强制更新此控件全部内容")] + //internal virtual bool AjaxForceCompleteUpdate + //{ + // get + // { + // object obj = BoxState["AjaxForceCompleteUpdate"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["AjaxForceCompleteUpdate"] = value; + // } + //} + + #endregion + + #region oldcode + + + //public override void RenderBeginTag(HtmlTextWriter writer) + //{ + // if (RenderImmediately) + // { + // //writer.AddAttribute(HtmlTextWriterAttribute.Id, ContainerID); + // //writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "inline"); + // //writer.RenderBeginTag(HtmlTextWriterTag.Div); + + // // 用上面的语句,div中间有很大的空白,看着不爽 + // writer.Write(String.Format("
", ContainerID)); + // } + //} + + //public override void RenderEndTag(HtmlTextWriter writer) + //{ + // if (RenderImmediately) + // { + // //writer.RenderEndTag(); + // writer.Write("
"); + // } + //} + + + //private string _beforeOnPreRenderScript = String.Empty; + + ///// + ///// 此控件预渲染之前需要执行的脚本 + ///// + //internal string BeforeOnPreRenderScript + //{ + // get + // { + // return _beforeOnPreRenderScript; + // } + // set + // { + // _beforeOnPreRenderScript = value; + // } + //} + + //#region IsInUpdatePanel + + ///// + ///// 此控件是否在UpdatePanel中 + ///// 注意:在局部回发时,只要在 UpdatePanel 中的控件都要更新,但有例外情况(如果UpdatePanel属性 UpdateMode="Conditional") + ///// + ///// + ///// + //public bool IsInPartialRendering() + //{ + // if (HttpContext.Current != null && HttpContext.Current.Request != null) + // { + // for (Control control = this.Parent; control != null; control = control.Parent) + // { + // if (control.GetType().FullName.Contains("System.Web.UI.UpdatePanel")) + // { + // if ((control as UpdatePanel).IsInPartialRendering) + // { + // return true; + // } + // } + // } + // } + // return false; + //} + + //#endregion + + //#region RefParentControl + + //private ControlBase _refParentControl; + + ///// + ///// 需要指定父控件,以便保持控件的JS的渲染顺序是正确的(目前只在MasterPage中使用过一次) + ///// + //internal ControlBase RefParentControl + //{ + // get { return _refParentControl; } + // set { _refParentControl = value; } + //} + + //#endregion + + + ///// + ///// 添加启动脚本 + ///// 这个方法容易让人误解,去除不用 + ///// + ///// + //protected void AddStartupScript(string script) + //{ + // #region old code + // //// 如果是局部回发,并且此控件不在UpdatePanel中,则不重新创建此控件 + // //if (ResourceHelper.IsPartialPostBack() && ResourceHelper.IsContainScriptManager(Page) && !IsInUpdatePanel()) + // //{ + // // return; + // //} + + // //if (ResourceHelper.IsPartialPostBack(Page) && !IsInPartialRendering()) + // //{ + // // return; + // //} + + // //string addOnScript = ""; + // //if (AddOnJavaScript != "" && AddOnJavaScript.Contains("{0}")) + // //{ + // // addOnScript = String.Format(AddOnJavaScript, ClientID); + // //} + // //_rm.AddStartupScript(this, scriptContent + addOnScript); + // #endregion + + // AddStartupScript(this, script); + //} + + + + //protected void AddStartupScript(Control control, string script) + //{ + // AddStartupScript(control, script, String.Empty); + //} + + ///// + ///// 添加启动脚本 + ///// + ///// + ///// + //protected void AddStartupScript(Control control, string script, string extraScript) + //{ + // // 如果控件 可见, 才渲染 javascript 到页面中 + // if (Visible) + // { + // ResourceManager.Instance.AddStartupScript(control, script, extraScript); + // } + //} + + + + //protected virtual void SetDirty() + //{ + // //ViewState.SetDirty(true); + //} + + + + ////bool IStateManager.IsTrackingViewState + ////{ + //// get + //// { + //// return IsTrackingViewState; + //// } + ////} + + ////void IStateManager.LoadViewState(object state) + ////{ + //// LoadViewState(state); + ////} + + ////object IStateManager.SaveViewState() + ////{ + //// return SaveViewState(); + ////} + + ////void IStateManager.TrackViewState() + ////{ + //// TrackViewState(); + ////} + + + //void ISetDirty.SetDirty() + //{ + // //SetDirty(); + //} + + #endregion + + #region oldcode + + ///// + ///// 在页面的Page_Load之前执行 + ///// + ///// + ///// + //protected virtual void OnPreLoad(object sender, EventArgs e) + //{ + // //SaveAjaxProperty("Hidden", Hidden); + //} + + #endregion + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/ControlBase/ControlBaseCollection.cs b/FineUI_v6/FineUI/BaseWebControls/ControlBase/ControlBaseCollection.cs new file mode 100644 index 0000000..86c676f --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/ControlBase/ControlBaseCollection.cs @@ -0,0 +1,78 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ControlBaseCollection.cs + * CreatedOn: 2008-06-08 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// + /// 控件集合 + /// + public class ControlBaseCollection : BaseCollection + { + /// + /// 构造函数 + /// + /// 父控件实例 + public ControlBaseCollection(ControlBase parent) + : base(parent) + { + + } + + /* + protected override void InsertItem(int index, ControlBase item) + { + item.RenderWrapperNode = false; + _parent.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + _parent.Controls.RemoveAt(index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + // We should only remove this collection related controls + // Note we must loop from the last element(Count-1) to the first one(0) + for (int i = Count - 1; i >= 0; i--) + { + _parent.Controls.RemoveAt(i); + } + + base.ClearItems(); + } + */ + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/ControlBase/Listener/Listener.cs b/FineUI_v6/FineUI/BaseWebControls/ControlBase/Listener/Listener.cs new file mode 100644 index 0000000..d7477bb --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/ControlBase/Listener/Listener.cs @@ -0,0 +1,120 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Listener.cs + * CreatedOn: 2014-09-03 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Collections; + + +namespace FineUI +{ + /// + /// 客户端事件 + /// + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Event")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Listener + { + #region Constructor + + /// + /// 构造函数 + /// + public Listener() + { + + } + + /// + /// 构造函数 + /// + /// 客户端事件名称 + /// 客户端事件处理函数名称 + public Listener(string __event, string handler) + { + Event = __event; + Handler = handler; + } + + #endregion + + #region Properties + + private string _event = String.Empty; + /// + /// 客户端事件名称 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("客户端事件名称")] + [NotifyParentProperty(true)] + public string Event + { + get + { + return _event; + } + set + { + _event = value; + } + } + + private string _handler = String.Empty; + /// + /// 客户端事件处理函数名称 + /// + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("客户端事件处理函数名称")] + [NotifyParentProperty(true)] + public string Handler + { + get + { + return _handler; + } + set + { + _handler = value; + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/BaseWebControls/ControlBase/Listener/ListenerCollection.cs b/FineUI_v6/FineUI/BaseWebControls/ControlBase/Listener/ListenerCollection.cs new file mode 100644 index 0000000..1f4002e --- /dev/null +++ b/FineUI_v6/FineUI/BaseWebControls/ControlBase/Listener/ListenerCollection.cs @@ -0,0 +1,60 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ListenerCollection.cs + * CreatedOn: 2014-09-03 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// + /// 客户端事件集合 + /// + public class ListenerCollection : Collection + { + /// + /// 获取客户端处理函数名称 + /// + /// 事件名称 + /// 客户端处理函数名称 + public string GetEventHandler(string eventName) + { + string handler = String.Empty; + foreach (Listener item in this) + { + if (item.Event == eventName) + { + handler = item.Handler; + break; + } + } + + return handler; + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Config/ConfigSection.cs b/FineUI_v6/FineUI/Business/Config/ConfigSection.cs new file mode 100644 index 0000000..0dc484e --- /dev/null +++ b/FineUI_v6/FineUI/Business/Config/ConfigSection.cs @@ -0,0 +1,411 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: ConfigSection.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * + * + * + * + * + */ + +#endregion + + +using System; +using System.Configuration; + +namespace FineUI +{ + /// + /// FineUIWeb.configеý + /// + public class ConfigSection : ConfigurationSection + { + /// + /// + /// + [ConfigurationProperty(ConfigPropertyName.THEME, DefaultValue = ConfigPropertyValue.THEME_DEFAULT)] + public string Theme + { + get + { + return (string)base[ConfigPropertyName.THEME]; + } + set + { + base[ConfigPropertyName.THEME] = value; + } + } + + /// + /// + /// + [ConfigurationProperty(ConfigPropertyName.LANGUAGE, DefaultValue = ConfigPropertyValue.LANGUAGE_DEFAULT_STRING)] + public string Language + { + get + { + return (string)base[ConfigPropertyName.LANGUAGE]; + } + set + { + base[ConfigPropertyName.LANGUAGE] = value; + } + } + + /// + /// ֤Ϣʾλ + /// + [ConfigurationProperty(ConfigPropertyName.FROMMESSAGETARGET, DefaultValue = ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT_STRING)] + public string FormMessageTarget + { + get + { + return (string)base[ConfigPropertyName.FROMMESSAGETARGET]; + } + set + { + base[ConfigPropertyName.FROMMESSAGETARGET] = value; + } + } + + /// + /// ֮ļ + /// + [ConfigurationProperty(ConfigPropertyName.FORMROWITEMSSPACE, DefaultValue = ConfigPropertyValue.FORMROW_ITEMSSPACE_DEFAULT)] + public int FormRowItemsSpace + { + get + { + return (int)base[ConfigPropertyName.FORMROWITEMSSPACE]; + } + set + { + base[ConfigPropertyName.FORMROWITEMSSPACE] = value; + } + } + + + /// + /// бǩλ + /// + [ConfigurationProperty(ConfigPropertyName.FORMLABELALIGN, DefaultValue = ConfigPropertyValue.FORM_LABELALIGN_DEFAULT_STRING)] + public string FormLabelAlign + { + get + { + return (string)base[ConfigPropertyName.FORMLABELALIGN]; + } + set + { + base[ConfigPropertyName.FORMLABELALIGN] = value; + } + } + + /// + /// ؼҲ߽ľ + /// + [ConfigurationProperty(ConfigPropertyName.FORMOFFSETRIGHT, DefaultValue = ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT)] + public int FormOffsetRight + { + get + { + return (int)base[ConfigPropertyName.FORMOFFSETRIGHT]; + } + set + { + base[ConfigPropertyName.FORMOFFSETRIGHT] = value; + } + } + + /// + /// ؼǩĿ + /// + [ConfigurationProperty(ConfigPropertyName.FORMLABELWIDTH, DefaultValue = ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT)] + public int FormLabelWidth + { + get + { + return (int)base[ConfigPropertyName.FORMLABELWIDTH]; + } + set + { + base[ConfigPropertyName.FORMLABELWIDTH] = value; + } + } + + /// + /// ؼǩķָ + /// + [ConfigurationProperty(ConfigPropertyName.FORMLABELSEPARATOR, DefaultValue = ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT)] + public string FormLabelSeparator + { + get + { + return (string)base[ConfigPropertyName.FORMLABELSEPARATOR]; + } + set + { + base[ConfigPropertyName.FORMLABELSEPARATOR] = value; + } + } + + /// + /// AJAX + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEAJAX, DefaultValue = ConfigPropertyValue.ENABLE_AJAX_DEFAULT)] + public bool EnableAjax + { + get + { + return (bool)base[ConfigPropertyName.ENABLEAJAX]; + } + set + { + base[ConfigPropertyName.ENABLEAJAX] = value; + } + } + + /// + /// AJAXʾϢ + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEAJAXLOADING, DefaultValue = ConfigPropertyValue.ENABLE_AJAX_LOADING_DEFAULT)] + public bool EnableAjaxLoading + { + get + { + return (bool)base[ConfigPropertyName.ENABLEAJAXLOADING]; + } + set + { + base[ConfigPropertyName.ENABLEAJAXLOADING] = value; + } + } + + /// + /// AJAXʾϢ + /// + [ConfigurationProperty(ConfigPropertyName.AJAXLOADINGTYPE, DefaultValue = ConfigPropertyValue.AJAX_LOADING_TYPE_DEFAULT_STRING)] + public string AjaxLoadingType + { + get + { + return (string)base[ConfigPropertyName.AJAXLOADINGTYPE]; + } + set + { + base[ConfigPropertyName.AJAXLOADINGTYPE] = value; + } + } + + /// + /// ͻAJAXʱʱ + /// + [ConfigurationProperty(ConfigPropertyName.AJAXTIMEOUT, DefaultValue = ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT)] + public int AjaxTimeout + { + get + { + return (int)base[ConfigPropertyName.AJAXTIMEOUT]; + } + set + { + base[ConfigPropertyName.AJAXTIMEOUT] = value; + } + } + + /// + /// Ƿô壨ExtJS11pxΪ12px + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEBIGFONT, DefaultValue = false)] + public bool EnableBigFont + { + get + { + return (bool)base[ConfigPropertyName.ENABLEBIGFONT]; + } + set + { + base[ConfigPropertyName.ENABLEBIGFONT] = value; + } + } + + /// + /// Ƿõģʽ + /// + [ConfigurationProperty(ConfigPropertyName.DEBUGMODE, DefaultValue = false)] + public bool DebugMode + { + get + { + return (bool)base[ConfigPropertyName.DEBUGMODE]; + } + set + { + base[ConfigPropertyName.DEBUGMODE] = value; + } + } + + /// + /// JSļڵĸĿ¼ + /// + [ConfigurationProperty(ConfigPropertyName.JSBASEPATH, DefaultValue = ConfigPropertyValue.JS_BASE_PATH_DEFAULT)] + public string JSBasePath + { + get + { + return (string)base[ConfigPropertyName.JSBASEPATH]; + } + set + { + base[ConfigPropertyName.JSBASEPATH] = value; + } + } + + /// + /// ͼڵĸĿ¼ + /// + [ConfigurationProperty(ConfigPropertyName.ICONBASEPATH, DefaultValue = ConfigPropertyValue.ICON_BASE_PATH_DEFAULT)] + public string IconBasePath + { + get + { + return (string)base[ConfigPropertyName.ICONBASEPATH]; + } + set + { + base[ConfigPropertyName.ICONBASEPATH] = value; + } + } + + /// + /// ԶڵĸĿ¼ + /// + [ConfigurationProperty(ConfigPropertyName.CUSTOMTHEMEBASEPATH, DefaultValue = ConfigPropertyValue.CUSTOM_THEME_BASE_PATH_DEFAULT)] + public string CustomThemeBasePath + { + get + { + return (string)base[ConfigPropertyName.CUSTOMTHEMEBASEPATH]; + } + set + { + base[ConfigPropertyName.CUSTOMTHEMEBASEPATH] = value; + } + } + + /// + /// Զ + /// + [ConfigurationProperty(ConfigPropertyName.CUSTOMTHEME, DefaultValue = ConfigPropertyValue.CUSTOM_THEME_DEFAULT)] + public string CustomTheme + { + get + { + return (string)base[ConfigPropertyName.CUSTOMTHEME]; + } + set + { + base[ConfigPropertyName.CUSTOMTHEME] = value; + } + } + + /// + /// ǷFStateѹ֧֣ + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEFSTATECOMPRESS, DefaultValue = ConfigPropertyValue.ENABLE_FSTATE_COMPRESS_DEFAULT)] + public bool EnableFStateCompress + { + get + { + return (bool)base[ConfigPropertyName.ENABLEFSTATECOMPRESS]; + } + set + { + base[ConfigPropertyName.ENABLEFSTATECOMPRESS] = value; + } + } + + /// + /// ǷFState֤ĬΪtrue + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEFSTATEVALIDATION, DefaultValue = ConfigPropertyValue.ENABLE_FSTATE_VALIDATION_DEFAULT)] + public bool EnableFStateValidation + { + get + { + return (bool)base[ConfigPropertyName.ENABLEFSTATEVALIDATION]; + } + set + { + base[ConfigPropertyName.ENABLEFSTATEVALIDATION] = value; + } + } + + + /// + /// ǷҳIE=edgeʶ + /// + [ConfigurationProperty(ConfigPropertyName.IEEDGE, DefaultValue = true)] + public bool IEEdge + { + get + { + return (bool)base[ConfigPropertyName.IEEDGE]; + } + set + { + base[ConfigPropertyName.IEEDGE] = value; + } + } + + + /// + /// Ƿñıȷ϶Ի + /// + [ConfigurationProperty(ConfigPropertyName.ENABLEFORMCHANGECONFIRM, DefaultValue = ConfigPropertyValue.ENABLE_FORMCHANGECONFIRM_DEFAULT)] + public bool EnableFormChangeConfirm + { + get + { + return (bool)base[ConfigPropertyName.ENABLEFORMCHANGECONFIRM]; + } + set + { + base[ConfigPropertyName.ENABLEFORMCHANGECONFIRM] = value; + } + } + + + + /// + /// ڼͼƬ + /// + [ConfigurationProperty(ConfigPropertyName.LOADINGIMAGENUMBER, DefaultValue = ConfigPropertyValue.LOADING_IMAGE_NUMBER_DEFAULT)] + public int LoadingImageNumber + { + get + { + return (int)base[ConfigPropertyName.LOADINGIMAGENUMBER]; + } + set + { + base[ConfigPropertyName.LOADINGIMAGENUMBER] = value; + } + } + + + } +} diff --git a/FineUI_v6/FineUI/Business/Config/Constants.cs b/FineUI_v6/FineUI/Business/Config/Constants.cs new file mode 100644 index 0000000..a30b097 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Config/Constants.cs @@ -0,0 +1,243 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Constants.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + + /// + /// 常量 + /// + public static class Constants + { + + /// + /// 绝对脚本的默认级别(仅内部使用) + /// + public static readonly int ABSOLUTE_STARTUP_SCRIPT_DEFAULT_LEVEL = 100; + + + + // http://stackoverflow.com/questions/11832930/html-input-file-accept-attribute-file-type-csv + + /// + /// 文件类型 + /// + public static readonly string FILETYPE_CSV = ".csv"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_EXCEL = ".xls,.xlsx"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_WORD = ".doc,.docx"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_TEXT = ".txt"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_IMAGES = "image/*"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_HTML = "text/html"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_VIDEO = "video/*"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_AUDIO = "audio/*"; + /// + /// 文件类型 + /// + public static readonly string FILETYPE_PDF = ".pdf"; + + + } + + + /// + /// 配置字段名称 + /// + internal static class ConfigSectionName + { + public const string FineUI = "FineUI"; + } + + + /// + /// 字段属性名称 + /// + internal static class ConfigPropertyName + { + public const string THEME = "Theme"; + public const string LANGUAGE = "Language"; + public const string FROMMESSAGETARGET = "FormMessageTarget"; + public const string FORMOFFSETRIGHT = "FormOffsetRight"; + public const string FORMLABELWIDTH = "FormLabelWidth"; + public const string FORMLABELSEPARATOR = "FormLabelSeparator"; + public const string FORMLABELALIGN = "FormLabelAlign"; + public const string ENABLEAJAX = "EnableAjax"; + public const string ENABLEAJAXLOADING = "EnableAjaxLoading"; + public const string AJAXLOADINGTYPE = "AjaxLoadingType"; + public const string AJAXTIMEOUT = "AjaxTimeout"; + public const string ENABLEBIGFONT = "EnableBigFont"; + public const string DEBUGMODE = "DebugMode"; + public const string ICONBASEPATH = "IconBasePath"; + public const string JSBASEPATH = "JSBasePath"; + public const string CUSTOMTHEMEBASEPATH = "CustomThemeBasePath"; + public const string CUSTOMTHEME = "CustomTheme"; + public const string ENABLEFSTATECOMPRESS = "EnableFStateCompress"; + public const string ENABLEFSTATEVALIDATION = "EnableFStateValidation"; + + public const string IEEDGE = "IEEdge"; + public const string ENABLEFORMCHANGECONFIRM = "EnableFormChangeConfirm"; + + public const string FORMROWITEMSSPACE = "FormRowItemsSpace"; + + public const string LOADINGIMAGENUMBER = "LoadingImageNumber"; + } + + /// + /// 字段属性值 + /// + internal static class ConfigPropertyValue + { + public const MessageTarget FORM_MESSAGETARGET_DEFAULT = MessageTarget.Side; + public const string FORM_MESSAGETARGET_DEFAULT_STRING = "Side"; + + public const LabelAlign FORM_LABELALIGN_DEFAULT = LabelAlign.Left; + public const string FORM_LABELALIGN_DEFAULT_STRING = "Left"; + + public const int FORM_OFFSETRIGHT_DEFAULT = 0; + public const string FORM_OFFSETRIGHT_DEFAULT_STRING = "0"; + + public const int FORM_LABELWIDTH_DEFAULT = 100; + public const string FORM_LABELWIDTH_DEFAULT_STRING = "100"; + + public const string FORM_LABELSEPARATOR_DEFAULT = ":"; + + public const string THEME_DEFAULT = "Neptune"; + + public const Language LANGUAGE_DEFAULT = Language.ZH_CN; + public const string LANGUAGE_DEFAULT_STRING = "zh_CN"; + + public const string LANGUAGE_EN = "en"; + public const string LANGUAGE_ZH_CN = "zh_CN"; + public const string LANGUAGE_ZH_TW = "zh_TW"; + public const string LANGUAGE_PT_BR = "pt_BR"; + public const string LANGUAGE_TR = "tr"; + public const string LANGUAGE_RU = "ru"; + + + // Ajax 超时时间(单位:秒) + public const int AJAX_TIMEOUT_DEFAULT = 120; + + // 是否启用 Ajax + public const bool ENABLE_AJAX_DEFAULT = true; + + public const bool ENABLE_AJAX_LOADING_DEFAULT = true; + + public const AjaxLoadingType AJAX_LOADING_TYPE_DEFAULT = AjaxLoadingType.Default; + public const string AJAX_LOADING_TYPE_DEFAULT_STRING = "Default"; + + public const string AJAX_LOADING_TYPE_MASK = "Mask"; + + // 是否启用开发者模式(引入 JS 的非压缩版本,以及页面 JS 的格式化输出) + public const bool DEBUG_MODE_DEFAULT = false; + + + public const string ICON_BASE_PATH_DEFAULT = "~/res/icon"; + + public const string JS_BASE_PATH_DEFAULT = "~/extjs"; + + public const string CUSTOM_THEME_BASE_PATH_DEFAULT = "~/res/themes"; + + public const string CUSTOM_THEME_DEFAULT = ""; + + + public const bool ENABLE_FSTATE_COMPRESS_DEFAULT = false; + public const bool ENABLE_FSTATE_VALIDATION_DEFAULT = false; + + public const bool ENABLE_FORMCHANGECONFIRM_DEFAULT = false; + + public const int FORMROW_ITEMSSPACE_DEFAULT = 8; + public const string FORMROW_ITEMSSPACE_DEFAULT_STRING = "8"; + + + public const int LOADING_IMAGE_NUMBER_DEFAULT = 1; + + + } + + + + /// + /// 属性分类的名称 + /// + internal static class CategoryName + { + /// + /// 基本属性 + /// + public const string BASEOPTIONS = "基本属性"; + + /// + /// 属性 + /// + public const string OPTIONS = "属性"; + + /// + /// 表单验证 + /// + public const string VALIDATION = "表单验证"; + + + /// + /// 布局 + /// + public const string LAYOUT = "布局"; + + + /// + /// 事件 + /// + public const string ACTION = "事件"; + + ///// + ///// 设计时 + ///// + //public const string DESIGN_TIME = "设计时"; + + } + +} diff --git a/FineUI_v6/FineUI/Business/Config/GlobalConfig.cs b/FineUI_v6/FineUI/Business/Config/GlobalConfig.cs new file mode 100644 index 0000000..38c1769 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Config/GlobalConfig.cs @@ -0,0 +1,404 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: AboutConfig.cs + * CreatedOn: 2008-05-15 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; +using System.Configuration; +using System.Web.Configuration; +using System.Web.UI.Design; +using System.ComponentModel; + +namespace FineUI +{ + /// + /// 全局配置参数 + /// + public static class GlobalConfig + { + #region 静态构造函数 + + /// + /// 初始化section对象,如果在Web.config中没有定义,则初始化为空对象 + /// + static GlobalConfig() + { + section = ConfigurationManager.GetSection(ConfigSectionName.FineUI) as ConfigSection; + + if (section == null) + { + section = new ConfigSection(); + } + } + + #endregion + + #region Section + + /// + /// Runtime Section + /// + private static ConfigSection section; // = ConfigurationManager.GetSection(ConfigSectionName.FineUI) as ConfigSection; + + + /// + /// Refer:http://flimflan.com/blog/AccessingWebconfigAtDesignTimeInNET20.aspx + /// + /// + /// + public static ConfigSection GetDesignTimeSection(ISite site) + { + IWebApplication webApp = (IWebApplication)site.GetService(typeof(IWebApplication)); + if (webApp != null) + { + Configuration config = webApp.OpenWebConfiguration(false); + if (config != null) + { + ConfigurationSection section = config.GetSection(ConfigSectionName.FineUI); + if (section != null) + { + return section as ConfigSection; + } + } + } + return null; + } + + #endregion + + #region Static Methods + + /// + /// 产品名称 + /// + public static string ProductName + { + get + { + return "FineUI"; + } + } + + /// + /// 当前版本 + /// + public static string ProductVersion + { + get + { + Version v = Assembly.GetExecutingAssembly().GetName().Version; + //string vs = String.Format("{0}.{1} ", v.Major, v.Minor, v.Build); + //vs += v.Build >= 10 ? "final" : "beta" + v.Build; + //return vs; + string vStr = String.Format("{0}.{1}.{2}", v.Major, v.Minor, v.Build); + + if (v.Revision != 0) + { + vStr = String.Format("{0}.{1}", vStr, v.Revision); + } + + return vStr; + } + } + + /// + /// 主题 + /// + public static Theme GetTheme() + { + return (Theme)Enum.Parse(typeof(Theme), section.Theme, true); + } + + /// + /// 语言 + /// + public static Language GetLanguage() + { + return (Language)Enum.Parse(typeof(Language), section.Language, true); + } + + + /// + /// 表单中消息的位置 + /// + public static MessageTarget GetFormMessageTarget() + { + return (MessageTarget)Enum.Parse(typeof(MessageTarget), section.FormMessageTarget, true); + } + + /// + /// 表单行子项之间的间距 + /// + public static int GetFormRowItemsSpace() + { + return section.FormRowItemsSpace; + } + + /// + /// 表单中标签的位置 + /// + public static LabelAlign GetFormLabelAlign() + { + return (LabelAlign)Enum.Parse(typeof(LabelAlign), section.FormLabelAlign, true); + } + + /// + /// 表单中字段距离右侧的宽度 + /// + public static int GetFormOffsetRight() + { + return Convert.ToInt32(section.FormOffsetRight); + } + + /// + /// 表单中字段标签的宽度 + /// + public static int GetFormLabelWidth() + { + return Convert.ToInt32(section.FormLabelWidth); + } + + /// + /// 表单中字段与标签的分隔符 + /// + public static string GetFormLabelSeparator() + { + return section.FormLabelSeparator; + } + + + /// + /// AJAX超时时间(单位:秒,默认:60s) + /// + public static int GetAjaxTimeout() + { + return Convert.ToInt32(section.AjaxTimeout); + } + + + /// + /// 是否启用Ajax + /// + public static bool GetEnableAjax() + { + return Convert.ToBoolean(section.EnableAjax); + } + + + /// + /// 是否启用AJAX提示 + /// + public static bool GetEnableAjaxLoading() + { + return Convert.ToBoolean(section.EnableAjaxLoading); + } + + /// + /// AJAX提示的类型 + /// + public static AjaxLoadingType GetAjaxLoadingType() + { + return (AjaxLoadingType)Enum.Parse(typeof(AjaxLoadingType), section.AjaxLoadingType, true); + } + + + + ///// + ///// 是否启用大字体 + ///// + //public static bool GetEnableBigFont() + //{ + // return Convert.ToBoolean(section.EnableBigFont); + //} + + /// + /// DEBUG 模式 + /// + public static bool GetDebugMode() + { + return Convert.ToBoolean(section.DebugMode); + } + + /// + /// 图标的根路径 + /// + public static string GetIconBasePath() + { + return section.IconBasePath; + } + + /// + /// JS库的根路径 + /// + public static string GetJSBasePath() + { + return section.JSBasePath; + } + + /// + /// 自定义样式的根路径 + /// + public static string GetCustomThemeBasePath() + { + return section.CustomThemeBasePath; + } + + /// + /// 自定义样式的名称 + /// + public static string GetCustomTheme() + { + return section.CustomTheme; + } + + + /// + /// 是否启用FState压缩(不支持!!) + /// + public static bool GetEnableFStateCompress() + { + return Convert.ToBoolean(section.EnableFStateCompress); + } + + /// + /// 是否启用FState验证 + /// + public static bool GetEnableFStateValidation() + { + return Convert.ToBoolean(section.EnableFStateValidation); + } + + /// + /// 是否向页面输出IE=edge标识 + /// + public static bool GetIEEdge() + { + return section.IEEdge; + } + + + ///// + ///// 是否启用Ajax + ///// + //public static bool GetEnableAjax(ISite site) + //{ + // return Convert.ToBoolean(GetDesignTimeSection(site).EnableAjax); + //} + + /// + /// 是否启用表单改变确认对话框 + /// + public static bool GetEnableFormChangeConfirm() + { + return section.EnableFormChangeConfirm; + } + + /// + /// 正在加载图片的数字编号 + /// + public static int GetLoadingImageNumber() + { + return section.LoadingImageNumber; + } + + #endregion + + #region oldcode + + ///// + ///// 获取默认的背景颜色 + ///// + ///// 用于CSS的背景颜色值 + //[Obsolete("此方法已废除")] + //public static string GetDefaultBackgroundColor() + //{ + // string backgroundColor = String.Empty; + + // if (String.IsNullOrEmpty(PageManager.Instance.CustomTheme)) + // { + // string theme = PageManager.Instance.Theme.ToString(); + // if (theme.ToLower() == ThemeHelper.GetName(Theme.Blue)) + // { + // backgroundColor = "#DFE8F6"; + // } + // else if (theme.ToLower() == ThemeHelper.GetName(Theme.Gray)) + // { + // backgroundColor = "#efefef"; + // } + // } + + // return backgroundColor; + //} + + //public static string GetLightBackgroundColor(string theme) + //{ + // string backgroundColor = "#efefef"; + // if (theme.ToLower() == ThemeHelper.GetName(Theme.Blue)) + // { + // backgroundColor = "#E6F0FF"; + // } + + // return backgroundColor; + //} + + ///// + ///// 主题的默认背景色 + ///// + ///// + //public static string ThemeDefaultBackgroundColor + //{ + // get + // { + // string backgroundColor = "#efefef"; + // if (Theme == ConfigThemeValues.BLUE) + // { + // backgroundColor = "#DFE8F6"; + // } + + // return backgroundColor; + // } + //} + + ///// + ///// 主题的默认背景色 + ///// + ///// + //public static string ThemeLightBackgroundColor + //{ + // get + // { + // string backgroundColor = "#efefef"; + // if (Theme == ConfigThemeValues.BLUE) + // { + // backgroundColor = "#E6F0FF"; + // } + + // return backgroundColor; + // } + //} + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/ControlBuilder/ContentPanelBuilder.cs b/FineUI_v6/FineUI/Business/ControlBuilder/ContentPanelBuilder.cs new file mode 100644 index 0000000..aa0b93e --- /dev/null +++ b/FineUI_v6/FineUI/Business/ControlBuilder/ContentPanelBuilder.cs @@ -0,0 +1,75 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ContentPanelBuilder.cs + * CreatedOn: 2012-12-31 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + + +namespace FineUI +{ + /// + /// 支持页分析器生成控件及其包含的子控件 + /// + internal class ContentPanelBuilder : ControlBuilder + { + /// + /// 允许空白字符 + /// + /// + public override bool AllowWhitespaceLiterals() + { + return true; + } + + /// + /// 不忽略游离于标签外的字符串 + /// + /// + public override void AppendLiteralString(string s) + { + base.AppendLiteralString(s); + } + + public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs) + { + return base.GetChildControlType(tagName, attribs); + } + + public override Type DeclareType + { + get + { + return base.DeclareType; + } + } + } +} diff --git a/FineUI_v6/FineUI/Business/ControlBuilder/NotAllowWhitespaceLiteralsBuilder.cs b/FineUI_v6/FineUI/Business/ControlBuilder/NotAllowWhitespaceLiteralsBuilder.cs new file mode 100644 index 0000000..a8cbdcd --- /dev/null +++ b/FineUI_v6/FineUI/Business/ControlBuilder/NotAllowWhitespaceLiteralsBuilder.cs @@ -0,0 +1,67 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: NotAllowWhitespaceLiteralsBuilder.cs + * CreatedOn: 2008-06-05 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + + +namespace FineUI +{ + /// + /// 控件内部不允许存在非标签形式的字符串 + /// + internal class NotAllowWhitespaceLiteralsBuilder : ControlBuilder + { + /// + /// 不允许空白字符 + /// + /// + public override bool AllowWhitespaceLiterals() + { + return false; + } + + /// + /// 忽略游离于标签外的字符串 + /// + /// + public override void AppendLiteralString(string s) + { + } + + public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs) + { + return base.GetChildControlType(tagName, attribs); + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Editor/ControlBaseItemsEditor.cs b/FineUI_v6/FineUI/Business/Editor/ControlBaseItemsEditor.cs new file mode 100644 index 0000000..ea8484e --- /dev/null +++ b/FineUI_v6/FineUI/Business/Editor/ControlBaseItemsEditor.cs @@ -0,0 +1,96 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ControlBaseItemsEditor.cs + * CreatedOn: 2013-01-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供集合编辑器 + /// + public class ControlBaseItemsEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public ControlBaseItemsEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(Button), + typeof(Calendar), + typeof(SplitButton), + typeof(Timer), + typeof(UserControlConnector), + typeof(CPHConnector), + typeof(CheckBox), + typeof(CheckBoxList), + typeof(HtmlEditor), + typeof(Label), + typeof(HyperLink), + typeof(Image), + typeof(LinkButton), + typeof(RadioButton), + typeof(RadioButtonList), + typeof(DropDownList), + typeof(DatePicker), + typeof(FileUpload), + typeof(HiddenField), + typeof(NumberBox), + typeof(TextArea), + typeof(TextBox), + typeof(TimePicker), + typeof(TriggerBox), + typeof(TwinTriggerBox), + typeof(Accordion), + typeof(ContentPanel), + typeof(Form), + typeof(GroupPanel), + typeof(Panel), + typeof(SimpleForm), + typeof(Tree), + typeof(Window), + typeof(Grid), + typeof(RegionPanel), + typeof(TabStrip) + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Editor/GridColumnEditorEditor.cs b/FineUI_v6/FineUI/Business/Editor/GridColumnEditorEditor.cs new file mode 100644 index 0000000..2a743e6 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Editor/GridColumnEditorEditor.cs @@ -0,0 +1,80 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: FieldEditor.cs + * CreatedOn: 2013-05-01 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供的表格列编辑器集合编辑器 + /// + public class GridColumnEditorEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public GridColumnEditorEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(CheckBox), + typeof(CheckBoxList), + typeof(HtmlEditor), + typeof(Label), + typeof(HyperLink), + typeof(Image), + typeof(LinkButton), + typeof(RadioButton), + typeof(RadioButtonList), + typeof(DropDownList), + typeof(DatePicker), + typeof(FileUpload), + typeof(HiddenField), + typeof(NumberBox), + typeof(TextArea), + typeof(TextBox), + typeof(TimePicker), + typeof(TriggerBox), + typeof(TwinTriggerBox) + + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Editor/GridColumnsEditor.cs b/FineUI_v6/FineUI/Business/Editor/GridColumnsEditor.cs new file mode 100644 index 0000000..170df74 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Editor/GridColumnsEditor.cs @@ -0,0 +1,67 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: GridColumnsEditor.cs + * CreatedOn: 2013-01-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供的表格列集合编辑器 + /// + public class GridColumnsEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public GridColumnsEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(BoundField), + typeof(CheckBoxField), + typeof(HyperLinkField), + typeof(TemplateField), + typeof(ImageField), + typeof(WindowField), + typeof(LinkButtonField) + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Editor/MenuItemsEditor.cs b/FineUI_v6/FineUI/Business/Editor/MenuItemsEditor.cs new file mode 100644 index 0000000..91159ea --- /dev/null +++ b/FineUI_v6/FineUI/Business/Editor/MenuItemsEditor.cs @@ -0,0 +1,65 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuItemsEditor.cs + * CreatedOn: 2013-01-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供的菜单项集合编辑器 + /// + public class MenuItemsEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public MenuItemsEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(MenuButton), + typeof(MenuCheckBox), + typeof(MenuHyperLink), + typeof(MenuSeparator), + typeof(MenuText) + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Editor/ToolbarItemsEditor.cs b/FineUI_v6/FineUI/Business/Editor/ToolbarItemsEditor.cs new file mode 100644 index 0000000..10375e6 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Editor/ToolbarItemsEditor.cs @@ -0,0 +1,83 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarItemsEditor.cs + * CreatedOn: 2013-01-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// + /// 为设计时提供的工具栏项集合编辑器 + /// + public class ToolbarItemsEditor : CollectionEditor + { + private Type[] types; + + /// + /// 构造函数 + /// + /// 控件类型 + public ToolbarItemsEditor(Type type) + : base(type) + { + types = new Type[] { + typeof(ToolbarFill), + typeof(ToolbarSeparator), + typeof(ToolbarText), + typeof(Button), + typeof(SplitButton), + typeof(CheckBox), + typeof(CheckBoxList), + typeof(Label), + typeof(HyperLink), + typeof(Image), + typeof(LinkButton), + typeof(RadioButton), + typeof(RadioButtonList), + typeof(DropDownList), + typeof(DatePicker), + typeof(FileUpload), + typeof(HiddenField), + typeof(NumberBox), + typeof(TextArea), + typeof(TextBox), + typeof(TimePicker), + typeof(TriggerBox), + typeof(TwinTriggerBox) + }; + } + + /// + /// 获取此集合编辑器可包含的数据类型 + /// + /// 类型集合 + protected override Type[] CreateNewItemTypes() + { + return types; + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Enums/AjaxLoadingType.cs b/FineUI_v6/FineUI/Business/Enums/AjaxLoadingType.cs new file mode 100644 index 0000000..7360d11 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/AjaxLoadingType.cs @@ -0,0 +1,70 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: AjaxLoadingType.cs + * CreatedOn: 2012-05-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// Ajax提示信息的类型 + /// + public enum AjaxLoadingType + { + /// + /// 在页面顶部显示黄色提示框(默认值) + /// + Default, + /// + /// Extjs的页面遮罩提示框 + /// + Mask + } + + + /// + /// Ajax提示信息的类型名称 + /// + internal static class AjaxLoadingTypeName + { + public static string GetName(AjaxLoadingType type) + { + string result = String.Empty; + + switch (type) + { + case AjaxLoadingType.Default: + result = "default"; + break; + case AjaxLoadingType.Mask: + result = "mask"; + break; + } + + return result; + } + } + +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/BoxLayoutAlign.cs b/FineUI_v6/FineUI/Business/Enums/BoxLayoutAlign.cs new file mode 100644 index 0000000..a37aad5 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/BoxLayoutAlign.cs @@ -0,0 +1,108 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: BoxLayoutAlign.cs + * CreatedOn: 2012-01-10 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 在HBox布局或者VBox布局中,用来控制容器子控件的位置 + /// + public enum BoxLayoutAlign + { + /// + /// 所有子控件位于父容器的开始位置(废弃,请使用Start代替) + /// + Top, + /// + /// 所有子控件位于父容器的中间位置(废弃,请使用Center代替) + /// + Middle, + + + /// + /// 所有子控件位于父容器的开始位置 + /// + Start, + /// + /// 所有子控件位于父容器的中间位置 + /// + Center, + /// + /// 所有子控件被拉伸至父容器的大小(默认值) + /// + Stretch, + /// + /// 所有子控件被拉伸至最大子控件的大小 + /// + StretchMax + } + + /// + /// HBox或者VBox的位置的名称 + /// + internal static class BoxLayoutAlignHelper + { + public static string GetName(BoxLayoutAlign type, Layout theLayout) + { + string result = String.Empty; + + switch (type) + { + case BoxLayoutAlign.Top: + case BoxLayoutAlign.Start: + if (theLayout == Layout.HBox) + { + result = "top"; + } + else + { + result = "left"; + } + break; + case BoxLayoutAlign.Middle: + case BoxLayoutAlign.Center: + if (theLayout == Layout.HBox) + { + result = "middle"; + } + else + { + result = "center"; + } + break; + case BoxLayoutAlign.Stretch: + result = "stretch"; + break; + case BoxLayoutAlign.StretchMax: + result = "stretchmax"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/BoxLayoutPosition.cs b/FineUI_v6/FineUI/Business/Enums/BoxLayoutPosition.cs new file mode 100644 index 0000000..59cadf6 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/BoxLayoutPosition.cs @@ -0,0 +1,86 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: BoxLayoutPosition.cs + * CreatedOn: 2012-01-10 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 在HBox布局或者VBox布局中,用来控制容器子控件的位置 + /// + public enum BoxLayoutPosition + { + /// + /// 子控件靠父容器的开始位置排列(废弃,请使用Start代替) + /// + Left, + /// + /// 子控件靠父容器的结束位置排列(废弃,请使用End代替) + /// + Right, + + /// + /// 子控件靠父容器的中间位置排列 + /// + Center, + /// + /// 子控件靠父容器的开始位置排列(默认值) + /// + Start, + /// + /// 子控件靠父容器的结束位置排列 + /// + End + } + + /// + /// HBox或者VBox的位置的名称 + /// + internal static class BoxLayoutPositionHelper + { + public static string GetName(BoxLayoutPosition type) + { + string result = String.Empty; + + switch (type) + { + case BoxLayoutPosition.Left: + case BoxLayoutPosition.Start: + result = "start"; + break; + case BoxLayoutPosition.Center: + result = "center"; + break; + case BoxLayoutPosition.Right: + case BoxLayoutPosition.End: + result = "end"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/ButtonAlign.cs b/FineUI_v6/FineUI/Business/Enums/ButtonAlign.cs new file mode 100644 index 0000000..0eb010f --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/ButtonAlign.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + ///// + ///// 按钮排列位置 + ///// + //public enum ButtonAlign + //{ + // /// + // /// + // /// + // Left, + // Right, + // Center + //} + + ///// + ///// 按钮排列位置名称 + ///// + //internal static class ButtonAlignHelper + //{ + // public static string GetName(ButtonAlign type) + // { + // string result = String.Empty; + + // switch (type) + // { + // case ButtonAlign.Left: + // result = "left"; + // break; + // case ButtonAlign.Right: + // result = "right"; + // break; + // case ButtonAlign.Center: + // result = "center"; + // break; + // } + + // return result; + // } + //} +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/ButtonSize.cs b/FineUI_v6/FineUI/Business/Enums/ButtonSize.cs new file mode 100644 index 0000000..1e2c02f --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/ButtonSize.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 按钮的大小 + /// + public enum ButtonSize + { + /// + /// 小尺寸(默认值) + /// + Small, + /// + /// 中等尺寸 + /// + Medium, + /// + /// 大尺寸 + /// + Large + } + + /// + /// 按钮的大小名称 + /// + internal static class ButtonSizeName + { + public static string GetName(ButtonSize type) + { + string result = String.Empty; + + switch (type) + { + case ButtonSize.Small: + result = "small"; + break; + case ButtonSize.Medium: + result = "medium"; + break; + case ButtonSize.Large: + result = "large"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/ButtonType.cs b/FineUI_v6/FineUI/Business/Enums/ButtonType.cs new file mode 100644 index 0000000..3b6c597 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/ButtonType.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 按钮类型 + /// + public enum ButtonType + { + /// + /// 普通按钮(默认值) + /// + Button, + /// + /// 提交按钮(会为生成的input标签添加type="submit") + /// + Submit, + /// + /// 重置按钮(会为生成的input标签添加type="reset") + /// + Reset + } + + /// + /// 按钮类型名称 + /// + internal static class ButtonTypeName + { + public static string GetName(ButtonType type) + { + string result = String.Empty; + + switch (type) + { + case ButtonType.Button: + result = "button"; + break; + case ButtonType.Reset: + result = "reset"; + break; + case ButtonType.Submit: + result = "submit"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/CloseAction.cs b/FineUI_v6/FineUI/Business/Enums/CloseAction.cs new file mode 100644 index 0000000..151bacb --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/CloseAction.cs @@ -0,0 +1,76 @@ + + +#region Comment + +/* + * Project: FineUI + * + * FileName: CloseAction.cs + * CreatedOn: 2010-01-25 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 关闭窗体的动作 + /// + public enum CloseAction + { + /// + /// 关闭窗体(默认值) + /// + Hide, + /// + /// 关闭窗体后刷新父页面 + /// + HideRefresh, + /// + /// 关闭窗体后会发父页面(需要注册OnClose事件处理函数) + /// + HidePostBack + } + + /// + /// 关闭窗体的动作 + /// + internal static class CloseActionName + { + public static string GetName(CloseAction type) + { + string result = String.Empty; + + switch (type) + { + case CloseAction.Hide: + result = "hide"; + break; + case CloseAction.HideRefresh: + result = "hide_refresh"; + break; + case CloseAction.HidePostBack: + result = "hide_postback"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/CollapseMode.cs b/FineUI_v6/FineUI/Business/Enums/CollapseMode.cs new file mode 100644 index 0000000..4ac32c0 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/CollapseMode.cs @@ -0,0 +1,70 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: HideMode.cs + * CreatedOn: 2008-09-16 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 折叠模式(用于Region控件) + /// + public enum CollapseMode + { + + /// + /// 通过点击工具栏上的按钮来折叠展开面板(默认值) + /// + Default, + + /// + /// 通过点击面板分隔条上的迷你按钮来折叠展开面板 + /// + Mini + } + + /// + /// 折叠模式(用于Region控件)的名称 + /// + internal static class CollapseModeName + { + public static string GetName(CollapseMode type) + { + string result = String.Empty; + + switch (type) + { + case CollapseMode.Default: + result = "default"; + break; + case CollapseMode.Mini: + result = "mini"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/CompareType.cs b/FineUI_v6/FineUI/Business/Enums/CompareType.cs new file mode 100644 index 0000000..9bcc4cb --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/CompareType.cs @@ -0,0 +1,84 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: CompareType.cs + * CreatedOn: 2008-07-10 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 相比较的数据类型(用于表单控件的客户端验证) + /// + public enum CompareType + { + /// + /// 浮点数 + /// + Float, + /// + /// 整形 + /// + Int, + /// + /// 字符串(默认值) + /// + String + } + + ///// + ///// 操作符名称 + ///// + //internal static class OperatorName + //{ + // public static string GetName(Operator type) + // { + // string result = String.Empty; + + // switch (type) + // { + // case Operator.Equal: + // result = "=="; + // break; + // case Operator.GreaterThan: + // result = ">"; + // break; + // case Operator.GreaterThanEqual: + // result = ">="; + // break; + // case Operator.LessThan: + // result = "<"; + // break; + // case Operator.LessThanEqual: + // result = "<="; + // break; + // case Operator.NotEqual: + // result = "!="; + // break; + // } + + // return result; + // } + //} +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/FooterBarAlign.cs b/FineUI_v6/FineUI/Business/Enums/FooterBarAlign.cs new file mode 100644 index 0000000..8ae54e9 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/FooterBarAlign.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 页脚工具栏的排列位置 + /// + public enum FooterBarAlign + { + /// + /// 靠右(默认值) + /// + Right, + /// + /// 靠左 + /// + Left, + /// + /// 居中 + /// + Center + } + + /// + /// 页脚工具栏的排列位置名称 + /// + internal static class FooterBarAlignHelper + { + public static string GetName(FooterBarAlign type) + { + string result = String.Empty; + + switch (type) + { + case FooterBarAlign.Left: + result = "left"; + break; + case FooterBarAlign.Right: + result = "right"; + break; + case FooterBarAlign.Center: + result = "center"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/Grid/FieldType.cs b/FineUI_v6/FineUI/Business/Enums/Grid/FieldType.cs new file mode 100644 index 0000000..f5f44f1 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/Grid/FieldType.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表格可编辑字段的类型 + /// + public enum FieldType + { + /// + /// 自动(默认值) + /// + Auto, + /// + /// 字符串 + /// + String, + /// + /// 整型 + /// + Int, + /// + /// 浮点数 + /// + Float, + /// + /// 双精度浮点数(精度为15~16) + /// + Double, + /// + /// 布尔型 + /// + Boolean, + /// + /// 日期 + /// + Date + } + + /// + /// 表格可编辑字段的类型名称 + /// + internal static class FieldTypeName + { + public static string GetName(FieldType type) + { + string result = String.Empty; + + switch (type) + { + case FieldType.Auto: + result = "auto"; + break; + case FieldType.String: + result = "string"; + break; + case FieldType.Int: + result = "int"; + break; + case FieldType.Float: + result = "float"; + break; + case FieldType.Boolean: + result = "boolean"; + break; + // ExtJS v6.0不支持客户端指定 double 字符串,需要改为 float + // 客户端处理一样,这个设置只影响服务器端的解析 + case FieldType.Double: + result = "float"; + break; + case FieldType.Date: + result = "date"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/Grid/Renderer.cs b/FineUI_v6/FineUI/Business/Enums/Grid/Renderer.cs new file mode 100644 index 0000000..ed820e5 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/Grid/Renderer.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表格可编辑字段渲染器 + /// + public enum Renderer + { + /// + /// 无(默认值) + /// + None, + /// + /// 首字母大写 + /// + Capitalize, + /// + /// 日期(RendererArgument来指定日期格式化字符串) + /// RendererArgument: + /// 1. d 月中的某一天。一位数的日期没有前导零。 + /// 2. dd 月中的某一天。一位数的日期有一个前导零。 + /// 3. ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 + /// 4. dddd 周中某天的完整名称,在 DayNames 中定义。 + /// 5. M 月份数字。一位数的月份没有前导零。 + /// 6. MM 月份数字。一位数的月份有一个前导零。 + /// 7. MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 + /// 8. MMMM 月份的完整名称,在 MonthNames 中定义。 + /// 9. y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 + /// 10. yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 + /// 11. yyyy 包括纪元的四位数的年份。 + /// + Date, + /// + /// 截断字符串并添加省略号(RendererArgument来指定最大长度) + /// + Ellipsis, + /// + /// 文件大小 + /// + FileSize, + /// + /// HTML编码 + /// + HtmlEncode, + /// + /// HTML解码 + /// + HtmlDecode, + /// + /// 转化为小写字符 + /// + Lowercase, + /// + /// 转化为大写字符 + /// + Uppercase, + /// + /// 换行符转换为HTML标签
+ ///
+ NL2BR, + ///// + ///// 格式化为数字(RendererArgument来指定数字的显示格式) + ///// RendererArgument: + ///// 1. 0 - (123456) 只显示数字,没有精度 + ///// 2. 0.00 - (123456.78) 只显示数字,两位精度 + ///// 3. 0.0000 - (123456.7890) 只显示数字,四位精度 + ///// 4. 0,000 - (123,456) 显示数字和逗号,没有精度 + ///// 5. 0,000.00 - (123,456.78) 显示数字和逗号,两位精度 + ///// + //Number, + /// + /// 删除所有的脚本标签 + /// + StripScripts, + /// + /// 删除所有的标签 + /// + StripTags, + /// + /// 清除字符串两端的空白字符 + /// + Trim + ///// + ///// 美元 + ///// + //UsMoney + } + + /// + /// 表格可编辑字段渲染器名称 + /// + internal static class RendererName + { + public static string GetName(Renderer type) + { + string result = String.Empty; + + switch (type) + { + case Renderer.None: + result = ""; + break; + case Renderer.Capitalize: + result = "capitalize"; + break; + case Renderer.Date: + result = "date"; + break; + case Renderer.Ellipsis: + result = "ellipsis"; + break; + case Renderer.FileSize: + result = "fileSize"; + break; + case Renderer.HtmlDecode: + result = "htmlDecode"; + break; + case Renderer.HtmlEncode: + result = "htmlEncode"; + break; + case Renderer.Lowercase: + result = "lowercase"; + break; + case Renderer.NL2BR: + result = "nl2br"; + break; + //case Renderer.Number: + // result = "number"; + // break; + case Renderer.StripScripts: + result = "stripScripts"; + break; + case Renderer.StripTags: + result = "stripTags"; + break; + case Renderer.Trim: + result = "trim"; + break; + case Renderer.Uppercase: + result = "uppercase"; + break; + //case Renderer.UsMoney: + // result = "usMoney"; + // break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/HideMode.cs b/FineUI_v6/FineUI/Business/Enums/HideMode.cs new file mode 100644 index 0000000..e1d221f --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/HideMode.cs @@ -0,0 +1,75 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: HideMode.cs + * CreatedOn: 2008-09-16 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 隐藏的模式 + /// + public enum HideMode + { + /// + /// 通过设置CSS属性visibility来控制显示隐藏 + /// + Visibility, + /// + /// 通过设置CSS属性top/left来控制显示隐藏 + /// + Offsets, + /// + /// 通过设置CSS属性display来控制显示隐藏(默认值) + /// + Display + } + + /// + /// 隐藏的模式名称 + /// + internal static class HideModeName + { + public static string GetName(HideMode type) + { + string result = String.Empty; + + switch (type) + { + case HideMode.Visibility: + result = "visibility"; + break; + case HideMode.Offsets: + result = "offsets"; + break; + case HideMode.Display: + result = "display"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/Icon.cs b/FineUI_v6/FineUI/Business/Enums/Icon.cs new file mode 100644 index 0000000..989909b --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/Icon.cs @@ -0,0 +1,13820 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: IconType.cs + * CreatedOn: 2009-09-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Web.UI; + +namespace FineUI +{ + /// + /// 预定义图标 + /// + public enum Icon + { + /// + /// None + /// + None, + + /// + /// Accept + /// + Accept, + + /// + /// Add + /// + Add, + + /// + /// Anchor + /// + Anchor, + + /// + /// Application + /// + Application, + + /// + /// ApplicationAdd + /// + ApplicationAdd, + + /// + /// ApplicationCascade + /// + ApplicationCascade, + + /// + /// ApplicationDelete + /// + ApplicationDelete, + + /// + /// ApplicationDouble + /// + ApplicationDouble, + + /// + /// ApplicationEdit + /// + ApplicationEdit, + + /// + /// ApplicationError + /// + ApplicationError, + + /// + /// ApplicationForm + /// + ApplicationForm, + + /// + /// ApplicationFormAdd + /// + ApplicationFormAdd, + + /// + /// ApplicationFormDelete + /// + ApplicationFormDelete, + + /// + /// ApplicationFormEdit + /// + ApplicationFormEdit, + + /// + /// ApplicationFormMagnify + /// + ApplicationFormMagnify, + + /// + /// ApplicationGet + /// + ApplicationGet, + + /// + /// ApplicationGo + /// + ApplicationGo, + + /// + /// ApplicationHome + /// + ApplicationHome, + + /// + /// ApplicationKey + /// + ApplicationKey, + + /// + /// ApplicationLightning + /// + ApplicationLightning, + + /// + /// ApplicationLink + /// + ApplicationLink, + + /// + /// ApplicationOsx + /// + ApplicationOsx, + + /// + /// ApplicationOsxAdd + /// + ApplicationOsxAdd, + + /// + /// ApplicationOsxCascade + /// + ApplicationOsxCascade, + + /// + /// ApplicationOsxDelete + /// + ApplicationOsxDelete, + + /// + /// ApplicationOsxDouble + /// + ApplicationOsxDouble, + + /// + /// ApplicationOsxError + /// + ApplicationOsxError, + + /// + /// ApplicationOsxGet + /// + ApplicationOsxGet, + + /// + /// ApplicationOsxGo + /// + ApplicationOsxGo, + + /// + /// ApplicationOsxHome + /// + ApplicationOsxHome, + + /// + /// ApplicationOsxKey + /// + ApplicationOsxKey, + + /// + /// ApplicationOsxLightning + /// + ApplicationOsxLightning, + + /// + /// ApplicationOsxLink + /// + ApplicationOsxLink, + + /// + /// ApplicationOsxSplit + /// + ApplicationOsxSplit, + + /// + /// ApplicationOsxStart + /// + ApplicationOsxStart, + + /// + /// ApplicationOsxStop + /// + ApplicationOsxStop, + + /// + /// ApplicationOsxTerminal + /// + ApplicationOsxTerminal, + + /// + /// ApplicationPut + /// + ApplicationPut, + + /// + /// ApplicationSideBoxes + /// + ApplicationSideBoxes, + + /// + /// ApplicationSideContract + /// + ApplicationSideContract, + + /// + /// ApplicationSideExpand + /// + ApplicationSideExpand, + + /// + /// ApplicationSideList + /// + ApplicationSideList, + + /// + /// ApplicationSideTree + /// + ApplicationSideTree, + + /// + /// ApplicationSplit + /// + ApplicationSplit, + + /// + /// ApplicationStart + /// + ApplicationStart, + + /// + /// ApplicationStop + /// + ApplicationStop, + + /// + /// ApplicationTileHorizontal + /// + ApplicationTileHorizontal, + + /// + /// ApplicationTileVertical + /// + ApplicationTileVertical, + + /// + /// ApplicationViewColumns + /// + ApplicationViewColumns, + + /// + /// ApplicationViewDetail + /// + ApplicationViewDetail, + + /// + /// ApplicationViewGallery + /// + ApplicationViewGallery, + + /// + /// ApplicationViewIcons + /// + ApplicationViewIcons, + + /// + /// ApplicationViewList + /// + ApplicationViewList, + + /// + /// ApplicationViewTile + /// + ApplicationViewTile, + + /// + /// ApplicationXp + /// + ApplicationXp, + + /// + /// ApplicationXpTerminal + /// + ApplicationXpTerminal, + + /// + /// ArrowBranch + /// + ArrowBranch, + + /// + /// ArrowDivide + /// + ArrowDivide, + + /// + /// ArrowDown + /// + ArrowDown, + + /// + /// ArrowEw + /// + ArrowEw, + + /// + /// ArrowIn + /// + ArrowIn, + + /// + /// ArrowInout + /// + ArrowInout, + + /// + /// ArrowInLonger + /// + ArrowInLonger, + + /// + /// ArrowJoin + /// + ArrowJoin, + + /// + /// ArrowLeft + /// + ArrowLeft, + + /// + /// ArrowMerge + /// + ArrowMerge, + + /// + /// ArrowNe + /// + ArrowNe, + + /// + /// ArrowNs + /// + ArrowNs, + + /// + /// ArrowNsew + /// + ArrowNsew, + + /// + /// ArrowNw + /// + ArrowNw, + + /// + /// ArrowNwNeSwSe + /// + ArrowNwNeSwSe, + + /// + /// ArrowNwSe + /// + ArrowNwSe, + + /// + /// ArrowOut + /// + ArrowOut, + + /// + /// ArrowOutLonger + /// + ArrowOutLonger, + + /// + /// ArrowRedo + /// + ArrowRedo, + + /// + /// ArrowRefresh + /// + ArrowRefresh, + + /// + /// ArrowRefreshSmall + /// + ArrowRefreshSmall, + + /// + /// ArrowRight + /// + ArrowRight, + + /// + /// ArrowRotateAnticlockwise + /// + ArrowRotateAnticlockwise, + + /// + /// ArrowRotateClockwise + /// + ArrowRotateClockwise, + + /// + /// ArrowSe + /// + ArrowSe, + + /// + /// ArrowSw + /// + ArrowSw, + + /// + /// ArrowSwitch + /// + ArrowSwitch, + + /// + /// ArrowSwitchBluegreen + /// + ArrowSwitchBluegreen, + + /// + /// ArrowSwNe + /// + ArrowSwNe, + + /// + /// ArrowTurnLeft + /// + ArrowTurnLeft, + + /// + /// ArrowTurnRight + /// + ArrowTurnRight, + + /// + /// ArrowUndo + /// + ArrowUndo, + + /// + /// ArrowUp + /// + ArrowUp, + + /// + /// AsteriskOrange + /// + AsteriskOrange, + + /// + /// AsteriskRed + /// + AsteriskRed, + + /// + /// AsteriskYellow + /// + AsteriskYellow, + + /// + /// Attach + /// + Attach, + + /// + /// AwardStarAdd + /// + AwardStarAdd, + + /// + /// AwardStarBronze1 + /// + AwardStarBronze1, + + /// + /// AwardStarBronze2 + /// + AwardStarBronze2, + + /// + /// AwardStarBronze3 + /// + AwardStarBronze3, + + /// + /// AwardStarDelete + /// + AwardStarDelete, + + /// + /// AwardStarGold1 + /// + AwardStarGold1, + + /// + /// AwardStarGold2 + /// + AwardStarGold2, + + /// + /// AwardStarGold3 + /// + AwardStarGold3, + + /// + /// AwardStarSilver1 + /// + AwardStarSilver1, + + /// + /// AwardStarSilver2 + /// + AwardStarSilver2, + + /// + /// AwardStarSilver3 + /// + AwardStarSilver3, + + /// + /// Basket + /// + Basket, + + /// + /// BasketAdd + /// + BasketAdd, + + /// + /// BasketDelete + /// + BasketDelete, + + /// + /// BasketEdit + /// + BasketEdit, + + /// + /// BasketError + /// + BasketError, + + /// + /// BasketGo + /// + BasketGo, + + /// + /// BasketPut + /// + BasketPut, + + /// + /// BasketRemove + /// + BasketRemove, + + /// + /// Bell + /// + Bell, + + /// + /// BellAdd + /// + BellAdd, + + /// + /// BellDelete + /// + BellDelete, + + /// + /// BellError + /// + BellError, + + /// + /// BellGo + /// + BellGo, + + /// + /// BellLink + /// + BellLink, + + /// + /// BellSilver + /// + BellSilver, + + /// + /// BellSilverStart + /// + BellSilverStart, + + /// + /// BellSilverStop + /// + BellSilverStop, + + /// + /// BellStart + /// + BellStart, + + /// + /// BellStop + /// + BellStop, + + /// + /// Bin + /// + Bin, + + /// + /// BinClosed + /// + BinClosed, + + /// + /// BinEmpty + /// + BinEmpty, + + /// + /// Blank + /// + Blank, + + /// + /// Bomb + /// + Bomb, + + /// + /// Book + /// + Book, + + /// + /// Bookmark + /// + Bookmark, + + /// + /// BookmarkAdd + /// + BookmarkAdd, + + /// + /// BookmarkDelete + /// + BookmarkDelete, + + /// + /// BookmarkEdit + /// + BookmarkEdit, + + /// + /// BookmarkError + /// + BookmarkError, + + /// + /// BookmarkGo + /// + BookmarkGo, + + /// + /// BookAdd + /// + BookAdd, + + /// + /// BookAddresses + /// + BookAddresses, + + /// + /// BookAddressesAdd + /// + BookAddressesAdd, + + /// + /// BookAddressesDelete + /// + BookAddressesDelete, + + /// + /// BookAddressesEdit + /// + BookAddressesEdit, + + /// + /// BookAddressesError + /// + BookAddressesError, + + /// + /// BookAddressesKey + /// + BookAddressesKey, + + /// + /// BookDelete + /// + BookDelete, + + /// + /// BookEdit + /// + BookEdit, + + /// + /// BookError + /// + BookError, + + /// + /// BookGo + /// + BookGo, + + /// + /// BookKey + /// + BookKey, + + /// + /// BookLink + /// + BookLink, + + /// + /// BookMagnify + /// + BookMagnify, + + /// + /// BookNext + /// + BookNext, + + /// + /// BookOpen + /// + BookOpen, + + /// + /// BookOpenMark + /// + BookOpenMark, + + /// + /// BookPrevious + /// + BookPrevious, + + /// + /// BookRed + /// + BookRed, + + /// + /// BookTabs + /// + BookTabs, + + /// + /// BorderAll + /// + BorderAll, + + /// + /// BorderBottom + /// + BorderBottom, + + /// + /// BorderDraw + /// + BorderDraw, + + /// + /// BorderInner + /// + BorderInner, + + /// + /// BorderInnerHorizontal + /// + BorderInnerHorizontal, + + /// + /// BorderInnerVertical + /// + BorderInnerVertical, + + /// + /// BorderLeft + /// + BorderLeft, + + /// + /// BorderNone + /// + BorderNone, + + /// + /// BorderOuter + /// + BorderOuter, + + /// + /// BorderRight + /// + BorderRight, + + /// + /// BorderTop + /// + BorderTop, + + /// + /// Box + /// + Box, + + /// + /// BoxError + /// + BoxError, + + /// + /// BoxPicture + /// + BoxPicture, + + /// + /// BoxWorld + /// + BoxWorld, + + /// + /// Brick + /// + Brick, + + /// + /// Bricks + /// + Bricks, + + /// + /// BrickAdd + /// + BrickAdd, + + /// + /// BrickDelete + /// + BrickDelete, + + /// + /// BrickEdit + /// + BrickEdit, + + /// + /// BrickError + /// + BrickError, + + /// + /// BrickGo + /// + BrickGo, + + /// + /// BrickLink + /// + BrickLink, + + /// + /// BrickMagnify + /// + BrickMagnify, + + /// + /// Briefcase + /// + Briefcase, + + /// + /// Bug + /// + Bug, + + /// + /// BugAdd + /// + BugAdd, + + /// + /// BugDelete + /// + BugDelete, + + /// + /// BugEdit + /// + BugEdit, + + /// + /// BugError + /// + BugError, + + /// + /// BugFix + /// + BugFix, + + /// + /// BugGo + /// + BugGo, + + /// + /// BugLink + /// + BugLink, + + /// + /// BugMagnify + /// + BugMagnify, + + /// + /// Build + /// + Build, + + /// + /// Building + /// + Building, + + /// + /// BuildingAdd + /// + BuildingAdd, + + /// + /// BuildingDelete + /// + BuildingDelete, + + /// + /// BuildingEdit + /// + BuildingEdit, + + /// + /// BuildingError + /// + BuildingError, + + /// + /// BuildingGo + /// + BuildingGo, + + /// + /// BuildingKey + /// + BuildingKey, + + /// + /// BuildingLink + /// + BuildingLink, + + /// + /// BuildCancel + /// + BuildCancel, + + /// + /// BulletAdd + /// + BulletAdd, + + /// + /// BulletArrowBottom + /// + BulletArrowBottom, + + /// + /// BulletArrowDown + /// + BulletArrowDown, + + /// + /// BulletArrowTop + /// + BulletArrowTop, + + /// + /// BulletArrowUp + /// + BulletArrowUp, + + /// + /// BulletBlack + /// + BulletBlack, + + /// + /// BulletBlue + /// + BulletBlue, + + /// + /// BulletConnect + /// + BulletConnect, + + /// + /// BulletCross + /// + BulletCross, + + /// + /// BulletDatabase + /// + BulletDatabase, + + /// + /// BulletDatabaseYellow + /// + BulletDatabaseYellow, + + /// + /// BulletDelete + /// + BulletDelete, + + /// + /// BulletDisk + /// + BulletDisk, + + /// + /// BulletEarth + /// + BulletEarth, + + /// + /// BulletEdit + /// + BulletEdit, + + /// + /// BulletEject + /// + BulletEject, + + /// + /// BulletError + /// + BulletError, + + /// + /// BulletFeed + /// + BulletFeed, + + /// + /// BulletGet + /// + BulletGet, + + /// + /// BulletGo + /// + BulletGo, + + /// + /// BulletGreen + /// + BulletGreen, + + /// + /// BulletHome + /// + BulletHome, + + /// + /// BulletKey + /// + BulletKey, + + /// + /// BulletLeft + /// + BulletLeft, + + /// + /// BulletLightning + /// + BulletLightning, + + /// + /// BulletMagnify + /// + BulletMagnify, + + /// + /// BulletMinus + /// + BulletMinus, + + /// + /// BulletOrange + /// + BulletOrange, + + /// + /// BulletPageWhite + /// + BulletPageWhite, + + /// + /// BulletPicture + /// + BulletPicture, + + /// + /// BulletPink + /// + BulletPink, + + /// + /// BulletPlus + /// + BulletPlus, + + /// + /// BulletPurple + /// + BulletPurple, + + /// + /// BulletRed + /// + BulletRed, + + /// + /// BulletRight + /// + BulletRight, + + /// + /// BulletShape + /// + BulletShape, + + /// + /// BulletSparkle + /// + BulletSparkle, + + /// + /// BulletStar + /// + BulletStar, + + /// + /// BulletStart + /// + BulletStart, + + /// + /// BulletStop + /// + BulletStop, + + /// + /// BulletStopAlt + /// + BulletStopAlt, + + /// + /// BulletTick + /// + BulletTick, + + /// + /// BulletToggleMinus + /// + BulletToggleMinus, + + /// + /// BulletTogglePlus + /// + BulletTogglePlus, + + /// + /// BulletWhite + /// + BulletWhite, + + /// + /// BulletWrench + /// + BulletWrench, + + /// + /// BulletWrenchRed + /// + BulletWrenchRed, + + /// + /// BulletYellow + /// + BulletYellow, + + /// + /// Button + /// + Button, + + /// + /// Cake + /// + Cake, + + /// + /// CakeOut + /// + CakeOut, + + /// + /// CakeSliced + /// + CakeSliced, + + /// + /// Calculator + /// + Calculator, + + /// + /// CalculatorAdd + /// + CalculatorAdd, + + /// + /// CalculatorDelete + /// + CalculatorDelete, + + /// + /// CalculatorEdit + /// + CalculatorEdit, + + /// + /// CalculatorError + /// + CalculatorError, + + /// + /// CalculatorLink + /// + CalculatorLink, + + /// + /// Calendar + /// + Calendar, + + /// + /// CalendarAdd + /// + CalendarAdd, + + /// + /// CalendarDelete + /// + CalendarDelete, + + /// + /// CalendarEdit + /// + CalendarEdit, + + /// + /// CalendarLink + /// + CalendarLink, + + /// + /// CalendarSelectDay + /// + CalendarSelectDay, + + /// + /// CalendarSelectNone + /// + CalendarSelectNone, + + /// + /// CalendarSelectWeek + /// + CalendarSelectWeek, + + /// + /// CalendarStar + /// + CalendarStar, + + /// + /// CalendarViewDay + /// + CalendarViewDay, + + /// + /// CalendarViewMonth + /// + CalendarViewMonth, + + /// + /// CalendarViewWeek + /// + CalendarViewWeek, + + /// + /// Camera + /// + Camera, + + /// + /// CameraAdd + /// + CameraAdd, + + /// + /// CameraConnect + /// + CameraConnect, + + /// + /// CameraDelete + /// + CameraDelete, + + /// + /// CameraEdit + /// + CameraEdit, + + /// + /// CameraError + /// + CameraError, + + /// + /// CameraGo + /// + CameraGo, + + /// + /// CameraLink + /// + CameraLink, + + /// + /// CameraMagnify + /// + CameraMagnify, + + /// + /// CameraPicture + /// + CameraPicture, + + /// + /// CameraSmall + /// + CameraSmall, + + /// + /// CameraStart + /// + CameraStart, + + /// + /// CameraStop + /// + CameraStop, + + /// + /// Cancel + /// + Cancel, + + /// + /// Car + /// + Car, + + /// + /// Cart + /// + Cart, + + /// + /// CartAdd + /// + CartAdd, + + /// + /// CartDelete + /// + CartDelete, + + /// + /// CartEdit + /// + CartEdit, + + /// + /// CartError + /// + CartError, + + /// + /// CartFull + /// + CartFull, + + /// + /// CartGo + /// + CartGo, + + /// + /// CartMagnify + /// + CartMagnify, + + /// + /// CartPut + /// + CartPut, + + /// + /// CartRemove + /// + CartRemove, + + /// + /// CarAdd + /// + CarAdd, + + /// + /// CarDelete + /// + CarDelete, + + /// + /// CarError + /// + CarError, + + /// + /// CarRed + /// + CarRed, + + /// + /// CarStart + /// + CarStart, + + /// + /// CarStop + /// + CarStop, + + /// + /// Cd + /// + Cd, + + /// + /// Cdr + /// + Cdr, + + /// + /// CdrAdd + /// + CdrAdd, + + /// + /// CdrBurn + /// + CdrBurn, + + /// + /// CdrCross + /// + CdrCross, + + /// + /// CdrDelete + /// + CdrDelete, + + /// + /// CdrEdit + /// + CdrEdit, + + /// + /// CdrEject + /// + CdrEject, + + /// + /// CdrError + /// + CdrError, + + /// + /// CdrGo + /// + CdrGo, + + /// + /// CdrMagnify + /// + CdrMagnify, + + /// + /// CdrPlay + /// + CdrPlay, + + /// + /// CdrStart + /// + CdrStart, + + /// + /// CdrStop + /// + CdrStop, + + /// + /// CdrStopAlt + /// + CdrStopAlt, + + /// + /// CdrTick + /// + CdrTick, + + /// + /// CdAdd + /// + CdAdd, + + /// + /// CdBurn + /// + CdBurn, + + /// + /// CdDelete + /// + CdDelete, + + /// + /// CdEdit + /// + CdEdit, + + /// + /// CdEject + /// + CdEject, + + /// + /// CdGo + /// + CdGo, + + /// + /// CdMagnify + /// + CdMagnify, + + /// + /// CdPlay + /// + CdPlay, + + /// + /// CdStop + /// + CdStop, + + /// + /// CdStopAlt + /// + CdStopAlt, + + /// + /// CdTick + /// + CdTick, + + /// + /// ChartBar + /// + ChartBar, + + /// + /// ChartBarAdd + /// + ChartBarAdd, + + /// + /// ChartBarDelete + /// + ChartBarDelete, + + /// + /// ChartBarEdit + /// + ChartBarEdit, + + /// + /// ChartBarError + /// + ChartBarError, + + /// + /// ChartBarLink + /// + ChartBarLink, + + /// + /// ChartCurve + /// + ChartCurve, + + /// + /// ChartCurveAdd + /// + ChartCurveAdd, + + /// + /// ChartCurveDelete + /// + ChartCurveDelete, + + /// + /// ChartCurveEdit + /// + ChartCurveEdit, + + /// + /// ChartCurveError + /// + ChartCurveError, + + /// + /// ChartCurveGo + /// + ChartCurveGo, + + /// + /// ChartCurveLink + /// + ChartCurveLink, + + /// + /// ChartLine + /// + ChartLine, + + /// + /// ChartLineAdd + /// + ChartLineAdd, + + /// + /// ChartLineDelete + /// + ChartLineDelete, + + /// + /// ChartLineEdit + /// + ChartLineEdit, + + /// + /// ChartLineError + /// + ChartLineError, + + /// + /// ChartLineLink + /// + ChartLineLink, + + /// + /// ChartOrganisation + /// + ChartOrganisation, + + /// + /// ChartOrganisationAdd + /// + ChartOrganisationAdd, + + /// + /// ChartOrganisationDelete + /// + ChartOrganisationDelete, + + /// + /// ChartOrgInverted + /// + ChartOrgInverted, + + /// + /// ChartPie + /// + ChartPie, + + /// + /// ChartPieAdd + /// + ChartPieAdd, + + /// + /// ChartPieDelete + /// + ChartPieDelete, + + /// + /// ChartPieEdit + /// + ChartPieEdit, + + /// + /// ChartPieError + /// + ChartPieError, + + /// + /// ChartPieLightning + /// + ChartPieLightning, + + /// + /// ChartPieLink + /// + ChartPieLink, + + /// + /// CheckError + /// + CheckError, + + /// + /// Clipboard + /// + Clipboard, + + /// + /// Clock + /// + Clock, + + /// + /// ClockAdd + /// + ClockAdd, + + /// + /// ClockDelete + /// + ClockDelete, + + /// + /// ClockEdit + /// + ClockEdit, + + /// + /// ClockError + /// + ClockError, + + /// + /// ClockGo + /// + ClockGo, + + /// + /// ClockLink + /// + ClockLink, + + /// + /// ClockPause + /// + ClockPause, + + /// + /// ClockPlay + /// + ClockPlay, + + /// + /// ClockRed + /// + ClockRed, + + /// + /// ClockStart + /// + ClockStart, + + /// + /// ClockStop + /// + ClockStop, + + /// + /// ClockStop2 + /// + ClockStop2, + + /// + /// Cmy + /// + Cmy, + + /// + /// Cog + /// + Cog, + + /// + /// CogAdd + /// + CogAdd, + + /// + /// CogDelete + /// + CogDelete, + + /// + /// CogEdit + /// + CogEdit, + + /// + /// CogError + /// + CogError, + + /// + /// CogGo + /// + CogGo, + + /// + /// CogStart + /// + CogStart, + + /// + /// CogStop + /// + CogStop, + + /// + /// Coins + /// + Coins, + + /// + /// CoinsAdd + /// + CoinsAdd, + + /// + /// CoinsDelete + /// + CoinsDelete, + + /// + /// Color + /// + Color, + + /// + /// ColorSwatch + /// + ColorSwatch, + + /// + /// ColorWheel + /// + ColorWheel, + + /// + /// Comment + /// + Comment, + + /// + /// Comments + /// + Comments, + + /// + /// CommentsAdd + /// + CommentsAdd, + + /// + /// CommentsDelete + /// + CommentsDelete, + + /// + /// CommentAdd + /// + CommentAdd, + + /// + /// CommentDelete + /// + CommentDelete, + + /// + /// CommentDull + /// + CommentDull, + + /// + /// CommentEdit + /// + CommentEdit, + + /// + /// CommentPlay + /// + CommentPlay, + + /// + /// CommentRecord + /// + CommentRecord, + + /// + /// Compass + /// + Compass, + + /// + /// Compress + /// + Compress, + + /// + /// Computer + /// + Computer, + + /// + /// ComputerAdd + /// + ComputerAdd, + + /// + /// ComputerConnect + /// + ComputerConnect, + + /// + /// ComputerDelete + /// + ComputerDelete, + + /// + /// ComputerEdit + /// + ComputerEdit, + + /// + /// ComputerError + /// + ComputerError, + + /// + /// ComputerGo + /// + ComputerGo, + + /// + /// ComputerKey + /// + ComputerKey, + + /// + /// ComputerLink + /// + ComputerLink, + + /// + /// ComputerMagnify + /// + ComputerMagnify, + + /// + /// ComputerOff + /// + ComputerOff, + + /// + /// ComputerStart + /// + ComputerStart, + + /// + /// ComputerStop + /// + ComputerStop, + + /// + /// ComputerWrench + /// + ComputerWrench, + + /// + /// Connect + /// + Connect, + + /// + /// Contrast + /// + Contrast, + + /// + /// ContrastDecrease + /// + ContrastDecrease, + + /// + /// ContrastHigh + /// + ContrastHigh, + + /// + /// ContrastIncrease + /// + ContrastIncrease, + + /// + /// ContrastLow + /// + ContrastLow, + + /// + /// Controller + /// + Controller, + + /// + /// ControllerAdd + /// + ControllerAdd, + + /// + /// ControllerDelete + /// + ControllerDelete, + + /// + /// ControllerError + /// + ControllerError, + + /// + /// ControlAdd + /// + ControlAdd, + + /// + /// ControlAddBlue + /// + ControlAddBlue, + + /// + /// ControlBlank + /// + ControlBlank, + + /// + /// ControlBlankBlue + /// + ControlBlankBlue, + + /// + /// ControlEject + /// + ControlEject, + + /// + /// ControlEjectBlue + /// + ControlEjectBlue, + + /// + /// ControlEnd + /// + ControlEnd, + + /// + /// ControlEndBlue + /// + ControlEndBlue, + + /// + /// ControlEqualizer + /// + ControlEqualizer, + + /// + /// ControlEqualizerBlue + /// + ControlEqualizerBlue, + + /// + /// ControlFastforward + /// + ControlFastforward, + + /// + /// ControlFastforwardBlue + /// + ControlFastforwardBlue, + + /// + /// ControlPause + /// + ControlPause, + + /// + /// ControlPauseBlue + /// + ControlPauseBlue, + + /// + /// ControlPlay + /// + ControlPlay, + + /// + /// ControlPlayBlue + /// + ControlPlayBlue, + + /// + /// ControlPower + /// + ControlPower, + + /// + /// ControlPowerBlue + /// + ControlPowerBlue, + + /// + /// ControlRecord + /// + ControlRecord, + + /// + /// ControlRecordBlue + /// + ControlRecordBlue, + + /// + /// ControlRemove + /// + ControlRemove, + + /// + /// ControlRemoveBlue + /// + ControlRemoveBlue, + + /// + /// ControlRepeat + /// + ControlRepeat, + + /// + /// ControlRepeatBlue + /// + ControlRepeatBlue, + + /// + /// ControlRewind + /// + ControlRewind, + + /// + /// ControlRewindBlue + /// + ControlRewindBlue, + + /// + /// ControlStart + /// + ControlStart, + + /// + /// ControlStartBlue + /// + ControlStartBlue, + + /// + /// ControlStop + /// + ControlStop, + + /// + /// ControlStopBlue + /// + ControlStopBlue, + + /// + /// Creditcards + /// + Creditcards, + + /// + /// Cross + /// + Cross, + + /// + /// Css + /// + Css, + + /// + /// CssAdd + /// + CssAdd, + + /// + /// CssDelete + /// + CssDelete, + + /// + /// CssError + /// + CssError, + + /// + /// CssGo + /// + CssGo, + + /// + /// CssValid + /// + CssValid, + + /// + /// Cup + /// + Cup, + + /// + /// CupAdd + /// + CupAdd, + + /// + /// CupBlack + /// + CupBlack, + + /// + /// CupDelete + /// + CupDelete, + + /// + /// CupEdit + /// + CupEdit, + + /// + /// CupError + /// + CupError, + + /// + /// CupGo + /// + CupGo, + + /// + /// CupGreen + /// + CupGreen, + + /// + /// CupKey + /// + CupKey, + + /// + /// CupLink + /// + CupLink, + + /// + /// CupTea + /// + CupTea, + + /// + /// Cursor + /// + Cursor, + + /// + /// CursorSmall + /// + CursorSmall, + + /// + /// Cut + /// + Cut, + + /// + /// CutRed + /// + CutRed, + + /// + /// Database + /// + Database, + + /// + /// DatabaseAdd + /// + DatabaseAdd, + + /// + /// DatabaseConnect + /// + DatabaseConnect, + + /// + /// DatabaseCopy + /// + DatabaseCopy, + + /// + /// DatabaseDelete + /// + DatabaseDelete, + + /// + /// DatabaseEdit + /// + DatabaseEdit, + + /// + /// DatabaseError + /// + DatabaseError, + + /// + /// DatabaseGear + /// + DatabaseGear, + + /// + /// DatabaseGo + /// + DatabaseGo, + + /// + /// DatabaseKey + /// + DatabaseKey, + + /// + /// DatabaseLightning + /// + DatabaseLightning, + + /// + /// DatabaseLink + /// + DatabaseLink, + + /// + /// DatabaseRefresh + /// + DatabaseRefresh, + + /// + /// DatabaseSave + /// + DatabaseSave, + + /// + /// DatabaseStart + /// + DatabaseStart, + + /// + /// DatabaseStop + /// + DatabaseStop, + + /// + /// DatabaseTable + /// + DatabaseTable, + + /// + /// DatabaseWrench + /// + DatabaseWrench, + + /// + /// DatabaseYellow + /// + DatabaseYellow, + + /// + /// DatabaseYellowStart + /// + DatabaseYellowStart, + + /// + /// DatabaseYellowStop + /// + DatabaseYellowStop, + + /// + /// Date + /// + Date, + + /// + /// DateAdd + /// + DateAdd, + + /// + /// DateDelete + /// + DateDelete, + + /// + /// DateEdit + /// + DateEdit, + + /// + /// DateError + /// + DateError, + + /// + /// DateGo + /// + DateGo, + + /// + /// DateLink + /// + DateLink, + + /// + /// DateMagnify + /// + DateMagnify, + + /// + /// DateNext + /// + DateNext, + + /// + /// DatePrevious + /// + DatePrevious, + + /// + /// Decline + /// + Decline, + + /// + /// Delete + /// + Delete, + + /// + /// DeviceStylus + /// + DeviceStylus, + + /// + /// Disconnect + /// + Disconnect, + + /// + /// Disk + /// + Disk, + + /// + /// DiskBlack + /// + DiskBlack, + + /// + /// DiskBlackError + /// + DiskBlackError, + + /// + /// DiskBlackMagnify + /// + DiskBlackMagnify, + + /// + /// DiskDownload + /// + DiskDownload, + + /// + /// DiskEdit + /// + DiskEdit, + + /// + /// DiskError + /// + DiskError, + + /// + /// DiskMagnify + /// + DiskMagnify, + + /// + /// DiskMultiple + /// + DiskMultiple, + + /// + /// DiskUpload + /// + DiskUpload, + + /// + /// Door + /// + Door, + + /// + /// DoorError + /// + DoorError, + + /// + /// DoorIn + /// + DoorIn, + + /// + /// DoorOpen + /// + DoorOpen, + + /// + /// DoorOut + /// + DoorOut, + + /// + /// Drink + /// + Drink, + + /// + /// DrinkEmpty + /// + DrinkEmpty, + + /// + /// DrinkRed + /// + DrinkRed, + + /// + /// Drive + /// + Drive, + + /// + /// DriveAdd + /// + DriveAdd, + + /// + /// DriveBurn + /// + DriveBurn, + + /// + /// DriveCd + /// + DriveCd, + + /// + /// DriveCdr + /// + DriveCdr, + + /// + /// DriveCdEmpty + /// + DriveCdEmpty, + + /// + /// DriveDelete + /// + DriveDelete, + + /// + /// DriveDisk + /// + DriveDisk, + + /// + /// DriveEdit + /// + DriveEdit, + + /// + /// DriveError + /// + DriveError, + + /// + /// DriveGo + /// + DriveGo, + + /// + /// DriveKey + /// + DriveKey, + + /// + /// DriveLink + /// + DriveLink, + + /// + /// DriveMagnify + /// + DriveMagnify, + + /// + /// DriveNetwork + /// + DriveNetwork, + + /// + /// DriveNetworkError + /// + DriveNetworkError, + + /// + /// DriveNetworkStop + /// + DriveNetworkStop, + + /// + /// DriveRename + /// + DriveRename, + + /// + /// DriveUser + /// + DriveUser, + + /// + /// DriveWeb + /// + DriveWeb, + + /// + /// Dvd + /// + Dvd, + + /// + /// DvdAdd + /// + DvdAdd, + + /// + /// DvdDelete + /// + DvdDelete, + + /// + /// DvdEdit + /// + DvdEdit, + + /// + /// DvdError + /// + DvdError, + + /// + /// DvdGo + /// + DvdGo, + + /// + /// DvdKey + /// + DvdKey, + + /// + /// DvdLink + /// + DvdLink, + + /// + /// DvdStart + /// + DvdStart, + + /// + /// DvdStop + /// + DvdStop, + + /// + /// EjectBlue + /// + EjectBlue, + + /// + /// EjectGreen + /// + EjectGreen, + + /// + /// Email + /// + Email, + + /// + /// EmailAdd + /// + EmailAdd, + + /// + /// EmailAttach + /// + EmailAttach, + + /// + /// EmailDelete + /// + EmailDelete, + + /// + /// EmailEdit + /// + EmailEdit, + + /// + /// EmailError + /// + EmailError, + + /// + /// EmailGo + /// + EmailGo, + + /// + /// EmailLink + /// + EmailLink, + + /// + /// EmailMagnify + /// + EmailMagnify, + + /// + /// EmailOpen + /// + EmailOpen, + + /// + /// EmailOpenImage + /// + EmailOpenImage, + + /// + /// EmailStar + /// + EmailStar, + + /// + /// EmailStart + /// + EmailStart, + + /// + /// EmailStop + /// + EmailStop, + + /// + /// EmailTransfer + /// + EmailTransfer, + + /// + /// EmoticonEvilgrin + /// + EmoticonEvilgrin, + + /// + /// EmoticonGrin + /// + EmoticonGrin, + + /// + /// EmoticonHappy + /// + EmoticonHappy, + + /// + /// EmoticonSmile + /// + EmoticonSmile, + + /// + /// EmoticonSurprised + /// + EmoticonSurprised, + + /// + /// EmoticonTongue + /// + EmoticonTongue, + + /// + /// EmoticonUnhappy + /// + EmoticonUnhappy, + + /// + /// EmoticonWaii + /// + EmoticonWaii, + + /// + /// EmoticonWink + /// + EmoticonWink, + + /// + /// Erase + /// + Erase, + + /// + /// Error + /// + Error, + + /// + /// ErrorAdd + /// + ErrorAdd, + + /// + /// ErrorDelete + /// + ErrorDelete, + + /// + /// ErrorGo + /// + ErrorGo, + + /// + /// Exclamation + /// + Exclamation, + + /// + /// Eye + /// + Eye, + + /// + /// Eyes + /// + Eyes, + + /// + /// Feed + /// + Feed, + + /// + /// FeedAdd + /// + FeedAdd, + + /// + /// FeedDelete + /// + FeedDelete, + + /// + /// FeedDisk + /// + FeedDisk, + + /// + /// FeedEdit + /// + FeedEdit, + + /// + /// FeedError + /// + FeedError, + + /// + /// FeedGo + /// + FeedGo, + + /// + /// FeedKey + /// + FeedKey, + + /// + /// FeedLink + /// + FeedLink, + + /// + /// FeedMagnify + /// + FeedMagnify, + + /// + /// FeedStar + /// + FeedStar, + + /// + /// Female + /// + Female, + + /// + /// Film + /// + Film, + + /// + /// FilmAdd + /// + FilmAdd, + + /// + /// FilmDelete + /// + FilmDelete, + + /// + /// FilmEdit + /// + FilmEdit, + + /// + /// FilmEject + /// + FilmEject, + + /// + /// FilmError + /// + FilmError, + + /// + /// FilmGo + /// + FilmGo, + + /// + /// FilmKey + /// + FilmKey, + + /// + /// FilmLink + /// + FilmLink, + + /// + /// FilmMagnify + /// + FilmMagnify, + + /// + /// FilmSave + /// + FilmSave, + + /// + /// FilmStar + /// + FilmStar, + + /// + /// FilmStart + /// + FilmStart, + + /// + /// FilmStop + /// + FilmStop, + + /// + /// Find + /// + Find, + + /// + /// FingerPoint + /// + FingerPoint, + + /// + /// FlagAd + /// + FlagAd, + + /// + /// FlagAe + /// + FlagAe, + + /// + /// FlagAf + /// + FlagAf, + + /// + /// FlagAg + /// + FlagAg, + + /// + /// FlagAi + /// + FlagAi, + + /// + /// FlagAl + /// + FlagAl, + + /// + /// FlagAm + /// + FlagAm, + + /// + /// FlagAn + /// + FlagAn, + + /// + /// FlagAo + /// + FlagAo, + + /// + /// FlagAr + /// + FlagAr, + + /// + /// FlagAs + /// + FlagAs, + + /// + /// FlagAt + /// + FlagAt, + + /// + /// FlagAu + /// + FlagAu, + + /// + /// FlagAw + /// + FlagAw, + + /// + /// FlagAx + /// + FlagAx, + + /// + /// FlagAz + /// + FlagAz, + + /// + /// FlagBa + /// + FlagBa, + + /// + /// FlagBb + /// + FlagBb, + + /// + /// FlagBd + /// + FlagBd, + + /// + /// FlagBe + /// + FlagBe, + + /// + /// FlagBf + /// + FlagBf, + + /// + /// FlagBg + /// + FlagBg, + + /// + /// FlagBh + /// + FlagBh, + + /// + /// FlagBi + /// + FlagBi, + + /// + /// FlagBj + /// + FlagBj, + + /// + /// FlagBlack + /// + FlagBlack, + + /// + /// FlagBlue + /// + FlagBlue, + + /// + /// FlagBm + /// + FlagBm, + + /// + /// FlagBn + /// + FlagBn, + + /// + /// FlagBo + /// + FlagBo, + + /// + /// FlagBr + /// + FlagBr, + + /// + /// FlagBs + /// + FlagBs, + + /// + /// FlagBt + /// + FlagBt, + + /// + /// FlagBv + /// + FlagBv, + + /// + /// FlagBw + /// + FlagBw, + + /// + /// FlagBy + /// + FlagBy, + + /// + /// FlagBz + /// + FlagBz, + + /// + /// FlagCa + /// + FlagCa, + + /// + /// FlagCatalonia + /// + FlagCatalonia, + + /// + /// FlagCc + /// + FlagCc, + + /// + /// FlagCd + /// + FlagCd, + + /// + /// FlagCf + /// + FlagCf, + + /// + /// FlagCg + /// + FlagCg, + + /// + /// FlagCh + /// + FlagCh, + + /// + /// FlagChecked + /// + FlagChecked, + + /// + /// FlagCi + /// + FlagCi, + + /// + /// FlagCk + /// + FlagCk, + + /// + /// FlagCl + /// + FlagCl, + + /// + /// FlagCm + /// + FlagCm, + + /// + /// FlagCn + /// + FlagCn, + + /// + /// FlagCo + /// + FlagCo, + + /// + /// FlagCr + /// + FlagCr, + + /// + /// FlagCs + /// + FlagCs, + + /// + /// FlagCu + /// + FlagCu, + + /// + /// FlagCv + /// + FlagCv, + + /// + /// FlagCx + /// + FlagCx, + + /// + /// FlagCy + /// + FlagCy, + + /// + /// FlagCz + /// + FlagCz, + + /// + /// FlagDe + /// + FlagDe, + + /// + /// FlagDj + /// + FlagDj, + + /// + /// FlagDk + /// + FlagDk, + + /// + /// FlagDm + /// + FlagDm, + + /// + /// FlagDo + /// + FlagDo, + + /// + /// FlagDz + /// + FlagDz, + + /// + /// FlagEc + /// + FlagEc, + + /// + /// FlagEe + /// + FlagEe, + + /// + /// FlagEg + /// + FlagEg, + + /// + /// FlagEh + /// + FlagEh, + + /// + /// FlagEngland + /// + FlagEngland, + + /// + /// FlagEr + /// + FlagEr, + + /// + /// FlagEs + /// + FlagEs, + + /// + /// FlagEt + /// + FlagEt, + + /// + /// FlagEuropeanunion + /// + FlagEuropeanunion, + + /// + /// FlagFam + /// + FlagFam, + + /// + /// FlagFi + /// + FlagFi, + + /// + /// FlagFj + /// + FlagFj, + + /// + /// FlagFk + /// + FlagFk, + + /// + /// FlagFm + /// + FlagFm, + + /// + /// FlagFo + /// + FlagFo, + + /// + /// FlagFr + /// + FlagFr, + + /// + /// FlagFrance + /// + FlagFrance, + + /// + /// FlagGa + /// + FlagGa, + + /// + /// FlagGb + /// + FlagGb, + + /// + /// FlagGd + /// + FlagGd, + + /// + /// FlagGe + /// + FlagGe, + + /// + /// FlagGf + /// + FlagGf, + + /// + /// FlagGg + /// + FlagGg, + + /// + /// FlagGh + /// + FlagGh, + + /// + /// FlagGi + /// + FlagGi, + + /// + /// FlagGl + /// + FlagGl, + + /// + /// FlagGm + /// + FlagGm, + + /// + /// FlagGn + /// + FlagGn, + + /// + /// FlagGp + /// + FlagGp, + + /// + /// FlagGq + /// + FlagGq, + + /// + /// FlagGr + /// + FlagGr, + + /// + /// FlagGreen + /// + FlagGreen, + + /// + /// FlagGrey + /// + FlagGrey, + + /// + /// FlagGs + /// + FlagGs, + + /// + /// FlagGt + /// + FlagGt, + + /// + /// FlagGu + /// + FlagGu, + + /// + /// FlagGw + /// + FlagGw, + + /// + /// FlagGy + /// + FlagGy, + + /// + /// FlagHk + /// + FlagHk, + + /// + /// FlagHm + /// + FlagHm, + + /// + /// FlagHn + /// + FlagHn, + + /// + /// FlagHr + /// + FlagHr, + + /// + /// FlagHt + /// + FlagHt, + + /// + /// FlagHu + /// + FlagHu, + + /// + /// FlagId + /// + FlagId, + + /// + /// FlagIe + /// + FlagIe, + + /// + /// FlagIl + /// + FlagIl, + + /// + /// FlagIn + /// + FlagIn, + + /// + /// FlagIo + /// + FlagIo, + + /// + /// FlagIq + /// + FlagIq, + + /// + /// FlagIr + /// + FlagIr, + + /// + /// FlagIs + /// + FlagIs, + + /// + /// FlagIt + /// + FlagIt, + + /// + /// FlagJm + /// + FlagJm, + + /// + /// FlagJo + /// + FlagJo, + + /// + /// FlagJp + /// + FlagJp, + + /// + /// FlagKe + /// + FlagKe, + + /// + /// FlagKg + /// + FlagKg, + + /// + /// FlagKh + /// + FlagKh, + + /// + /// FlagKi + /// + FlagKi, + + /// + /// FlagKm + /// + FlagKm, + + /// + /// FlagKn + /// + FlagKn, + + /// + /// FlagKp + /// + FlagKp, + + /// + /// FlagKr + /// + FlagKr, + + /// + /// FlagKw + /// + FlagKw, + + /// + /// FlagKy + /// + FlagKy, + + /// + /// FlagKz + /// + FlagKz, + + /// + /// FlagLa + /// + FlagLa, + + /// + /// FlagLb + /// + FlagLb, + + /// + /// FlagLc + /// + FlagLc, + + /// + /// FlagLi + /// + FlagLi, + + /// + /// FlagLk + /// + FlagLk, + + /// + /// FlagLr + /// + FlagLr, + + /// + /// FlagLs + /// + FlagLs, + + /// + /// FlagLt + /// + FlagLt, + + /// + /// FlagLu + /// + FlagLu, + + /// + /// FlagLv + /// + FlagLv, + + /// + /// FlagLy + /// + FlagLy, + + /// + /// FlagMa + /// + FlagMa, + + /// + /// FlagMc + /// + FlagMc, + + /// + /// FlagMd + /// + FlagMd, + + /// + /// FlagMe + /// + FlagMe, + + /// + /// FlagMg + /// + FlagMg, + + /// + /// FlagMh + /// + FlagMh, + + /// + /// FlagMk + /// + FlagMk, + + /// + /// FlagMl + /// + FlagMl, + + /// + /// FlagMm + /// + FlagMm, + + /// + /// FlagMn + /// + FlagMn, + + /// + /// FlagMo + /// + FlagMo, + + /// + /// FlagMp + /// + FlagMp, + + /// + /// FlagMq + /// + FlagMq, + + /// + /// FlagMr + /// + FlagMr, + + /// + /// FlagMs + /// + FlagMs, + + /// + /// FlagMt + /// + FlagMt, + + /// + /// FlagMu + /// + FlagMu, + + /// + /// FlagMv + /// + FlagMv, + + /// + /// FlagMw + /// + FlagMw, + + /// + /// FlagMx + /// + FlagMx, + + /// + /// FlagMy + /// + FlagMy, + + /// + /// FlagMz + /// + FlagMz, + + /// + /// FlagNa + /// + FlagNa, + + /// + /// FlagNc + /// + FlagNc, + + /// + /// FlagNe + /// + FlagNe, + + /// + /// FlagNf + /// + FlagNf, + + /// + /// FlagNg + /// + FlagNg, + + /// + /// FlagNi + /// + FlagNi, + + /// + /// FlagNl + /// + FlagNl, + + /// + /// FlagNo + /// + FlagNo, + + /// + /// FlagNp + /// + FlagNp, + + /// + /// FlagNr + /// + FlagNr, + + /// + /// FlagNu + /// + FlagNu, + + /// + /// FlagNz + /// + FlagNz, + + /// + /// FlagOm + /// + FlagOm, + + /// + /// FlagOrange + /// + FlagOrange, + + /// + /// FlagPa + /// + FlagPa, + + /// + /// FlagPe + /// + FlagPe, + + /// + /// FlagPf + /// + FlagPf, + + /// + /// FlagPg + /// + FlagPg, + + /// + /// FlagPh + /// + FlagPh, + + /// + /// FlagPink + /// + FlagPink, + + /// + /// FlagPk + /// + FlagPk, + + /// + /// FlagPl + /// + FlagPl, + + /// + /// FlagPm + /// + FlagPm, + + /// + /// FlagPn + /// + FlagPn, + + /// + /// FlagPr + /// + FlagPr, + + /// + /// FlagPs + /// + FlagPs, + + /// + /// FlagPt + /// + FlagPt, + + /// + /// FlagPurple + /// + FlagPurple, + + /// + /// FlagPw + /// + FlagPw, + + /// + /// FlagPy + /// + FlagPy, + + /// + /// FlagQa + /// + FlagQa, + + /// + /// FlagRe + /// + FlagRe, + + /// + /// FlagRed + /// + FlagRed, + + /// + /// FlagRo + /// + FlagRo, + + /// + /// FlagRs + /// + FlagRs, + + /// + /// FlagRu + /// + FlagRu, + + /// + /// FlagRw + /// + FlagRw, + + /// + /// FlagSa + /// + FlagSa, + + /// + /// FlagSb + /// + FlagSb, + + /// + /// FlagSc + /// + FlagSc, + + /// + /// FlagScotland + /// + FlagScotland, + + /// + /// FlagSd + /// + FlagSd, + + /// + /// FlagSe + /// + FlagSe, + + /// + /// FlagSg + /// + FlagSg, + + /// + /// FlagSh + /// + FlagSh, + + /// + /// FlagSi + /// + FlagSi, + + /// + /// FlagSj + /// + FlagSj, + + /// + /// FlagSk + /// + FlagSk, + + /// + /// FlagSl + /// + FlagSl, + + /// + /// FlagSm + /// + FlagSm, + + /// + /// FlagSn + /// + FlagSn, + + /// + /// FlagSo + /// + FlagSo, + + /// + /// FlagSr + /// + FlagSr, + + /// + /// FlagSt + /// + FlagSt, + + /// + /// FlagSv + /// + FlagSv, + + /// + /// FlagSy + /// + FlagSy, + + /// + /// FlagSz + /// + FlagSz, + + /// + /// FlagTc + /// + FlagTc, + + /// + /// FlagTd + /// + FlagTd, + + /// + /// FlagTf + /// + FlagTf, + + /// + /// FlagTg + /// + FlagTg, + + /// + /// FlagTh + /// + FlagTh, + + /// + /// FlagTj + /// + FlagTj, + + /// + /// FlagTk + /// + FlagTk, + + /// + /// FlagTl + /// + FlagTl, + + /// + /// FlagTm + /// + FlagTm, + + /// + /// FlagTn + /// + FlagTn, + + /// + /// FlagTo + /// + FlagTo, + + /// + /// FlagTr + /// + FlagTr, + + /// + /// FlagTt + /// + FlagTt, + + /// + /// FlagTv + /// + FlagTv, + + /// + /// FlagTw + /// + FlagTw, + + /// + /// FlagTz + /// + FlagTz, + + /// + /// FlagUa + /// + FlagUa, + + /// + /// FlagUg + /// + FlagUg, + + /// + /// FlagUm + /// + FlagUm, + + /// + /// FlagUs + /// + FlagUs, + + /// + /// FlagUy + /// + FlagUy, + + /// + /// FlagUz + /// + FlagUz, + + /// + /// FlagVa + /// + FlagVa, + + /// + /// FlagVc + /// + FlagVc, + + /// + /// FlagVe + /// + FlagVe, + + /// + /// FlagVg + /// + FlagVg, + + /// + /// FlagVi + /// + FlagVi, + + /// + /// FlagVn + /// + FlagVn, + + /// + /// FlagVu + /// + FlagVu, + + /// + /// FlagWales + /// + FlagWales, + + /// + /// FlagWf + /// + FlagWf, + + /// + /// FlagWhite + /// + FlagWhite, + + /// + /// FlagWs + /// + FlagWs, + + /// + /// FlagYe + /// + FlagYe, + + /// + /// FlagYellow + /// + FlagYellow, + + /// + /// FlagYt + /// + FlagYt, + + /// + /// FlagZa + /// + FlagZa, + + /// + /// FlagZm + /// + FlagZm, + + /// + /// FlagZw + /// + FlagZw, + + /// + /// FlowerDaisy + /// + FlowerDaisy, + + /// + /// Folder + /// + Folder, + + /// + /// FolderAdd + /// + FolderAdd, + + /// + /// FolderBell + /// + FolderBell, + + /// + /// FolderBookmark + /// + FolderBookmark, + + /// + /// FolderBrick + /// + FolderBrick, + + /// + /// FolderBug + /// + FolderBug, + + /// + /// FolderCamera + /// + FolderCamera, + + /// + /// FolderConnect + /// + FolderConnect, + + /// + /// FolderDatabase + /// + FolderDatabase, + + /// + /// FolderDelete + /// + FolderDelete, + + /// + /// FolderEdit + /// + FolderEdit, + + /// + /// FolderError + /// + FolderError, + + /// + /// FolderExplore + /// + FolderExplore, + + /// + /// FolderFeed + /// + FolderFeed, + + /// + /// FolderFilm + /// + FolderFilm, + + /// + /// FolderFind + /// + FolderFind, + + /// + /// FolderFont + /// + FolderFont, + + /// + /// FolderGo + /// + FolderGo, + + /// + /// FolderHeart + /// + FolderHeart, + + /// + /// FolderHome + /// + FolderHome, + + /// + /// FolderImage + /// + FolderImage, + + /// + /// FolderKey + /// + FolderKey, + + /// + /// FolderLightbulb + /// + FolderLightbulb, + + /// + /// FolderLink + /// + FolderLink, + + /// + /// FolderMagnify + /// + FolderMagnify, + + /// + /// FolderPage + /// + FolderPage, + + /// + /// FolderPageWhite + /// + FolderPageWhite, + + /// + /// FolderPalette + /// + FolderPalette, + + /// + /// FolderPicture + /// + FolderPicture, + + /// + /// FolderStar + /// + FolderStar, + + /// + /// FolderTable + /// + FolderTable, + + /// + /// FolderUp + /// + FolderUp, + + /// + /// FolderUser + /// + FolderUser, + + /// + /// FolderWrench + /// + FolderWrench, + + /// + /// Font + /// + Font, + + /// + /// FontAdd + /// + FontAdd, + + /// + /// FontColor + /// + FontColor, + + /// + /// FontDelete + /// + FontDelete, + + /// + /// FontGo + /// + FontGo, + + /// + /// FontLarger + /// + FontLarger, + + /// + /// FontSmaller + /// + FontSmaller, + + /// + /// ForwardBlue + /// + ForwardBlue, + + /// + /// ForwardGreen + /// + ForwardGreen, + + /// + /// Group + /// + Group, + + /// + /// GroupAdd + /// + GroupAdd, + + /// + /// GroupDelete + /// + GroupDelete, + + /// + /// GroupEdit + /// + GroupEdit, + + /// + /// GroupError + /// + GroupError, + + /// + /// GroupGear + /// + GroupGear, + + /// + /// GroupGo + /// + GroupGo, + + /// + /// GroupKey + /// + GroupKey, + + /// + /// GroupLink + /// + GroupLink, + + /// + /// Heart + /// + Heart, + + /// + /// HeartAdd + /// + HeartAdd, + + /// + /// HeartBroken + /// + HeartBroken, + + /// + /// HeartConnect + /// + HeartConnect, + + /// + /// HeartDelete + /// + HeartDelete, + + /// + /// Help + /// + Help, + + /// + /// Hourglass + /// + Hourglass, + + /// + /// HourglassAdd + /// + HourglassAdd, + + /// + /// HourglassDelete + /// + HourglassDelete, + + /// + /// HourglassGo + /// + HourglassGo, + + /// + /// HourglassLink + /// + HourglassLink, + + /// + /// House + /// + House, + + /// + /// HouseConnect + /// + HouseConnect, + + /// + /// HouseGo + /// + HouseGo, + + /// + /// HouseKey + /// + HouseKey, + + /// + /// HouseLink + /// + HouseLink, + + /// + /// HouseStar + /// + HouseStar, + + /// + /// Html + /// + Html, + + /// + /// HtmlAdd + /// + HtmlAdd, + + /// + /// HtmlDelete + /// + HtmlDelete, + + /// + /// HtmlError + /// + HtmlError, + + /// + /// HtmlGo + /// + HtmlGo, + + /// + /// HtmlValid + /// + HtmlValid, + + /// + /// Image + /// + Image, + + /// + /// Images + /// + Images, + + /// + /// ImageAdd + /// + ImageAdd, + + /// + /// ImageDelete + /// + ImageDelete, + + /// + /// ImageEdit + /// + ImageEdit, + + /// + /// ImageLink + /// + ImageLink, + + /// + /// ImageMagnify + /// + ImageMagnify, + + /// + /// ImageStar + /// + ImageStar, + + /// + /// Information + /// + Information, + + /// + /// Ipod + /// + Ipod, + + /// + /// IpodCast + /// + IpodCast, + + /// + /// IpodCastAdd + /// + IpodCastAdd, + + /// + /// IpodCastDelete + /// + IpodCastDelete, + + /// + /// IpodConnect + /// + IpodConnect, + + /// + /// IpodNano + /// + IpodNano, + + /// + /// IpodNanoConnect + /// + IpodNanoConnect, + + /// + /// IpodSound + /// + IpodSound, + + /// + /// Joystick + /// + Joystick, + + /// + /// JoystickAdd + /// + JoystickAdd, + + /// + /// JoystickConnect + /// + JoystickConnect, + + /// + /// JoystickDelete + /// + JoystickDelete, + + /// + /// JoystickError + /// + JoystickError, + + /// + /// Key + /// + Key, + + /// + /// Keyboard + /// + Keyboard, + + /// + /// KeyboardAdd + /// + KeyboardAdd, + + /// + /// KeyboardConnect + /// + KeyboardConnect, + + /// + /// KeyboardDelete + /// + KeyboardDelete, + + /// + /// KeyboardMagnify + /// + KeyboardMagnify, + + /// + /// KeyAdd + /// + KeyAdd, + + /// + /// KeyDelete + /// + KeyDelete, + + /// + /// KeyGo + /// + KeyGo, + + /// + /// KeyStart + /// + KeyStart, + + /// + /// KeyStop + /// + KeyStop, + + /// + /// Laptop + /// + Laptop, + + /// + /// LaptopAdd + /// + LaptopAdd, + + /// + /// LaptopConnect + /// + LaptopConnect, + + /// + /// LaptopDelete + /// + LaptopDelete, + + /// + /// LaptopDisk + /// + LaptopDisk, + + /// + /// LaptopEdit + /// + LaptopEdit, + + /// + /// LaptopError + /// + LaptopError, + + /// + /// LaptopGo + /// + LaptopGo, + + /// + /// LaptopKey + /// + LaptopKey, + + /// + /// LaptopLink + /// + LaptopLink, + + /// + /// LaptopMagnify + /// + LaptopMagnify, + + /// + /// LaptopStart + /// + LaptopStart, + + /// + /// LaptopStop + /// + LaptopStop, + + /// + /// LaptopWrench + /// + LaptopWrench, + + /// + /// Layers + /// + Layers, + + /// + /// Layout + /// + Layout, + + /// + /// LayoutAdd + /// + LayoutAdd, + + /// + /// LayoutContent + /// + LayoutContent, + + /// + /// LayoutDelete + /// + LayoutDelete, + + /// + /// LayoutEdit + /// + LayoutEdit, + + /// + /// LayoutError + /// + LayoutError, + + /// + /// LayoutHeader + /// + LayoutHeader, + + /// + /// LayoutKey + /// + LayoutKey, + + /// + /// LayoutLightning + /// + LayoutLightning, + + /// + /// LayoutLink + /// + LayoutLink, + + /// + /// LayoutSidebar + /// + LayoutSidebar, + + /// + /// Lightbulb + /// + Lightbulb, + + /// + /// LightbulbAdd + /// + LightbulbAdd, + + /// + /// LightbulbDelete + /// + LightbulbDelete, + + /// + /// LightbulbOff + /// + LightbulbOff, + + /// + /// Lightning + /// + Lightning, + + /// + /// LightningAdd + /// + LightningAdd, + + /// + /// LightningDelete + /// + LightningDelete, + + /// + /// LightningGo + /// + LightningGo, + + /// + /// Link + /// + Link, + + /// + /// LinkAdd + /// + LinkAdd, + + /// + /// LinkBreak + /// + LinkBreak, + + /// + /// LinkDelete + /// + LinkDelete, + + /// + /// LinkEdit + /// + LinkEdit, + + /// + /// LinkError + /// + LinkError, + + /// + /// LinkGo + /// + LinkGo, + + /// + /// Lock + /// + Lock, + + /// + /// LockAdd + /// + LockAdd, + + /// + /// LockBreak + /// + LockBreak, + + /// + /// LockDelete + /// + LockDelete, + + /// + /// LockEdit + /// + LockEdit, + + /// + /// LockGo + /// + LockGo, + + /// + /// LockKey + /// + LockKey, + + /// + /// LockOpen + /// + LockOpen, + + /// + /// LockStart + /// + LockStart, + + /// + /// LockStop + /// + LockStop, + + /// + /// Lorry + /// + Lorry, + + /// + /// LorryAdd + /// + LorryAdd, + + /// + /// LorryDelete + /// + LorryDelete, + + /// + /// LorryError + /// + LorryError, + + /// + /// LorryFlatbed + /// + LorryFlatbed, + + /// + /// LorryGo + /// + LorryGo, + + /// + /// LorryLink + /// + LorryLink, + + /// + /// LorryStart + /// + LorryStart, + + /// + /// LorryStop + /// + LorryStop, + + /// + /// MagifierZoomOut + /// + MagifierZoomOut, + + /// + /// Magnifier + /// + Magnifier, + + /// + /// MagnifierZoomIn + /// + MagnifierZoomIn, + + /// + /// Mail + /// + Mail, + + /// + /// Male + /// + Male, + + /// + /// Map + /// + Map, + + /// + /// MapAdd + /// + MapAdd, + + /// + /// MapClipboard + /// + MapClipboard, + + /// + /// MapCursor + /// + MapCursor, + + /// + /// MapDelete + /// + MapDelete, + + /// + /// MapEdit + /// + MapEdit, + + /// + /// MapError + /// + MapError, + + /// + /// MapGo + /// + MapGo, + + /// + /// MapLink + /// + MapLink, + + /// + /// MapMagnify + /// + MapMagnify, + + /// + /// MapStart + /// + MapStart, + + /// + /// MapStop + /// + MapStop, + + /// + /// MedalBronze1 + /// + MedalBronze1, + + /// + /// MedalBronze2 + /// + MedalBronze2, + + /// + /// MedalBronze3 + /// + MedalBronze3, + + /// + /// MedalBronzeAdd + /// + MedalBronzeAdd, + + /// + /// MedalBronzeDelete + /// + MedalBronzeDelete, + + /// + /// MedalGold1 + /// + MedalGold1, + + /// + /// MedalGold2 + /// + MedalGold2, + + /// + /// MedalGold3 + /// + MedalGold3, + + /// + /// MedalGoldAdd + /// + MedalGoldAdd, + + /// + /// MedalGoldDelete + /// + MedalGoldDelete, + + /// + /// MedalSilver1 + /// + MedalSilver1, + + /// + /// MedalSilver2 + /// + MedalSilver2, + + /// + /// MedalSilver3 + /// + MedalSilver3, + + /// + /// MedalSilverAdd + /// + MedalSilverAdd, + + /// + /// MedalSilverDelete + /// + MedalSilverDelete, + + /// + /// Money + /// + Money, + + /// + /// MoneyAdd + /// + MoneyAdd, + + /// + /// MoneyDelete + /// + MoneyDelete, + + /// + /// MoneyDollar + /// + MoneyDollar, + + /// + /// MoneyEuro + /// + MoneyEuro, + + /// + /// MoneyPound + /// + MoneyPound, + + /// + /// MoneyYen + /// + MoneyYen, + + /// + /// Monitor + /// + Monitor, + + /// + /// MonitorAdd + /// + MonitorAdd, + + /// + /// MonitorDelete + /// + MonitorDelete, + + /// + /// MonitorEdit + /// + MonitorEdit, + + /// + /// MonitorError + /// + MonitorError, + + /// + /// MonitorGo + /// + MonitorGo, + + /// + /// MonitorKey + /// + MonitorKey, + + /// + /// MonitorLightning + /// + MonitorLightning, + + /// + /// MonitorLink + /// + MonitorLink, + + /// + /// MoonFull + /// + MoonFull, + + /// + /// Mouse + /// + Mouse, + + /// + /// MouseAdd + /// + MouseAdd, + + /// + /// MouseDelete + /// + MouseDelete, + + /// + /// MouseError + /// + MouseError, + + /// + /// Music + /// + Music, + + /// + /// MusicNote + /// + MusicNote, + + /// + /// Neighbourhood + /// + Neighbourhood, + + /// + /// New + /// + New, + + /// + /// Newspaper + /// + Newspaper, + + /// + /// NewspaperAdd + /// + NewspaperAdd, + + /// + /// NewspaperDelete + /// + NewspaperDelete, + + /// + /// NewspaperGo + /// + NewspaperGo, + + /// + /// NewspaperLink + /// + NewspaperLink, + + /// + /// NewBlue + /// + NewBlue, + + /// + /// NewRed + /// + NewRed, + + /// + /// NextBlue + /// + NextBlue, + + /// + /// NextGreen + /// + NextGreen, + + /// + /// Note + /// + Note, + + /// + /// NoteAdd + /// + NoteAdd, + + /// + /// NoteDelete + /// + NoteDelete, + + /// + /// NoteEdit + /// + NoteEdit, + + /// + /// NoteError + /// + NoteError, + + /// + /// NoteGo + /// + NoteGo, + + /// + /// Outline + /// + Outline, + + /// + /// Overlays + /// + Overlays, + + /// + /// Package + /// + Package, + + /// + /// PackageAdd + /// + PackageAdd, + + /// + /// PackageDelete + /// + PackageDelete, + + /// + /// PackageDown + /// + PackageDown, + + /// + /// PackageGo + /// + PackageGo, + + /// + /// PackageGreen + /// + PackageGreen, + + /// + /// PackageIn + /// + PackageIn, + + /// + /// PackageLink + /// + PackageLink, + + /// + /// PackageSe + /// + PackageSe, + + /// + /// PackageStart + /// + PackageStart, + + /// + /// PackageStop + /// + PackageStop, + + /// + /// PackageWhite + /// + PackageWhite, + + /// + /// Page + /// + Page, + + /// + /// PageAdd + /// + PageAdd, + + /// + /// PageAttach + /// + PageAttach, + + /// + /// PageBack + /// + PageBack, + + /// + /// PageBreak + /// + PageBreak, + + /// + /// PageBreakInsert + /// + PageBreakInsert, + + /// + /// PageCancel + /// + PageCancel, + + /// + /// PageCode + /// + PageCode, + + /// + /// PageCopy + /// + PageCopy, + + /// + /// PageDelete + /// + PageDelete, + + /// + /// PageEdit + /// + PageEdit, + + /// + /// PageError + /// + PageError, + + /// + /// PageExcel + /// + PageExcel, + + /// + /// PageFind + /// + PageFind, + + /// + /// PageForward + /// + PageForward, + + /// + /// PageGear + /// + PageGear, + + /// + /// PageGo + /// + PageGo, + + /// + /// PageGreen + /// + PageGreen, + + /// + /// PageHeaderFooter + /// + PageHeaderFooter, + + /// + /// PageKey + /// + PageKey, + + /// + /// PageLandscape + /// + PageLandscape, + + /// + /// PageLandscapeShot + /// + PageLandscapeShot, + + /// + /// PageLightning + /// + PageLightning, + + /// + /// PageLink + /// + PageLink, + + /// + /// PageMagnify + /// + PageMagnify, + + /// + /// PagePaintbrush + /// + PagePaintbrush, + + /// + /// PagePaste + /// + PagePaste, + + /// + /// PagePortrait + /// + PagePortrait, + + /// + /// PagePortraitShot + /// + PagePortraitShot, + + /// + /// PageRed + /// + PageRed, + + /// + /// PageRefresh + /// + PageRefresh, + + /// + /// PageSave + /// + PageSave, + + /// + /// PageWhite + /// + PageWhite, + + /// + /// PageWhiteAcrobat + /// + PageWhiteAcrobat, + + /// + /// PageWhiteActionscript + /// + PageWhiteActionscript, + + /// + /// PageWhiteAdd + /// + PageWhiteAdd, + + /// + /// PageWhiteBreak + /// + PageWhiteBreak, + + /// + /// PageWhiteC + /// + PageWhiteC, + + /// + /// PageWhiteCamera + /// + PageWhiteCamera, + + /// + /// PageWhiteCd + /// + PageWhiteCd, + + /// + /// PageWhiteCdr + /// + PageWhiteCdr, + + /// + /// PageWhiteCode + /// + PageWhiteCode, + + /// + /// PageWhiteCodeRed + /// + PageWhiteCodeRed, + + /// + /// PageWhiteColdfusion + /// + PageWhiteColdfusion, + + /// + /// PageWhiteCompressed + /// + PageWhiteCompressed, + + /// + /// PageWhiteConnect + /// + PageWhiteConnect, + + /// + /// PageWhiteCopy + /// + PageWhiteCopy, + + /// + /// PageWhiteCplusplus + /// + PageWhiteCplusplus, + + /// + /// PageWhiteCsharp + /// + PageWhiteCsharp, + + /// + /// PageWhiteCup + /// + PageWhiteCup, + + /// + /// PageWhiteDatabase + /// + PageWhiteDatabase, + + /// + /// PageWhiteDatabaseYellow + /// + PageWhiteDatabaseYellow, + + /// + /// PageWhiteDelete + /// + PageWhiteDelete, + + /// + /// PageWhiteDvd + /// + PageWhiteDvd, + + /// + /// PageWhiteEdit + /// + PageWhiteEdit, + + /// + /// PageWhiteError + /// + PageWhiteError, + + /// + /// PageWhiteExcel + /// + PageWhiteExcel, + + /// + /// PageWhiteFind + /// + PageWhiteFind, + + /// + /// PageWhiteFlash + /// + PageWhiteFlash, + + /// + /// PageWhiteFont + /// + PageWhiteFont, + + /// + /// PageWhiteFreehand + /// + PageWhiteFreehand, + + /// + /// PageWhiteGear + /// + PageWhiteGear, + + /// + /// PageWhiteGet + /// + PageWhiteGet, + + /// + /// PageWhiteGo + /// + PageWhiteGo, + + /// + /// PageWhiteH + /// + PageWhiteH, + + /// + /// PageWhiteHorizontal + /// + PageWhiteHorizontal, + + /// + /// PageWhiteKey + /// + PageWhiteKey, + + /// + /// PageWhiteLightning + /// + PageWhiteLightning, + + /// + /// PageWhiteLink + /// + PageWhiteLink, + + /// + /// PageWhiteMagnify + /// + PageWhiteMagnify, + + /// + /// PageWhiteMedal + /// + PageWhiteMedal, + + /// + /// PageWhiteOffice + /// + PageWhiteOffice, + + /// + /// PageWhitePaint + /// + PageWhitePaint, + + /// + /// PageWhitePaintbrush + /// + PageWhitePaintbrush, + + /// + /// PageWhitePaint2 + /// + PageWhitePaint2, + + /// + /// PageWhitePaste + /// + PageWhitePaste, + + /// + /// PageWhitePasteTable + /// + PageWhitePasteTable, + + /// + /// PageWhitePhp + /// + PageWhitePhp, + + /// + /// PageWhitePicture + /// + PageWhitePicture, + + /// + /// PageWhitePowerpoint + /// + PageWhitePowerpoint, + + /// + /// PageWhitePut + /// + PageWhitePut, + + /// + /// PageWhiteRefresh + /// + PageWhiteRefresh, + + /// + /// PageWhiteRuby + /// + PageWhiteRuby, + + /// + /// PageWhiteSideBySide + /// + PageWhiteSideBySide, + + /// + /// PageWhiteStack + /// + PageWhiteStack, + + /// + /// PageWhiteStar + /// + PageWhiteStar, + + /// + /// PageWhiteSwoosh + /// + PageWhiteSwoosh, + + /// + /// PageWhiteText + /// + PageWhiteText, + + /// + /// PageWhiteTextWidth + /// + PageWhiteTextWidth, + + /// + /// PageWhiteTux + /// + PageWhiteTux, + + /// + /// PageWhiteVector + /// + PageWhiteVector, + + /// + /// PageWhiteVisualstudio + /// + PageWhiteVisualstudio, + + /// + /// PageWhiteWidth + /// + PageWhiteWidth, + + /// + /// PageWhiteWord + /// + PageWhiteWord, + + /// + /// PageWhiteWorld + /// + PageWhiteWorld, + + /// + /// PageWhiteWrench + /// + PageWhiteWrench, + + /// + /// PageWhiteZip + /// + PageWhiteZip, + + /// + /// PageWord + /// + PageWord, + + /// + /// PageWorld + /// + PageWorld, + + /// + /// Paint + /// + Paint, + + /// + /// Paintbrush + /// + Paintbrush, + + /// + /// PaintbrushColor + /// + PaintbrushColor, + + /// + /// Paintcan + /// + Paintcan, + + /// + /// PaintcanRed + /// + PaintcanRed, + + /// + /// PaintCanBrush + /// + PaintCanBrush, + + /// + /// Palette + /// + Palette, + + /// + /// PastePlain + /// + PastePlain, + + /// + /// PasteWord + /// + PasteWord, + + /// + /// PauseBlue + /// + PauseBlue, + + /// + /// PauseGreen + /// + PauseGreen, + + /// + /// PauseRecord + /// + PauseRecord, + + /// + /// Pencil + /// + Pencil, + + /// + /// PencilAdd + /// + PencilAdd, + + /// + /// PencilDelete + /// + PencilDelete, + + /// + /// PencilGo + /// + PencilGo, + + /// + /// Phone + /// + Phone, + + /// + /// PhoneAdd + /// + PhoneAdd, + + /// + /// PhoneDelete + /// + PhoneDelete, + + /// + /// PhoneEdit + /// + PhoneEdit, + + /// + /// PhoneError + /// + PhoneError, + + /// + /// PhoneGo + /// + PhoneGo, + + /// + /// PhoneKey + /// + PhoneKey, + + /// + /// PhoneLink + /// + PhoneLink, + + /// + /// PhoneSound + /// + PhoneSound, + + /// + /// PhoneStart + /// + PhoneStart, + + /// + /// PhoneStop + /// + PhoneStop, + + /// + /// Photo + /// + Photo, + + /// + /// Photos + /// + Photos, + + /// + /// PhotoAdd + /// + PhotoAdd, + + /// + /// PhotoDelete + /// + PhotoDelete, + + /// + /// PhotoEdit + /// + PhotoEdit, + + /// + /// PhotoLink + /// + PhotoLink, + + /// + /// PhotoPaint + /// + PhotoPaint, + + /// + /// Picture + /// + Picture, + + /// + /// Pictures + /// + Pictures, + + /// + /// PicturesThumbs + /// + PicturesThumbs, + + /// + /// PictureAdd + /// + PictureAdd, + + /// + /// PictureClipboard + /// + PictureClipboard, + + /// + /// PictureDelete + /// + PictureDelete, + + /// + /// PictureEdit + /// + PictureEdit, + + /// + /// PictureEmpty + /// + PictureEmpty, + + /// + /// PictureError + /// + PictureError, + + /// + /// PictureGo + /// + PictureGo, + + /// + /// PictureKey + /// + PictureKey, + + /// + /// PictureLink + /// + PictureLink, + + /// + /// PictureSave + /// + PictureSave, + + /// + /// Pilcrow + /// + Pilcrow, + + /// + /// Pill + /// + Pill, + + /// + /// PillAdd + /// + PillAdd, + + /// + /// PillDelete + /// + PillDelete, + + /// + /// PillError + /// + PillError, + + /// + /// PillGo + /// + PillGo, + + /// + /// PlayBlue + /// + PlayBlue, + + /// + /// PlayGreen + /// + PlayGreen, + + /// + /// Plugin + /// + Plugin, + + /// + /// PluginAdd + /// + PluginAdd, + + /// + /// PluginDelete + /// + PluginDelete, + + /// + /// PluginDisabled + /// + PluginDisabled, + + /// + /// PluginEdit + /// + PluginEdit, + + /// + /// PluginError + /// + PluginError, + + /// + /// PluginGo + /// + PluginGo, + + /// + /// PluginKey + /// + PluginKey, + + /// + /// PluginLink + /// + PluginLink, + + /// + /// PreviousGreen + /// + PreviousGreen, + + /// + /// Printer + /// + Printer, + + /// + /// PrinterAdd + /// + PrinterAdd, + + /// + /// PrinterCancel + /// + PrinterCancel, + + /// + /// PrinterColor + /// + PrinterColor, + + /// + /// PrinterConnect + /// + PrinterConnect, + + /// + /// PrinterDelete + /// + PrinterDelete, + + /// + /// PrinterEmpty + /// + PrinterEmpty, + + /// + /// PrinterError + /// + PrinterError, + + /// + /// PrinterGo + /// + PrinterGo, + + /// + /// PrinterKey + /// + PrinterKey, + + /// + /// PrinterMono + /// + PrinterMono, + + /// + /// PrinterStart + /// + PrinterStart, + + /// + /// PrinterStop + /// + PrinterStop, + + /// + /// Rainbow + /// + Rainbow, + + /// + /// RainbowStar + /// + RainbowStar, + + /// + /// RecordBlue + /// + RecordBlue, + + /// + /// RecordGreen + /// + RecordGreen, + + /// + /// RecordRed + /// + RecordRed, + + /// + /// Reload + /// + Reload, + + /// + /// Report + /// + Report, + + /// + /// ReportAdd + /// + ReportAdd, + + /// + /// ReportDelete + /// + ReportDelete, + + /// + /// ReportDisk + /// + ReportDisk, + + /// + /// ReportEdit + /// + ReportEdit, + + /// + /// ReportGo + /// + ReportGo, + + /// + /// ReportKey + /// + ReportKey, + + /// + /// ReportLink + /// + ReportLink, + + /// + /// ReportMagnify + /// + ReportMagnify, + + /// + /// ReportPicture + /// + ReportPicture, + + /// + /// ReportStart + /// + ReportStart, + + /// + /// ReportStop + /// + ReportStop, + + /// + /// ReportUser + /// + ReportUser, + + /// + /// ReportWord + /// + ReportWord, + + /// + /// ResultsetFirst + /// + ResultsetFirst, + + /// + /// ResultsetLast + /// + ResultsetLast, + + /// + /// ResultsetNext + /// + ResultsetNext, + + /// + /// ResultsetPrevious + /// + ResultsetPrevious, + + /// + /// ReverseBlue + /// + ReverseBlue, + + /// + /// ReverseGreen + /// + ReverseGreen, + + /// + /// RewindBlue + /// + RewindBlue, + + /// + /// RewindGreen + /// + RewindGreen, + + /// + /// Rgb + /// + Rgb, + + /// + /// Rosette + /// + Rosette, + + /// + /// RosetteBlue + /// + RosetteBlue, + + /// + /// Rss + /// + Rss, + + /// + /// RssAdd + /// + RssAdd, + + /// + /// RssDelete + /// + RssDelete, + + /// + /// RssError + /// + RssError, + + /// + /// RssGo + /// + RssGo, + + /// + /// RssValid + /// + RssValid, + + /// + /// Ruby + /// + Ruby, + + /// + /// RubyAdd + /// + RubyAdd, + + /// + /// RubyDelete + /// + RubyDelete, + + /// + /// RubyGear + /// + RubyGear, + + /// + /// RubyGet + /// + RubyGet, + + /// + /// RubyGo + /// + RubyGo, + + /// + /// RubyKey + /// + RubyKey, + + /// + /// RubyLink + /// + RubyLink, + + /// + /// RubyPut + /// + RubyPut, + + /// + /// Script + /// + Script, + + /// + /// ScriptAdd + /// + ScriptAdd, + + /// + /// ScriptCode + /// + ScriptCode, + + /// + /// ScriptCodeOriginal + /// + ScriptCodeOriginal, + + /// + /// ScriptCodeRed + /// + ScriptCodeRed, + + /// + /// ScriptDelete + /// + ScriptDelete, + + /// + /// ScriptEdit + /// + ScriptEdit, + + /// + /// ScriptError + /// + ScriptError, + + /// + /// ScriptGear + /// + ScriptGear, + + /// + /// ScriptGo + /// + ScriptGo, + + /// + /// ScriptKey + /// + ScriptKey, + + /// + /// ScriptLightning + /// + ScriptLightning, + + /// + /// ScriptLink + /// + ScriptLink, + + /// + /// ScriptPalette + /// + ScriptPalette, + + /// + /// ScriptSave + /// + ScriptSave, + + /// + /// ScriptStart + /// + ScriptStart, + + /// + /// ScriptStop + /// + ScriptStop, + + /// + /// Seasons + /// + Seasons, + + /// + /// SectionCollapsed + /// + SectionCollapsed, + + /// + /// SectionExpanded + /// + SectionExpanded, + + /// + /// Server + /// + Server, + + /// + /// ServerAdd + /// + ServerAdd, + + /// + /// ServerChart + /// + ServerChart, + + /// + /// ServerCompressed + /// + ServerCompressed, + + /// + /// ServerConnect + /// + ServerConnect, + + /// + /// ServerDatabase + /// + ServerDatabase, + + /// + /// ServerDelete + /// + ServerDelete, + + /// + /// ServerEdit + /// + ServerEdit, + + /// + /// ServerError + /// + ServerError, + + /// + /// ServerGo + /// + ServerGo, + + /// + /// ServerKey + /// + ServerKey, + + /// + /// ServerLightning + /// + ServerLightning, + + /// + /// ServerLink + /// + ServerLink, + + /// + /// ServerStart + /// + ServerStart, + + /// + /// ServerStop + /// + ServerStop, + + /// + /// ServerUncompressed + /// + ServerUncompressed, + + /// + /// ServerWrench + /// + ServerWrench, + + /// + /// Shading + /// + Shading, + + /// + /// ShapesMany + /// + ShapesMany, + + /// + /// ShapesManySelect + /// + ShapesManySelect, + + /// + /// Shape3d + /// + Shape3d, + + /// + /// ShapeAlignBottom + /// + ShapeAlignBottom, + + /// + /// ShapeAlignCenter + /// + ShapeAlignCenter, + + /// + /// ShapeAlignLeft + /// + ShapeAlignLeft, + + /// + /// ShapeAlignMiddle + /// + ShapeAlignMiddle, + + /// + /// ShapeAlignRight + /// + ShapeAlignRight, + + /// + /// ShapeAlignTop + /// + ShapeAlignTop, + + /// + /// ShapeFlipHorizontal + /// + ShapeFlipHorizontal, + + /// + /// ShapeFlipVertical + /// + ShapeFlipVertical, + + /// + /// ShapeGroup + /// + ShapeGroup, + + /// + /// ShapeHandles + /// + ShapeHandles, + + /// + /// ShapeMoveBack + /// + ShapeMoveBack, + + /// + /// ShapeMoveBackwards + /// + ShapeMoveBackwards, + + /// + /// ShapeMoveForwards + /// + ShapeMoveForwards, + + /// + /// ShapeMoveFront + /// + ShapeMoveFront, + + /// + /// ShapeRotateAnticlockwise + /// + ShapeRotateAnticlockwise, + + /// + /// ShapeRotateClockwise + /// + ShapeRotateClockwise, + + /// + /// ShapeShadeA + /// + ShapeShadeA, + + /// + /// ShapeShadeB + /// + ShapeShadeB, + + /// + /// ShapeShadeC + /// + ShapeShadeC, + + /// + /// ShapeShadow + /// + ShapeShadow, + + /// + /// ShapeShadowToggle + /// + ShapeShadowToggle, + + /// + /// ShapeSquare + /// + ShapeSquare, + + /// + /// ShapeSquareAdd + /// + ShapeSquareAdd, + + /// + /// ShapeSquareDelete + /// + ShapeSquareDelete, + + /// + /// ShapeSquareEdit + /// + ShapeSquareEdit, + + /// + /// ShapeSquareError + /// + ShapeSquareError, + + /// + /// ShapeSquareGo + /// + ShapeSquareGo, + + /// + /// ShapeSquareKey + /// + ShapeSquareKey, + + /// + /// ShapeSquareLink + /// + ShapeSquareLink, + + /// + /// ShapeSquareSelect + /// + ShapeSquareSelect, + + /// + /// ShapeUngroup + /// + ShapeUngroup, + + /// + /// Share + /// + Share, + + /// + /// Shield + /// + Shield, + + /// + /// ShieldAdd + /// + ShieldAdd, + + /// + /// ShieldDelete + /// + ShieldDelete, + + /// + /// ShieldError + /// + ShieldError, + + /// + /// ShieldGo + /// + ShieldGo, + + /// + /// ShieldRainbow + /// + ShieldRainbow, + + /// + /// ShieldSilver + /// + ShieldSilver, + + /// + /// ShieldStart + /// + ShieldStart, + + /// + /// ShieldStop + /// + ShieldStop, + + /// + /// Sitemap + /// + Sitemap, + + /// + /// SitemapColor + /// + SitemapColor, + + /// + /// Smartphone + /// + Smartphone, + + /// + /// SmartphoneAdd + /// + SmartphoneAdd, + + /// + /// SmartphoneConnect + /// + SmartphoneConnect, + + /// + /// SmartphoneDelete + /// + SmartphoneDelete, + + /// + /// SmartphoneDisk + /// + SmartphoneDisk, + + /// + /// SmartphoneEdit + /// + SmartphoneEdit, + + /// + /// SmartphoneError + /// + SmartphoneError, + + /// + /// SmartphoneGo + /// + SmartphoneGo, + + /// + /// SmartphoneKey + /// + SmartphoneKey, + + /// + /// SmartphoneWrench + /// + SmartphoneWrench, + + /// + /// SortAscending + /// + SortAscending, + + /// + /// SortDescending + /// + SortDescending, + + /// + /// Sound + /// + Sound, + + /// + /// SoundAdd + /// + SoundAdd, + + /// + /// SoundDelete + /// + SoundDelete, + + /// + /// SoundHigh + /// + SoundHigh, + + /// + /// SoundIn + /// + SoundIn, + + /// + /// SoundLow + /// + SoundLow, + + /// + /// SoundMute + /// + SoundMute, + + /// + /// SoundNone + /// + SoundNone, + + /// + /// SoundOut + /// + SoundOut, + + /// + /// Spellcheck + /// + Spellcheck, + + /// + /// Sport8ball + /// + Sport8ball, + + /// + /// SportBasketball + /// + SportBasketball, + + /// + /// SportFootball + /// + SportFootball, + + /// + /// SportGolf + /// + SportGolf, + + /// + /// SportGolfPractice + /// + SportGolfPractice, + + /// + /// SportRaquet + /// + SportRaquet, + + /// + /// SportShuttlecock + /// + SportShuttlecock, + + /// + /// SportSoccer + /// + SportSoccer, + + /// + /// SportTennis + /// + SportTennis, + + /// + /// Star + /// + Star, + + /// + /// StarBronze + /// + StarBronze, + + /// + /// StarBronzeHalfGrey + /// + StarBronzeHalfGrey, + + /// + /// StarGold + /// + StarGold, + + /// + /// StarGoldHalfGrey + /// + StarGoldHalfGrey, + + /// + /// StarGoldHalfSilver + /// + StarGoldHalfSilver, + + /// + /// StarGrey + /// + StarGrey, + + /// + /// StarHalfGrey + /// + StarHalfGrey, + + /// + /// StarSilver + /// + StarSilver, + + /// + /// StatusAway + /// + StatusAway, + + /// + /// StatusBeRightBack + /// + StatusBeRightBack, + + /// + /// StatusBusy + /// + StatusBusy, + + /// + /// StatusInvisible + /// + StatusInvisible, + + /// + /// StatusOffline + /// + StatusOffline, + + /// + /// StatusOnline + /// + StatusOnline, + + /// + /// Stop + /// + Stop, + + /// + /// StopBlue + /// + StopBlue, + + /// + /// StopGreen + /// + StopGreen, + + /// + /// StopRed + /// + StopRed, + + /// + /// Style + /// + Style, + + /// + /// StyleAdd + /// + StyleAdd, + + /// + /// StyleDelete + /// + StyleDelete, + + /// + /// StyleEdit + /// + StyleEdit, + + /// + /// StyleGo + /// + StyleGo, + + /// + /// Sum + /// + Sum, + + /// + /// Tab + /// + Tab, + + /// + /// Table + /// + Table, + + /// + /// TableAdd + /// + TableAdd, + + /// + /// TableCell + /// + TableCell, + + /// + /// TableColumn + /// + TableColumn, + + /// + /// TableColumnAdd + /// + TableColumnAdd, + + /// + /// TableColumnDelete + /// + TableColumnDelete, + + /// + /// TableConnect + /// + TableConnect, + + /// + /// TableDelete + /// + TableDelete, + + /// + /// TableEdit + /// + TableEdit, + + /// + /// TableError + /// + TableError, + + /// + /// TableGear + /// + TableGear, + + /// + /// TableGo + /// + TableGo, + + /// + /// TableKey + /// + TableKey, + + /// + /// TableLightning + /// + TableLightning, + + /// + /// TableLink + /// + TableLink, + + /// + /// TableMultiple + /// + TableMultiple, + + /// + /// TableRefresh + /// + TableRefresh, + + /// + /// TableRelationship + /// + TableRelationship, + + /// + /// TableRow + /// + TableRow, + + /// + /// TableRowDelete + /// + TableRowDelete, + + /// + /// TableRowInsert + /// + TableRowInsert, + + /// + /// TableSave + /// + TableSave, + + /// + /// TableSort + /// + TableSort, + + /// + /// TabAdd + /// + TabAdd, + + /// + /// TabBlue + /// + TabBlue, + + /// + /// TabDelete + /// + TabDelete, + + /// + /// TabEdit + /// + TabEdit, + + /// + /// TabGo + /// + TabGo, + + /// + /// TabGreen + /// + TabGreen, + + /// + /// TabRed + /// + TabRed, + + /// + /// Tag + /// + Tag, + + /// + /// TagsGrey + /// + TagsGrey, + + /// + /// TagsRed + /// + TagsRed, + + /// + /// TagBlue + /// + TagBlue, + + /// + /// TagBlueAdd + /// + TagBlueAdd, + + /// + /// TagBlueDelete + /// + TagBlueDelete, + + /// + /// TagBlueEdit + /// + TagBlueEdit, + + /// + /// TagGreen + /// + TagGreen, + + /// + /// TagOrange + /// + TagOrange, + + /// + /// TagPink + /// + TagPink, + + /// + /// TagPurple + /// + TagPurple, + + /// + /// TagRed + /// + TagRed, + + /// + /// TagYellow + /// + TagYellow, + + /// + /// Telephone + /// + Telephone, + + /// + /// TelephoneAdd + /// + TelephoneAdd, + + /// + /// TelephoneDelete + /// + TelephoneDelete, + + /// + /// TelephoneEdit + /// + TelephoneEdit, + + /// + /// TelephoneError + /// + TelephoneError, + + /// + /// TelephoneGo + /// + TelephoneGo, + + /// + /// TelephoneKey + /// + TelephoneKey, + + /// + /// TelephoneLink + /// + TelephoneLink, + + /// + /// TelephoneRed + /// + TelephoneRed, + + /// + /// Television + /// + Television, + + /// + /// TelevisionAdd + /// + TelevisionAdd, + + /// + /// TelevisionDelete + /// + TelevisionDelete, + + /// + /// TelevisionIn + /// + TelevisionIn, + + /// + /// TelevisionOff + /// + TelevisionOff, + + /// + /// TelevisionOut + /// + TelevisionOut, + + /// + /// TelevisionStar + /// + TelevisionStar, + + /// + /// Textfield + /// + Textfield, + + /// + /// TextfieldAdd + /// + TextfieldAdd, + + /// + /// TextfieldDelete + /// + TextfieldDelete, + + /// + /// TextfieldKey + /// + TextfieldKey, + + /// + /// TextfieldRename + /// + TextfieldRename, + + /// + /// TextAb + /// + TextAb, + + /// + /// TextAlignCenter + /// + TextAlignCenter, + + /// + /// TextAlignJustify + /// + TextAlignJustify, + + /// + /// TextAlignLeft + /// + TextAlignLeft, + + /// + /// TextAlignRight + /// + TextAlignRight, + + /// + /// TextAllcaps + /// + TextAllcaps, + + /// + /// TextBold + /// + TextBold, + + /// + /// TextColumns + /// + TextColumns, + + /// + /// TextComplete + /// + TextComplete, + + /// + /// TextDirection + /// + TextDirection, + + /// + /// TextDoubleUnderline + /// + TextDoubleUnderline, + + /// + /// TextDropcaps + /// + TextDropcaps, + + /// + /// TextFit + /// + TextFit, + + /// + /// TextFlip + /// + TextFlip, + + /// + /// TextFontDefault + /// + TextFontDefault, + + /// + /// TextHeading1 + /// + TextHeading1, + + /// + /// TextHeading2 + /// + TextHeading2, + + /// + /// TextHeading3 + /// + TextHeading3, + + /// + /// TextHeading4 + /// + TextHeading4, + + /// + /// TextHeading5 + /// + TextHeading5, + + /// + /// TextHeading6 + /// + TextHeading6, + + /// + /// TextHorizontalrule + /// + TextHorizontalrule, + + /// + /// TextIndent + /// + TextIndent, + + /// + /// TextIndentRemove + /// + TextIndentRemove, + + /// + /// TextInverse + /// + TextInverse, + + /// + /// TextItalic + /// + TextItalic, + + /// + /// TextKerning + /// + TextKerning, + + /// + /// TextLeftToRight + /// + TextLeftToRight, + + /// + /// TextLetterspacing + /// + TextLetterspacing, + + /// + /// TextLetterOmega + /// + TextLetterOmega, + + /// + /// TextLinespacing + /// + TextLinespacing, + + /// + /// TextListBullets + /// + TextListBullets, + + /// + /// TextListNumbers + /// + TextListNumbers, + + /// + /// TextLowercase + /// + TextLowercase, + + /// + /// TextLowercaseA + /// + TextLowercaseA, + + /// + /// TextMirror + /// + TextMirror, + + /// + /// TextPaddingBottom + /// + TextPaddingBottom, + + /// + /// TextPaddingLeft + /// + TextPaddingLeft, + + /// + /// TextPaddingRight + /// + TextPaddingRight, + + /// + /// TextPaddingTop + /// + TextPaddingTop, + + /// + /// TextReplace + /// + TextReplace, + + /// + /// TextRightToLeft + /// + TextRightToLeft, + + /// + /// TextRotate0 + /// + TextRotate0, + + /// + /// TextRotate180 + /// + TextRotate180, + + /// + /// TextRotate270 + /// + TextRotate270, + + /// + /// TextRotate90 + /// + TextRotate90, + + /// + /// TextRuler + /// + TextRuler, + + /// + /// TextShading + /// + TextShading, + + /// + /// TextSignature + /// + TextSignature, + + /// + /// TextSmallcaps + /// + TextSmallcaps, + + /// + /// TextSpelling + /// + TextSpelling, + + /// + /// TextStrikethrough + /// + TextStrikethrough, + + /// + /// TextSubscript + /// + TextSubscript, + + /// + /// TextSuperscript + /// + TextSuperscript, + + /// + /// TextTab + /// + TextTab, + + /// + /// TextUnderline + /// + TextUnderline, + + /// + /// TextUppercase + /// + TextUppercase, + + /// + /// Theme + /// + Theme, + + /// + /// ThumbDown + /// + ThumbDown, + + /// + /// ThumbUp + /// + ThumbUp, + + /// + /// Tick + /// + Tick, + + /// + /// Time + /// + Time, + + /// + /// TimelineMarker + /// + TimelineMarker, + + /// + /// TimeAdd + /// + TimeAdd, + + /// + /// TimeDelete + /// + TimeDelete, + + /// + /// TimeGo + /// + TimeGo, + + /// + /// TimeGreen + /// + TimeGreen, + + /// + /// TimeRed + /// + TimeRed, + + /// + /// Transmit + /// + Transmit, + + /// + /// TransmitAdd + /// + TransmitAdd, + + /// + /// TransmitBlue + /// + TransmitBlue, + + /// + /// TransmitDelete + /// + TransmitDelete, + + /// + /// TransmitEdit + /// + TransmitEdit, + + /// + /// TransmitError + /// + TransmitError, + + /// + /// TransmitGo + /// + TransmitGo, + + /// + /// TransmitRed + /// + TransmitRed, + + /// + /// Tux + /// + Tux, + + /// + /// User + /// + User, + + /// + /// UserAdd + /// + UserAdd, + + /// + /// UserAlert + /// + UserAlert, + + /// + /// UserB + /// + UserB, + + /// + /// UserBrown + /// + UserBrown, + + /// + /// UserComment + /// + UserComment, + + /// + /// UserCross + /// + UserCross, + + /// + /// UserDelete + /// + UserDelete, + + /// + /// UserEarth + /// + UserEarth, + + /// + /// UserEdit + /// + UserEdit, + + /// + /// UserFemale + /// + UserFemale, + + /// + /// UserGo + /// + UserGo, + + /// + /// UserGray + /// + UserGray, + + /// + /// UserGrayCool + /// + UserGrayCool, + + /// + /// UserGreen + /// + UserGreen, + + /// + /// UserHome + /// + UserHome, + + /// + /// UserKey + /// + UserKey, + + /// + /// UserMagnify + /// + UserMagnify, + + /// + /// UserMature + /// + UserMature, + + /// + /// UserOrange + /// + UserOrange, + + /// + /// UserRed + /// + UserRed, + + /// + /// UserStar + /// + UserStar, + + /// + /// UserSuit + /// + UserSuit, + + /// + /// UserSuitBlack + /// + UserSuitBlack, + + /// + /// UserTick + /// + UserTick, + + /// + /// Vcard + /// + Vcard, + + /// + /// VcardAdd + /// + VcardAdd, + + /// + /// VcardDelete + /// + VcardDelete, + + /// + /// VcardEdit + /// + VcardEdit, + + /// + /// VcardKey + /// + VcardKey, + + /// + /// Vector + /// + Vector, + + /// + /// VectorAdd + /// + VectorAdd, + + /// + /// VectorDelete + /// + VectorDelete, + + /// + /// VectorKey + /// + VectorKey, + + /// + /// Wand + /// + Wand, + + /// + /// WeatherCloud + /// + WeatherCloud, + + /// + /// WeatherClouds + /// + WeatherClouds, + + /// + /// WeatherCloudy + /// + WeatherCloudy, + + /// + /// WeatherCloudyRain + /// + WeatherCloudyRain, + + /// + /// WeatherLightning + /// + WeatherLightning, + + /// + /// WeatherRain + /// + WeatherRain, + + /// + /// WeatherSnow + /// + WeatherSnow, + + /// + /// WeatherSun + /// + WeatherSun, + + /// + /// Webcam + /// + Webcam, + + /// + /// WebcamAdd + /// + WebcamAdd, + + /// + /// WebcamConnect + /// + WebcamConnect, + + /// + /// WebcamDelete + /// + WebcamDelete, + + /// + /// WebcamError + /// + WebcamError, + + /// + /// WebcamStart + /// + WebcamStart, + + /// + /// WebcamStop + /// + WebcamStop, + + /// + /// World + /// + World, + + /// + /// WorldAdd + /// + WorldAdd, + + /// + /// WorldConnect + /// + WorldConnect, + + /// + /// WorldDawn + /// + WorldDawn, + + /// + /// WorldDelete + /// + WorldDelete, + + /// + /// WorldEdit + /// + WorldEdit, + + /// + /// WorldGo + /// + WorldGo, + + /// + /// WorldKey + /// + WorldKey, + + /// + /// WorldLink + /// + WorldLink, + + /// + /// WorldNight + /// + WorldNight, + + /// + /// WorldOrbit + /// + WorldOrbit, + + /// + /// Wrench + /// + Wrench, + + /// + /// WrenchOrange + /// + WrenchOrange, + + /// + /// Xhtml + /// + Xhtml, + + /// + /// XhtmlAdd + /// + XhtmlAdd, + + /// + /// XhtmlDelete + /// + XhtmlDelete, + + /// + /// XhtmlError + /// + XhtmlError, + + /// + /// XhtmlGo + /// + XhtmlGo, + + /// + /// XhtmlValid + /// + XhtmlValid, + + /// + /// Zoom + /// + Zoom, + + /// + /// ZoomIn + /// + ZoomIn, + + /// + /// ZoomOut + /// + ZoomOut, + + /// + /// SystemClose + /// + SystemClose, + + /// + /// SystemNew + /// + SystemNew, + + /// + /// SystemSave + /// + SystemSave, + + /// + /// SystemSaveClose + /// + SystemSaveClose, + + /// + /// SystemSaveNew + /// + SystemSaveNew, + + /// + /// SystemSearch + /// + SystemSearch + } + + /// + /// 预定义图标名称 + /// + public static partial class IconHelper + { + /// + /// 获取图标名称 + /// + /// + /// + public static string GetName(Icon type) + { + string result = String.Empty; + + switch (type) + { + case Icon.None: + result = ""; + break; + case Icon.Accept: + result = "accept.png"; + break; + case Icon.Add: + result = "add.png"; + break; + case Icon.Anchor: + result = "anchor.png"; + break; + case Icon.Application: + result = "application.png"; + break; + case Icon.ApplicationAdd: + result = "application_add.png"; + break; + case Icon.ApplicationCascade: + result = "application_cascade.png"; + break; + case Icon.ApplicationDelete: + result = "application_delete.png"; + break; + case Icon.ApplicationDouble: + result = "application_double.png"; + break; + case Icon.ApplicationEdit: + result = "application_edit.png"; + break; + case Icon.ApplicationError: + result = "application_error.png"; + break; + case Icon.ApplicationForm: + result = "application_form.png"; + break; + case Icon.ApplicationFormAdd: + result = "application_form_add.png"; + break; + case Icon.ApplicationFormDelete: + result = "application_form_delete.png"; + break; + case Icon.ApplicationFormEdit: + result = "application_form_edit.png"; + break; + case Icon.ApplicationFormMagnify: + result = "application_form_magnify.png"; + break; + case Icon.ApplicationGet: + result = "application_get.png"; + break; + case Icon.ApplicationGo: + result = "application_go.png"; + break; + case Icon.ApplicationHome: + result = "application_home.png"; + break; + case Icon.ApplicationKey: + result = "application_key.png"; + break; + case Icon.ApplicationLightning: + result = "application_lightning.png"; + break; + case Icon.ApplicationLink: + result = "application_link.png"; + break; + case Icon.ApplicationOsx: + result = "application_osx.png"; + break; + case Icon.ApplicationOsxAdd: + result = "application_osx_add.png"; + break; + case Icon.ApplicationOsxCascade: + result = "application_osx_cascade.png"; + break; + case Icon.ApplicationOsxDelete: + result = "application_osx_delete.png"; + break; + case Icon.ApplicationOsxDouble: + result = "application_osx_double.png"; + break; + case Icon.ApplicationOsxError: + result = "application_osx_error.png"; + break; + case Icon.ApplicationOsxGet: + result = "application_osx_get.png"; + break; + case Icon.ApplicationOsxGo: + result = "application_osx_go.png"; + break; + case Icon.ApplicationOsxHome: + result = "application_osx_home.png"; + break; + case Icon.ApplicationOsxKey: + result = "application_osx_key.png"; + break; + case Icon.ApplicationOsxLightning: + result = "application_osx_lightning.png"; + break; + case Icon.ApplicationOsxLink: + result = "application_osx_link.png"; + break; + case Icon.ApplicationOsxSplit: + result = "application_osx_split.png"; + break; + case Icon.ApplicationOsxStart: + result = "application_osx_start.png"; + break; + case Icon.ApplicationOsxStop: + result = "application_osx_stop.png"; + break; + case Icon.ApplicationOsxTerminal: + result = "application_osx_terminal.png"; + break; + case Icon.ApplicationPut: + result = "application_put.png"; + break; + case Icon.ApplicationSideBoxes: + result = "application_side_boxes.png"; + break; + case Icon.ApplicationSideContract: + result = "application_side_contract.png"; + break; + case Icon.ApplicationSideExpand: + result = "application_side_expand.png"; + break; + case Icon.ApplicationSideList: + result = "application_side_list.png"; + break; + case Icon.ApplicationSideTree: + result = "application_side_tree.png"; + break; + case Icon.ApplicationSplit: + result = "application_split.png"; + break; + case Icon.ApplicationStart: + result = "application_start.png"; + break; + case Icon.ApplicationStop: + result = "application_stop.png"; + break; + case Icon.ApplicationTileHorizontal: + result = "application_tile_horizontal.png"; + break; + case Icon.ApplicationTileVertical: + result = "application_tile_vertical.png"; + break; + case Icon.ApplicationViewColumns: + result = "application_view_columns.png"; + break; + case Icon.ApplicationViewDetail: + result = "application_view_detail.png"; + break; + case Icon.ApplicationViewGallery: + result = "application_view_gallery.png"; + break; + case Icon.ApplicationViewIcons: + result = "application_view_icons.png"; + break; + case Icon.ApplicationViewList: + result = "application_view_list.png"; + break; + case Icon.ApplicationViewTile: + result = "application_view_tile.png"; + break; + case Icon.ApplicationXp: + result = "application_xp.png"; + break; + case Icon.ApplicationXpTerminal: + result = "application_xp_terminal.png"; + break; + case Icon.ArrowBranch: + result = "arrow_branch.png"; + break; + case Icon.ArrowDivide: + result = "arrow_divide.png"; + break; + case Icon.ArrowDown: + result = "arrow_down.png"; + break; + case Icon.ArrowEw: + result = "arrow_ew.png"; + break; + case Icon.ArrowIn: + result = "arrow_in.png"; + break; + case Icon.ArrowInout: + result = "arrow_inout.png"; + break; + case Icon.ArrowInLonger: + result = "arrow_in_longer.png"; + break; + case Icon.ArrowJoin: + result = "arrow_join.png"; + break; + case Icon.ArrowLeft: + result = "arrow_left.png"; + break; + case Icon.ArrowMerge: + result = "arrow_merge.png"; + break; + case Icon.ArrowNe: + result = "arrow_ne.png"; + break; + case Icon.ArrowNs: + result = "arrow_ns.png"; + break; + case Icon.ArrowNsew: + result = "arrow_nsew.png"; + break; + case Icon.ArrowNw: + result = "arrow_nw.png"; + break; + case Icon.ArrowNwNeSwSe: + result = "arrow_nw_ne_sw_se.png"; + break; + case Icon.ArrowNwSe: + result = "arrow_nw_se.png"; + break; + case Icon.ArrowOut: + result = "arrow_out.png"; + break; + case Icon.ArrowOutLonger: + result = "arrow_out_longer.png"; + break; + case Icon.ArrowRedo: + result = "arrow_redo.png"; + break; + case Icon.ArrowRefresh: + result = "arrow_refresh.png"; + break; + case Icon.ArrowRefreshSmall: + result = "arrow_refresh_small.png"; + break; + case Icon.ArrowRight: + result = "arrow_right.png"; + break; + case Icon.ArrowRotateAnticlockwise: + result = "arrow_rotate_anticlockwise.png"; + break; + case Icon.ArrowRotateClockwise: + result = "arrow_rotate_clockwise.png"; + break; + case Icon.ArrowSe: + result = "arrow_se.png"; + break; + case Icon.ArrowSw: + result = "arrow_sw.png"; + break; + case Icon.ArrowSwitch: + result = "arrow_switch.png"; + break; + case Icon.ArrowSwitchBluegreen: + result = "arrow_switch_bluegreen.png"; + break; + case Icon.ArrowSwNe: + result = "arrow_sw_ne.png"; + break; + case Icon.ArrowTurnLeft: + result = "arrow_turn_left.png"; + break; + case Icon.ArrowTurnRight: + result = "arrow_turn_right.png"; + break; + case Icon.ArrowUndo: + result = "arrow_undo.png"; + break; + case Icon.ArrowUp: + result = "arrow_up.png"; + break; + case Icon.AsteriskOrange: + result = "asterisk_orange.png"; + break; + case Icon.AsteriskRed: + result = "asterisk_red.png"; + break; + case Icon.AsteriskYellow: + result = "asterisk_yellow.png"; + break; + case Icon.Attach: + result = "attach.png"; + break; + case Icon.AwardStarAdd: + result = "award_star_add.png"; + break; + case Icon.AwardStarBronze1: + result = "award_star_bronze_1.png"; + break; + case Icon.AwardStarBronze2: + result = "award_star_bronze_2.png"; + break; + case Icon.AwardStarBronze3: + result = "award_star_bronze_3.png"; + break; + case Icon.AwardStarDelete: + result = "award_star_delete.png"; + break; + case Icon.AwardStarGold1: + result = "award_star_gold_1.png"; + break; + case Icon.AwardStarGold2: + result = "award_star_gold_2.png"; + break; + case Icon.AwardStarGold3: + result = "award_star_gold_3.png"; + break; + case Icon.AwardStarSilver1: + result = "award_star_silver_1.png"; + break; + case Icon.AwardStarSilver2: + result = "award_star_silver_2.png"; + break; + case Icon.AwardStarSilver3: + result = "award_star_silver_3.png"; + break; + case Icon.Basket: + result = "basket.png"; + break; + case Icon.BasketAdd: + result = "basket_add.png"; + break; + case Icon.BasketDelete: + result = "basket_delete.png"; + break; + case Icon.BasketEdit: + result = "basket_edit.png"; + break; + case Icon.BasketError: + result = "basket_error.png"; + break; + case Icon.BasketGo: + result = "basket_go.png"; + break; + case Icon.BasketPut: + result = "basket_put.png"; + break; + case Icon.BasketRemove: + result = "basket_remove.png"; + break; + case Icon.Bell: + result = "bell.png"; + break; + case Icon.BellAdd: + result = "bell_add.png"; + break; + case Icon.BellDelete: + result = "bell_delete.png"; + break; + case Icon.BellError: + result = "bell_error.png"; + break; + case Icon.BellGo: + result = "bell_go.png"; + break; + case Icon.BellLink: + result = "bell_link.png"; + break; + case Icon.BellSilver: + result = "bell_silver.png"; + break; + case Icon.BellSilverStart: + result = "bell_silver_start.png"; + break; + case Icon.BellSilverStop: + result = "bell_silver_stop.png"; + break; + case Icon.BellStart: + result = "bell_start.png"; + break; + case Icon.BellStop: + result = "bell_stop.png"; + break; + case Icon.Bin: + result = "bin.png"; + break; + case Icon.BinClosed: + result = "bin_closed.png"; + break; + case Icon.BinEmpty: + result = "bin_empty.png"; + break; + case Icon.Blank: + result = "blank.png"; + break; + case Icon.Bomb: + result = "bomb.png"; + break; + case Icon.Book: + result = "book.png"; + break; + case Icon.Bookmark: + result = "bookmark.png"; + break; + case Icon.BookmarkAdd: + result = "bookmark_add.png"; + break; + case Icon.BookmarkDelete: + result = "bookmark_delete.png"; + break; + case Icon.BookmarkEdit: + result = "bookmark_edit.png"; + break; + case Icon.BookmarkError: + result = "bookmark_error.png"; + break; + case Icon.BookmarkGo: + result = "bookmark_go.png"; + break; + case Icon.BookAdd: + result = "book_add.png"; + break; + case Icon.BookAddresses: + result = "book_addresses.png"; + break; + case Icon.BookAddressesAdd: + result = "book_addresses_add.png"; + break; + case Icon.BookAddressesDelete: + result = "book_addresses_delete.png"; + break; + case Icon.BookAddressesEdit: + result = "book_addresses_edit.png"; + break; + case Icon.BookAddressesError: + result = "book_addresses_error.png"; + break; + case Icon.BookAddressesKey: + result = "book_addresses_key.png"; + break; + case Icon.BookDelete: + result = "book_delete.png"; + break; + case Icon.BookEdit: + result = "book_edit.png"; + break; + case Icon.BookError: + result = "book_error.png"; + break; + case Icon.BookGo: + result = "book_go.png"; + break; + case Icon.BookKey: + result = "book_key.png"; + break; + case Icon.BookLink: + result = "book_link.png"; + break; + case Icon.BookMagnify: + result = "book_magnify.png"; + break; + case Icon.BookNext: + result = "book_next.png"; + break; + case Icon.BookOpen: + result = "book_open.png"; + break; + case Icon.BookOpenMark: + result = "book_open_mark.png"; + break; + case Icon.BookPrevious: + result = "book_previous.png"; + break; + case Icon.BookRed: + result = "book_red.png"; + break; + case Icon.BookTabs: + result = "book_tabs.png"; + break; + case Icon.BorderAll: + result = "border_all.png"; + break; + case Icon.BorderBottom: + result = "border_bottom.png"; + break; + case Icon.BorderDraw: + result = "border_draw.png"; + break; + case Icon.BorderInner: + result = "border_inner.png"; + break; + case Icon.BorderInnerHorizontal: + result = "border_inner_horizontal.png"; + break; + case Icon.BorderInnerVertical: + result = "border_inner_vertical.png"; + break; + case Icon.BorderLeft: + result = "border_left.png"; + break; + case Icon.BorderNone: + result = "border_none.png"; + break; + case Icon.BorderOuter: + result = "border_outer.png"; + break; + case Icon.BorderRight: + result = "border_right.png"; + break; + case Icon.BorderTop: + result = "border_top.png"; + break; + case Icon.Box: + result = "box.png"; + break; + case Icon.BoxError: + result = "box_error.png"; + break; + case Icon.BoxPicture: + result = "box_picture.png"; + break; + case Icon.BoxWorld: + result = "box_world.png"; + break; + case Icon.Brick: + result = "brick.png"; + break; + case Icon.Bricks: + result = "bricks.png"; + break; + case Icon.BrickAdd: + result = "brick_add.png"; + break; + case Icon.BrickDelete: + result = "brick_delete.png"; + break; + case Icon.BrickEdit: + result = "brick_edit.png"; + break; + case Icon.BrickError: + result = "brick_error.png"; + break; + case Icon.BrickGo: + result = "brick_go.png"; + break; + case Icon.BrickLink: + result = "brick_link.png"; + break; + case Icon.BrickMagnify: + result = "brick_magnify.png"; + break; + case Icon.Briefcase: + result = "briefcase.png"; + break; + case Icon.Bug: + result = "bug.png"; + break; + case Icon.BugAdd: + result = "bug_add.png"; + break; + case Icon.BugDelete: + result = "bug_delete.png"; + break; + case Icon.BugEdit: + result = "bug_edit.png"; + break; + case Icon.BugError: + result = "bug_error.png"; + break; + case Icon.BugFix: + result = "bug_fix.png"; + break; + case Icon.BugGo: + result = "bug_go.png"; + break; + case Icon.BugLink: + result = "bug_link.png"; + break; + case Icon.BugMagnify: + result = "bug_magnify.png"; + break; + case Icon.Build: + result = "build.png"; + break; + case Icon.Building: + result = "building.png"; + break; + case Icon.BuildingAdd: + result = "building_add.png"; + break; + case Icon.BuildingDelete: + result = "building_delete.png"; + break; + case Icon.BuildingEdit: + result = "building_edit.png"; + break; + case Icon.BuildingError: + result = "building_error.png"; + break; + case Icon.BuildingGo: + result = "building_go.png"; + break; + case Icon.BuildingKey: + result = "building_key.png"; + break; + case Icon.BuildingLink: + result = "building_link.png"; + break; + case Icon.BuildCancel: + result = "build_cancel.png"; + break; + case Icon.BulletAdd: + result = "bullet_add.png"; + break; + case Icon.BulletArrowBottom: + result = "bullet_arrow_bottom.png"; + break; + case Icon.BulletArrowDown: + result = "bullet_arrow_down.png"; + break; + case Icon.BulletArrowTop: + result = "bullet_arrow_top.png"; + break; + case Icon.BulletArrowUp: + result = "bullet_arrow_up.png"; + break; + case Icon.BulletBlack: + result = "bullet_black.png"; + break; + case Icon.BulletBlue: + result = "bullet_blue.png"; + break; + case Icon.BulletConnect: + result = "bullet_connect.png"; + break; + case Icon.BulletCross: + result = "bullet_cross.png"; + break; + case Icon.BulletDatabase: + result = "bullet_database.png"; + break; + case Icon.BulletDatabaseYellow: + result = "bullet_database_yellow.png"; + break; + case Icon.BulletDelete: + result = "bullet_delete.png"; + break; + case Icon.BulletDisk: + result = "bullet_disk.png"; + break; + case Icon.BulletEarth: + result = "bullet_earth.png"; + break; + case Icon.BulletEdit: + result = "bullet_edit.png"; + break; + case Icon.BulletEject: + result = "bullet_eject.png"; + break; + case Icon.BulletError: + result = "bullet_error.png"; + break; + case Icon.BulletFeed: + result = "bullet_feed.png"; + break; + case Icon.BulletGet: + result = "bullet_get.png"; + break; + case Icon.BulletGo: + result = "bullet_go.png"; + break; + case Icon.BulletGreen: + result = "bullet_green.png"; + break; + case Icon.BulletHome: + result = "bullet_home.png"; + break; + case Icon.BulletKey: + result = "bullet_key.png"; + break; + case Icon.BulletLeft: + result = "bullet_left.png"; + break; + case Icon.BulletLightning: + result = "bullet_lightning.png"; + break; + case Icon.BulletMagnify: + result = "bullet_magnify.png"; + break; + case Icon.BulletMinus: + result = "bullet_minus.png"; + break; + case Icon.BulletOrange: + result = "bullet_orange.png"; + break; + case Icon.BulletPageWhite: + result = "bullet_page_white.png"; + break; + case Icon.BulletPicture: + result = "bullet_picture.png"; + break; + case Icon.BulletPink: + result = "bullet_pink.png"; + break; + case Icon.BulletPlus: + result = "bullet_plus.png"; + break; + case Icon.BulletPurple: + result = "bullet_purple.png"; + break; + case Icon.BulletRed: + result = "bullet_red.png"; + break; + case Icon.BulletRight: + result = "bullet_right.png"; + break; + case Icon.BulletShape: + result = "bullet_shape.png"; + break; + case Icon.BulletSparkle: + result = "bullet_sparkle.png"; + break; + case Icon.BulletStar: + result = "bullet_star.png"; + break; + case Icon.BulletStart: + result = "bullet_start.png"; + break; + case Icon.BulletStop: + result = "bullet_stop.png"; + break; + case Icon.BulletStopAlt: + result = "bullet_stop_alt.png"; + break; + case Icon.BulletTick: + result = "bullet_tick.png"; + break; + case Icon.BulletToggleMinus: + result = "bullet_toggle_minus.png"; + break; + case Icon.BulletTogglePlus: + result = "bullet_toggle_plus.png"; + break; + case Icon.BulletWhite: + result = "bullet_white.png"; + break; + case Icon.BulletWrench: + result = "bullet_wrench.png"; + break; + case Icon.BulletWrenchRed: + result = "bullet_wrench_red.png"; + break; + case Icon.BulletYellow: + result = "bullet_yellow.png"; + break; + case Icon.Button: + result = "button.png"; + break; + case Icon.Cake: + result = "cake.png"; + break; + case Icon.CakeOut: + result = "cake_out.png"; + break; + case Icon.CakeSliced: + result = "cake_sliced.png"; + break; + case Icon.Calculator: + result = "calculator.png"; + break; + case Icon.CalculatorAdd: + result = "calculator_add.png"; + break; + case Icon.CalculatorDelete: + result = "calculator_delete.png"; + break; + case Icon.CalculatorEdit: + result = "calculator_edit.png"; + break; + case Icon.CalculatorError: + result = "calculator_error.png"; + break; + case Icon.CalculatorLink: + result = "calculator_link.png"; + break; + case Icon.Calendar: + result = "calendar.png"; + break; + case Icon.CalendarAdd: + result = "calendar_add.png"; + break; + case Icon.CalendarDelete: + result = "calendar_delete.png"; + break; + case Icon.CalendarEdit: + result = "calendar_edit.png"; + break; + case Icon.CalendarLink: + result = "calendar_link.png"; + break; + case Icon.CalendarSelectDay: + result = "calendar_select_day.png"; + break; + case Icon.CalendarSelectNone: + result = "calendar_select_none.png"; + break; + case Icon.CalendarSelectWeek: + result = "calendar_select_week.png"; + break; + case Icon.CalendarStar: + result = "calendar_star.png"; + break; + case Icon.CalendarViewDay: + result = "calendar_view_day.png"; + break; + case Icon.CalendarViewMonth: + result = "calendar_view_month.png"; + break; + case Icon.CalendarViewWeek: + result = "calendar_view_week.png"; + break; + case Icon.Camera: + result = "camera.png"; + break; + case Icon.CameraAdd: + result = "camera_add.png"; + break; + case Icon.CameraConnect: + result = "camera_connect.png"; + break; + case Icon.CameraDelete: + result = "camera_delete.png"; + break; + case Icon.CameraEdit: + result = "camera_edit.png"; + break; + case Icon.CameraError: + result = "camera_error.png"; + break; + case Icon.CameraGo: + result = "camera_go.png"; + break; + case Icon.CameraLink: + result = "camera_link.png"; + break; + case Icon.CameraMagnify: + result = "camera_magnify.png"; + break; + case Icon.CameraPicture: + result = "camera_picture.png"; + break; + case Icon.CameraSmall: + result = "camera_small.png"; + break; + case Icon.CameraStart: + result = "camera_start.png"; + break; + case Icon.CameraStop: + result = "camera_stop.png"; + break; + case Icon.Cancel: + result = "cancel.png"; + break; + case Icon.Car: + result = "car.png"; + break; + case Icon.Cart: + result = "cart.png"; + break; + case Icon.CartAdd: + result = "cart_add.png"; + break; + case Icon.CartDelete: + result = "cart_delete.png"; + break; + case Icon.CartEdit: + result = "cart_edit.png"; + break; + case Icon.CartError: + result = "cart_error.png"; + break; + case Icon.CartFull: + result = "cart_full.png"; + break; + case Icon.CartGo: + result = "cart_go.png"; + break; + case Icon.CartMagnify: + result = "cart_magnify.png"; + break; + case Icon.CartPut: + result = "cart_put.png"; + break; + case Icon.CartRemove: + result = "cart_remove.png"; + break; + case Icon.CarAdd: + result = "car_add.png"; + break; + case Icon.CarDelete: + result = "car_delete.png"; + break; + case Icon.CarError: + result = "car_error.png"; + break; + case Icon.CarRed: + result = "car_red.png"; + break; + case Icon.CarStart: + result = "car_start.png"; + break; + case Icon.CarStop: + result = "car_stop.png"; + break; + case Icon.Cd: + result = "cd.png"; + break; + case Icon.Cdr: + result = "cdr.png"; + break; + case Icon.CdrAdd: + result = "cdr_add.png"; + break; + case Icon.CdrBurn: + result = "cdr_burn.png"; + break; + case Icon.CdrCross: + result = "cdr_cross.png"; + break; + case Icon.CdrDelete: + result = "cdr_delete.png"; + break; + case Icon.CdrEdit: + result = "cdr_edit.png"; + break; + case Icon.CdrEject: + result = "cdr_eject.png"; + break; + case Icon.CdrError: + result = "cdr_error.png"; + break; + case Icon.CdrGo: + result = "cdr_go.png"; + break; + case Icon.CdrMagnify: + result = "cdr_magnify.png"; + break; + case Icon.CdrPlay: + result = "cdr_play.png"; + break; + case Icon.CdrStart: + result = "cdr_start.png"; + break; + case Icon.CdrStop: + result = "cdr_stop.png"; + break; + case Icon.CdrStopAlt: + result = "cdr_stop_alt.png"; + break; + case Icon.CdrTick: + result = "cdr_tick.png"; + break; + case Icon.CdAdd: + result = "cd_add.png"; + break; + case Icon.CdBurn: + result = "cd_burn.png"; + break; + case Icon.CdDelete: + result = "cd_delete.png"; + break; + case Icon.CdEdit: + result = "cd_edit.png"; + break; + case Icon.CdEject: + result = "cd_eject.png"; + break; + case Icon.CdGo: + result = "cd_go.png"; + break; + case Icon.CdMagnify: + result = "cd_magnify.png"; + break; + case Icon.CdPlay: + result = "cd_play.png"; + break; + case Icon.CdStop: + result = "cd_stop.png"; + break; + case Icon.CdStopAlt: + result = "cd_stop_alt.png"; + break; + case Icon.CdTick: + result = "cd_tick.png"; + break; + case Icon.ChartBar: + result = "chart_bar.png"; + break; + case Icon.ChartBarAdd: + result = "chart_bar_add.png"; + break; + case Icon.ChartBarDelete: + result = "chart_bar_delete.png"; + break; + case Icon.ChartBarEdit: + result = "chart_bar_edit.png"; + break; + case Icon.ChartBarError: + result = "chart_bar_error.png"; + break; + case Icon.ChartBarLink: + result = "chart_bar_link.png"; + break; + case Icon.ChartCurve: + result = "chart_curve.png"; + break; + case Icon.ChartCurveAdd: + result = "chart_curve_add.png"; + break; + case Icon.ChartCurveDelete: + result = "chart_curve_delete.png"; + break; + case Icon.ChartCurveEdit: + result = "chart_curve_edit.png"; + break; + case Icon.ChartCurveError: + result = "chart_curve_error.png"; + break; + case Icon.ChartCurveGo: + result = "chart_curve_go.png"; + break; + case Icon.ChartCurveLink: + result = "chart_curve_link.png"; + break; + case Icon.ChartLine: + result = "chart_line.png"; + break; + case Icon.ChartLineAdd: + result = "chart_line_add.png"; + break; + case Icon.ChartLineDelete: + result = "chart_line_delete.png"; + break; + case Icon.ChartLineEdit: + result = "chart_line_edit.png"; + break; + case Icon.ChartLineError: + result = "chart_line_error.png"; + break; + case Icon.ChartLineLink: + result = "chart_line_link.png"; + break; + case Icon.ChartOrganisation: + result = "chart_organisation.png"; + break; + case Icon.ChartOrganisationAdd: + result = "chart_organisation_add.png"; + break; + case Icon.ChartOrganisationDelete: + result = "chart_organisation_delete.png"; + break; + case Icon.ChartOrgInverted: + result = "chart_org_inverted.png"; + break; + case Icon.ChartPie: + result = "chart_pie.png"; + break; + case Icon.ChartPieAdd: + result = "chart_pie_add.png"; + break; + case Icon.ChartPieDelete: + result = "chart_pie_delete.png"; + break; + case Icon.ChartPieEdit: + result = "chart_pie_edit.png"; + break; + case Icon.ChartPieError: + result = "chart_pie_error.png"; + break; + case Icon.ChartPieLightning: + result = "chart_pie_lightning.png"; + break; + case Icon.ChartPieLink: + result = "chart_pie_link.png"; + break; + case Icon.CheckError: + result = "check_error.png"; + break; + case Icon.Clipboard: + result = "clipboard.png"; + break; + case Icon.Clock: + result = "clock.png"; + break; + case Icon.ClockAdd: + result = "clock_add.png"; + break; + case Icon.ClockDelete: + result = "clock_delete.png"; + break; + case Icon.ClockEdit: + result = "clock_edit.png"; + break; + case Icon.ClockError: + result = "clock_error.png"; + break; + case Icon.ClockGo: + result = "clock_go.png"; + break; + case Icon.ClockLink: + result = "clock_link.png"; + break; + case Icon.ClockPause: + result = "clock_pause.png"; + break; + case Icon.ClockPlay: + result = "clock_play.png"; + break; + case Icon.ClockRed: + result = "clock_red.png"; + break; + case Icon.ClockStart: + result = "clock_start.png"; + break; + case Icon.ClockStop: + result = "clock_stop.png"; + break; + case Icon.ClockStop2: + result = "clock_stop_2.png"; + break; + case Icon.Cmy: + result = "cmy.png"; + break; + case Icon.Cog: + result = "cog.png"; + break; + case Icon.CogAdd: + result = "cog_add.png"; + break; + case Icon.CogDelete: + result = "cog_delete.png"; + break; + case Icon.CogEdit: + result = "cog_edit.png"; + break; + case Icon.CogError: + result = "cog_error.png"; + break; + case Icon.CogGo: + result = "cog_go.png"; + break; + case Icon.CogStart: + result = "cog_start.png"; + break; + case Icon.CogStop: + result = "cog_stop.png"; + break; + case Icon.Coins: + result = "coins.png"; + break; + case Icon.CoinsAdd: + result = "coins_add.png"; + break; + case Icon.CoinsDelete: + result = "coins_delete.png"; + break; + case Icon.Color: + result = "color.png"; + break; + case Icon.ColorSwatch: + result = "color_swatch.png"; + break; + case Icon.ColorWheel: + result = "color_wheel.png"; + break; + case Icon.Comment: + result = "comment.png"; + break; + case Icon.Comments: + result = "comments.png"; + break; + case Icon.CommentsAdd: + result = "comments_add.png"; + break; + case Icon.CommentsDelete: + result = "comments_delete.png"; + break; + case Icon.CommentAdd: + result = "comment_add.png"; + break; + case Icon.CommentDelete: + result = "comment_delete.png"; + break; + case Icon.CommentDull: + result = "comment_dull.png"; + break; + case Icon.CommentEdit: + result = "comment_edit.png"; + break; + case Icon.CommentPlay: + result = "comment_play.png"; + break; + case Icon.CommentRecord: + result = "comment_record.png"; + break; + case Icon.Compass: + result = "compass.png"; + break; + case Icon.Compress: + result = "compress.png"; + break; + case Icon.Computer: + result = "computer.png"; + break; + case Icon.ComputerAdd: + result = "computer_add.png"; + break; + case Icon.ComputerConnect: + result = "computer_connect.png"; + break; + case Icon.ComputerDelete: + result = "computer_delete.png"; + break; + case Icon.ComputerEdit: + result = "computer_edit.png"; + break; + case Icon.ComputerError: + result = "computer_error.png"; + break; + case Icon.ComputerGo: + result = "computer_go.png"; + break; + case Icon.ComputerKey: + result = "computer_key.png"; + break; + case Icon.ComputerLink: + result = "computer_link.png"; + break; + case Icon.ComputerMagnify: + result = "computer_magnify.png"; + break; + case Icon.ComputerOff: + result = "computer_off.png"; + break; + case Icon.ComputerStart: + result = "computer_start.png"; + break; + case Icon.ComputerStop: + result = "computer_stop.png"; + break; + case Icon.ComputerWrench: + result = "computer_wrench.png"; + break; + case Icon.Connect: + result = "connect.png"; + break; + case Icon.Contrast: + result = "contrast.png"; + break; + case Icon.ContrastDecrease: + result = "contrast_decrease.png"; + break; + case Icon.ContrastHigh: + result = "contrast_high.png"; + break; + case Icon.ContrastIncrease: + result = "contrast_increase.png"; + break; + case Icon.ContrastLow: + result = "contrast_low.png"; + break; + case Icon.Controller: + result = "controller.png"; + break; + case Icon.ControllerAdd: + result = "controller_add.png"; + break; + case Icon.ControllerDelete: + result = "controller_delete.png"; + break; + case Icon.ControllerError: + result = "controller_error.png"; + break; + case Icon.ControlAdd: + result = "control_add.png"; + break; + case Icon.ControlAddBlue: + result = "control_add_blue.png"; + break; + case Icon.ControlBlank: + result = "control_blank.png"; + break; + case Icon.ControlBlankBlue: + result = "control_blank_blue.png"; + break; + case Icon.ControlEject: + result = "control_eject.png"; + break; + case Icon.ControlEjectBlue: + result = "control_eject_blue.png"; + break; + case Icon.ControlEnd: + result = "control_end.png"; + break; + case Icon.ControlEndBlue: + result = "control_end_blue.png"; + break; + case Icon.ControlEqualizer: + result = "control_equalizer.png"; + break; + case Icon.ControlEqualizerBlue: + result = "control_equalizer_blue.png"; + break; + case Icon.ControlFastforward: + result = "control_fastforward.png"; + break; + case Icon.ControlFastforwardBlue: + result = "control_fastforward_blue.png"; + break; + case Icon.ControlPause: + result = "control_pause.png"; + break; + case Icon.ControlPauseBlue: + result = "control_pause_blue.png"; + break; + case Icon.ControlPlay: + result = "control_play.png"; + break; + case Icon.ControlPlayBlue: + result = "control_play_blue.png"; + break; + case Icon.ControlPower: + result = "control_power.png"; + break; + case Icon.ControlPowerBlue: + result = "control_power_blue.png"; + break; + case Icon.ControlRecord: + result = "control_record.png"; + break; + case Icon.ControlRecordBlue: + result = "control_record_blue.png"; + break; + case Icon.ControlRemove: + result = "control_remove.png"; + break; + case Icon.ControlRemoveBlue: + result = "control_remove_blue.png"; + break; + case Icon.ControlRepeat: + result = "control_repeat.png"; + break; + case Icon.ControlRepeatBlue: + result = "control_repeat_blue.png"; + break; + case Icon.ControlRewind: + result = "control_rewind.png"; + break; + case Icon.ControlRewindBlue: + result = "control_rewind_blue.png"; + break; + case Icon.ControlStart: + result = "control_start.png"; + break; + case Icon.ControlStartBlue: + result = "control_start_blue.png"; + break; + case Icon.ControlStop: + result = "control_stop.png"; + break; + case Icon.ControlStopBlue: + result = "control_stop_blue.png"; + break; + case Icon.Creditcards: + result = "creditcards.png"; + break; + case Icon.Cross: + result = "cross.png"; + break; + case Icon.Css: + result = "css.png"; + break; + case Icon.CssAdd: + result = "css_add.png"; + break; + case Icon.CssDelete: + result = "css_delete.png"; + break; + case Icon.CssError: + result = "css_error.png"; + break; + case Icon.CssGo: + result = "css_go.png"; + break; + case Icon.CssValid: + result = "css_valid.png"; + break; + case Icon.Cup: + result = "cup.png"; + break; + case Icon.CupAdd: + result = "cup_add.png"; + break; + case Icon.CupBlack: + result = "cup_black.png"; + break; + case Icon.CupDelete: + result = "cup_delete.png"; + break; + case Icon.CupEdit: + result = "cup_edit.png"; + break; + case Icon.CupError: + result = "cup_error.png"; + break; + case Icon.CupGo: + result = "cup_go.png"; + break; + case Icon.CupGreen: + result = "cup_green.png"; + break; + case Icon.CupKey: + result = "cup_key.png"; + break; + case Icon.CupLink: + result = "cup_link.png"; + break; + case Icon.CupTea: + result = "cup_tea.png"; + break; + case Icon.Cursor: + result = "cursor.png"; + break; + case Icon.CursorSmall: + result = "cursor_small.png"; + break; + case Icon.Cut: + result = "cut.png"; + break; + case Icon.CutRed: + result = "cut_red.png"; + break; + case Icon.Database: + result = "database.png"; + break; + case Icon.DatabaseAdd: + result = "database_add.png"; + break; + case Icon.DatabaseConnect: + result = "database_connect.png"; + break; + case Icon.DatabaseCopy: + result = "database_copy.png"; + break; + case Icon.DatabaseDelete: + result = "database_delete.png"; + break; + case Icon.DatabaseEdit: + result = "database_edit.png"; + break; + case Icon.DatabaseError: + result = "database_error.png"; + break; + case Icon.DatabaseGear: + result = "database_gear.png"; + break; + case Icon.DatabaseGo: + result = "database_go.png"; + break; + case Icon.DatabaseKey: + result = "database_key.png"; + break; + case Icon.DatabaseLightning: + result = "database_lightning.png"; + break; + case Icon.DatabaseLink: + result = "database_link.png"; + break; + case Icon.DatabaseRefresh: + result = "database_refresh.png"; + break; + case Icon.DatabaseSave: + result = "database_save.png"; + break; + case Icon.DatabaseStart: + result = "database_start.png"; + break; + case Icon.DatabaseStop: + result = "database_stop.png"; + break; + case Icon.DatabaseTable: + result = "database_table.png"; + break; + case Icon.DatabaseWrench: + result = "database_wrench.png"; + break; + case Icon.DatabaseYellow: + result = "database_yellow.png"; + break; + case Icon.DatabaseYellowStart: + result = "database_yellow_start.png"; + break; + case Icon.DatabaseYellowStop: + result = "database_yellow_stop.png"; + break; + case Icon.Date: + result = "date.png"; + break; + case Icon.DateAdd: + result = "date_add.png"; + break; + case Icon.DateDelete: + result = "date_delete.png"; + break; + case Icon.DateEdit: + result = "date_edit.png"; + break; + case Icon.DateError: + result = "date_error.png"; + break; + case Icon.DateGo: + result = "date_go.png"; + break; + case Icon.DateLink: + result = "date_link.png"; + break; + case Icon.DateMagnify: + result = "date_magnify.png"; + break; + case Icon.DateNext: + result = "date_next.png"; + break; + case Icon.DatePrevious: + result = "date_previous.png"; + break; + case Icon.Decline: + result = "decline.png"; + break; + case Icon.Delete: + result = "delete.png"; + break; + case Icon.DeviceStylus: + result = "device_stylus.png"; + break; + case Icon.Disconnect: + result = "disconnect.png"; + break; + case Icon.Disk: + result = "disk.png"; + break; + case Icon.DiskBlack: + result = "disk_black.png"; + break; + case Icon.DiskBlackError: + result = "disk_black_error.png"; + break; + case Icon.DiskBlackMagnify: + result = "disk_black_magnify.png"; + break; + case Icon.DiskDownload: + result = "disk_download.png"; + break; + case Icon.DiskEdit: + result = "disk_edit.png"; + break; + case Icon.DiskError: + result = "disk_error.png"; + break; + case Icon.DiskMagnify: + result = "disk_magnify.png"; + break; + case Icon.DiskMultiple: + result = "disk_multiple.png"; + break; + case Icon.DiskUpload: + result = "disk_upload.png"; + break; + case Icon.Door: + result = "door.png"; + break; + case Icon.DoorError: + result = "door_error.png"; + break; + case Icon.DoorIn: + result = "door_in.png"; + break; + case Icon.DoorOpen: + result = "door_open.png"; + break; + case Icon.DoorOut: + result = "door_out.png"; + break; + case Icon.Drink: + result = "drink.png"; + break; + case Icon.DrinkEmpty: + result = "drink_empty.png"; + break; + case Icon.DrinkRed: + result = "drink_red.png"; + break; + case Icon.Drive: + result = "drive.png"; + break; + case Icon.DriveAdd: + result = "drive_add.png"; + break; + case Icon.DriveBurn: + result = "drive_burn.png"; + break; + case Icon.DriveCd: + result = "drive_cd.png"; + break; + case Icon.DriveCdr: + result = "drive_cdr.png"; + break; + case Icon.DriveCdEmpty: + result = "drive_cd_empty.png"; + break; + case Icon.DriveDelete: + result = "drive_delete.png"; + break; + case Icon.DriveDisk: + result = "drive_disk.png"; + break; + case Icon.DriveEdit: + result = "drive_edit.png"; + break; + case Icon.DriveError: + result = "drive_error.png"; + break; + case Icon.DriveGo: + result = "drive_go.png"; + break; + case Icon.DriveKey: + result = "drive_key.png"; + break; + case Icon.DriveLink: + result = "drive_link.png"; + break; + case Icon.DriveMagnify: + result = "drive_magnify.png"; + break; + case Icon.DriveNetwork: + result = "drive_network.png"; + break; + case Icon.DriveNetworkError: + result = "drive_network_error.png"; + break; + case Icon.DriveNetworkStop: + result = "drive_network_stop.png"; + break; + case Icon.DriveRename: + result = "drive_rename.png"; + break; + case Icon.DriveUser: + result = "drive_user.png"; + break; + case Icon.DriveWeb: + result = "drive_web.png"; + break; + case Icon.Dvd: + result = "dvd.png"; + break; + case Icon.DvdAdd: + result = "dvd_add.png"; + break; + case Icon.DvdDelete: + result = "dvd_delete.png"; + break; + case Icon.DvdEdit: + result = "dvd_edit.png"; + break; + case Icon.DvdError: + result = "dvd_error.png"; + break; + case Icon.DvdGo: + result = "dvd_go.png"; + break; + case Icon.DvdKey: + result = "dvd_key.png"; + break; + case Icon.DvdLink: + result = "dvd_link.png"; + break; + case Icon.DvdStart: + result = "dvd_start.png"; + break; + case Icon.DvdStop: + result = "dvd_stop.png"; + break; + case Icon.EjectBlue: + result = "eject_blue.png"; + break; + case Icon.EjectGreen: + result = "eject_green.png"; + break; + case Icon.Email: + result = "email.png"; + break; + case Icon.EmailAdd: + result = "email_add.png"; + break; + case Icon.EmailAttach: + result = "email_attach.png"; + break; + case Icon.EmailDelete: + result = "email_delete.png"; + break; + case Icon.EmailEdit: + result = "email_edit.png"; + break; + case Icon.EmailError: + result = "email_error.png"; + break; + case Icon.EmailGo: + result = "email_go.png"; + break; + case Icon.EmailLink: + result = "email_link.png"; + break; + case Icon.EmailMagnify: + result = "email_magnify.png"; + break; + case Icon.EmailOpen: + result = "email_open.png"; + break; + case Icon.EmailOpenImage: + result = "email_open_image.png"; + break; + case Icon.EmailStar: + result = "email_star.png"; + break; + case Icon.EmailStart: + result = "email_start.png"; + break; + case Icon.EmailStop: + result = "email_stop.png"; + break; + case Icon.EmailTransfer: + result = "email_transfer.png"; + break; + case Icon.EmoticonEvilgrin: + result = "emoticon_evilgrin.png"; + break; + case Icon.EmoticonGrin: + result = "emoticon_grin.png"; + break; + case Icon.EmoticonHappy: + result = "emoticon_happy.png"; + break; + case Icon.EmoticonSmile: + result = "emoticon_smile.png"; + break; + case Icon.EmoticonSurprised: + result = "emoticon_surprised.png"; + break; + case Icon.EmoticonTongue: + result = "emoticon_tongue.png"; + break; + case Icon.EmoticonUnhappy: + result = "emoticon_unhappy.png"; + break; + case Icon.EmoticonWaii: + result = "emoticon_waii.png"; + break; + case Icon.EmoticonWink: + result = "emoticon_wink.png"; + break; + case Icon.Erase: + result = "erase.png"; + break; + case Icon.Error: + result = "error.png"; + break; + case Icon.ErrorAdd: + result = "error_add.png"; + break; + case Icon.ErrorDelete: + result = "error_delete.png"; + break; + case Icon.ErrorGo: + result = "error_go.png"; + break; + case Icon.Exclamation: + result = "exclamation.png"; + break; + case Icon.Eye: + result = "eye.png"; + break; + case Icon.Eyes: + result = "eyes.png"; + break; + case Icon.Feed: + result = "feed.png"; + break; + case Icon.FeedAdd: + result = "feed_add.png"; + break; + case Icon.FeedDelete: + result = "feed_delete.png"; + break; + case Icon.FeedDisk: + result = "feed_disk.png"; + break; + case Icon.FeedEdit: + result = "feed_edit.png"; + break; + case Icon.FeedError: + result = "feed_error.png"; + break; + case Icon.FeedGo: + result = "feed_go.png"; + break; + case Icon.FeedKey: + result = "feed_key.png"; + break; + case Icon.FeedLink: + result = "feed_link.png"; + break; + case Icon.FeedMagnify: + result = "feed_magnify.png"; + break; + case Icon.FeedStar: + result = "feed_star.png"; + break; + case Icon.Female: + result = "female.png"; + break; + case Icon.Film: + result = "film.png"; + break; + case Icon.FilmAdd: + result = "film_add.png"; + break; + case Icon.FilmDelete: + result = "film_delete.png"; + break; + case Icon.FilmEdit: + result = "film_edit.png"; + break; + case Icon.FilmEject: + result = "film_eject.png"; + break; + case Icon.FilmError: + result = "film_error.png"; + break; + case Icon.FilmGo: + result = "film_go.png"; + break; + case Icon.FilmKey: + result = "film_key.png"; + break; + case Icon.FilmLink: + result = "film_link.png"; + break; + case Icon.FilmMagnify: + result = "film_magnify.png"; + break; + case Icon.FilmSave: + result = "film_save.png"; + break; + case Icon.FilmStar: + result = "film_star.png"; + break; + case Icon.FilmStart: + result = "film_start.png"; + break; + case Icon.FilmStop: + result = "film_stop.png"; + break; + case Icon.Find: + result = "find.png"; + break; + case Icon.FingerPoint: + result = "finger_point.png"; + break; + case Icon.FlagAd: + result = "flag_ad.png"; + break; + case Icon.FlagAe: + result = "flag_ae.png"; + break; + case Icon.FlagAf: + result = "flag_af.png"; + break; + case Icon.FlagAg: + result = "flag_ag.png"; + break; + case Icon.FlagAi: + result = "flag_ai.png"; + break; + case Icon.FlagAl: + result = "flag_al.png"; + break; + case Icon.FlagAm: + result = "flag_am.png"; + break; + case Icon.FlagAn: + result = "flag_an.png"; + break; + case Icon.FlagAo: + result = "flag_ao.png"; + break; + case Icon.FlagAr: + result = "flag_ar.png"; + break; + case Icon.FlagAs: + result = "flag_as.png"; + break; + case Icon.FlagAt: + result = "flag_at.png"; + break; + case Icon.FlagAu: + result = "flag_au.png"; + break; + case Icon.FlagAw: + result = "flag_aw.png"; + break; + case Icon.FlagAx: + result = "flag_ax.png"; + break; + case Icon.FlagAz: + result = "flag_az.png"; + break; + case Icon.FlagBa: + result = "flag_ba.png"; + break; + case Icon.FlagBb: + result = "flag_bb.png"; + break; + case Icon.FlagBd: + result = "flag_bd.png"; + break; + case Icon.FlagBe: + result = "flag_be.png"; + break; + case Icon.FlagBf: + result = "flag_bf.png"; + break; + case Icon.FlagBg: + result = "flag_bg.png"; + break; + case Icon.FlagBh: + result = "flag_bh.png"; + break; + case Icon.FlagBi: + result = "flag_bi.png"; + break; + case Icon.FlagBj: + result = "flag_bj.png"; + break; + case Icon.FlagBlack: + result = "flag_black.png"; + break; + case Icon.FlagBlue: + result = "flag_blue.png"; + break; + case Icon.FlagBm: + result = "flag_bm.png"; + break; + case Icon.FlagBn: + result = "flag_bn.png"; + break; + case Icon.FlagBo: + result = "flag_bo.png"; + break; + case Icon.FlagBr: + result = "flag_br.png"; + break; + case Icon.FlagBs: + result = "flag_bs.png"; + break; + case Icon.FlagBt: + result = "flag_bt.png"; + break; + case Icon.FlagBv: + result = "flag_bv.png"; + break; + case Icon.FlagBw: + result = "flag_bw.png"; + break; + case Icon.FlagBy: + result = "flag_by.png"; + break; + case Icon.FlagBz: + result = "flag_bz.png"; + break; + case Icon.FlagCa: + result = "flag_ca.png"; + break; + case Icon.FlagCatalonia: + result = "flag_catalonia.png"; + break; + case Icon.FlagCc: + result = "flag_cc.png"; + break; + case Icon.FlagCd: + result = "flag_cd.png"; + break; + case Icon.FlagCf: + result = "flag_cf.png"; + break; + case Icon.FlagCg: + result = "flag_cg.png"; + break; + case Icon.FlagCh: + result = "flag_ch.png"; + break; + case Icon.FlagChecked: + result = "flag_checked.png"; + break; + case Icon.FlagCi: + result = "flag_ci.png"; + break; + case Icon.FlagCk: + result = "flag_ck.png"; + break; + case Icon.FlagCl: + result = "flag_cl.png"; + break; + case Icon.FlagCm: + result = "flag_cm.png"; + break; + case Icon.FlagCn: + result = "flag_cn.png"; + break; + case Icon.FlagCo: + result = "flag_co.png"; + break; + case Icon.FlagCr: + result = "flag_cr.png"; + break; + case Icon.FlagCs: + result = "flag_cs.png"; + break; + case Icon.FlagCu: + result = "flag_cu.png"; + break; + case Icon.FlagCv: + result = "flag_cv.png"; + break; + case Icon.FlagCx: + result = "flag_cx.png"; + break; + case Icon.FlagCy: + result = "flag_cy.png"; + break; + case Icon.FlagCz: + result = "flag_cz.png"; + break; + case Icon.FlagDe: + result = "flag_de.png"; + break; + case Icon.FlagDj: + result = "flag_dj.png"; + break; + case Icon.FlagDk: + result = "flag_dk.png"; + break; + case Icon.FlagDm: + result = "flag_dm.png"; + break; + case Icon.FlagDo: + result = "flag_do.png"; + break; + case Icon.FlagDz: + result = "flag_dz.png"; + break; + case Icon.FlagEc: + result = "flag_ec.png"; + break; + case Icon.FlagEe: + result = "flag_ee.png"; + break; + case Icon.FlagEg: + result = "flag_eg.png"; + break; + case Icon.FlagEh: + result = "flag_eh.png"; + break; + case Icon.FlagEngland: + result = "flag_england.png"; + break; + case Icon.FlagEr: + result = "flag_er.png"; + break; + case Icon.FlagEs: + result = "flag_es.png"; + break; + case Icon.FlagEt: + result = "flag_et.png"; + break; + case Icon.FlagEuropeanunion: + result = "flag_europeanunion.png"; + break; + case Icon.FlagFam: + result = "flag_fam.png"; + break; + case Icon.FlagFi: + result = "flag_fi.png"; + break; + case Icon.FlagFj: + result = "flag_fj.png"; + break; + case Icon.FlagFk: + result = "flag_fk.png"; + break; + case Icon.FlagFm: + result = "flag_fm.png"; + break; + case Icon.FlagFo: + result = "flag_fo.png"; + break; + case Icon.FlagFr: + result = "flag_fr.png"; + break; + case Icon.FlagFrance: + result = "flag_france.png"; + break; + case Icon.FlagGa: + result = "flag_ga.png"; + break; + case Icon.FlagGb: + result = "flag_gb.png"; + break; + case Icon.FlagGd: + result = "flag_gd.png"; + break; + case Icon.FlagGe: + result = "flag_ge.png"; + break; + case Icon.FlagGf: + result = "flag_gf.png"; + break; + case Icon.FlagGg: + result = "flag_gg.png"; + break; + case Icon.FlagGh: + result = "flag_gh.png"; + break; + case Icon.FlagGi: + result = "flag_gi.png"; + break; + case Icon.FlagGl: + result = "flag_gl.png"; + break; + case Icon.FlagGm: + result = "flag_gm.png"; + break; + case Icon.FlagGn: + result = "flag_gn.png"; + break; + case Icon.FlagGp: + result = "flag_gp.png"; + break; + case Icon.FlagGq: + result = "flag_gq.png"; + break; + case Icon.FlagGr: + result = "flag_gr.png"; + break; + case Icon.FlagGreen: + result = "flag_green.png"; + break; + case Icon.FlagGrey: + result = "flag_grey.png"; + break; + case Icon.FlagGs: + result = "flag_gs.png"; + break; + case Icon.FlagGt: + result = "flag_gt.png"; + break; + case Icon.FlagGu: + result = "flag_gu.png"; + break; + case Icon.FlagGw: + result = "flag_gw.png"; + break; + case Icon.FlagGy: + result = "flag_gy.png"; + break; + case Icon.FlagHk: + result = "flag_hk.png"; + break; + case Icon.FlagHm: + result = "flag_hm.png"; + break; + case Icon.FlagHn: + result = "flag_hn.png"; + break; + case Icon.FlagHr: + result = "flag_hr.png"; + break; + case Icon.FlagHt: + result = "flag_ht.png"; + break; + case Icon.FlagHu: + result = "flag_hu.png"; + break; + case Icon.FlagId: + result = "flag_id.png"; + break; + case Icon.FlagIe: + result = "flag_ie.png"; + break; + case Icon.FlagIl: + result = "flag_il.png"; + break; + case Icon.FlagIn: + result = "flag_in.png"; + break; + case Icon.FlagIo: + result = "flag_io.png"; + break; + case Icon.FlagIq: + result = "flag_iq.png"; + break; + case Icon.FlagIr: + result = "flag_ir.png"; + break; + case Icon.FlagIs: + result = "flag_is.png"; + break; + case Icon.FlagIt: + result = "flag_it.png"; + break; + case Icon.FlagJm: + result = "flag_jm.png"; + break; + case Icon.FlagJo: + result = "flag_jo.png"; + break; + case Icon.FlagJp: + result = "flag_jp.png"; + break; + case Icon.FlagKe: + result = "flag_ke.png"; + break; + case Icon.FlagKg: + result = "flag_kg.png"; + break; + case Icon.FlagKh: + result = "flag_kh.png"; + break; + case Icon.FlagKi: + result = "flag_ki.png"; + break; + case Icon.FlagKm: + result = "flag_km.png"; + break; + case Icon.FlagKn: + result = "flag_kn.png"; + break; + case Icon.FlagKp: + result = "flag_kp.png"; + break; + case Icon.FlagKr: + result = "flag_kr.png"; + break; + case Icon.FlagKw: + result = "flag_kw.png"; + break; + case Icon.FlagKy: + result = "flag_ky.png"; + break; + case Icon.FlagKz: + result = "flag_kz.png"; + break; + case Icon.FlagLa: + result = "flag_la.png"; + break; + case Icon.FlagLb: + result = "flag_lb.png"; + break; + case Icon.FlagLc: + result = "flag_lc.png"; + break; + case Icon.FlagLi: + result = "flag_li.png"; + break; + case Icon.FlagLk: + result = "flag_lk.png"; + break; + case Icon.FlagLr: + result = "flag_lr.png"; + break; + case Icon.FlagLs: + result = "flag_ls.png"; + break; + case Icon.FlagLt: + result = "flag_lt.png"; + break; + case Icon.FlagLu: + result = "flag_lu.png"; + break; + case Icon.FlagLv: + result = "flag_lv.png"; + break; + case Icon.FlagLy: + result = "flag_ly.png"; + break; + case Icon.FlagMa: + result = "flag_ma.png"; + break; + case Icon.FlagMc: + result = "flag_mc.png"; + break; + case Icon.FlagMd: + result = "flag_md.png"; + break; + case Icon.FlagMe: + result = "flag_me.png"; + break; + case Icon.FlagMg: + result = "flag_mg.png"; + break; + case Icon.FlagMh: + result = "flag_mh.png"; + break; + case Icon.FlagMk: + result = "flag_mk.png"; + break; + case Icon.FlagMl: + result = "flag_ml.png"; + break; + case Icon.FlagMm: + result = "flag_mm.png"; + break; + case Icon.FlagMn: + result = "flag_mn.png"; + break; + case Icon.FlagMo: + result = "flag_mo.png"; + break; + case Icon.FlagMp: + result = "flag_mp.png"; + break; + case Icon.FlagMq: + result = "flag_mq.png"; + break; + case Icon.FlagMr: + result = "flag_mr.png"; + break; + case Icon.FlagMs: + result = "flag_ms.png"; + break; + case Icon.FlagMt: + result = "flag_mt.png"; + break; + case Icon.FlagMu: + result = "flag_mu.png"; + break; + case Icon.FlagMv: + result = "flag_mv.png"; + break; + case Icon.FlagMw: + result = "flag_mw.png"; + break; + case Icon.FlagMx: + result = "flag_mx.png"; + break; + case Icon.FlagMy: + result = "flag_my.png"; + break; + case Icon.FlagMz: + result = "flag_mz.png"; + break; + case Icon.FlagNa: + result = "flag_na.png"; + break; + case Icon.FlagNc: + result = "flag_nc.png"; + break; + case Icon.FlagNe: + result = "flag_ne.png"; + break; + case Icon.FlagNf: + result = "flag_nf.png"; + break; + case Icon.FlagNg: + result = "flag_ng.png"; + break; + case Icon.FlagNi: + result = "flag_ni.png"; + break; + case Icon.FlagNl: + result = "flag_nl.png"; + break; + case Icon.FlagNo: + result = "flag_no.png"; + break; + case Icon.FlagNp: + result = "flag_np.png"; + break; + case Icon.FlagNr: + result = "flag_nr.png"; + break; + case Icon.FlagNu: + result = "flag_nu.png"; + break; + case Icon.FlagNz: + result = "flag_nz.png"; + break; + case Icon.FlagOm: + result = "flag_om.png"; + break; + case Icon.FlagOrange: + result = "flag_orange.png"; + break; + case Icon.FlagPa: + result = "flag_pa.png"; + break; + case Icon.FlagPe: + result = "flag_pe.png"; + break; + case Icon.FlagPf: + result = "flag_pf.png"; + break; + case Icon.FlagPg: + result = "flag_pg.png"; + break; + case Icon.FlagPh: + result = "flag_ph.png"; + break; + case Icon.FlagPink: + result = "flag_pink.png"; + break; + case Icon.FlagPk: + result = "flag_pk.png"; + break; + case Icon.FlagPl: + result = "flag_pl.png"; + break; + case Icon.FlagPm: + result = "flag_pm.png"; + break; + case Icon.FlagPn: + result = "flag_pn.png"; + break; + case Icon.FlagPr: + result = "flag_pr.png"; + break; + case Icon.FlagPs: + result = "flag_ps.png"; + break; + case Icon.FlagPt: + result = "flag_pt.png"; + break; + case Icon.FlagPurple: + result = "flag_purple.png"; + break; + case Icon.FlagPw: + result = "flag_pw.png"; + break; + case Icon.FlagPy: + result = "flag_py.png"; + break; + case Icon.FlagQa: + result = "flag_qa.png"; + break; + case Icon.FlagRe: + result = "flag_re.png"; + break; + case Icon.FlagRed: + result = "flag_red.png"; + break; + case Icon.FlagRo: + result = "flag_ro.png"; + break; + case Icon.FlagRs: + result = "flag_rs.png"; + break; + case Icon.FlagRu: + result = "flag_ru.png"; + break; + case Icon.FlagRw: + result = "flag_rw.png"; + break; + case Icon.FlagSa: + result = "flag_sa.png"; + break; + case Icon.FlagSb: + result = "flag_sb.png"; + break; + case Icon.FlagSc: + result = "flag_sc.png"; + break; + case Icon.FlagScotland: + result = "flag_scotland.png"; + break; + case Icon.FlagSd: + result = "flag_sd.png"; + break; + case Icon.FlagSe: + result = "flag_se.png"; + break; + case Icon.FlagSg: + result = "flag_sg.png"; + break; + case Icon.FlagSh: + result = "flag_sh.png"; + break; + case Icon.FlagSi: + result = "flag_si.png"; + break; + case Icon.FlagSj: + result = "flag_sj.png"; + break; + case Icon.FlagSk: + result = "flag_sk.png"; + break; + case Icon.FlagSl: + result = "flag_sl.png"; + break; + case Icon.FlagSm: + result = "flag_sm.png"; + break; + case Icon.FlagSn: + result = "flag_sn.png"; + break; + case Icon.FlagSo: + result = "flag_so.png"; + break; + case Icon.FlagSr: + result = "flag_sr.png"; + break; + case Icon.FlagSt: + result = "flag_st.png"; + break; + case Icon.FlagSv: + result = "flag_sv.png"; + break; + case Icon.FlagSy: + result = "flag_sy.png"; + break; + case Icon.FlagSz: + result = "flag_sz.png"; + break; + case Icon.FlagTc: + result = "flag_tc.png"; + break; + case Icon.FlagTd: + result = "flag_td.png"; + break; + case Icon.FlagTf: + result = "flag_tf.png"; + break; + case Icon.FlagTg: + result = "flag_tg.png"; + break; + case Icon.FlagTh: + result = "flag_th.png"; + break; + case Icon.FlagTj: + result = "flag_tj.png"; + break; + case Icon.FlagTk: + result = "flag_tk.png"; + break; + case Icon.FlagTl: + result = "flag_tl.png"; + break; + case Icon.FlagTm: + result = "flag_tm.png"; + break; + case Icon.FlagTn: + result = "flag_tn.png"; + break; + case Icon.FlagTo: + result = "flag_to.png"; + break; + case Icon.FlagTr: + result = "flag_tr.png"; + break; + case Icon.FlagTt: + result = "flag_tt.png"; + break; + case Icon.FlagTv: + result = "flag_tv.png"; + break; + case Icon.FlagTw: + result = "flag_tw.png"; + break; + case Icon.FlagTz: + result = "flag_tz.png"; + break; + case Icon.FlagUa: + result = "flag_ua.png"; + break; + case Icon.FlagUg: + result = "flag_ug.png"; + break; + case Icon.FlagUm: + result = "flag_um.png"; + break; + case Icon.FlagUs: + result = "flag_us.png"; + break; + case Icon.FlagUy: + result = "flag_uy.png"; + break; + case Icon.FlagUz: + result = "flag_uz.png"; + break; + case Icon.FlagVa: + result = "flag_va.png"; + break; + case Icon.FlagVc: + result = "flag_vc.png"; + break; + case Icon.FlagVe: + result = "flag_ve.png"; + break; + case Icon.FlagVg: + result = "flag_vg.png"; + break; + case Icon.FlagVi: + result = "flag_vi.png"; + break; + case Icon.FlagVn: + result = "flag_vn.png"; + break; + case Icon.FlagVu: + result = "flag_vu.png"; + break; + case Icon.FlagWales: + result = "flag_wales.png"; + break; + case Icon.FlagWf: + result = "flag_wf.png"; + break; + case Icon.FlagWhite: + result = "flag_white.png"; + break; + case Icon.FlagWs: + result = "flag_ws.png"; + break; + case Icon.FlagYe: + result = "flag_ye.png"; + break; + case Icon.FlagYellow: + result = "flag_yellow.png"; + break; + case Icon.FlagYt: + result = "flag_yt.png"; + break; + case Icon.FlagZa: + result = "flag_za.png"; + break; + case Icon.FlagZm: + result = "flag_zm.png"; + break; + case Icon.FlagZw: + result = "flag_zw.png"; + break; + case Icon.FlowerDaisy: + result = "flower_daisy.png"; + break; + case Icon.Folder: + result = "folder.png"; + break; + case Icon.FolderAdd: + result = "folder_add.png"; + break; + case Icon.FolderBell: + result = "folder_bell.png"; + break; + case Icon.FolderBookmark: + result = "folder_bookmark.png"; + break; + case Icon.FolderBrick: + result = "folder_brick.png"; + break; + case Icon.FolderBug: + result = "folder_bug.png"; + break; + case Icon.FolderCamera: + result = "folder_camera.png"; + break; + case Icon.FolderConnect: + result = "folder_connect.png"; + break; + case Icon.FolderDatabase: + result = "folder_database.png"; + break; + case Icon.FolderDelete: + result = "folder_delete.png"; + break; + case Icon.FolderEdit: + result = "folder_edit.png"; + break; + case Icon.FolderError: + result = "folder_error.png"; + break; + case Icon.FolderExplore: + result = "folder_explore.png"; + break; + case Icon.FolderFeed: + result = "folder_feed.png"; + break; + case Icon.FolderFilm: + result = "folder_film.png"; + break; + case Icon.FolderFind: + result = "folder_find.png"; + break; + case Icon.FolderFont: + result = "folder_font.png"; + break; + case Icon.FolderGo: + result = "folder_go.png"; + break; + case Icon.FolderHeart: + result = "folder_heart.png"; + break; + case Icon.FolderHome: + result = "folder_home.png"; + break; + case Icon.FolderImage: + result = "folder_image.png"; + break; + case Icon.FolderKey: + result = "folder_key.png"; + break; + case Icon.FolderLightbulb: + result = "folder_lightbulb.png"; + break; + case Icon.FolderLink: + result = "folder_link.png"; + break; + case Icon.FolderMagnify: + result = "folder_magnify.png"; + break; + case Icon.FolderPage: + result = "folder_page.png"; + break; + case Icon.FolderPageWhite: + result = "folder_page_white.png"; + break; + case Icon.FolderPalette: + result = "folder_palette.png"; + break; + case Icon.FolderPicture: + result = "folder_picture.png"; + break; + case Icon.FolderStar: + result = "folder_star.png"; + break; + case Icon.FolderTable: + result = "folder_table.png"; + break; + case Icon.FolderUp: + result = "folder_up.png"; + break; + case Icon.FolderUser: + result = "folder_user.png"; + break; + case Icon.FolderWrench: + result = "folder_wrench.png"; + break; + case Icon.Font: + result = "font.png"; + break; + case Icon.FontAdd: + result = "font_add.png"; + break; + case Icon.FontColor: + result = "font_color.png"; + break; + case Icon.FontDelete: + result = "font_delete.png"; + break; + case Icon.FontGo: + result = "font_go.png"; + break; + case Icon.FontLarger: + result = "font_larger.png"; + break; + case Icon.FontSmaller: + result = "font_smaller.png"; + break; + case Icon.ForwardBlue: + result = "forward_blue.png"; + break; + case Icon.ForwardGreen: + result = "forward_green.png"; + break; + case Icon.Group: + result = "group.png"; + break; + case Icon.GroupAdd: + result = "group_add.png"; + break; + case Icon.GroupDelete: + result = "group_delete.png"; + break; + case Icon.GroupEdit: + result = "group_edit.png"; + break; + case Icon.GroupError: + result = "group_error.png"; + break; + case Icon.GroupGear: + result = "group_gear.png"; + break; + case Icon.GroupGo: + result = "group_go.png"; + break; + case Icon.GroupKey: + result = "group_key.png"; + break; + case Icon.GroupLink: + result = "group_link.png"; + break; + case Icon.Heart: + result = "heart.png"; + break; + case Icon.HeartAdd: + result = "heart_add.png"; + break; + case Icon.HeartBroken: + result = "heart_broken.png"; + break; + case Icon.HeartConnect: + result = "heart_connect.png"; + break; + case Icon.HeartDelete: + result = "heart_delete.png"; + break; + case Icon.Help: + result = "help.png"; + break; + case Icon.Hourglass: + result = "hourglass.png"; + break; + case Icon.HourglassAdd: + result = "hourglass_add.png"; + break; + case Icon.HourglassDelete: + result = "hourglass_delete.png"; + break; + case Icon.HourglassGo: + result = "hourglass_go.png"; + break; + case Icon.HourglassLink: + result = "hourglass_link.png"; + break; + case Icon.House: + result = "house.png"; + break; + case Icon.HouseConnect: + result = "house_connect.png"; + break; + case Icon.HouseGo: + result = "house_go.png"; + break; + case Icon.HouseKey: + result = "house_key.png"; + break; + case Icon.HouseLink: + result = "house_link.png"; + break; + case Icon.HouseStar: + result = "house_star.png"; + break; + case Icon.Html: + result = "html.png"; + break; + case Icon.HtmlAdd: + result = "html_add.png"; + break; + case Icon.HtmlDelete: + result = "html_delete.png"; + break; + case Icon.HtmlError: + result = "html_error.png"; + break; + case Icon.HtmlGo: + result = "html_go.png"; + break; + case Icon.HtmlValid: + result = "html_valid.png"; + break; + case Icon.Image: + result = "image.png"; + break; + case Icon.Images: + result = "images.png"; + break; + case Icon.ImageAdd: + result = "image_add.png"; + break; + case Icon.ImageDelete: + result = "image_delete.png"; + break; + case Icon.ImageEdit: + result = "image_edit.png"; + break; + case Icon.ImageLink: + result = "image_link.png"; + break; + case Icon.ImageMagnify: + result = "image_magnify.png"; + break; + case Icon.ImageStar: + result = "image_star.png"; + break; + case Icon.Information: + result = "information.png"; + break; + case Icon.Ipod: + result = "ipod.png"; + break; + case Icon.IpodCast: + result = "ipod_cast.png"; + break; + case Icon.IpodCastAdd: + result = "ipod_cast_add.png"; + break; + case Icon.IpodCastDelete: + result = "ipod_cast_delete.png"; + break; + case Icon.IpodConnect: + result = "ipod_connect.png"; + break; + case Icon.IpodNano: + result = "ipod_nano.png"; + break; + case Icon.IpodNanoConnect: + result = "ipod_nano_connect.png"; + break; + case Icon.IpodSound: + result = "ipod_sound.png"; + break; + case Icon.Joystick: + result = "joystick.png"; + break; + case Icon.JoystickAdd: + result = "joystick_add.png"; + break; + case Icon.JoystickConnect: + result = "joystick_connect.png"; + break; + case Icon.JoystickDelete: + result = "joystick_delete.png"; + break; + case Icon.JoystickError: + result = "joystick_error.png"; + break; + case Icon.Key: + result = "key.png"; + break; + case Icon.Keyboard: + result = "keyboard.png"; + break; + case Icon.KeyboardAdd: + result = "keyboard_add.png"; + break; + case Icon.KeyboardConnect: + result = "keyboard_connect.png"; + break; + case Icon.KeyboardDelete: + result = "keyboard_delete.png"; + break; + case Icon.KeyboardMagnify: + result = "keyboard_magnify.png"; + break; + case Icon.KeyAdd: + result = "key_add.png"; + break; + case Icon.KeyDelete: + result = "key_delete.png"; + break; + case Icon.KeyGo: + result = "key_go.png"; + break; + case Icon.KeyStart: + result = "key_start.png"; + break; + case Icon.KeyStop: + result = "key_stop.png"; + break; + case Icon.Laptop: + result = "laptop.png"; + break; + case Icon.LaptopAdd: + result = "laptop_add.png"; + break; + case Icon.LaptopConnect: + result = "laptop_connect.png"; + break; + case Icon.LaptopDelete: + result = "laptop_delete.png"; + break; + case Icon.LaptopDisk: + result = "laptop_disk.png"; + break; + case Icon.LaptopEdit: + result = "laptop_edit.png"; + break; + case Icon.LaptopError: + result = "laptop_error.png"; + break; + case Icon.LaptopGo: + result = "laptop_go.png"; + break; + case Icon.LaptopKey: + result = "laptop_key.png"; + break; + case Icon.LaptopLink: + result = "laptop_link.png"; + break; + case Icon.LaptopMagnify: + result = "laptop_magnify.png"; + break; + case Icon.LaptopStart: + result = "laptop_start.png"; + break; + case Icon.LaptopStop: + result = "laptop_stop.png"; + break; + case Icon.LaptopWrench: + result = "laptop_wrench.png"; + break; + case Icon.Layers: + result = "layers.png"; + break; + case Icon.Layout: + result = "layout.png"; + break; + case Icon.LayoutAdd: + result = "layout_add.png"; + break; + case Icon.LayoutContent: + result = "layout_content.png"; + break; + case Icon.LayoutDelete: + result = "layout_delete.png"; + break; + case Icon.LayoutEdit: + result = "layout_edit.png"; + break; + case Icon.LayoutError: + result = "layout_error.png"; + break; + case Icon.LayoutHeader: + result = "layout_header.png"; + break; + case Icon.LayoutKey: + result = "layout_key.png"; + break; + case Icon.LayoutLightning: + result = "layout_lightning.png"; + break; + case Icon.LayoutLink: + result = "layout_link.png"; + break; + case Icon.LayoutSidebar: + result = "layout_sidebar.png"; + break; + case Icon.Lightbulb: + result = "lightbulb.png"; + break; + case Icon.LightbulbAdd: + result = "lightbulb_add.png"; + break; + case Icon.LightbulbDelete: + result = "lightbulb_delete.png"; + break; + case Icon.LightbulbOff: + result = "lightbulb_off.png"; + break; + case Icon.Lightning: + result = "lightning.png"; + break; + case Icon.LightningAdd: + result = "lightning_add.png"; + break; + case Icon.LightningDelete: + result = "lightning_delete.png"; + break; + case Icon.LightningGo: + result = "lightning_go.png"; + break; + case Icon.Link: + result = "link.png"; + break; + case Icon.LinkAdd: + result = "link_add.png"; + break; + case Icon.LinkBreak: + result = "link_break.png"; + break; + case Icon.LinkDelete: + result = "link_delete.png"; + break; + case Icon.LinkEdit: + result = "link_edit.png"; + break; + case Icon.LinkError: + result = "link_error.png"; + break; + case Icon.LinkGo: + result = "link_go.png"; + break; + case Icon.Lock: + result = "lock.png"; + break; + case Icon.LockAdd: + result = "lock_add.png"; + break; + case Icon.LockBreak: + result = "lock_break.png"; + break; + case Icon.LockDelete: + result = "lock_delete.png"; + break; + case Icon.LockEdit: + result = "lock_edit.png"; + break; + case Icon.LockGo: + result = "lock_go.png"; + break; + case Icon.LockKey: + result = "lock_key.png"; + break; + case Icon.LockOpen: + result = "lock_open.png"; + break; + case Icon.LockStart: + result = "lock_start.png"; + break; + case Icon.LockStop: + result = "lock_stop.png"; + break; + case Icon.Lorry: + result = "lorry.png"; + break; + case Icon.LorryAdd: + result = "lorry_add.png"; + break; + case Icon.LorryDelete: + result = "lorry_delete.png"; + break; + case Icon.LorryError: + result = "lorry_error.png"; + break; + case Icon.LorryFlatbed: + result = "lorry_flatbed.png"; + break; + case Icon.LorryGo: + result = "lorry_go.png"; + break; + case Icon.LorryLink: + result = "lorry_link.png"; + break; + case Icon.LorryStart: + result = "lorry_start.png"; + break; + case Icon.LorryStop: + result = "lorry_stop.png"; + break; + case Icon.MagifierZoomOut: + result = "magifier_zoom_out.png"; + break; + case Icon.Magnifier: + result = "magnifier.png"; + break; + case Icon.MagnifierZoomIn: + result = "magnifier_zoom_in.png"; + break; + case Icon.Mail: + result = "mail.png"; + break; + case Icon.Male: + result = "male.png"; + break; + case Icon.Map: + result = "map.png"; + break; + case Icon.MapAdd: + result = "map_add.png"; + break; + case Icon.MapClipboard: + result = "map_clipboard.png"; + break; + case Icon.MapCursor: + result = "map_cursor.png"; + break; + case Icon.MapDelete: + result = "map_delete.png"; + break; + case Icon.MapEdit: + result = "map_edit.png"; + break; + case Icon.MapError: + result = "map_error.png"; + break; + case Icon.MapGo: + result = "map_go.png"; + break; + case Icon.MapLink: + result = "map_link.png"; + break; + case Icon.MapMagnify: + result = "map_magnify.png"; + break; + case Icon.MapStart: + result = "map_start.png"; + break; + case Icon.MapStop: + result = "map_stop.png"; + break; + case Icon.MedalBronze1: + result = "medal_bronze_1.png"; + break; + case Icon.MedalBronze2: + result = "medal_bronze_2.png"; + break; + case Icon.MedalBronze3: + result = "medal_bronze_3.png"; + break; + case Icon.MedalBronzeAdd: + result = "medal_bronze_add.png"; + break; + case Icon.MedalBronzeDelete: + result = "medal_bronze_delete.png"; + break; + case Icon.MedalGold1: + result = "medal_gold_1.png"; + break; + case Icon.MedalGold2: + result = "medal_gold_2.png"; + break; + case Icon.MedalGold3: + result = "medal_gold_3.png"; + break; + case Icon.MedalGoldAdd: + result = "medal_gold_add.png"; + break; + case Icon.MedalGoldDelete: + result = "medal_gold_delete.png"; + break; + case Icon.MedalSilver1: + result = "medal_silver_1.png"; + break; + case Icon.MedalSilver2: + result = "medal_silver_2.png"; + break; + case Icon.MedalSilver3: + result = "medal_silver_3.png"; + break; + case Icon.MedalSilverAdd: + result = "medal_silver_add.png"; + break; + case Icon.MedalSilverDelete: + result = "medal_silver_delete.png"; + break; + case Icon.Money: + result = "money.png"; + break; + case Icon.MoneyAdd: + result = "money_add.png"; + break; + case Icon.MoneyDelete: + result = "money_delete.png"; + break; + case Icon.MoneyDollar: + result = "money_dollar.png"; + break; + case Icon.MoneyEuro: + result = "money_euro.png"; + break; + case Icon.MoneyPound: + result = "money_pound.png"; + break; + case Icon.MoneyYen: + result = "money_yen.png"; + break; + case Icon.Monitor: + result = "monitor.png"; + break; + case Icon.MonitorAdd: + result = "monitor_add.png"; + break; + case Icon.MonitorDelete: + result = "monitor_delete.png"; + break; + case Icon.MonitorEdit: + result = "monitor_edit.png"; + break; + case Icon.MonitorError: + result = "monitor_error.png"; + break; + case Icon.MonitorGo: + result = "monitor_go.png"; + break; + case Icon.MonitorKey: + result = "monitor_key.png"; + break; + case Icon.MonitorLightning: + result = "monitor_lightning.png"; + break; + case Icon.MonitorLink: + result = "monitor_link.png"; + break; + case Icon.MoonFull: + result = "moon_full.png"; + break; + case Icon.Mouse: + result = "mouse.png"; + break; + case Icon.MouseAdd: + result = "mouse_add.png"; + break; + case Icon.MouseDelete: + result = "mouse_delete.png"; + break; + case Icon.MouseError: + result = "mouse_error.png"; + break; + case Icon.Music: + result = "music.png"; + break; + case Icon.MusicNote: + result = "music_note.png"; + break; + case Icon.Neighbourhood: + result = "neighbourhood.png"; + break; + case Icon.New: + result = "new.png"; + break; + case Icon.Newspaper: + result = "newspaper.png"; + break; + case Icon.NewspaperAdd: + result = "newspaper_add.png"; + break; + case Icon.NewspaperDelete: + result = "newspaper_delete.png"; + break; + case Icon.NewspaperGo: + result = "newspaper_go.png"; + break; + case Icon.NewspaperLink: + result = "newspaper_link.png"; + break; + case Icon.NewBlue: + result = "new_blue.png"; + break; + case Icon.NewRed: + result = "new_red.png"; + break; + case Icon.NextBlue: + result = "next_blue.png"; + break; + case Icon.NextGreen: + result = "next_green.png"; + break; + case Icon.Note: + result = "note.png"; + break; + case Icon.NoteAdd: + result = "note_add.png"; + break; + case Icon.NoteDelete: + result = "note_delete.png"; + break; + case Icon.NoteEdit: + result = "note_edit.png"; + break; + case Icon.NoteError: + result = "note_error.png"; + break; + case Icon.NoteGo: + result = "note_go.png"; + break; + case Icon.Outline: + result = "outline.png"; + break; + case Icon.Overlays: + result = "overlays.png"; + break; + case Icon.Package: + result = "package.png"; + break; + case Icon.PackageAdd: + result = "package_add.png"; + break; + case Icon.PackageDelete: + result = "package_delete.png"; + break; + case Icon.PackageDown: + result = "package_down.png"; + break; + case Icon.PackageGo: + result = "package_go.png"; + break; + case Icon.PackageGreen: + result = "package_green.png"; + break; + case Icon.PackageIn: + result = "package_in.png"; + break; + case Icon.PackageLink: + result = "package_link.png"; + break; + case Icon.PackageSe: + result = "package_se.png"; + break; + case Icon.PackageStart: + result = "package_start.png"; + break; + case Icon.PackageStop: + result = "package_stop.png"; + break; + case Icon.PackageWhite: + result = "package_white.png"; + break; + case Icon.Page: + result = "page.png"; + break; + case Icon.PageAdd: + result = "page_add.png"; + break; + case Icon.PageAttach: + result = "page_attach.png"; + break; + case Icon.PageBack: + result = "page_back.png"; + break; + case Icon.PageBreak: + result = "page_break.png"; + break; + case Icon.PageBreakInsert: + result = "page_break_insert.png"; + break; + case Icon.PageCancel: + result = "page_cancel.png"; + break; + case Icon.PageCode: + result = "page_code.png"; + break; + case Icon.PageCopy: + result = "page_copy.png"; + break; + case Icon.PageDelete: + result = "page_delete.png"; + break; + case Icon.PageEdit: + result = "page_edit.png"; + break; + case Icon.PageError: + result = "page_error.png"; + break; + case Icon.PageExcel: + result = "page_excel.png"; + break; + case Icon.PageFind: + result = "page_find.png"; + break; + case Icon.PageForward: + result = "page_forward.png"; + break; + case Icon.PageGear: + result = "page_gear.png"; + break; + case Icon.PageGo: + result = "page_go.png"; + break; + case Icon.PageGreen: + result = "page_green.png"; + break; + case Icon.PageHeaderFooter: + result = "page_header_footer.png"; + break; + case Icon.PageKey: + result = "page_key.png"; + break; + case Icon.PageLandscape: + result = "page_landscape.png"; + break; + case Icon.PageLandscapeShot: + result = "page_landscape_shot.png"; + break; + case Icon.PageLightning: + result = "page_lightning.png"; + break; + case Icon.PageLink: + result = "page_link.png"; + break; + case Icon.PageMagnify: + result = "page_magnify.png"; + break; + case Icon.PagePaintbrush: + result = "page_paintbrush.png"; + break; + case Icon.PagePaste: + result = "page_paste.png"; + break; + case Icon.PagePortrait: + result = "page_portrait.png"; + break; + case Icon.PagePortraitShot: + result = "page_portrait_shot.png"; + break; + case Icon.PageRed: + result = "page_red.png"; + break; + case Icon.PageRefresh: + result = "page_refresh.png"; + break; + case Icon.PageSave: + result = "page_save.png"; + break; + case Icon.PageWhite: + result = "page_white.png"; + break; + case Icon.PageWhiteAcrobat: + result = "page_white_acrobat.png"; + break; + case Icon.PageWhiteActionscript: + result = "page_white_actionscript.png"; + break; + case Icon.PageWhiteAdd: + result = "page_white_add.png"; + break; + case Icon.PageWhiteBreak: + result = "page_white_break.png"; + break; + case Icon.PageWhiteC: + result = "page_white_c.png"; + break; + case Icon.PageWhiteCamera: + result = "page_white_camera.png"; + break; + case Icon.PageWhiteCd: + result = "page_white_cd.png"; + break; + case Icon.PageWhiteCdr: + result = "page_white_cdr.png"; + break; + case Icon.PageWhiteCode: + result = "page_white_code.png"; + break; + case Icon.PageWhiteCodeRed: + result = "page_white_code_red.png"; + break; + case Icon.PageWhiteColdfusion: + result = "page_white_coldfusion.png"; + break; + case Icon.PageWhiteCompressed: + result = "page_white_compressed.png"; + break; + case Icon.PageWhiteConnect: + result = "page_white_connect.png"; + break; + case Icon.PageWhiteCopy: + result = "page_white_copy.png"; + break; + case Icon.PageWhiteCplusplus: + result = "page_white_cplusplus.png"; + break; + case Icon.PageWhiteCsharp: + result = "page_white_csharp.png"; + break; + case Icon.PageWhiteCup: + result = "page_white_cup.png"; + break; + case Icon.PageWhiteDatabase: + result = "page_white_database.png"; + break; + case Icon.PageWhiteDatabaseYellow: + result = "page_white_database_yellow.png"; + break; + case Icon.PageWhiteDelete: + result = "page_white_delete.png"; + break; + case Icon.PageWhiteDvd: + result = "page_white_dvd.png"; + break; + case Icon.PageWhiteEdit: + result = "page_white_edit.png"; + break; + case Icon.PageWhiteError: + result = "page_white_error.png"; + break; + case Icon.PageWhiteExcel: + result = "page_white_excel.png"; + break; + case Icon.PageWhiteFind: + result = "page_white_find.png"; + break; + case Icon.PageWhiteFlash: + result = "page_white_flash.png"; + break; + case Icon.PageWhiteFont: + result = "page_white_font.png"; + break; + case Icon.PageWhiteFreehand: + result = "page_white_freehand.png"; + break; + case Icon.PageWhiteGear: + result = "page_white_gear.png"; + break; + case Icon.PageWhiteGet: + result = "page_white_get.png"; + break; + case Icon.PageWhiteGo: + result = "page_white_go.png"; + break; + case Icon.PageWhiteH: + result = "page_white_h.png"; + break; + case Icon.PageWhiteHorizontal: + result = "page_white_horizontal.png"; + break; + case Icon.PageWhiteKey: + result = "page_white_key.png"; + break; + case Icon.PageWhiteLightning: + result = "page_white_lightning.png"; + break; + case Icon.PageWhiteLink: + result = "page_white_link.png"; + break; + case Icon.PageWhiteMagnify: + result = "page_white_magnify.png"; + break; + case Icon.PageWhiteMedal: + result = "page_white_medal.png"; + break; + case Icon.PageWhiteOffice: + result = "page_white_office.png"; + break; + case Icon.PageWhitePaint: + result = "page_white_paint.png"; + break; + case Icon.PageWhitePaintbrush: + result = "page_white_paintbrush.png"; + break; + case Icon.PageWhitePaint2: + result = "page_white_paint_2.png"; + break; + case Icon.PageWhitePaste: + result = "page_white_paste.png"; + break; + case Icon.PageWhitePasteTable: + result = "page_white_paste_table.png"; + break; + case Icon.PageWhitePhp: + result = "page_white_php.png"; + break; + case Icon.PageWhitePicture: + result = "page_white_picture.png"; + break; + case Icon.PageWhitePowerpoint: + result = "page_white_powerpoint.png"; + break; + case Icon.PageWhitePut: + result = "page_white_put.png"; + break; + case Icon.PageWhiteRefresh: + result = "page_white_refresh.png"; + break; + case Icon.PageWhiteRuby: + result = "page_white_ruby.png"; + break; + case Icon.PageWhiteSideBySide: + result = "page_white_side_by_side.png"; + break; + case Icon.PageWhiteStack: + result = "page_white_stack.png"; + break; + case Icon.PageWhiteStar: + result = "page_white_star.png"; + break; + case Icon.PageWhiteSwoosh: + result = "page_white_swoosh.png"; + break; + case Icon.PageWhiteText: + result = "page_white_text.png"; + break; + case Icon.PageWhiteTextWidth: + result = "page_white_text_width.png"; + break; + case Icon.PageWhiteTux: + result = "page_white_tux.png"; + break; + case Icon.PageWhiteVector: + result = "page_white_vector.png"; + break; + case Icon.PageWhiteVisualstudio: + result = "page_white_visualstudio.png"; + break; + case Icon.PageWhiteWidth: + result = "page_white_width.png"; + break; + case Icon.PageWhiteWord: + result = "page_white_word.png"; + break; + case Icon.PageWhiteWorld: + result = "page_white_world.png"; + break; + case Icon.PageWhiteWrench: + result = "page_white_wrench.png"; + break; + case Icon.PageWhiteZip: + result = "page_white_zip.png"; + break; + case Icon.PageWord: + result = "page_word.png"; + break; + case Icon.PageWorld: + result = "page_world.png"; + break; + case Icon.Paint: + result = "paint.png"; + break; + case Icon.Paintbrush: + result = "paintbrush.png"; + break; + case Icon.PaintbrushColor: + result = "paintbrush_color.png"; + break; + case Icon.Paintcan: + result = "paintcan.png"; + break; + case Icon.PaintcanRed: + result = "paintcan_red.png"; + break; + case Icon.PaintCanBrush: + result = "paint_can_brush.png"; + break; + case Icon.Palette: + result = "palette.png"; + break; + case Icon.PastePlain: + result = "paste_plain.png"; + break; + case Icon.PasteWord: + result = "paste_word.png"; + break; + case Icon.PauseBlue: + result = "pause_blue.png"; + break; + case Icon.PauseGreen: + result = "pause_green.png"; + break; + case Icon.PauseRecord: + result = "pause_record.png"; + break; + case Icon.Pencil: + result = "pencil.png"; + break; + case Icon.PencilAdd: + result = "pencil_add.png"; + break; + case Icon.PencilDelete: + result = "pencil_delete.png"; + break; + case Icon.PencilGo: + result = "pencil_go.png"; + break; + case Icon.Phone: + result = "phone.png"; + break; + case Icon.PhoneAdd: + result = "phone_add.png"; + break; + case Icon.PhoneDelete: + result = "phone_delete.png"; + break; + case Icon.PhoneEdit: + result = "phone_edit.png"; + break; + case Icon.PhoneError: + result = "phone_error.png"; + break; + case Icon.PhoneGo: + result = "phone_go.png"; + break; + case Icon.PhoneKey: + result = "phone_key.png"; + break; + case Icon.PhoneLink: + result = "phone_link.png"; + break; + case Icon.PhoneSound: + result = "phone_sound.png"; + break; + case Icon.PhoneStart: + result = "phone_start.png"; + break; + case Icon.PhoneStop: + result = "phone_stop.png"; + break; + case Icon.Photo: + result = "photo.png"; + break; + case Icon.Photos: + result = "photos.png"; + break; + case Icon.PhotoAdd: + result = "photo_add.png"; + break; + case Icon.PhotoDelete: + result = "photo_delete.png"; + break; + case Icon.PhotoEdit: + result = "photo_edit.png"; + break; + case Icon.PhotoLink: + result = "photo_link.png"; + break; + case Icon.PhotoPaint: + result = "photo_paint.png"; + break; + case Icon.Picture: + result = "picture.png"; + break; + case Icon.Pictures: + result = "pictures.png"; + break; + case Icon.PicturesThumbs: + result = "pictures_thumbs.png"; + break; + case Icon.PictureAdd: + result = "picture_add.png"; + break; + case Icon.PictureClipboard: + result = "picture_clipboard.png"; + break; + case Icon.PictureDelete: + result = "picture_delete.png"; + break; + case Icon.PictureEdit: + result = "picture_edit.png"; + break; + case Icon.PictureEmpty: + result = "picture_empty.png"; + break; + case Icon.PictureError: + result = "picture_error.png"; + break; + case Icon.PictureGo: + result = "picture_go.png"; + break; + case Icon.PictureKey: + result = "picture_key.png"; + break; + case Icon.PictureLink: + result = "picture_link.png"; + break; + case Icon.PictureSave: + result = "picture_save.png"; + break; + case Icon.Pilcrow: + result = "pilcrow.png"; + break; + case Icon.Pill: + result = "pill.png"; + break; + case Icon.PillAdd: + result = "pill_add.png"; + break; + case Icon.PillDelete: + result = "pill_delete.png"; + break; + case Icon.PillError: + result = "pill_error.png"; + break; + case Icon.PillGo: + result = "pill_go.png"; + break; + case Icon.PlayBlue: + result = "play_blue.png"; + break; + case Icon.PlayGreen: + result = "play_green.png"; + break; + case Icon.Plugin: + result = "plugin.png"; + break; + case Icon.PluginAdd: + result = "plugin_add.png"; + break; + case Icon.PluginDelete: + result = "plugin_delete.png"; + break; + case Icon.PluginDisabled: + result = "plugin_disabled.png"; + break; + case Icon.PluginEdit: + result = "plugin_edit.png"; + break; + case Icon.PluginError: + result = "plugin_error.png"; + break; + case Icon.PluginGo: + result = "plugin_go.png"; + break; + case Icon.PluginKey: + result = "plugin_key.png"; + break; + case Icon.PluginLink: + result = "plugin_link.png"; + break; + case Icon.PreviousGreen: + result = "previous_green.png"; + break; + case Icon.Printer: + result = "printer.png"; + break; + case Icon.PrinterAdd: + result = "printer_add.png"; + break; + case Icon.PrinterCancel: + result = "printer_cancel.png"; + break; + case Icon.PrinterColor: + result = "printer_color.png"; + break; + case Icon.PrinterConnect: + result = "printer_connect.png"; + break; + case Icon.PrinterDelete: + result = "printer_delete.png"; + break; + case Icon.PrinterEmpty: + result = "printer_empty.png"; + break; + case Icon.PrinterError: + result = "printer_error.png"; + break; + case Icon.PrinterGo: + result = "printer_go.png"; + break; + case Icon.PrinterKey: + result = "printer_key.png"; + break; + case Icon.PrinterMono: + result = "printer_mono.png"; + break; + case Icon.PrinterStart: + result = "printer_start.png"; + break; + case Icon.PrinterStop: + result = "printer_stop.png"; + break; + case Icon.Rainbow: + result = "rainbow.png"; + break; + case Icon.RainbowStar: + result = "rainbow_star.png"; + break; + case Icon.RecordBlue: + result = "record_blue.png"; + break; + case Icon.RecordGreen: + result = "record_green.png"; + break; + case Icon.RecordRed: + result = "record_red.png"; + break; + case Icon.Reload: + result = "reload.png"; + break; + case Icon.Report: + result = "report.png"; + break; + case Icon.ReportAdd: + result = "report_add.png"; + break; + case Icon.ReportDelete: + result = "report_delete.png"; + break; + case Icon.ReportDisk: + result = "report_disk.png"; + break; + case Icon.ReportEdit: + result = "report_edit.png"; + break; + case Icon.ReportGo: + result = "report_go.png"; + break; + case Icon.ReportKey: + result = "report_key.png"; + break; + case Icon.ReportLink: + result = "report_link.png"; + break; + case Icon.ReportMagnify: + result = "report_magnify.png"; + break; + case Icon.ReportPicture: + result = "report_picture.png"; + break; + case Icon.ReportStart: + result = "report_start.png"; + break; + case Icon.ReportStop: + result = "report_stop.png"; + break; + case Icon.ReportUser: + result = "report_user.png"; + break; + case Icon.ReportWord: + result = "report_word.png"; + break; + case Icon.ResultsetFirst: + result = "resultset_first.png"; + break; + case Icon.ResultsetLast: + result = "resultset_last.png"; + break; + case Icon.ResultsetNext: + result = "resultset_next.png"; + break; + case Icon.ResultsetPrevious: + result = "resultset_previous.png"; + break; + case Icon.ReverseBlue: + result = "reverse_blue.png"; + break; + case Icon.ReverseGreen: + result = "reverse_green.png"; + break; + case Icon.RewindBlue: + result = "rewind_blue.png"; + break; + case Icon.RewindGreen: + result = "rewind_green.png"; + break; + case Icon.Rgb: + result = "rgb.png"; + break; + case Icon.Rosette: + result = "rosette.png"; + break; + case Icon.RosetteBlue: + result = "rosette_blue.png"; + break; + case Icon.Rss: + result = "rss.png"; + break; + case Icon.RssAdd: + result = "rss_add.png"; + break; + case Icon.RssDelete: + result = "rss_delete.png"; + break; + case Icon.RssError: + result = "rss_error.png"; + break; + case Icon.RssGo: + result = "rss_go.png"; + break; + case Icon.RssValid: + result = "rss_valid.png"; + break; + case Icon.Ruby: + result = "ruby.png"; + break; + case Icon.RubyAdd: + result = "ruby_add.png"; + break; + case Icon.RubyDelete: + result = "ruby_delete.png"; + break; + case Icon.RubyGear: + result = "ruby_gear.png"; + break; + case Icon.RubyGet: + result = "ruby_get.png"; + break; + case Icon.RubyGo: + result = "ruby_go.png"; + break; + case Icon.RubyKey: + result = "ruby_key.png"; + break; + case Icon.RubyLink: + result = "ruby_link.png"; + break; + case Icon.RubyPut: + result = "ruby_put.png"; + break; + case Icon.Script: + result = "script.png"; + break; + case Icon.ScriptAdd: + result = "script_add.png"; + break; + case Icon.ScriptCode: + result = "script_code.png"; + break; + case Icon.ScriptCodeOriginal: + result = "script_code_original.png"; + break; + case Icon.ScriptCodeRed: + result = "script_code_red.png"; + break; + case Icon.ScriptDelete: + result = "script_delete.png"; + break; + case Icon.ScriptEdit: + result = "script_edit.png"; + break; + case Icon.ScriptError: + result = "script_error.png"; + break; + case Icon.ScriptGear: + result = "script_gear.png"; + break; + case Icon.ScriptGo: + result = "script_go.png"; + break; + case Icon.ScriptKey: + result = "script_key.png"; + break; + case Icon.ScriptLightning: + result = "script_lightning.png"; + break; + case Icon.ScriptLink: + result = "script_link.png"; + break; + case Icon.ScriptPalette: + result = "script_palette.png"; + break; + case Icon.ScriptSave: + result = "script_save.png"; + break; + case Icon.ScriptStart: + result = "script_start.png"; + break; + case Icon.ScriptStop: + result = "script_stop.png"; + break; + case Icon.Seasons: + result = "seasons.png"; + break; + case Icon.SectionCollapsed: + result = "section_collapsed.png"; + break; + case Icon.SectionExpanded: + result = "section_expanded.png"; + break; + case Icon.Server: + result = "server.png"; + break; + case Icon.ServerAdd: + result = "server_add.png"; + break; + case Icon.ServerChart: + result = "server_chart.png"; + break; + case Icon.ServerCompressed: + result = "server_compressed.png"; + break; + case Icon.ServerConnect: + result = "server_connect.png"; + break; + case Icon.ServerDatabase: + result = "server_database.png"; + break; + case Icon.ServerDelete: + result = "server_delete.png"; + break; + case Icon.ServerEdit: + result = "server_edit.png"; + break; + case Icon.ServerError: + result = "server_error.png"; + break; + case Icon.ServerGo: + result = "server_go.png"; + break; + case Icon.ServerKey: + result = "server_key.png"; + break; + case Icon.ServerLightning: + result = "server_lightning.png"; + break; + case Icon.ServerLink: + result = "server_link.png"; + break; + case Icon.ServerStart: + result = "server_start.png"; + break; + case Icon.ServerStop: + result = "server_stop.png"; + break; + case Icon.ServerUncompressed: + result = "server_uncompressed.png"; + break; + case Icon.ServerWrench: + result = "server_wrench.png"; + break; + case Icon.Shading: + result = "shading.png"; + break; + case Icon.ShapesMany: + result = "shapes_many.png"; + break; + case Icon.ShapesManySelect: + result = "shapes_many_select.png"; + break; + case Icon.Shape3d: + result = "shape_3d.png"; + break; + case Icon.ShapeAlignBottom: + result = "shape_align_bottom.png"; + break; + case Icon.ShapeAlignCenter: + result = "shape_align_center.png"; + break; + case Icon.ShapeAlignLeft: + result = "shape_align_left.png"; + break; + case Icon.ShapeAlignMiddle: + result = "shape_align_middle.png"; + break; + case Icon.ShapeAlignRight: + result = "shape_align_right.png"; + break; + case Icon.ShapeAlignTop: + result = "shape_align_top.png"; + break; + case Icon.ShapeFlipHorizontal: + result = "shape_flip_horizontal.png"; + break; + case Icon.ShapeFlipVertical: + result = "shape_flip_vertical.png"; + break; + case Icon.ShapeGroup: + result = "shape_group.png"; + break; + case Icon.ShapeHandles: + result = "shape_handles.png"; + break; + case Icon.ShapeMoveBack: + result = "shape_move_back.png"; + break; + case Icon.ShapeMoveBackwards: + result = "shape_move_backwards.png"; + break; + case Icon.ShapeMoveForwards: + result = "shape_move_forwards.png"; + break; + case Icon.ShapeMoveFront: + result = "shape_move_front.png"; + break; + case Icon.ShapeRotateAnticlockwise: + result = "shape_rotate_anticlockwise.png"; + break; + case Icon.ShapeRotateClockwise: + result = "shape_rotate_clockwise.png"; + break; + case Icon.ShapeShadeA: + result = "shape_shade_a.png"; + break; + case Icon.ShapeShadeB: + result = "shape_shade_b.png"; + break; + case Icon.ShapeShadeC: + result = "shape_shade_c.png"; + break; + case Icon.ShapeShadow: + result = "shape_shadow.png"; + break; + case Icon.ShapeShadowToggle: + result = "shape_shadow_toggle.png"; + break; + case Icon.ShapeSquare: + result = "shape_square.png"; + break; + case Icon.ShapeSquareAdd: + result = "shape_square_add.png"; + break; + case Icon.ShapeSquareDelete: + result = "shape_square_delete.png"; + break; + case Icon.ShapeSquareEdit: + result = "shape_square_edit.png"; + break; + case Icon.ShapeSquareError: + result = "shape_square_error.png"; + break; + case Icon.ShapeSquareGo: + result = "shape_square_go.png"; + break; + case Icon.ShapeSquareKey: + result = "shape_square_key.png"; + break; + case Icon.ShapeSquareLink: + result = "shape_square_link.png"; + break; + case Icon.ShapeSquareSelect: + result = "shape_square_select.png"; + break; + case Icon.ShapeUngroup: + result = "shape_ungroup.png"; + break; + case Icon.Share: + result = "share.png"; + break; + case Icon.Shield: + result = "shield.png"; + break; + case Icon.ShieldAdd: + result = "shield_add.png"; + break; + case Icon.ShieldDelete: + result = "shield_delete.png"; + break; + case Icon.ShieldError: + result = "shield_error.png"; + break; + case Icon.ShieldGo: + result = "shield_go.png"; + break; + case Icon.ShieldRainbow: + result = "shield_rainbow.png"; + break; + case Icon.ShieldSilver: + result = "shield_silver.png"; + break; + case Icon.ShieldStart: + result = "shield_start.png"; + break; + case Icon.ShieldStop: + result = "shield_stop.png"; + break; + case Icon.Sitemap: + result = "sitemap.png"; + break; + case Icon.SitemapColor: + result = "sitemap_color.png"; + break; + case Icon.Smartphone: + result = "smartphone.png"; + break; + case Icon.SmartphoneAdd: + result = "smartphone_add.png"; + break; + case Icon.SmartphoneConnect: + result = "smartphone_connect.png"; + break; + case Icon.SmartphoneDelete: + result = "smartphone_delete.png"; + break; + case Icon.SmartphoneDisk: + result = "smartphone_disk.png"; + break; + case Icon.SmartphoneEdit: + result = "smartphone_edit.png"; + break; + case Icon.SmartphoneError: + result = "smartphone_error.png"; + break; + case Icon.SmartphoneGo: + result = "smartphone_go.png"; + break; + case Icon.SmartphoneKey: + result = "smartphone_key.png"; + break; + case Icon.SmartphoneWrench: + result = "smartphone_wrench.png"; + break; + case Icon.SortAscending: + result = "sort_ascending.png"; + break; + case Icon.SortDescending: + result = "sort_descending.png"; + break; + case Icon.Sound: + result = "sound.png"; + break; + case Icon.SoundAdd: + result = "sound_add.png"; + break; + case Icon.SoundDelete: + result = "sound_delete.png"; + break; + case Icon.SoundHigh: + result = "sound_high.png"; + break; + case Icon.SoundIn: + result = "sound_in.png"; + break; + case Icon.SoundLow: + result = "sound_low.png"; + break; + case Icon.SoundMute: + result = "sound_mute.png"; + break; + case Icon.SoundNone: + result = "sound_none.png"; + break; + case Icon.SoundOut: + result = "sound_out.png"; + break; + case Icon.Spellcheck: + result = "spellcheck.png"; + break; + case Icon.Sport8ball: + result = "sport_8ball.png"; + break; + case Icon.SportBasketball: + result = "sport_basketball.png"; + break; + case Icon.SportFootball: + result = "sport_football.png"; + break; + case Icon.SportGolf: + result = "sport_golf.png"; + break; + case Icon.SportGolfPractice: + result = "sport_golf_practice.png"; + break; + case Icon.SportRaquet: + result = "sport_raquet.png"; + break; + case Icon.SportShuttlecock: + result = "sport_shuttlecock.png"; + break; + case Icon.SportSoccer: + result = "sport_soccer.png"; + break; + case Icon.SportTennis: + result = "sport_tennis.png"; + break; + case Icon.Star: + result = "star.png"; + break; + case Icon.StarBronze: + result = "star_bronze.png"; + break; + case Icon.StarBronzeHalfGrey: + result = "star_bronze_half_grey.png"; + break; + case Icon.StarGold: + result = "star_gold.png"; + break; + case Icon.StarGoldHalfGrey: + result = "star_gold_half_grey.png"; + break; + case Icon.StarGoldHalfSilver: + result = "star_gold_half_silver.png"; + break; + case Icon.StarGrey: + result = "star_grey.png"; + break; + case Icon.StarHalfGrey: + result = "star_half_grey.png"; + break; + case Icon.StarSilver: + result = "star_silver.png"; + break; + case Icon.StatusAway: + result = "status_away.png"; + break; + case Icon.StatusBeRightBack: + result = "status_be_right_back.png"; + break; + case Icon.StatusBusy: + result = "status_busy.png"; + break; + case Icon.StatusInvisible: + result = "status_invisible.png"; + break; + case Icon.StatusOffline: + result = "status_offline.png"; + break; + case Icon.StatusOnline: + result = "status_online.png"; + break; + case Icon.Stop: + result = "stop.png"; + break; + case Icon.StopBlue: + result = "stop_blue.png"; + break; + case Icon.StopGreen: + result = "stop_green.png"; + break; + case Icon.StopRed: + result = "stop_red.png"; + break; + case Icon.Style: + result = "style.png"; + break; + case Icon.StyleAdd: + result = "style_add.png"; + break; + case Icon.StyleDelete: + result = "style_delete.png"; + break; + case Icon.StyleEdit: + result = "style_edit.png"; + break; + case Icon.StyleGo: + result = "style_go.png"; + break; + case Icon.Sum: + result = "sum.png"; + break; + case Icon.Tab: + result = "tab.png"; + break; + case Icon.Table: + result = "table.png"; + break; + case Icon.TableAdd: + result = "table_add.png"; + break; + case Icon.TableCell: + result = "table_cell.png"; + break; + case Icon.TableColumn: + result = "table_column.png"; + break; + case Icon.TableColumnAdd: + result = "table_column_add.png"; + break; + case Icon.TableColumnDelete: + result = "table_column_delete.png"; + break; + case Icon.TableConnect: + result = "table_connect.png"; + break; + case Icon.TableDelete: + result = "table_delete.png"; + break; + case Icon.TableEdit: + result = "table_edit.png"; + break; + case Icon.TableError: + result = "table_error.png"; + break; + case Icon.TableGear: + result = "table_gear.png"; + break; + case Icon.TableGo: + result = "table_go.png"; + break; + case Icon.TableKey: + result = "table_key.png"; + break; + case Icon.TableLightning: + result = "table_lightning.png"; + break; + case Icon.TableLink: + result = "table_link.png"; + break; + case Icon.TableMultiple: + result = "table_multiple.png"; + break; + case Icon.TableRefresh: + result = "table_refresh.png"; + break; + case Icon.TableRelationship: + result = "table_relationship.png"; + break; + case Icon.TableRow: + result = "table_row.png"; + break; + case Icon.TableRowDelete: + result = "table_row_delete.png"; + break; + case Icon.TableRowInsert: + result = "table_row_insert.png"; + break; + case Icon.TableSave: + result = "table_save.png"; + break; + case Icon.TableSort: + result = "table_sort.png"; + break; + case Icon.TabAdd: + result = "tab_add.png"; + break; + case Icon.TabBlue: + result = "tab_blue.png"; + break; + case Icon.TabDelete: + result = "tab_delete.png"; + break; + case Icon.TabEdit: + result = "tab_edit.png"; + break; + case Icon.TabGo: + result = "tab_go.png"; + break; + case Icon.TabGreen: + result = "tab_green.png"; + break; + case Icon.TabRed: + result = "tab_red.png"; + break; + case Icon.Tag: + result = "tag.png"; + break; + case Icon.TagsGrey: + result = "tags_grey.png"; + break; + case Icon.TagsRed: + result = "tags_red.png"; + break; + case Icon.TagBlue: + result = "tag_blue.png"; + break; + case Icon.TagBlueAdd: + result = "tag_blue_add.png"; + break; + case Icon.TagBlueDelete: + result = "tag_blue_delete.png"; + break; + case Icon.TagBlueEdit: + result = "tag_blue_edit.png"; + break; + case Icon.TagGreen: + result = "tag_green.png"; + break; + case Icon.TagOrange: + result = "tag_orange.png"; + break; + case Icon.TagPink: + result = "tag_pink.png"; + break; + case Icon.TagPurple: + result = "tag_purple.png"; + break; + case Icon.TagRed: + result = "tag_red.png"; + break; + case Icon.TagYellow: + result = "tag_yellow.png"; + break; + case Icon.Telephone: + result = "telephone.png"; + break; + case Icon.TelephoneAdd: + result = "telephone_add.png"; + break; + case Icon.TelephoneDelete: + result = "telephone_delete.png"; + break; + case Icon.TelephoneEdit: + result = "telephone_edit.png"; + break; + case Icon.TelephoneError: + result = "telephone_error.png"; + break; + case Icon.TelephoneGo: + result = "telephone_go.png"; + break; + case Icon.TelephoneKey: + result = "telephone_key.png"; + break; + case Icon.TelephoneLink: + result = "telephone_link.png"; + break; + case Icon.TelephoneRed: + result = "telephone_red.png"; + break; + case Icon.Television: + result = "television.png"; + break; + case Icon.TelevisionAdd: + result = "television_add.png"; + break; + case Icon.TelevisionDelete: + result = "television_delete.png"; + break; + case Icon.TelevisionIn: + result = "television_in.png"; + break; + case Icon.TelevisionOff: + result = "television_off.png"; + break; + case Icon.TelevisionOut: + result = "television_out.png"; + break; + case Icon.TelevisionStar: + result = "television_star.png"; + break; + case Icon.Textfield: + result = "textfield.png"; + break; + case Icon.TextfieldAdd: + result = "textfield_add.png"; + break; + case Icon.TextfieldDelete: + result = "textfield_delete.png"; + break; + case Icon.TextfieldKey: + result = "textfield_key.png"; + break; + case Icon.TextfieldRename: + result = "textfield_rename.png"; + break; + case Icon.TextAb: + result = "text_ab.png"; + break; + case Icon.TextAlignCenter: + result = "text_align_center.png"; + break; + case Icon.TextAlignJustify: + result = "text_align_justify.png"; + break; + case Icon.TextAlignLeft: + result = "text_align_left.png"; + break; + case Icon.TextAlignRight: + result = "text_align_right.png"; + break; + case Icon.TextAllcaps: + result = "text_allcaps.png"; + break; + case Icon.TextBold: + result = "text_bold.png"; + break; + case Icon.TextColumns: + result = "text_columns.png"; + break; + case Icon.TextComplete: + result = "text_complete.png"; + break; + case Icon.TextDirection: + result = "text_direction.png"; + break; + case Icon.TextDoubleUnderline: + result = "text_double_underline.png"; + break; + case Icon.TextDropcaps: + result = "text_dropcaps.png"; + break; + case Icon.TextFit: + result = "text_fit.png"; + break; + case Icon.TextFlip: + result = "text_flip.png"; + break; + case Icon.TextFontDefault: + result = "text_font_default.png"; + break; + case Icon.TextHeading1: + result = "text_heading_1.png"; + break; + case Icon.TextHeading2: + result = "text_heading_2.png"; + break; + case Icon.TextHeading3: + result = "text_heading_3.png"; + break; + case Icon.TextHeading4: + result = "text_heading_4.png"; + break; + case Icon.TextHeading5: + result = "text_heading_5.png"; + break; + case Icon.TextHeading6: + result = "text_heading_6.png"; + break; + case Icon.TextHorizontalrule: + result = "text_horizontalrule.png"; + break; + case Icon.TextIndent: + result = "text_indent.png"; + break; + case Icon.TextIndentRemove: + result = "text_indent_remove.png"; + break; + case Icon.TextInverse: + result = "text_inverse.png"; + break; + case Icon.TextItalic: + result = "text_italic.png"; + break; + case Icon.TextKerning: + result = "text_kerning.png"; + break; + case Icon.TextLeftToRight: + result = "text_left_to_right.png"; + break; + case Icon.TextLetterspacing: + result = "text_letterspacing.png"; + break; + case Icon.TextLetterOmega: + result = "text_letter_omega.png"; + break; + case Icon.TextLinespacing: + result = "text_linespacing.png"; + break; + case Icon.TextListBullets: + result = "text_list_bullets.png"; + break; + case Icon.TextListNumbers: + result = "text_list_numbers.png"; + break; + case Icon.TextLowercase: + result = "text_lowercase.png"; + break; + case Icon.TextLowercaseA: + result = "text_lowercase_a.png"; + break; + case Icon.TextMirror: + result = "text_mirror.png"; + break; + case Icon.TextPaddingBottom: + result = "text_padding_bottom.png"; + break; + case Icon.TextPaddingLeft: + result = "text_padding_left.png"; + break; + case Icon.TextPaddingRight: + result = "text_padding_right.png"; + break; + case Icon.TextPaddingTop: + result = "text_padding_top.png"; + break; + case Icon.TextReplace: + result = "text_replace.png"; + break; + case Icon.TextRightToLeft: + result = "text_right_to_left.png"; + break; + case Icon.TextRotate0: + result = "text_rotate_0.png"; + break; + case Icon.TextRotate180: + result = "text_rotate_180.png"; + break; + case Icon.TextRotate270: + result = "text_rotate_270.png"; + break; + case Icon.TextRotate90: + result = "text_rotate_90.png"; + break; + case Icon.TextRuler: + result = "text_ruler.png"; + break; + case Icon.TextShading: + result = "text_shading.png"; + break; + case Icon.TextSignature: + result = "text_signature.png"; + break; + case Icon.TextSmallcaps: + result = "text_smallcaps.png"; + break; + case Icon.TextSpelling: + result = "text_spelling.png"; + break; + case Icon.TextStrikethrough: + result = "text_strikethrough.png"; + break; + case Icon.TextSubscript: + result = "text_subscript.png"; + break; + case Icon.TextSuperscript: + result = "text_superscript.png"; + break; + case Icon.TextTab: + result = "text_tab.png"; + break; + case Icon.TextUnderline: + result = "text_underline.png"; + break; + case Icon.TextUppercase: + result = "text_uppercase.png"; + break; + case Icon.Theme: + result = "theme.png"; + break; + case Icon.ThumbDown: + result = "thumb_down.png"; + break; + case Icon.ThumbUp: + result = "thumb_up.png"; + break; + case Icon.Tick: + result = "tick.png"; + break; + case Icon.Time: + result = "time.png"; + break; + case Icon.TimelineMarker: + result = "timeline_marker.png"; + break; + case Icon.TimeAdd: + result = "time_add.png"; + break; + case Icon.TimeDelete: + result = "time_delete.png"; + break; + case Icon.TimeGo: + result = "time_go.png"; + break; + case Icon.TimeGreen: + result = "time_green.png"; + break; + case Icon.TimeRed: + result = "time_red.png"; + break; + case Icon.Transmit: + result = "transmit.png"; + break; + case Icon.TransmitAdd: + result = "transmit_add.png"; + break; + case Icon.TransmitBlue: + result = "transmit_blue.png"; + break; + case Icon.TransmitDelete: + result = "transmit_delete.png"; + break; + case Icon.TransmitEdit: + result = "transmit_edit.png"; + break; + case Icon.TransmitError: + result = "transmit_error.png"; + break; + case Icon.TransmitGo: + result = "transmit_go.png"; + break; + case Icon.TransmitRed: + result = "transmit_red.png"; + break; + case Icon.Tux: + result = "tux.png"; + break; + case Icon.User: + result = "user.png"; + break; + case Icon.UserAdd: + result = "user_add.png"; + break; + case Icon.UserAlert: + result = "user_alert.png"; + break; + case Icon.UserB: + result = "user_b.png"; + break; + case Icon.UserBrown: + result = "user_brown.png"; + break; + case Icon.UserComment: + result = "user_comment.png"; + break; + case Icon.UserCross: + result = "user_cross.png"; + break; + case Icon.UserDelete: + result = "user_delete.png"; + break; + case Icon.UserEarth: + result = "user_earth.png"; + break; + case Icon.UserEdit: + result = "user_edit.png"; + break; + case Icon.UserFemale: + result = "user_female.png"; + break; + case Icon.UserGo: + result = "user_go.png"; + break; + case Icon.UserGray: + result = "user_gray.png"; + break; + case Icon.UserGrayCool: + result = "user_gray_cool.png"; + break; + case Icon.UserGreen: + result = "user_green.png"; + break; + case Icon.UserHome: + result = "user_home.png"; + break; + case Icon.UserKey: + result = "user_key.png"; + break; + case Icon.UserMagnify: + result = "user_magnify.png"; + break; + case Icon.UserMature: + result = "user_mature.png"; + break; + case Icon.UserOrange: + result = "user_orange.png"; + break; + case Icon.UserRed: + result = "user_red.png"; + break; + case Icon.UserStar: + result = "user_star.png"; + break; + case Icon.UserSuit: + result = "user_suit.png"; + break; + case Icon.UserSuitBlack: + result = "user_suit_black.png"; + break; + case Icon.UserTick: + result = "user_tick.png"; + break; + case Icon.Vcard: + result = "vcard.png"; + break; + case Icon.VcardAdd: + result = "vcard_add.png"; + break; + case Icon.VcardDelete: + result = "vcard_delete.png"; + break; + case Icon.VcardEdit: + result = "vcard_edit.png"; + break; + case Icon.VcardKey: + result = "vcard_key.png"; + break; + case Icon.Vector: + result = "vector.png"; + break; + case Icon.VectorAdd: + result = "vector_add.png"; + break; + case Icon.VectorDelete: + result = "vector_delete.png"; + break; + case Icon.VectorKey: + result = "vector_key.png"; + break; + case Icon.Wand: + result = "wand.png"; + break; + case Icon.WeatherCloud: + result = "weather_cloud.png"; + break; + case Icon.WeatherClouds: + result = "weather_clouds.png"; + break; + case Icon.WeatherCloudy: + result = "weather_cloudy.png"; + break; + case Icon.WeatherCloudyRain: + result = "weather_cloudy_rain.png"; + break; + case Icon.WeatherLightning: + result = "weather_lightning.png"; + break; + case Icon.WeatherRain: + result = "weather_rain.png"; + break; + case Icon.WeatherSnow: + result = "weather_snow.png"; + break; + case Icon.WeatherSun: + result = "weather_sun.png"; + break; + case Icon.Webcam: + result = "webcam.png"; + break; + case Icon.WebcamAdd: + result = "webcam_add.png"; + break; + case Icon.WebcamConnect: + result = "webcam_connect.png"; + break; + case Icon.WebcamDelete: + result = "webcam_delete.png"; + break; + case Icon.WebcamError: + result = "webcam_error.png"; + break; + case Icon.WebcamStart: + result = "webcam_start.png"; + break; + case Icon.WebcamStop: + result = "webcam_stop.png"; + break; + case Icon.World: + result = "world.png"; + break; + case Icon.WorldAdd: + result = "world_add.png"; + break; + case Icon.WorldConnect: + result = "world_connect.png"; + break; + case Icon.WorldDawn: + result = "world_dawn.png"; + break; + case Icon.WorldDelete: + result = "world_delete.png"; + break; + case Icon.WorldEdit: + result = "world_edit.png"; + break; + case Icon.WorldGo: + result = "world_go.png"; + break; + case Icon.WorldKey: + result = "world_key.png"; + break; + case Icon.WorldLink: + result = "world_link.png"; + break; + case Icon.WorldNight: + result = "world_night.png"; + break; + case Icon.WorldOrbit: + result = "world_orbit.png"; + break; + case Icon.Wrench: + result = "wrench.png"; + break; + case Icon.WrenchOrange: + result = "wrench_orange.png"; + break; + case Icon.Xhtml: + result = "xhtml.png"; + break; + case Icon.XhtmlAdd: + result = "xhtml_add.png"; + break; + case Icon.XhtmlDelete: + result = "xhtml_delete.png"; + break; + case Icon.XhtmlError: + result = "xhtml_error.png"; + break; + case Icon.XhtmlGo: + result = "xhtml_go.png"; + break; + case Icon.XhtmlValid: + result = "xhtml_valid.png"; + break; + case Icon.Zoom: + result = "zoom.png"; + break; + case Icon.ZoomIn: + result = "zoom_in.png"; + break; + case Icon.ZoomOut: + result = "zoom_out.png"; + break; + case Icon.SystemClose: + result = "system_close.gif"; + break; + case Icon.SystemNew: + result = "system_new.gif"; + break; + case Icon.SystemSave: + result = "system_save.gif"; + break; + case Icon.SystemSaveClose: + result = "system_saveclose.gif"; + break; + case Icon.SystemSaveNew: + result = "system_savenew.gif"; + break; + case Icon.SystemSearch: + result = "system_search.gif"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/IconAlign.cs b/FineUI_v6/FineUI/Business/Enums/IconAlign.cs new file mode 100644 index 0000000..e1b18eb --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/IconAlign.cs @@ -0,0 +1,85 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: IconAlign.cs + * CreatedOn: 2011-05-15 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 按钮上图标的摆放位置 + /// + public enum IconAlign + { + /// + /// 靠上 + /// + Top, + /// + /// 靠右 + /// + Right, + /// + /// 靠下 + /// + Bottom, + /// + /// 靠左(默认值) + /// + Left + } + + /// + /// 图标摆放位置的名称 + /// + internal static class IconAlignHelper + { + public static string GetName(IconAlign type) + { + string result = String.Empty; + + switch (type) + { + case IconAlign.Top: + result = "top"; + break; + case IconAlign.Left: + result = "left"; + break; + case IconAlign.Bottom: + result = "bottom"; + break; + case IconAlign.Right: + result = "right"; + break; + default: + result = "left"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/IconHelper.cs b/FineUI_v6/FineUI/Business/Enums/IconHelper.cs new file mode 100644 index 0000000..af6244b --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/IconHelper.cs @@ -0,0 +1,120 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: IconHelper.cs + * CreatedOn: 2012-05-26 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Web.UI; + +namespace FineUI +{ + public static partial class IconHelper + { + /// + /// 获得图标的服务器地址 + /// + /// 图标 + /// 图标的服务器地址 + public static string GetIconUrl(Icon icon) + { + //return ResourceHelper.GetWebResourceUrl(String.Format("FineUI.res.icon.{0}", IconHelper.GetName(icon))); + if (icon == Icon.None) + { + return String.Empty; + } + else + { + return String.Format("{0}/{1}", GlobalConfig.GetIconBasePath(), IconHelper.GetName(icon)); + } + } + + /// + /// 获取客户端可用的图标URL地址 + /// + /// 图标 + /// URL地址 + public static string GetResolvedIconUrl(Icon icon) + { + return GetResolvedIconUrl(icon, String.Empty); + } + + /// + /// 获取客户端可用的图标URL地址 + /// + /// 图标 + /// 图标地址 + /// URL地址 + public static string GetResolvedIconUrl(Icon icon, string iconUrl) + { + string url = iconUrl; + if (String.IsNullOrEmpty(url)) + { + if (icon != Icon.None) + { + url = IconHelper.GetIconUrl(icon); + } + } + if (String.IsNullOrEmpty(url)) + { + return String.Empty; + } + else + { + Page page = HttpContext.Current.Handler as Page; + return page.ResolveUrl(url); + } + } + + /// + /// 将图标字符串转换为图标 + /// + /// 图标字符串 + /// 是否忽略大小写 + /// 图标 + public static Icon String2Icon(string text, bool ignoreCase) + { + if (Enum.IsDefined(typeof(Icon), text)) + { + return (Icon)Enum.Parse(typeof(Icon), text, ignoreCase); + } + else + { + return Icon.None; + } + } + + /// + /// 将图标转换为图标字符串 + /// + /// 图标 + /// 图标字符串 + public static String Icon2String(Icon type) + { + return type.ToString(); + } + + + } +} diff --git a/FineUI_v6/FineUI/Business/Enums/LabelAlign.cs b/FineUI_v6/FineUI/Business/Enums/LabelAlign.cs new file mode 100644 index 0000000..a1caaba --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/LabelAlign.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表单中标签的排列位置 + /// + public enum LabelAlign + { + /// + /// 未定义 + /// + Undefined, + /// + /// 靠左 + /// + Left, + /// + /// 靠右 + /// + Right, + /// + /// 靠上 + /// + Top + } + + /// + /// 表单中标签的排列位置名称 + /// + internal static class LabelAlignHelper + { + public static string GetName(LabelAlign type) + { + string result = String.Empty; + + switch (type) + { + case LabelAlign.Undefined: + result = "left"; + break; + case LabelAlign.Left: + result = "left"; + break; + case LabelAlign.Right: + result = "right"; + break; + case LabelAlign.Top: + result = "top"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/Language.cs b/FineUI_v6/FineUI/Business/Enums/Language.cs new file mode 100644 index 0000000..03f2951 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/Language.cs @@ -0,0 +1,265 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: LanguageType.cs + * CreatedOn: 2008-08-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 语言 + /// + public enum Language + { + /// + /// 英文 + /// + EN, + /// + /// 中文(默认值) + /// + ZH_CN, + /// + /// 中文(台湾) + /// + ZH_TW, + /// + /// 葡萄牙文(巴西) + /// + PT_BR, + /// + /// 土耳其文 + /// + TR, + /// + /// 俄文 + /// + RU + + //AF, + //BG, + //CA, + //CS, + //DA, + //DE, + //EL_GR, + + //EN_GB, + //ES, + //FA, + //FI, + //FR, + //FR_CA, + //GR, + //HE, + //HR, + //HU, + //ID, + //IT, + //JA, + //KO, + //LT, + //LV, + //MK, + //NL, + //NO_NB, + //NO_NN, + //PL, + //PT, + + //PT_PT, + //RO, + //RU, + //SK, + //SL, + //SR, + //SR_RS, + //SV_SE, + //TH, + //UKR, + //VN + + } + + /// + /// 语言的类型名称 + /// + internal static class LanguageHelper + { + public static string GetName(Language type) + { + string result = String.Empty; + + switch (type) + { + case Language.EN: + result = "en"; + break; + case Language.ZH_CN: + result = "zh_CN"; + break; + case Language.ZH_TW: + result = "zh_TW"; + break; + case Language.PT_BR: + result = "pt_BR"; + break; + case Language.TR: + result = "tr"; + break; + case Language.RU: + result = "ru"; + break; + + //case Language.AF: + // result = "af"; + // break; + //case Language.BG: + // result = "bg"; + // break; + //case Language.CA: + // result = "ca"; + // break; + //case Language.CS: + // result = "cs"; + // break; + //case Language.DA: + // result = "da"; + // break; + //case Language.DE: + // result = "de"; + // break; + //case Language.EL_GR: + // result = "el_GR"; + // break; + + //case Language.EN_GB: + // result = "en_GB"; + // break; + //case Language.ES: + // result = "es"; + // break; + //case Language.FA: + // result = "fa"; + // break; + //case Language.FI: + // result = "fi"; + // break; + //case Language.FR: + // result = "fr"; + // break; + //case Language.FR_CA: + // result = "fr_CA"; + // break; + //case Language.GR: + // result = "gr"; + // break; + //case Language.HE: + // result = "he"; + // break; + //case Language.HR: + // result = "hr"; + // break; + //case Language.HU: + // result = "hu"; + // break; + //case Language.ID: + // result = "id"; + // break; + //case Language.IT: + // result = "it"; + // break; + //case Language.JA: + // result = "ja"; + // break; + //case Language.KO: + // result = "ko"; + // break; + //case Language.LT: + // result = "lt"; + // break; + //case Language.LV: + // result = "lv"; + // break; + //case Language.MK: + // result = "mk"; + // break; + //case Language.NL: + // result = "nl"; + // break; + //case Language.NO_NB: + // result = "no_NB"; + // break; + //case Language.NO_NN: + // result = "no_NN"; + // break; + //case Language.PL: + // result = "pl"; + // break; + //case Language.PT: + // result = "pt"; + // break; + + //case Language.PT_PT: + // result = "pt_PT"; + // break; + //case Language.RO: + // result = "ro"; + // break; + //case Language.RU: + // result = "ru"; + // break; + //case Language.SK: + // result = "sk"; + // break; + //case Language.SL: + // result = "sl"; + // break; + //case Language.SR: + // result = "sr"; + // break; + //case Language.SR_RS: + // result = "sr_RS"; + // break; + //case Language.SV_SE: + // result = "sv_SE"; + // break; + //case Language.TH: + // result = "th"; + // break; + + //case Language.UKR: + // result = "ukr"; + // break; + //case Language.VN: + // result = "vn"; + // break; + + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/Layout.cs b/FineUI_v6/FineUI/Business/Enums/Layout.cs new file mode 100644 index 0000000..a958005 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/Layout.cs @@ -0,0 +1,138 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: LayoutType.cs + * CreatedOn: 2008-06-11 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 布局类型 + /// + public enum Layout + { + /// + /// 容器布局(默认值) + /// + Container, + /// + /// 锚点布局 + /// + Anchor, + /// + /// 区域布局 + /// + Region, + /// + /// 自适应布局(用于只有一个子控件的情况) + /// + Fit, + /// + /// 手风琴布局(只用于Accordion控件) + /// + Accordion, + ///// + ///// 表单布局(用于SimpleForm和Form控件) + ///// + //Form, + /// + /// 卡片布局(只用于TabStrip控件) + /// + Card, + /// + /// 列布局 + /// + Column, + /// + /// 绝对定位布局 + /// + Absolute, + /// + /// 表格布局 + /// + Table, + /// + /// 垂直盒子布局 + /// + VBox, + /// + /// 水平盒子布局 + /// + HBox + } + + /// + /// 布局类型名称 + /// + internal static class LayoutHelper + { + public static string GetName(Layout type) + { + string result = String.Empty; + + switch (type) + { + case Layout.Container: + result = "container"; + break; + case Layout.Accordion: + result = "accordion"; + break; + case Layout.Anchor: + result = "anchor"; + break; + case Layout.Region: + result = "border"; + break; + case Layout.Card: + result = "card"; + break; + case Layout.Column: + result = "column"; + break; + case Layout.Fit: + result = "fit"; + break; + //case Layout.Form: + // result = "form"; + // break; + case Layout.Absolute: + result = "absolute"; + break; + case Layout.Table: + result = "table"; + break; + case Layout.VBox: + result = "vbox"; + break; + case Layout.HBox: + result = "hbox"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/MessageBoxIcon.cs b/FineUI_v6/FineUI/Business/Enums/MessageBoxIcon.cs new file mode 100644 index 0000000..1d8c9be --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/MessageBoxIcon.cs @@ -0,0 +1,110 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 消息框图标类型 + /// + public enum MessageBoxIcon + { + /// + /// 信息(默认值) + /// + Information, + /// + /// 警告 + /// + Warning, + /// + /// 问题 + /// + Question, + /// + /// 错误 + /// + Error + } + + /// + /// 消息框图标类型名称 + /// + internal static class MessageBoxIconHelper + { + public static string GetName(MessageBoxIcon type) + { + string result = String.Empty; + + switch (type) + { + case MessageBoxIcon.Information: + //result = "ext-mb-info"; + result = "Ext.MessageBox.INFO"; + break; + case MessageBoxIcon.Warning: + //result = "ext-mb-warning"; + result = "Ext.MessageBox.WARNING"; + break; + case MessageBoxIcon.Question: + //result = "ext-mb-question"; + result = "Ext.MessageBox.QUESTION"; + break; + case MessageBoxIcon.Error: + //result = "ext-mb-error"; + result = "Ext.MessageBox.ERROR"; + break; + } + + return result; + } + + + public static string GetShortName(MessageBoxIcon type) + { + string result = String.Empty; + + switch (type) + { + case MessageBoxIcon.Information: + result = "info"; + break; + case MessageBoxIcon.Warning: + result = "warning"; + break; + case MessageBoxIcon.Question: + result = "question"; + break; + case MessageBoxIcon.Error: + result = "error"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/MessageTarget.cs b/FineUI_v6/FineUI/Business/Enums/MessageTarget.cs new file mode 100644 index 0000000..60c8218 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/MessageTarget.cs @@ -0,0 +1,89 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表单客户端验证提示消息的类型 + /// + public enum MessageTarget + { + /// + /// 浮动提示(默认值) + /// + Qtip, + /// + /// 使用HTML标签的title属性 + /// + Title, + /// + /// 在字段下面通过一个div层来显示消息 + /// + Under, + /// + /// 在字段右侧显示一个错误图标 + /// + Side, + /// + /// 不显示错误信息 + /// + None + } + + /// + /// 提示消息的类型名称 + /// + internal static class MessageTargetHelper + { + public static string GetName(MessageTarget type) + { + string result = String.Empty; + + switch (type) + { + case MessageTarget.Qtip: + result = "qtip"; + break; + case MessageTarget.Title: + result = "title"; + break; + case MessageTarget.Under: + result = "under"; + break; + case MessageTarget.Side: + result = "side"; + break; + case MessageTarget.None: + result = "none"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/Operator.cs b/FineUI_v6/FineUI/Business/Enums/Operator.cs new file mode 100644 index 0000000..7156e5e --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/Operator.cs @@ -0,0 +1,96 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Operator.cs + * CreatedOn: 2008-07-08 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 操作符(用于表单控件的客户端验证) + /// + public enum Operator + { + /// + /// 等于(默认值) + /// + Equal, + /// + /// 大于 + /// + GreaterThan, + /// + /// 大于等于 + /// + GreaterThanEqual, + /// + /// 小于 + /// + LessThan, + /// + /// 小于等于 + /// + LessThanEqual, + /// + /// 不等于 + /// + NotEqual + } + + /// + /// 操作符名称 + /// + internal static class OperatorHelper + { + public static string GetName(Operator type) + { + string result = String.Empty; + + switch (type) + { + case Operator.Equal: + result = "=="; + break; + case Operator.GreaterThan: + result = ">"; + break; + case Operator.GreaterThanEqual: + result = ">="; + break; + case Operator.LessThan: + result = "<"; + break; + case Operator.LessThanEqual: + result = "<="; + break; + case Operator.NotEqual: + result = "!="; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/Position.cs b/FineUI_v6/FineUI/Business/Enums/Position.cs new file mode 100644 index 0000000..f81eaab --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/Position.cs @@ -0,0 +1,90 @@ + + +#region Comment + +/* + * Project: FineUI + * + * FileName: PositionType.cs + * CreatedOn: 2008-06-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// Region控件所在RegionPanel中的位置 + /// + public enum Position + { + /// + /// 上方 + /// + Top, + /// + /// 底部 + /// + Bottom, + /// + /// 左侧 + /// + Left, + /// + /// 右侧 + /// + Right, + /// + /// 中部(默认值) + /// + Center + } + + /// + /// 布局类型名称 + /// + internal static class PositionHelper + { + public static string GetName(Position type) + { + string result = String.Empty; + + switch (type) + { + case Position.Top: + result = "north"; + break; + case Position.Bottom: + result = "south"; + break; + case Position.Left: + result = "west"; + break; + case Position.Right: + result = "east"; + break; + case Position.Center: + result = "center"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/RegexPattern.cs b/FineUI_v6/FineUI/Business/Enums/RegexPattern.cs new file mode 100644 index 0000000..0ce7b4d --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/RegexPattern.cs @@ -0,0 +1,160 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: RegexPattern.cs + * CreatedOn: 2008-04-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + + /// + /// 正则表达式常用类型(用于表单控件的客户端验证) + /// + public enum RegexPattern + { + /// + /// 无(默认值) + /// + None, + /// + /// 数字 + /// + NUMBER, + /// + /// 字母 + /// + ALPHA, + /// + /// 字母数字 + /// + ALPHA_NUMERIC, + /// + /// 字母下划线 + /// + ALPHA_UNDERLINE, + /// + /// 字母数字下划线 + /// + ALPHA_NUMERIC_UNDERLINE, + /// + /// 小写字母 + /// + ALPHA_LOWER_CASE, + /// + /// 大写字母 + /// + ALPHA_UPPER_CASE, + /// + /// 电子邮箱 + /// + EMAIL, + /// + /// 网址 + /// + URL, + /// + /// 邮政编码(中华人民共和国) + /// + POSTAL_CODE, + /// + /// IP地址 + /// + IP_ADDRESS, + /// + /// 身份证(中华人民共和国) + /// + IDENTITY_CARD + } + + /// + /// 正则表达式常用类型 内容 + /// + internal static class RegexPatternHelper + { + private const string NUMBER = "^[0-9]+$"; + private const string ALPHA = "^[a-zA-Z]+$"; + private const string ALPHA_NUMERIC = "^[a-zA-Z0-9]+$"; + private const string ALPHA_UNDERLINE = "^[a-zA-Z_]+$"; + private const string ALPHA_NUMERIC_UNDERLINE = "^[a-zA-Z0-9_]+$"; + private const string ALPHA_LOWER_CASE = @"^[a-z]+$"; + private const string ALPHA_UPPER_CASE = @"^[A-Z]+$"; + private const string EMAIL = @"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"; + private const string URL = @"^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$"; + private const string POSTAL_CODE = @"^\d{6}$"; + private const string IP_ADDRESS = @"^(\d+)\.(\d+)\.(\d+)\.(\d+)$"; + private const string IDENTITY_CARD = @"^(\d{15}|\d{17}[x0-9])$"; + + public static string GetRegexValue(RegexPattern type) + { + string result = String.Empty; + + switch (type) + { + case RegexPattern.None: + result = String.Empty; + break; + case RegexPattern.NUMBER: + result = NUMBER; + break; + case RegexPattern.ALPHA: + result = ALPHA; + break; + case RegexPattern.ALPHA_NUMERIC: + result = ALPHA_NUMERIC; + break; + case RegexPattern.ALPHA_UNDERLINE: + result = ALPHA_UNDERLINE; + break; + case RegexPattern.ALPHA_NUMERIC_UNDERLINE: + result = ALPHA_NUMERIC_UNDERLINE; + break; + case RegexPattern.ALPHA_LOWER_CASE: + result = ALPHA_LOWER_CASE; + break; + case RegexPattern.ALPHA_UPPER_CASE: + result = ALPHA_UPPER_CASE; + break; + case RegexPattern.EMAIL: + result = EMAIL; + break; + case RegexPattern.URL: + result = URL; + break; + case RegexPattern.POSTAL_CODE: + result = POSTAL_CODE; + break; + case RegexPattern.IP_ADDRESS: + result = IP_ADDRESS; + break; + case RegexPattern.IDENTITY_CARD: + result = IDENTITY_CARD; + break; + } + + return result; + } + } + +} diff --git a/FineUI_v6/FineUI/Business/Enums/SummaryPosition.cs b/FineUI_v6/FineUI/Business/Enums/SummaryPosition.cs new file mode 100644 index 0000000..908bcfe --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/SummaryPosition.cs @@ -0,0 +1,76 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: SummaryPosition.cs + * CreatedOn: 2013-10-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 表格合计行的位置 + /// + public enum SummaryPosition + { + /// + /// 紧跟数据行(默认值) + /// + Flow, + /// + /// 表格顶部 + /// + Top, + /// + /// 表格底部 + /// + Bottom + } + + /// + /// 表格合计行的位置名称 + /// + internal static class SummaryPositionHelper + { + public static string GetName(SummaryPosition type) + { + string result = String.Empty; + + switch (type) + { + case SummaryPosition.Flow: + result = ""; + break; + case SummaryPosition.Top: + result = "top"; + break; + case SummaryPosition.Bottom: + result = "bottom"; + break; + } + + return result; + } + } + +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/TabPosition.cs b/FineUI_v6/FineUI/Business/Enums/TabPosition.cs new file mode 100644 index 0000000..4e39209 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/TabPosition.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// Tab标签的显示位置 + /// + public enum TabPosition + { + /// + /// 顶部(默认值) + /// + Top, + /// + /// 底部 + /// + Bottom, + /// + /// 左侧 + /// + Left, + /// + /// 右侧 + /// + Right + + } + + /// + /// Tab显示的位置名称 + /// + internal static class TabPositionHelper + { + public static string GetName(TabPosition type) + { + string result = String.Empty; + + switch (type) + { + case TabPosition.Top: + result = "top"; + break; + case TabPosition.Bottom: + result = "bottom"; + break; + case TabPosition.Left: + result = "left"; + break; + case TabPosition.Right: + result = "right"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/Target.cs b/FineUI_v6/FineUI/Business/Enums/Target.cs new file mode 100644 index 0000000..453ae16 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/Target.cs @@ -0,0 +1,100 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Target.cs + * CreatedOn: 2010-01-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 窗体以及对话框的显示位置 + /// + public enum Target + { + /// + /// 当前页面(默认值) + /// + Self, + /// + /// 父页面 + /// + Parent, + /// + /// 最外层页面 + /// + Top + } + + /// + /// Alert,Confirm,Window显示的位置 + /// + internal static class TargetHelper + { + public static string GetName(Target type) + { + string result = String.Empty; + + switch (type) + { + case Target.Self: + result = "_self"; + break; + case Target.Parent: + result = "_parent"; + break; + case Target.Top: + result = "_top"; + break; + } + + return result; + } + + /// + /// Get target name used inside JavaScript code. + /// + /// + /// + public static string GetScriptName(Target type) + { + string result = String.Empty; + + switch (type) + { + case Target.Self: + result = "window"; + break; + case Target.Parent: + result = "parent"; + break; + case Target.Top: + result = "top"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/TextAlign.cs b/FineUI_v6/FineUI/Business/Enums/TextAlign.cs new file mode 100644 index 0000000..1487f94 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/TextAlign.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 文本排列位置 + /// + public enum TextAlign + { + /// + /// 未定义 + /// + Undefined, + /// + /// 靠左排列 + /// + Left, + /// + /// 居中排列 + /// + Center, + /// + /// 靠右排列 + /// + Right + } + + /// + /// 文本排列位置名称 + /// + internal static class TextAlignName + { + public static string GetName(TextAlign type) + { + string result = String.Empty; + + switch (type) + { + case TextAlign.Undefined: + result = "left"; + break; + case TextAlign.Left: + result = "left"; + break; + case TextAlign.Center: + result = "center"; + break; + case TextAlign.Right: + result = "right"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/TextMode.cs b/FineUI_v6/FineUI/Business/Enums/TextMode.cs new file mode 100644 index 0000000..8ef06ee --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/TextMode.cs @@ -0,0 +1,68 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 文本框类型 + /// + public enum TextMode + { + /// + /// 普通文本框(默认值) + /// + Text, + /// + /// 密码输入框 + /// + Password + } + + /// + /// 文本框类型名称 + /// + internal static class TextModeHelper + { + public static string GetName(TextMode type) + { + string result = String.Empty; + + switch (type) + { + case TextMode.Text: + result = "text"; + break; + case TextMode.Password: + result = "password"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/Theme.cs b/FineUI_v6/FineUI/Business/Enums/Theme.cs new file mode 100644 index 0000000..fa8ff17 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/Theme.cs @@ -0,0 +1,89 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ThemeType.cs + * CreatedOn: 2008-08-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 主题 + /// + public enum Theme + { + /// + /// 蓝色经典主题 + /// + Blue, + /// + /// 灰色主题 + /// + Gray, + /// + /// 海王星主题(默认值) + /// + Neptune, + /// + /// 海卫一主题 + /// + Triton, + /// + /// 小清新主题 + /// + Crisp + } + + /// + /// 主题的类型名称 + /// + internal static class ThemeHelper + { + public static string GetName(Theme type) + { + string result = String.Empty; + + switch (type) + { + case Theme.Blue: + result = "classic"; + break; + case Theme.Gray: + result = "gray"; + break; + case Theme.Triton: + result = "triton"; + break; + case Theme.Neptune: + result = "neptune"; + break; + case Theme.Crisp: + result = "crisp"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/ToolTipType.cs b/FineUI_v6/FineUI/Business/Enums/ToolTipType.cs new file mode 100644 index 0000000..68bcaaf --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/ToolTipType.cs @@ -0,0 +1,68 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 提示框的类型 + /// + public enum ToolTipType + { + /// + /// Extjs的浮动提示框(默认值) + /// + Qtip, + /// + /// HTML标签的title属性 + /// + Title + } + + /// + /// 提示框的类型名称 + /// + internal static class ToolTipTypeName + { + public static string GetName(ToolTipType type) + { + string result = String.Empty; + + switch (type) + { + case ToolTipType.Qtip: + result = "qtip"; + break; + case ToolTipType.Title: + result = "title"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/ToolbarAlign.cs b/FineUI_v6/FineUI/Business/Enums/ToolbarAlign.cs new file mode 100644 index 0000000..f053af3 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/ToolbarAlign.cs @@ -0,0 +1,74 @@ +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarAlign.cs + * CreatedOn: 2013-12-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 工具栏的排列位置 + /// + public enum ToolbarAlign + { + /// + /// 靠右 + /// + Right, + /// + /// 靠左(默认值) + /// + Left, + /// + /// 居中 + /// + Center + } + + /// + /// 工具栏的排列位置名称 + /// + internal static class ToolbarAlignHelper + { + public static string GetName(ToolbarAlign type) + { + string result = String.Empty; + + switch (type) + { + case ToolbarAlign.Left: + result = "start"; + break; + case ToolbarAlign.Right: + result = "end"; + break; + case ToolbarAlign.Center: + result = "center"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/ToolbarPosition.cs b/FineUI_v6/FineUI/Business/Enums/ToolbarPosition.cs new file mode 100644 index 0000000..d607091 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/ToolbarPosition.cs @@ -0,0 +1,122 @@ + + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarPosition.cs + * CreatedOn: 2008-05-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 工具条的位置 + /// + public enum ToolbarPosition + { + /// + /// 顶部(默认值) + /// + Top, + /// + /// 底部 + /// + Bottom, + ///// + ///// 页脚 + ///// + //Footer, + /// + /// 左侧 + /// + Left, + /// + /// 右侧 + /// + Right + ///// + ///// 底部按钮 + ///// + //Buttons + } + + /// + /// 工具条的位置名称 + /// + internal static class ToolbarPositionHelper + { + public static string GetName(ToolbarPosition type) + { + string result = String.Empty; + + switch (type) + { + case ToolbarPosition.Top: + result = "tbar"; + break; + case ToolbarPosition.Bottom: + result = "bbar"; + break; + //case ToolbarPosition.Footer: + // result = "fbar"; + // break; + case ToolbarPosition.Left: + result = "lbar"; + break; + case ToolbarPosition.Right: + result = "rbar"; + break; + //case ToolbarPosition.Buttons: + // result = "buttons"; + // break; + } + + return result; + } + + + public static string GetExtName(ToolbarPosition type) + { + string result = String.Empty; + + switch (type) + { + case ToolbarPosition.Top: + result = "top"; + break; + case ToolbarPosition.Bottom: + result = "bottom"; + break; + case ToolbarPosition.Left: + result = "left"; + break; + case ToolbarPosition.Right: + result = "right"; + break; + } + + return result; + } + } + +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/TriggerIcon.cs b/FineUI_v6/FineUI/Business/Enums/TriggerIcon.cs new file mode 100644 index 0000000..112e82e --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/TriggerIcon.cs @@ -0,0 +1,81 @@ + + +#region Comment + +/* + * Project: FineUI + * + * FileName: TriggerIconType.cs + * CreatedOn: 2008-06-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 触发器输入框右侧图标的类型 + /// + public enum TriggerIcon + { + /// + /// 无(默认值) + /// + None, + /// + /// 搜索图标 + /// + Search, + /// + /// 清空图标 + /// + Clear, + /// + /// 日期图标 + /// + Date + } + + /// + /// 系统图标名称 + /// + internal static class TriggerIconHelper + { + public static string GetName(TriggerIcon type) + { + string result = String.Empty; + + switch (type) + { + case TriggerIcon.Search: + result = "x-form-search-trigger"; + break; + case TriggerIcon.Clear: + result = "x-form-clear-trigger"; + break; + case TriggerIcon.Date: + result = "x-form-date-trigger"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/VerticalAlign.cs b/FineUI_v6/FineUI/Business/Enums/VerticalAlign.cs new file mode 100644 index 0000000..da90317 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/VerticalAlign.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 垂直排列位置 + /// + public enum VerticalAlign + { + /// + /// 居中排列(默认值) + /// + Middle, + /// + /// 靠上排列 + /// + Top, + /// + /// 靠下排列 + /// + Bottom + } + + /// + /// 垂直排列位置名称 + /// + internal static class VerticalAlignName + { + public static string GetName(VerticalAlign type) + { + string result = String.Empty; + + switch (type) + { + case VerticalAlign.Middle: + result = "middle"; + break; + case VerticalAlign.Top: + result = "top"; + break; + case VerticalAlign.Bottom: + result = "bottom"; + break; + } + + return result; + } + } +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/Enums/WindowPosition.cs b/FineUI_v6/FineUI/Business/Enums/WindowPosition.cs new file mode 100644 index 0000000..49b910e --- /dev/null +++ b/FineUI_v6/FineUI/Business/Enums/WindowPosition.cs @@ -0,0 +1,46 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: WindowPosition.cs + * CreatedOn: 2008-06-17 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// + /// 窗体的初始显示位置 + /// + public enum WindowPosition + { + /// + /// 页面的中部 + /// + Center, + /// + /// 页面的黄金分割点处(默认值) + /// + GoldenSection + } + +} \ No newline at end of file diff --git a/FineUI_v6/FineUI/Business/JsHelper/JsArrayBuilder.cs b/FineUI_v6/FineUI/Business/JsHelper/JsArrayBuilder.cs new file mode 100644 index 0000000..af33496 --- /dev/null +++ b/FineUI_v6/FineUI/Business/JsHelper/JsArrayBuilder.cs @@ -0,0 +1,190 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: JsArrayBuilder.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.Specialized; + +namespace FineUI +{ + /// + /// 创建Javascript数组参数的帮助类 + /// + public class JsArrayBuilder + { + #region fields + + private List _properties = new List(); + + /// + /// 内部保存的数据 + /// + public List Properties + { + get { return _properties; } + set { _properties = value; } + } + + #endregion + + #region Constructor + + /// + /// 构造函数 + /// + public JsArrayBuilder() + { + } + + /// + /// 构造函数 + /// + /// 初始属性值 + public JsArrayBuilder(object propertyValue) + { + AddProperty(propertyValue, false); + } + + /// + /// 构造函数 + /// + /// 初始属性值 + /// 是否保持原样 + public JsArrayBuilder(object propertyValue, bool persistOriginal) + { + AddProperty(propertyValue, persistOriginal); + } + + #endregion + + #region RemoveProperty + + /// + /// 删除属性 + /// + /// 属性值 + public void RemoveProperty(string propertyValue) + { + if (_properties.Contains(propertyValue)) + { + _properties.Remove(propertyValue); + } + } + + #endregion + + #region AddProperty + + /// + /// 添加属性 + /// + /// 属性值 + public void AddProperty(object propertyValue) + { + AddProperty(propertyValue, false); + } + + /// + /// 添加属性 + /// + /// 属性值 + /// 是否保持原样 + public void AddProperty(object propertyValue, bool persistOriginal) + { + if (persistOriginal) + { + _properties.Add(propertyValue.ToString()); + } + else + { + if (propertyValue is string) + { + _properties.Add(JsHelper.Enquote(propertyValue.ToString())); + } + else if (propertyValue is bool) + { + _properties.Add(propertyValue.ToString().ToLower()); + } + else if (propertyValue is float || propertyValue is double) + { + _properties.Add(JsHelper.NumberToString(propertyValue)); + } + else + { + _properties.Add(propertyValue.ToString()); + } + } + } + + #endregion + + #region bars["bottom"] + + /// + /// 将整个数组中元素顺序反转 + /// + public void Reverse() + { + _properties.Reverse(); + } + + #endregion + + #region Count + + /// + /// 已经添加属性的个数 + /// + public int Count + { + get + { + return _properties.Count; + } + } + + #endregion + + #region override ToString + + /// + /// 返回对象的JSON字符串形式 + /// + /// 对象的JSON形式 + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + + foreach (string item in _properties) + { + sb.AppendFormat("{0},", item); + } + + return "[" + sb.ToString().TrimEnd(',') + "]"; + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/JsHelper/JsHelper.cs b/FineUI_v6/FineUI/Business/JsHelper/JsHelper.cs new file mode 100644 index 0000000..7ae62d5 --- /dev/null +++ b/FineUI_v6/FineUI/Business/JsHelper/JsHelper.cs @@ -0,0 +1,297 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Globalization; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + + +namespace FineUI +{ + /// + /// JavaScript帮助类 + /// + public class JsHelper + { + + #region GetFunction GetDeferScript + + /// + /// 获取一段完成的JavaScript函数 + /// + /// 函数主体 + /// 函数参数 + /// 字符串表示的JavaScript函数 + public static string GetFunction(string jsContent, params string[] funParameters) + { + StringBuilder sb = new StringBuilder(); + sb.Append("function("); + if (funParameters.Length > 0) + { + for (int i = 0, count = funParameters.Length; i < count; i++) + { + sb.Append(funParameters[i]); + if (i != count - 1) + { + sb.Append(","); + } + } + } + sb.Append("){"); + sb.Append(jsContent); + sb.Append("}"); + return sb.ToString(); + } + + /// + /// 获取延迟执行JavaScript脚本的字符串 + /// + /// 需要执行的脚本内容 + /// 延迟毫秒数 + /// 延迟执行的客户端脚本 + public static string GetDeferScript(string jsContent, int milliseconds) + { + return String.Format("Ext.defer({0},{1});", GetFunction(jsContent), milliseconds); + } + + /// + /// 获取延迟执行JavaScript脚本的字符串 + /// + /// 需要执行的脚本内容 + /// 延迟毫秒数 + /// 执行脚本时的函数上下文 + /// 延迟执行的客户端脚本 + public static string GetDeferScript(string jsContent, int milliseconds, string scope) + { + return String.Format("Ext.defer({0},{1},{2});", GetFunction(jsContent), milliseconds, scope); + } + #endregion + + #region Enquote + + ///// + ///// Produce a string in double quotes with backslash sequences in all the right places. + ///// + ///// 常用的用法:String.Format("{0}.setValue({1});", ClientJavascriptID, JsHelper.Enquote(Text)) + ///// 大部分情况下,可以使用 GetJsString 函数代替此函数 + ///// 此函数返回的是双引号括起来的字符串,用来作为JSON属性比较合适,一般用在OnAjaxPreRender + ///// 但是作为HTML属性时,由于HTML属性本身就是双引号括起来的,就容易引起冲突 + ///// + ///// + ///// A String + ///// A String correctly formatted for insertion in a JSON message. + + /// + /// 返回的是单引号括起来的字符串,用来作为JSON属性比较合适 + /// + /// 源字符串 + /// 单引号括起来的字符串 + public static string Enquote(string s) + { + /* + string jsonString = new JValue(s).ToString(Formatting.None); + + // The browser HTML parser will see the within the string and it will interpret it as the end of the script element. + // http://www.xiaoxiaozi.com/2010/02/24/1708/ + // http://stackoverflow.com/questions/1659749/script-tag-in-javascript-string + jsonString = jsonString.Replace("", @"<\/script>"); + + return jsonString; + */ + + if (s == null || s.Length == 0) + { + return "''"; + } + + char c; + StringBuilder sb = new StringBuilder(); + + sb.Append('\''); + for (int i = 0, len = s.Length; i < len; i++) + { + c = s[i]; + if ((c == '\\') || (c == '\'') || (c == '>')) + { + sb.Append('\\'); + sb.Append(c); + } + else if (c == '\b') + { + sb.Append("\\b"); + } + else if (c == '\t') + { + sb.Append("\\t"); + } + else if (c == '\n') + { + sb.Append("\\n"); + } + else if (c == '\f') + { + sb.Append("\\f"); + } + else if (c == '\r') + { + sb.Append("\\r"); + } + else + { + sb.Append(c); + /* + if (c < ' ') + { + //t = "000" + Integer.toHexString(c); + string tmp = new string(c, 1); + string t = "000" + int.Parse(tmp, System.Globalization.NumberStyles.HexNumber); + sb.Append("\\u" + t.Substring(t.Length - 4)); + } + else + { + sb.Append(c); + } + */ + } + } + sb.Append('\''); + + // The browser HTML parser will see the within the string and it will interpret it as the end of the script element. + // http://www.xiaoxiaozi.com/2010/02/24/1708/ + // http://stackoverflow.com/questions/1659749/script-tag-in-javascript-string + + return sb.ToString().Replace("", @"<\/script>"); + } + + /// + /// 将包含JavaScript代码块的字符串转换为可以使用的客户端脚本 + /// + /// 包含JavaScript代码块的字符串 + /// 转换后的客户端脚本 + public static string EnquoteWithScriptTag(string text) + { + if (text.Contains("<script>")) + { + text = text.Replace("<script>", ""); + } + + string[] splits = text.Split(new string[] { "" }, StringSplitOptions.None); + if (subSplits.Length == 2) + { + sb.AppendFormat("+{0}+", subSplits[0]); + sb.Append(Enquote(subSplits[1])); + } + else + { + sb.Append(Enquote(subSplits[0])); + } + } + + return sb.ToString(); + } + + /// + /// 获取字符串数组的脚本字符串形式 + /// + /// 字符串数组 + /// 字符串数组的脚本字符串 + public static string EnquoteStringArray(string[] values) + { + StringBuilder sb = new StringBuilder(); + foreach (string value in values) + { + sb.AppendFormat("{0},", JsHelper.Enquote(value)); + } + return String.Format("[{0}]", sb.ToString().TrimEnd(',')); + } + + + /// + /// 获取整形数组的脚本字符串形式 + /// + /// 整数数组 + /// 整形数组的脚本字符串 + public static string EnquoteIntArray(int[] values) + { + StringBuilder sb = new StringBuilder(); + foreach (int value in values) + { + sb.AppendFormat("{0},", value); + } + return String.Format("[{0}]", sb.ToString().TrimEnd(',')); + } + + #endregion + + #region NumberToString + + /// + /// 将数字对象转化为字符串 + /// + /// 数字对象 + /// 字符串 + public static string NumberToString(object number) + { + if (number is float && ((float)number) == float.NaN) + { + string msg = string.Format(""); + throw new ArgumentException("object must be a valid number", "number"); + } + if (number is double && ((double)number) == double.NaN) + { + string msg = string.Format(""); + throw new ArgumentException("object must be a valid number", "number"); + } + + // Shave off trailing zeros and decimal point, if possible + + string s = ((double)number).ToString(NumberFormatInfo.InvariantInfo).ToLower(); + + if (s.IndexOf('e') < 0 && s.IndexOf('.') > 0) + { + while (s.EndsWith("0")) + { + s.Substring(0, s.Length - 1); + } + if (s.EndsWith(".")) + { + s.Substring(0, s.Length - 1); + } + } + return s; + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/JsHelper/JsObjectBuilder.cs b/FineUI_v6/FineUI/Business/JsHelper/JsObjectBuilder.cs new file mode 100644 index 0000000..297702d --- /dev/null +++ b/FineUI_v6/FineUI/Business/JsHelper/JsObjectBuilder.cs @@ -0,0 +1,216 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.Specialized; + +namespace FineUI +{ + /// + /// 创建Javascript对象参数的帮助类 + /// + public class JsObjectBuilder + { + #region fields + + private Dictionary _properties = new Dictionary(); + + #endregion + + #region Properties + + /// + /// 已经添加属性的个数 + /// + public int Count + { + get + { + return _properties.Count; + } + } + + #endregion + + #region Constructor + + /// + /// 构造函数 + /// + public JsObjectBuilder() + { + } + + /// + /// 构造函数 + /// + /// 属性名 + /// 属性值 + public JsObjectBuilder(string propertyName, object propertyValue) + { + AddProperty(propertyName, propertyValue, false); + } + + /// + /// 构造函数 + /// + /// 属性名 + /// 属性值 + /// 是否保持原样 + public JsObjectBuilder(string propertyName, object propertyValue, bool persistOriginal) + { + AddProperty(propertyName, propertyValue, persistOriginal); + } + + #endregion + + #region RemoveProperty + + /// + /// 删除属性 + /// + /// 属性名 + public void RemoveProperty(string propertyName) + { + if (_properties.ContainsKey(propertyName)) + { + _properties.Remove(propertyName); + } + } + + #endregion + + #region HasProperty + + /// + /// 是否包含属性 + /// + /// 属性名 + /// + public bool ContainsProperty(string propertyName) + { + return _properties.ContainsKey(propertyName); + } + + #endregion + + #region AddProperty + + /// + /// 添加属性 + /// + /// 属性名 + /// 属性值 + public void AddProperty(string propertyName, object propertyValue) + { + AddProperty(propertyName, propertyValue, false); + } + + /// + /// 添加属性 + /// + /// 属性名 + /// 属性值 + /// 是否保持原样 + public void AddProperty(string propertyName, object propertyValue, bool persistOriginal) + { + // 容错处理(如果 propertyValue 为空,则不添加) + if (propertyValue == null) + { + return; + } + + + // 添加属性之前,要先删除之前已经添加的属性,否则会出粗 + RemoveProperty(propertyName); + + if (persistOriginal) + { + _properties.Add(propertyName, propertyValue.ToString()); + } + else + { + if (propertyValue is string) + { + _properties.Add(propertyName, JsHelper.Enquote(propertyValue.ToString())); + } + else if (propertyValue is bool) + { + _properties.Add(propertyName, propertyValue.ToString().ToLower()); + } + else if (propertyValue is float || propertyValue is double) + { + _properties.Add(propertyName, JsHelper.NumberToString(propertyValue)); + } + else + { + _properties.Add(propertyName, propertyValue.ToString()); + } + } + } + + #endregion + + #region GetProperty + + /// + /// 获取属性 + /// + /// 属性名 + /// 属性值 + public string GetProperty(string propertyName) + { + if (_properties.ContainsKey(propertyName)) + { + return _properties[propertyName]; + } + + return String.Empty; + } + + #endregion + + #region override ToString + + /// + /// 返回对象的JSON字符串形式 + /// + /// 对象的JSON形式 + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + + foreach (string key in _properties.Keys) + { + sb.AppendFormat("{0}:{1},", key, _properties[key]); + } + + return "{" + sb.ToString().TrimEnd(',') + "}"; + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/JsHelper/OptionBuilder.cs b/FineUI_v6/FineUI/Business/JsHelper/OptionBuilder.cs new file mode 100644 index 0000000..c76c777 --- /dev/null +++ b/FineUI_v6/FineUI/Business/JsHelper/OptionBuilder.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + internal class OptionBuilder + { + #region fields + + private JsObjectBuilder _defaultBuilder = new JsObjectBuilder(); + + #endregion + + #region Listeners + + private JsObjectBuilder _listeners = new JsObjectBuilder(); + + public JsObjectBuilder Listeners + { + get { return _listeners; } + set { _listeners = value; } + } + + + #endregion + + #region Constructor + + public OptionBuilder() + { + } + + public OptionBuilder(string propertyName, object propertyValue) + { + _defaultBuilder.AddProperty(propertyName, propertyValue, false); + } + + public OptionBuilder(string propertyName, object propertyValue, bool persistOriginal) + { + _defaultBuilder.AddProperty(propertyName, propertyValue, persistOriginal); + } + + #endregion + + #region RemoveProperty + + /// + /// 删除属性 + /// + /// + public void RemoveProperty(string propertyName) + { + if (_defaultBuilder.ContainsProperty(propertyName)) + { + _defaultBuilder.RemoveProperty(propertyName); + } + } + + #endregion + + #region AddProperty + + /// + /// 添加属性 + /// + /// + /// + public void AddProperty(string propertyName, object propertyValue) + { + AddProperty(propertyName, propertyValue, false); + } + + /// + /// 添加属性 + /// + /// + /// + /// 是否保持原样 + public void AddProperty(string propertyName, object propertyValue, bool persistOriginal) + { + //// 添加属性之前,要先删除之前已经添加的属性,否则会出粗 + //RemoveProperty(propertyName); + + + _defaultBuilder.AddProperty(propertyName, propertyValue, persistOriginal); + } + + #endregion + + #region GetProperty + + /// + /// 使用这个方法需要特别注意,因为这里返回的不是设置的属性了 + /// 比如:"margin-right:5px;"被添加到OB中就变成:"\"margin-right:5px;\"" + /// + /// + /// + internal string GetProperty(string propertyName) + { + return _defaultBuilder.GetProperty(propertyName); + } + + #endregion + + #region override ToString + /// + /// 返回对象的Json字符串表示 + /// + /// + public override string ToString() + { + if (Listeners.Count > 0) + { + //// 如果在 Listeners 中没有添加上下文,则添加默认的 this + //if (!Listeners.ContainsProperty(OptionName.Scope)) + //{ + // Listeners.AddProperty(OptionName.Scope, "box", true); + //} + + AddProperty("listeners", Listeners.ToString(), true); + } + + return _defaultBuilder.ToString(); + } + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/AbsoluteScriptBlock.cs b/FineUI_v6/FineUI/Business/ResourceManager/AbsoluteScriptBlock.cs new file mode 100644 index 0000000..c54d31d --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/AbsoluteScriptBlock.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using System.Web.UI; + +namespace FineUI +{ + /// + /// 脚本(不和控件关联的脚本) + /// + internal class AbsoluteScriptBlock + { + + private string _script; + + /// + /// 脚本 + /// + public string Script + { + get { return _script; } + set { _script = value; } + } + + + + private int _level; + + /// + /// 层次(层次越高,注册越靠后)(缺省100) + /// 负值表示在所有注册脚本之前执行 + /// + public int Level + { + get { return _level; } + set { _level = value; } + } + + + + public AbsoluteScriptBlock(string script) + { + _script = script; + _level = Constants.ABSOLUTE_STARTUP_SCRIPT_DEFAULT_LEVEL; + } + + + public AbsoluteScriptBlock(string script, int level) + { + _script = script; + _level = level; + } + + + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/ClientJavascriptIDManager.cs b/FineUI_v6/FineUI/Business/ResourceManager/ClientJavascriptIDManager.cs new file mode 100644 index 0000000..3ee20ec --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/ClientJavascriptIDManager.cs @@ -0,0 +1,81 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ClientJavascriptIDManager.cs + * CreatedOn: 2008-08-01 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Configuration; +using System.Reflection; +using System.Collections; + +namespace FineUI +{ + /// + /// 存在 Page.Items 上下文中,用于生成JavascriptID + /// + internal class ClientJavascriptIDManager + { + #region static fields + public static readonly string CONTEXT_NAME = "ClientJavascriptIDManagerContextName"; + + #endregion + + #region Instance + + public static ClientJavascriptIDManager Instance + { + get + { + if (HttpContext.Current != null) + { + ClientJavascriptIDManager manager = HttpContext.Current.Items[CONTEXT_NAME] as ClientJavascriptIDManager; + if (manager == null) + { + manager = new ClientJavascriptIDManager(); + HttpContext.Current.Items[CONTEXT_NAME] = manager; + } + return manager; + } + return null; + } + } + + #endregion + + #region methods + + private int _num = 0; + + public string GetNextJavascriptID() + { + return String.Format("f{0}", _num++); + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/CommonResourceHelper.cs b/FineUI_v6/FineUI/Business/ResourceManager/CommonResourceHelper.cs new file mode 100644 index 0000000..67962f2 --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/CommonResourceHelper.cs @@ -0,0 +1,322 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: HeaderResourceHelper.cs + * CreatedOn: 2008-05-04 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Configuration; +using System.Reflection; +using System.Web.UI; +using System.IO; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + internal static class CommonResourceHelper + { + #region static + + public static readonly string CONTROL_ID_PREFIX = "FineUI_"; + + //private static readonly string HeaderCommentId = HeaderControlIdPrefix + "comment"; + //private static readonly string HeaderDefaultCssId = HeaderControlIdPrefix + "ext-all-css"; + //private static readonly string HeaderGrayCssId = HeaderControlIdPrefix + "xtheme-gray-css"; + //private static readonly string HeaderExtBaseJsId = HeaderControlIdPrefix + "ext-base-js"; + //private static readonly string HeaderExtAllJsId = HeaderControlIdPrefix + "ext-all-js"; + + + + public static readonly string COMMENT_INCLUDE_TEMPLATE = "\r\n"; + public static readonly string SCRIPT_INCLUDE_TEMPLATE = "\r\n"; + //public static readonly string SCRIPT_CONTENT_TEMPLATE = "\r\n\r\n"; + public static readonly string STYLE_INCLUDE_TEMPLATE = "\r\n"; + public static readonly string STYLE_CONTENT_TEMPLATE = "\r\n"; + public static readonly string META_TEMPLATE = "\r\n"; + + + #endregion + + #region RegisterCommonResource + + internal static void RegisterCommonResource(Page page) + { + #region powered-by + + string metaName = "powered-by"; + string metaContent = String.Format("FineUI v{0} - 基于 ExtJS 的开源 ASP.NET 控件库 - http://fineui.com/", GlobalConfig.ProductVersion); + AddContentToHead(page, CONTROL_ID_PREFIX + "comments", String.Format(META_TEMPLATE, metaName, metaContent)); + + + // 是否向页面输出IE=edge标识 + if (PageManager.Instance.IEEdge) + { + AddContentToHead(page, CONTROL_ID_PREFIX + "xua", String.Format(META_TEMPLATE, "X-UA-Compatible", "IE=edge")); + } + + + #endregion + + // ExtJS CSS & JS 版本号,只有升级更新CSS或者JS时才需要更新。 + //string extjsCSSJSVersion = "3"; + //string fineuiVersion = GlobalConfig.ProductVersion; + string extjsBasePath = page.ResolveUrl(GlobalConfig.GetJSBasePath()); + + string themeName = ThemeHelper.GetName(PageManager.Instance.Theme); + + + #region css + + if (!String.IsNullOrEmpty(PageManager.Instance.CustomTheme)) + { + string customThemeName = PageManager.Instance.CustomTheme; + + AddCssPathToHead(page, CONTROL_ID_PREFIX + customThemeName + ".css", String.Format("{0}/ext-theme-{1}/all.css?v{2}", page.ResolveUrl(PageManager.Instance.CustomThemeBasePath), customThemeName, GlobalConfig.ProductVersion)); + } + else + { + AddCssPathToHead(page, CONTROL_ID_PREFIX + themeName + "-all_1.css", String.Format("{0}/res/ext-theme-{1}/theme-{1}-all_1.css?v{2}", extjsBasePath, themeName, GlobalConfig.ProductVersion)); + AddCssPathToHead(page, CONTROL_ID_PREFIX + themeName + "-all_2.css", String.Format("{0}/res/ext-theme-{1}/theme-{1}-all_2.css?v{2}", extjsBasePath, themeName, GlobalConfig.ProductVersion)); + + AddCssPathToHead(page, CONTROL_ID_PREFIX + themeName + ".css", String.Format("{0}/res/theme-{1}.css?v{2}", extjsBasePath, themeName, GlobalConfig.ProductVersion)); + } + + + + #endregion + + #region javascript + + AddJavascriptPathToPageBottom(page, "ext-all.js", String.Format("{0}/ext-all.js?v{1}", extjsBasePath, GlobalConfig.ProductVersion)); + AddJavascriptPathToPageBottom(page, "ext-fineui.js", String.Format("{0}/ext-fineui.js?v{1}", extjsBasePath, GlobalConfig.ProductVersion)); + + + if (!String.IsNullOrEmpty(PageManager.Instance.CustomTheme)) + { + // 自定义主题 + } + else + { + AddJavascriptPathToPageBottom(page, "ext-theme-" + themeName + ".js", String.Format("{0}/res/ext-theme-{2}/theme-{2}.js?v{1}", extjsBasePath, GlobalConfig.ProductVersion, themeName)); + } + + + // 语言资源应该放在最后,其中包含对 X.js 的语言定义 + string langName = LanguageHelper.GetName(PageManager.Instance.Language); + AddJavascriptPathToPageBottom(page, langName + ".js", String.Format("{0}/lang/{1}.js?v{2}", extjsBasePath, langName, GlobalConfig.ProductVersion)); + + #endregion + } + + #endregion + + #region GetResourceUrlFromName + + private static string GetResourceUrlFromName(Page page, string resName) + { + return ResourceHelper.GetWebResourceUrlResAxd(page, resName); + } + + #endregion + + #region AddJavascriptIncludeToPageBottom + + public static void AddJavascriptPathToPageBottom(Page page, string controlId, string jsPath) + { + if (!page.ClientScript.IsClientScriptIncludeRegistered(controlId)) + { + page.ClientScript.RegisterStartupScript(page.GetType(), controlId, String.Format(SCRIPT_INCLUDE_TEMPLATE, jsPath), false); + } + } + + /// + /// 添加JS文件到页面的底部 + /// + /// + /// + /// + public static void AddJavascriptIncludeToPageBottom(Page page, string controlId, string resourceName) + { + if (!page.ClientScript.IsClientScriptIncludeRegistered(controlId)) + { + page.ClientScript.RegisterStartupScript(page.GetType(), controlId, String.Format(SCRIPT_INCLUDE_TEMPLATE, GetResourceUrlFromName(page, resourceName)), false); + } + } + + public static void AddCssPathToHead(Page page, string controlId, string cssPath) + { + if (!IsHeaderContains(page, controlId)) + { + LiteralControl control = new LiteralControl(); + control.ID = controlId; + control.Text = String.Format(STYLE_INCLUDE_TEMPLATE, cssPath); + + page.Header.Controls.AddAt(GetNextControlIndex(page), control); + } + } + + /// + /// 添加样式表到页头 + /// + /// + /// + /// + public static void AddCssResourceToHead(Page page, string controlId, string resourceName) + { + AddCssPathToHead(page, controlId, GetResourceUrlFromName(page, resourceName)); + } + + public static void AddCssContentToHead(Page page, string controlId, string cssContent) + { + if (!IsHeaderContains(page, controlId)) + { + LiteralControl control = new LiteralControl(); + control.ID = controlId; + control.Text = String.Format(STYLE_CONTENT_TEMPLATE, cssContent); + + page.Header.Controls.AddAt(GetNextControlIndex(page), control); + } + } + + /// + /// 向页面头部添加内容 + /// + /// + /// + /// + public static void AddContentToHead(Page page, string controlId, string msg) + { + if (!IsHeaderContains(page, controlId)) + { + LiteralControl control = new LiteralControl(); + control.ID = controlId; + control.Text = msg; + + page.Header.Controls.AddAt(GetNextControlIndex(page), control); + } + } + + /// + /// 页头是否包含控件 + /// + /// + /// + /// + public static bool IsHeaderContains(Page page, string controlId) + { + foreach (Control c in page.Header.Controls) + { + if (c.ID != null && c.ID == controlId) + { + return true; + } + } + + return false; + } + + /// + /// 取得下一个控件的位置 + /// + /// + private static int GetNextControlIndex(Page page) + { + int index = 0; + + // 如果存在自定义(以CONTROL_ID_PREFIX开头)的控件,则返回最后一个自定义控件的下一个位置 + // 如果不存在自定义的控件,则返回的下一个位置 + bool startControlBlock = false; + int titleIndex = 0; + foreach (Control c in page.Header.Controls) + { + if (c is HtmlTitle) + { + titleIndex = index; + } + + if (c.ID != null && c.ID.StartsWith(CONTROL_ID_PREFIX)) + { + startControlBlock = true; + } + else + { + if (startControlBlock) + { + break; + } + } + + index++; + } + + int retIndex = startControlBlock ? index : titleIndex + 1; + if (retIndex < 0) + { + retIndex = 0; + } + else if (retIndex >= page.Header.Controls.Count) + { + retIndex = page.Header.Controls.Count - 1; + } + + return retIndex; + } + + ///// <summary> + ///// 取得Comment控件的位置(默认在title的下面) + ///// </summary> + ///// <returns></returns> + //private static int GetCommentControlIndex(Page page) + //{ + // int index = 0; + + // bool isFindTitle = false; + // foreach (Control c in page.Header.Controls) + // { + // if (c is System.Web.UI.HtmlControls.HtmlTitle) + // { + // isFindTitle = true; + // break; + // } + + // index++; + // } + + // return isFindTitle ? ++index : 0; + //} + #endregion + + #region RegisterHeaderCSS + + public static void RegisterHeaderCSS(Page page, string cssContent) + { + string controlId = CONTROL_ID_PREFIX + "user_defined_css"; + if (!IsHeaderContains(page, controlId)) + { + AddCssContentToHead(page, controlId, cssContent); + } + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/DesignTimeResourceHelper.cs b/FineUI_v6/FineUI/Business/ResourceManager/DesignTimeResourceHelper.cs new file mode 100644 index 0000000..541b5be --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/DesignTimeResourceHelper.cs @@ -0,0 +1,202 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: DesignTimeResourceHelper.cs + * CreatedOn: 2008-05-04 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; +using System.Web.UI; +using System.ComponentModel; + +namespace FineUI +{ + /// <summary> + /// 注册设计时资源 + /// </summary> + internal class DesignTimeResourceHelper + { + + #region static readonly + + private static readonly string STYLE_BLOCK_TEMPLATE = "<style type=\"text/css\">{0}</style>"; + //private static readonly string DESIGN_TIME_CONTROL_ID = "design-time-css-holder-field-id"; + + #endregion + + #region fields + + private ISite _site; + + + #endregion + + #region GetInstance + + private static DesignTimeResourceHelper _helper; + + /// <summary> + /// 取得 DesignTimeResourceHelper 的实例,单件模式 + /// </summary> + /// <param name="page"></param> + /// <returns></returns> + public static DesignTimeResourceHelper GetInstance(ISite site) + { + if (_helper == null) + { + _helper = new DesignTimeResourceHelper(site); + + } + + return _helper; + } + + #endregion + + #region Constructor + + public DesignTimeResourceHelper(ISite site) + { + _site = site; + } + + #endregion + + #region SetupInlineStyle + + + public void SetupInlineStyle() + { + //System.Web.UI.WebControls.Literal litStyle = new System.Web.UI.WebControls.Literal(); + //litStyle.ID = DESIGN_TIME_CONTROL_ID; + //litStyle.Text = GetInlineStyle(); + + ////_site.Container.Add(hiddenControl); + ////(_site.Container.Components[0] as Page).Controls.Add(litStyle); + //_site.Container.Add(litStyle); + + + + + //DesignTimeControl litStyle = new DesignTimeControl(); + //litStyle.ID = DESIGN_TIME_CONTROL_ID; + //////litStyle.Text = GetInlineStyle(); + + //////_site.Container.Add(hiddenControl); + //////(_site.Container.Components[0] as Page).Controls.Add(litStyle); + ////_site.Container.Add(litStyle); + + + //Page page = (_site.Container.Components[0] as Page); + + ////System.Web.UI.HtmlControls.HtmlHead header = + + // //page.Header = new System.Web.UI.HtmlControls.HtmlHead(); + + } + + /// <summary> + /// 设计时是否包含控件 + /// </summary> + /// <param name="componentID"></param> + /// <returns></returns> + private Control GetHiddenControl(string controlID) + { + foreach (IComponent com in _site.Container.Components) + { + Control c = com as Control; + if (c != null && c.ID == controlID) + { + return c; + } + } + + return null; + } + + + #endregion + + #region GetInlineStyle + + private string _styleContent = String.Empty; + + /// <summary> + /// 取得内联样式表 + /// </summary> + /// <returns></returns> + public string GetInlineStyle() + { + if (String.IsNullOrEmpty(_styleContent)) + { + StringBuilder sb = new StringBuilder(); + + sb.Append(GetStyleContent("FineUI.res.css.ext-all.css")); + + //if (AboutConfig.Theme.ToLower() == ConfigThemeValues.GRAY) + //{ + // sb.Append(GetStyleContent("FineUI.res.css.xtheme-gray.css")); + //} + // ux + sb.Append(GetStyleContent("FineUI.res.css.ux.css")); + + _styleContent = sb.ToString(); + } + + return String.Format(STYLE_BLOCK_TEMPLATE, _styleContent); + } + + + + /// <summary> + /// 取得样式的内容 + /// </summary> + /// <param name="resourceName"></param> + /// <returns></returns> + private string GetStyleContent(string resourceName) + { + using (StreamReader reader = new StreamReader(typeof(FineUI.ControlBase).Assembly.GetManifestResourceStream(resourceName))) + { + return ParseCssWebResourceUrls(reader.ReadToEnd()); + } + } + + /// <summary> + /// 转化 CSS 的内容 + /// </summary> + /// <param name="src"></param> + /// <returns></returns> + private string ParseCssWebResourceUrls(string resourceContent) + { + Regex regex = new Regex("<%=WebResource\\(\".*\\.(gif|png)*\"\\)%>"); + foreach (Match match in regex.Matches(resourceContent)) + { + string webResourceName = match.Value.Replace("<%=WebResource(\"", string.Empty).Replace("\")%>", string.Empty); + resourceContent = resourceContent.Replace(match.Value, String.Format("\"{0}\"", ResourceHelper.GetWebResourceUrl(_site, webResourceName))); + } + return resourceContent; + } + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/ResourceHandler.cs b/FineUI_v6/FineUI/Business/ResourceManager/ResourceHandler.cs new file mode 100644 index 0000000..a61c048 --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/ResourceHandler.cs @@ -0,0 +1,181 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Reflection; +using System.IO; +using System.Drawing.Imaging; + +namespace FineUI +{ + /// <summary> + /// 资源处理程序 + /// </summary> + public class ResourceHandler : IHttpHandler + { + /// <summary> + /// 处理资源的请求 + /// </summary> + /// <param name="context">Http请求上下文</param> + public void ProcessRequest(HttpContext context) + { + string type = String.Empty; + string typeValue = String.Empty; + string extjsBasePath = GlobalConfig.GetJSBasePath(); + + + if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["icon"])) + { + type = "icon"; + } + else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["theme"])) + { + type = "theme"; + } + else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["img"])) + { + type = "img"; + } + else + { + context.Response.Write("Not supported!"); + return; + } + + string filePath = String.Empty; + string fileBasePath = String.Empty; + switch (type) + { + case "icon": + if (!typeValue.EndsWith(".png") && !typeValue.EndsWith(".gif")) + { + typeValue = IconHelper.GetName((Icon)Enum.Parse(typeof(Icon), typeValue)); + } + fileBasePath = GlobalConfig.GetIconBasePath(); + filePath = String.Format("{0}/{1}", fileBasePath, typeValue); + break; + case "theme": + string themePath = ""; + string themeImageFormat = ""; + int lastDotIndex = typeValue.LastIndexOf("."); + if (lastDotIndex >= 0) + { + themePath = typeValue.Substring(0, lastDotIndex).Replace('.', '/'); + themeImageFormat = typeValue.Substring(lastDotIndex + 1); + } + + fileBasePath = String.Format("{0}/res/images", extjsBasePath); + filePath = String.Format("{0}/{1}.{2}", fileBasePath, themePath, themeImageFormat); + break; + case "img": + fileBasePath = String.Format("{0}/res/images", extjsBasePath); + filePath = String.Format("{0}/{1}", fileBasePath, typeValue); + break; + } + + string imageType = GetImageFormat(typeValue); + string filePathServer = context.Server.MapPath(filePath); + + // 非法图片后缀 + if (!_allowedImageTypes.Contains(imageType)) + { + return; + } + + // 不是根目录下的文件 + string rootPath = context.Server.MapPath(fileBasePath); + if (!filePathServer.StartsWith(rootPath)) + { + return; + } + + // 不存在此文件 + if (!File.Exists(filePathServer)) + { + return; + } + + context.Response.WriteFile(filePathServer); + context.Response.ContentType = "image/" + imageType; + + // 缓存一年,只能通过改变 URL 来强制更新缓存 + context.Response.Cache.SetExpires(DateTime.Now.AddYears(1)); + context.Response.Cache.SetCacheability(HttpCacheability.Public); + } + + //private void RenderImage(HttpContext context, string resName) + //{ + // Assembly assembly = Assembly.GetExecutingAssembly(); + // using (Stream stream = assembly.GetManifestResourceStream(resName)) + // { + // using (System.Drawing.Image image = System.Drawing.Image.FromStream(stream)) + // { + // // PNG输出时出现“GDI+ 中发生一般性错误” + // using (MemoryStream ms = new MemoryStream()) + // { + // image.Save(ms, image.RawFormat); + // ms.WriteTo(context.Response.OutputStream); + // context.Response.ContentType = "image/" + GetImageFormat(image.RawFormat); + // } + // } + // } + //} + + private string GetImageFormat(string fileName) + { + string imageFormat = String.Empty; + + int lastDotIndex = fileName.LastIndexOf("."); + if (lastDotIndex >= 0) + { + imageFormat = fileName.Substring(lastDotIndex + 1); + } + return imageFormat; + } + + + private static readonly List<string> _allowedImageTypes = new List<string> { "bmp", "gif", "jpg", "jpeg", "png", "tiff", "icon" }; + + + private string GetImageFormat(ImageFormat format) + { + if (format == ImageFormat.Bmp) + { + return "bmp"; + } + else if (format == ImageFormat.Gif) + { + return "gif"; + } + else if (format == ImageFormat.Jpeg) + { + return "jpeg"; + } + else if (format == ImageFormat.Png) + { + return "png"; + } + else if (format == ImageFormat.Tiff) + { + return "tiff"; + } + else if (format == ImageFormat.Icon) + { + return "icon"; + } + return "gif"; + } + + + /// <summary> + /// 只要请求的 URL 相同,则请求可以重用 + /// </summary> + public bool IsReusable + { + get + { + return true; + } + } + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/ResourceHelper.cs b/FineUI_v6/FineUI/Business/ResourceManager/ResourceHelper.cs new file mode 100644 index 0000000..3182008 --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/ResourceHelper.cs @@ -0,0 +1,235 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ResourceHelper.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +using System.Web; +using System.Web.UI; +using System.Collections.Specialized; +using System.Collections; +using System.ComponentModel; +using System.IO; +using System.Reflection; +using System.Text.RegularExpressions; + + +namespace FineUI +{ + /// <summary> + /// 资源帮助类 + /// </summary> + public static class ResourceHelper + { + #region GetWebResourceUrl + + /// <summary> + /// 获取嵌入资源的 res.axd 地址 + /// </summary> + /// <param name="resName">资源名称</param> + /// <returns>资源地址</returns> + public static string GetWebResourceUrlResAxd(string resName) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + return GetWebResourceUrlResAxd(page, resName); + } + + return String.Empty; + } + + + /// <summary> + /// 获取嵌入资源的 res.axd 地址 + /// </summary> + /// <param name="page">页面对象</param> + /// <param name="resName">资源名称</param> + /// <returns>资源地址</returns> + public static string GetWebResourceUrlResAxd(Page page, string resName) + { + //return ResourceHelper.GetWebResourceUrl(page, resName); + string typeName = "", typeValue = ""; + + if (resName.StartsWith("FineUI.js.")) + { + if (resName.StartsWith("FineUI.js.lang.")) + { + typeName = "lang"; + typeValue = resName.Substring("FineUI.js.lang.".Length); + } + else + { + typeName = "js"; + typeValue = resName.Substring("FineUI.js.".Length); + } + } + else if (resName.StartsWith("FineUI.res.")) + { + if (resName.StartsWith("FineUI.res.css.")) + { + typeName = "css"; + typeValue = resName.Substring("FineUI.res.css.".Length); + } + else if (resName.StartsWith("FineUI.res.img.")) + { + typeName = "img"; + typeValue = resName.Substring("FineUI.res.img.".Length); + } + else if (resName.StartsWith("FineUI.res.theme.")) + { + typeName = "theme"; + typeValue = resName.Substring("FineUI.res.theme.".Length); + } + } + + if (!String.IsNullOrEmpty(typeName)) + { + return page.ResolveUrl(String.Format("~/res.axd?{0}={1}", typeName, typeValue)); + } + return null; + } + + /// <summary> + /// 获取嵌入资源的地址 + /// </summary> + /// <param name="resourceName">资源名称</param> + /// <returns>资源地址</returns> + public static string GetWebResourceUrl(string resourceName) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + return GetWebResourceUrl(page, resourceName); + } + + return String.Empty; + } + + /// <summary> + /// 获取嵌入资源的地址 + /// </summary> + /// <param name="page">页面实例</param> + /// <param name="resourceName">资源名称</param> + /// <returns>资源地址</returns> + public static string GetWebResourceUrl(Page page, string resourceName) + { + string resourceUrl = String.Empty; + resourceUrl = page.ClientScript.GetWebResourceUrl(typeof(FineUI.ControlBase), resourceName); + + return resourceUrl; + } + + ///// <summary> + ///// 设计时嵌入资源url地址 + ///// </summary> + ///// <param name="site"></param> + ///// <param name="resourceName"></param> + ///// <returns></returns> + //public static string GetWebResourceUrl(ISite site, string resourceName) + //{ + // string resourceUrl = String.Empty; + // if (site != null) + // { + // IResourceUrlGenerator service = (IResourceUrlGenerator)site.GetService(typeof(IResourceUrlGenerator)); + // if (service != null) + // { + // resourceUrl = service.GetResourceUrl(site.Component.GetType(), resourceName); + // } + // } + + // //// 告诉HttpCompress,不要设置ETag,同时设置Expires为一年后的今天 + // //resourceUrl += "&expires=1"; + + // return resourceUrl; + //} + #endregion + + #region GetResourceContent + + /// <summary> + /// 取得资源的内容 + /// </summary> + /// <param name="resourceName">资源名称</param> + /// <returns>资源内容</returns> + public static string GetResourceContent(string resourceName) + { + string result = String.Empty; + using (StreamReader sr = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))) + { + result = sr.ReadToEnd(); + } + + return result; + } + + + /// <summary> + /// 取得资源的二进制内容 + /// </summary> + /// <param name="resourceName">资源名称</param> + /// <returns>资源的二进制内容</returns> + public static byte[] GetResourceContentAsBinary(string resourceName) + { + byte[] buf; + using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) + { + buf = new byte[stream.Length]; + stream.Read(buf, 0, buf.Length); + } + + return buf; + } + + + //public static string ResolveResourceContent(Page page, string resourceContent) + //{ + // Regex regex = new Regex(@"<%=WebResource\("".*\.(gif|png)*""\)%>"); + // MatchCollection matches = regex.Matches(resourceContent); + // foreach (Match match in matches) + // { + // string url = match.Value.Replace("<%=WebResource(\"", string.Empty).Replace("\")%>", string.Empty); + // resourceContent = resourceContent.Replace(match.Value, string.Format("{0}", GetWebResourceUrl(page, url))); + // } + + // return resourceContent; + //} + + #endregion + + #region GetEmptyImageUrl + + /// <summary> + /// 获取空白图片的地址 + /// </summary> + /// <returns>空白图片的地址</returns> + public static string GetEmptyImageUrl() + { + return String.Format("{0}/res/s.gif", GlobalConfig.GetJSBasePath()); + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/ResourceManager.cs b/FineUI_v6/FineUI/Business/ResourceManager/ResourceManager.cs new file mode 100644 index 0000000..8f57452 --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/ResourceManager.cs @@ -0,0 +1,1137 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ResourceManager.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Configuration; +using System.Reflection; +using System.Collections; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + + +namespace FineUI +{ + /// <summary> + /// 存在 Page.Items 上下文中,向页面注册资源 + /// </summary> + internal class ResourceManager + { + #region static fields + + public static readonly string RESOURCE_MANAGER_CONTEXT_NAME = "ResourceManagerContextName"; + + //public static readonly string BLANK_IMAGE_RESOURCE_NAME = "FineUI.res.img.s.gif"; + //public static readonly string BLANK_IMAGE_TEMPLATE = "Ext.BLANK_IMAGE_URL='{0}';"; + //public static readonly string SCRIPT_ONREADY_TEMPLATE = "window.box=new (function(){this._onReady=function(){window.box_page_render_start_time=new Date();Ext.QuickTips.init();#CONTENT#};Ext.onReady(function(){this._onReady();},this);})();" + DEBUG_LINE_BREAK; + //public static readonly string SCRIPT_ONREADY_TEMPLATE = "Ext.onReady(function(){window.boxPage_render_start_time=new Date();Ext.QuickTips.init();#CONTENT#});" + DEBUG_LINE_BREAK; + //public static readonly string SCRIPT_ONREADY_TEMPLATE = "window.box=new (function(){this._onReady=function(){window.boxPage_render_start_time=new Date();Ext.QuickTips.init();#CONTENT#};this._onReady();})();" + DEBUG_LINE_BREAK; + + // Ext.onReady(function(){window.startOnReady2=new Date();}); + //public static readonly string WINDOW_DEFAULT_GROUP_ID = "F.window_default_group"; + //public static readonly string COOKIE_PROVIDER_ID = "F.cookie_provider"; + //public static readonly string HIDDEN_FIELDS_ID = "F.hiddenFields"; + + + public static readonly string PAGE_STATE_CHANGED_ID = "F_CHANGED"; + + //// 在FineUI-Utility.js中被使用,不要修改 + //public static readonly string DISABLED_CONTROL_BEFORE_POSTBACK = "F_TARGET"; + + + + //public static readonly string DISABLE_AJAX_CONTROL_ID = "__box_disable_ajax_control_id"; + + //public static readonly string CREATE_EXT_OBJECT_PREFIX = "box_destroyObject(X.{0});"; + + //public static readonly string PRELOAD_IMAGES_ID = "F.preload_images"; + + #endregion + + #region fields + + private bool _isPageInitCompleted = false; + + public bool IsPageInitCompleted + { + get { return _isPageInitCompleted; } + set { _isPageInitCompleted = value; } + } + + + + private List<AbsoluteScriptBlock> _startupAbsoluteScriptBlockList = new List<AbsoluteScriptBlock>(); + public List<AbsoluteScriptBlock> StartupAbsoluteScriptBlockList + { + get { return _startupAbsoluteScriptBlockList; } + set { _startupAbsoluteScriptBlockList = value; } + } + + private List<ScriptBlock> _startupScriptBlockList = new List<ScriptBlock>(); + public List<ScriptBlock> StartupScriptBlockList + { + get { return _startupScriptBlockList; } + set { _startupScriptBlockList = value; } + } + + /// <summary> + /// 需要向页面注册的样式列表 + /// </summary> + private Dictionary<string, string> _startupCssDic = new Dictionary<string, string>(); + + + + //private List<string> _javascriptComponentList = new List<string>(); + ///// <summary> + ///// 页面需要的JavaScript组件列表 + ///// </summary> + //public List<string> JavaScriptComponentList + //{ + // get { return _javascriptComponentList; } + // set { _javascriptComponentList = value; } + //} + + + + private List<string> _ajaxScriptList = new List<string>(); + /// <summary> + /// AJAX时每个控件需要注册的脚本 + /// </summary> + public List<string> AjaxScriptList + { + get { return _ajaxScriptList; } + set { _ajaxScriptList = value; } + } + + + private List<string> _ajaxAbsoluteScriptList = new List<string>(); + /// <summary> + /// AJAX时不依赖控件的脚本 + /// </summary> + public List<string> AjaxAbsoluteScriptList + { + get { return _ajaxAbsoluteScriptList; } + set { _ajaxAbsoluteScriptList = value; } + } + + + private Dictionary<string, string> _ajaxShortNameList = new Dictionary<string, string>(); + /// <summary> + /// AJAX时使用到的所有短名称列表 + /// 比如:F('SimpleForm1_tbxUserName') -> cmp0 + /// F('SimpleForm1_tbxPassword') -> cmp1 + /// </summary> + public Dictionary<string, string> AjaxShortNameList + { + get { return _ajaxShortNameList; } + set { _ajaxShortNameList = value; } + } + + public void AddAjaxShortName(string scriptid, string xid) + { + if (!_ajaxShortNameList.ContainsKey(scriptid)) + { + _ajaxShortNameList.Add(scriptid, xid); + } + } + + + #endregion + + #region Instance + + public ResourceManager() + : this(HttpContext.Current.Handler as Page) + { + } + + public ResourceManager(Page page) + { + _page = page; + _page.PreRenderComplete += new EventHandler(Page_PreRenderComplete); + _page.InitComplete += Page_InitComplete; + } + + private Page _page = null; + public Page Page + { + get + { + return _page; + } + } + + + /// <summary> + /// 取得 ResourceManager 的实例,单件模式 + /// </summary> + public static ResourceManager Instance + { + get + { + ResourceManager rm = HttpContext.Current.Items[ResourceManager.RESOURCE_MANAGER_CONTEXT_NAME] as ResourceManager; + if (rm == null) + { + rm = new ResourceManager(); + HttpContext.Current.Items[ResourceManager.RESOURCE_MANAGER_CONTEXT_NAME] = rm; + } + + return rm; + } + } + + /// <summary> + /// 确保ResourceManager实例的Page和当前页面一致 + /// </summary> + /// <param name="page"></param> + internal static void EnsureResourceManagerInstance(Page page) + { + ResourceManager rm = ResourceManager.Instance; + + // 在 Server.Transfer 时会进入此分支 + if (rm.Page != page) + { + rm = new ResourceManager(page); + HttpContext.Current.Items[ResourceManager.RESOURCE_MANAGER_CONTEXT_NAME] = rm; + } + } + + + #endregion + + #region Page_PreRenderComplete + + protected void Page_InitComplete(object sender, EventArgs e) + { + IsPageInitCompleted = true; + + if (!IsFineUIAjaxPostBack) + { + // 页头注册公共CSS/Javascript + CommonResourceHelper.RegisterCommonResource(Page); + } + + } + + + /// <summary> + /// 准备呈现页面内容,在保存页面状态之前 + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + protected void Page_PreRenderComplete(object sender, EventArgs e) + { + // 如果是 FineUI 的Ajax + if (IsFineUIAjaxPostBack) + { + // The server response is parsed by the browser to create the document for the IFRAME. If the server is using JSON to send the return object, then the Content-Type header must be set to "text/html" in order to tell the browser to insert the text unchanged into the document body. + HttpContext.Current.Trace.IsEnabled = false; + HttpContext.Current.Response.ContentType = "text/html"; + //HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; + //HttpContext.Current.Response.Charset = "UTF-8"; + HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); + + FineUI.ResponseFilter filter = new FineUI.ResponseFilter(HttpContext.Current.Response.Filter); + HttpContext.Current.Response.Filter = filter; + } + else + { + SetupFirstLoadResource(); + } + } + + #endregion + + #region SetupFirstLoadResource + + /// <summary> + /// 注册页面第一次加载时的样式和脚本 + /// </summary> + private void SetupFirstLoadResource() + { + // 注册样式 + RegisterStartupCss(); + + // 注册脚本 + RegisterStartupScript(); + } + + + private void RegisterStartupCss() + { + if (_startupCssDic.Count > 0) + { + StringBuilder sb = new StringBuilder(); + foreach (string value in _startupCssDic.Values) + { + sb.Append(value); + } + CommonResourceHelper.RegisterHeaderCSS(Page, sb.ToString()); + } + + } + + /// <summary> + /// 注册页面脚本 + /// </summary> + public void RegisterStartupScript() + { + #region oldcode - 不支持Asp.net AJAX + + //if (IsAspNetAjaxPostBack) + //{ + // #region 局部回发 + // // 局部回发 + // for (int i = 0, count = sortedList.Count; i < count; i++) + // { + // Control control = sortedList[i].Control as Control; + // string scriptContent = sortedList[i].Script; + + // // 如果要注册脚本为空,则跳过 + // if (String.IsNullOrEmpty(scriptContent)) + // { + // continue; + // } + + // // 换行符去掉 + // scriptContent = scriptContent.Replace("\r\n", ""); + + // if (control != null) + // { + // // 如果脚本关联的有控件,则注册脚本(控件级别) + // string scriptKey = "partial_postback_script_" + control.ID; + // AjaxScriptManagerRegisterStartupScript(control, scriptKey, scriptContent); + // } + // else + // { + // // 如果脚本关联的没有控件,则注册脚本(页面级别) + // string scriptKey = "partial_postback_script_" + Math.Abs(scriptContent.GetHashCode()).ToString(); + // AjaxScriptManagerRegisterStartupScript(Page, scriptKey, scriptContent); + // } + // } + + // if (PageManager.Instance.ExecuteOnReadyWhenPostBack) + // { + // // 每次ajax调用后都要调用onReady脚本 + // AjaxScriptManagerRegisterStartupScript(Page, "onReady", "if(typeof(onReady)=='function'){onReady();}"); + // } + // #endregion + //} + //else + //{ + //} + + #endregion + + // 页面第一次加载 或者 页面回发 + List<ScriptBlock> sortedList = GetSortedControlScriptList(); + StringBuilder sb = new StringBuilder(); + foreach (ScriptBlock controlScript in sortedList) + { + if (controlScript.Script.Trim() != "") + { + sb.AppendFormat("{0}", controlScript.Script); + } + } + + string scriptContent = GetStartupScript(sb.ToString()); + + // 格式化输入 JavaScript 脚本 + if (GlobalConfig.GetDebugMode()) + { + JSBeautifyLib.JSBeautify jsb = new JSBeautifyLib.JSBeautify(scriptContent, + new JSBeautifyLib.JSBeautifyOptions()); + + scriptContent = jsb.GetResult(); + } + + Page.ClientScript.RegisterStartupScript(Page.GetType(), "page_startup_script", scriptContent, true); + } + + #endregion + + #region GetStartupScript + + /// <summary> + /// 是否注册startup脚本 + /// </summary> + /// <param name="scriptKey"></param> + /// <returns></returns> + private bool IsStartupScriptRegistered(string scriptKey) + { + return Page.ClientScript.IsStartupScriptRegistered(scriptKey); + } + + /// <summary> + /// 取得页面初始化时脚本 + /// </summary> + /// <param name="script"></param> + /// <returns></returns> + private string GetStartupScript(string script) + { + #region beforeBuilder + + StringBuilder beforeBuilder = new StringBuilder(); + + //beforeBuilder.Append("F.init();"); + + // ExtJS2.2的BUG,Ext.onReady会被调用两次(在ExtJS 2.2.1中已经修正) + // Ext.onReady在extjsv3.1.0中依然有问题,在IE下有时会导致页面空白,不能继续执行,只有在点击Stop按钮或者重新刷新后才行。 + // http://www.extjs.net/forum/showthread.php?t=69437 + // http://www.extjs.com/forum/showthread.php?p=347524#post347524 + // https://extjs.net/forum/showthread.php?t=86948 + //beforeBuilder.Append("if(X.initialized){return;}X.initialized=true;"); + + // 空白图片,只在 IE6 和 IE7 下设置(默认为 http://www.sencha.com/s.gif ),其他浏览器下使用 data URL + //beforeBuilder.AppendFormat("if(Ext.isIE6||Ext.isIE7){{Ext.BLANK_IMAGE_URL='{0}';}}", ResourceHelper.GetWebResourceUrl("FineUI.res.img.s.gif")); + + //beforeBuilder.Append("F.util.init();"); + + // form 相关配置 + //beforeBuilder.Append("var fieldPro=Ext.form.Base.prototype;"); + //beforeBuilder.AppendFormat("fieldPro.msgTarget='{0}';", MsgTargetHelper.GetName(PageManager.Instance.FormMessageTarget)); + //beforeBuilder.AppendFormat("fieldPro.labelWidth={0};", PageManager.Instance.FormLabelWidth.Value); + //beforeBuilder.AppendFormat("fieldPro.labelSeparator='{0}';", PageManager.Instance.FormLabelSeparator); + //beforeBuilder.AppendFormat("F.util.init('{0}',{1},'{2}','{3}',{4},'{5}',{6},'{7}',{8});", + // MessageTargetHelper.GetName(PageManager.Instance.FormMessageTarget), + // PageManager.Instance.FormLabelWidth.Value, + // PageManager.Instance.FormLabelSeparator, + // //PageManager.Instance.EnableBigFont.ToString().ToLower(), + // Page.ResolveUrl(ResourceHelper.GetEmptyImageUrl()), //String.Format("{0}/res/images/s.gif", GlobalConfig.GetExtjsBasePath())), //ResourceHelper.GetWebResourceUrlResAxd("FineUI.res.img.s.gif&v=1"), + // //PageManager.Instance.EnableAspnetSubmitButtonAjax.ToString().ToLower(), + // PageManager.Instance.EnableAjaxLoading.ToString().ToLower(), + // AjaxLoadingTypeName.GetName(PageManager.Instance.AjaxLoadingType), + // PageManager.Instance.EnableAjax.ToString().ToLower(), + // ThemeHelper.GetName(PageManager.Instance.Theme), + // PageManager.Instance.EnableFormChangeConfirm.ToString().ToLower() + // ); + + + //beforeBuilder.AppendFormat("F.util.init('{0}',{1},'{2}','{3}',{4},'{5}',{6},'{7}',{8});", + // MessageTargetHelper.GetName(PageManager.Instance.FormMessageTarget), + // PageManager.Instance.FormLabelWidth.Value, + // PageManager.Instance.FormLabelSeparator, + // //PageManager.Instance.EnableBigFont.ToString().ToLower(), + // Page.ResolveUrl(ResourceHelper.GetEmptyImageUrl()), //String.Format("{0}/res/images/s.gif", GlobalConfig.GetExtjsBasePath())), //ResourceHelper.GetWebResourceUrlResAxd("FineUI.res.img.s.gif&v=1"), + // //PageManager.Instance.EnableAspnetSubmitButtonAjax.ToString().ToLower(), + // PageManager.Instance.EnableAjaxLoading.ToString().ToLower(), + // AjaxLoadingTypeName.GetName(PageManager.Instance.AjaxLoadingType), + // PageManager.Instance.EnableAjax.ToString().ToLower(), + // ThemeHelper.GetName(PageManager.Instance.Theme), + // PageManager.Instance.EnableFormChangeConfirm.ToString().ToLower() + // ); + + JsObjectBuilder initObj = new JsObjectBuilder(); + + if (PageManager.Instance.FormMessageTarget != ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT) + { + initObj.AddProperty("msgTarget", MessageTargetHelper.GetName(PageManager.Instance.FormMessageTarget)); + } + + if (PageManager.Instance.FormLabelWidth != ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT) + { + initObj.AddProperty("labelWidth", PageManager.Instance.FormLabelWidth.Value); + } + + if (PageManager.Instance.FormLabelSeparator != ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT) + { + initObj.AddProperty("labelSeparator", PageManager.Instance.FormLabelSeparator); + } + + //initObj.AddProperty("blankImageUrl", Page.ResolveUrl(ResourceHelper.GetEmptyImageUrl())); + + if (PageManager.Instance.EnableAjaxLoading != ConfigPropertyValue.ENABLE_AJAX_LOADING_DEFAULT) + { + initObj.AddProperty("enableAjaxLoading", PageManager.Instance.EnableAjaxLoading.ToString().ToLower()); + } + + if (PageManager.Instance.AjaxLoadingType != ConfigPropertyValue.AJAX_LOADING_TYPE_DEFAULT) + { + initObj.AddProperty("ajaxLoadingType", AjaxLoadingTypeName.GetName(PageManager.Instance.AjaxLoadingType)); + } + + if (PageManager.Instance.EnableAjax != ConfigPropertyValue.ENABLE_AJAX_DEFAULT) + { + initObj.AddProperty("enableAjax", PageManager.Instance.EnableAjax.ToString().ToLower()); + } + + + if (PageManager.Instance.Language != ConfigPropertyValue.LANGUAGE_DEFAULT) + { + initObj.AddProperty("language", LanguageHelper.GetName(PageManager.Instance.Language)); + } + + if (PageManager.Instance.EnableFormChangeConfirm) + { + initObj.AddProperty("formChangeConfirm", PageManager.Instance.EnableFormChangeConfirm.ToString().ToLower()); + } + + if (PageManager.Instance.AjaxTimeout != ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT) + { + initObj.AddProperty("ajaxTimeout", PageManager.Instance.AjaxTimeout); + } + + if (PageManager.Instance.EnableFStateValidation) + { + initObj.AddProperty("fstateValidation", true); + } + + initObj.AddProperty("theme", ThemeHelper.GetName(PageManager.Instance.Theme)); + initObj.AddProperty("loadingImage", PageManager.Instance.GetLoadingImageUrl()); + initObj.AddProperty("_version", GlobalConfig.ProductVersion); + + + // 客户端根网址 + initObj.AddProperty("baseUrl", Page.ResolveUrl("~/")); + + + beforeBuilder.AppendFormat("F.f_init({0});", initObj); + + //if (PageManager.Instance.BeforeAjaxPostBackScript != String.Empty) + //{ + // beforeBuilder.AppendFormat("F.util.beforeAjaxPostBackScript=function(){{{0}}};", PageManager.Instance.BeforeAjaxPostBackScript); + //} + + //beforeBuilder.Append("F.ajax.hookPostBack();"); + + //if (PageManager.Instance.EnableAjax) + //{ + // if (PageManager.Instance.AjaxTimeout != ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT) + // { + // beforeBuilder.AppendFormat("Ext.Ajax.timeout={0};", PageManager.Instance.AjaxTimeout * 1000); + // } + //} + + //if (PageManager.Instance.EnableBigFont) + //{ + // beforeBuilder.Append("Ext.getBody().addCls('bigfont');"); + //} + + + // WindowGroup + //beforeBuilder.AppendFormat("{0}=new Ext.WindowGroup();{0}.zseed=6000;", WINDOW_DEFAULT_GROUP_ID); + + //// CookieProvider + //beforeBuilder.AppendFormat("{0}=new Ext.state.CookieProvider();", COOKIE_PROVIDER_ID); + + //// HiddenFields + //beforeBuilder.AppendFormat("{0}=[];", HIDDEN_FIELDS_ID); + + // 保存页面中可输入的表单字段状态是否发生变化的隐藏字段 + //innderBuilder.AppendFormat("var sn=document.createElement('input');sn.type='hidden';sn.value='false';sn.id=sn.name='{0}';Ext.getBody().query('form')[0].appendChild(sn);", PAGE_STATE_CHANGED_ID); + //innderBuilder.AppendFormat("Ext.DomHelper.append(document.forms[0],{{tag:'input',type:'hidden',value:'false',id:'{0}',name:'{0}'}});", PAGE_STATE_CHANGED_ID); + //beforeBuilder.AppendFormat("F.util.setHiddenFieldValue('{0}','false');", PAGE_STATE_CHANGED_ID); + + // 5.预加载图片 + //beforeBuilder.AppendFormat("{0}=[];", PRELOAD_IMAGES_ID); + //beforeBuilder.AppendFormat("{0}.push('{1}');", PRELOAD_IMAGES_ID, ResourceHelper.GetWebResourceUrl(Page, "FineUI.res.img.default.form.error-tip-corners.gif")); + //beforeBuilder.AppendFormat("box_preloadImages({0});", PRELOAD_IMAGES_ID); + + #endregion + + #region afterBuilder + + //StringBuilder afterBuilder = new StringBuilder(); + + //afterBuilder.Append("\r\n"); + + // 注册隐藏字段 + //string hiddenFieldScript = "var itemNode=Ext.get(item[0]);if(itemNode==null){Ext.DomHelper.append(document.forms[0],{tag:'input',type:'hidden',value:item[1],id:item[0],name:item[0]});}else{itemNode.dom.value=item[1];}"; + //afterBuilder.AppendFormat("Ext.each({0},function(item){{{1}}},box);", HIDDEN_FIELDS_ID, hiddenFieldScript); + //afterBuilder.Append("box_alertDEBUG();"); + + //afterBuilder.Append("if(typeof(onReady)==='function'){onReady.call(window);}"); + //afterBuilder.Append("F.util.triggerReady();"); + //// 如果是回发并且允许回发注册onReady脚本 + //if (!Page.IsPostBack || (Page.IsPostBack && PageManager.Instance.ExecuteOnReadyWhenPostBack)) + //{ + // afterBuilder.Append("if(typeof(onReady)==='function'){onReady.call(window);}"); + //} + //afterBuilder.Append("\r\n"); + + //#if DEBUG + // afterBuilder.Append("window.f_render_end_time = new Date();"); + //#endif + #endregion + + + // 需要注册script + //string contentScript = String.Format("EXTASPNET_READY=function(){{{0}}};", beforeBuilder.ToString() + script + afterBuilder.ToString()); + //contentScript += "Ext.onReady(EXTASPNET_READY);";//Ext.EventManager.on(window,'onload',function(){EXTASPNET_READY();});";//if(Ext.isIE){}else{Ext.onReady(EXTASPNET_READY);}"; + string contentScript = String.Format("F.load(function(){{{0}}});", beforeBuilder.ToString() + script); + //#if DEBUG + // contentScript += "var x_end_time=new Date();"; + //#endif + + #region RELEASE模式下去除换行符 + + if (!GlobalConfig.GetDebugMode()) + { + contentScript = contentScript.Replace("\r\n", ""); + } + + #endregion + + string checkScript = "if(!F&&!Ext){if(confirm('ERROR: extjs folder is lost, download it now?')){window.location.href='http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218';}}"; + + return checkScript + contentScript; + } + + + + /// <summary> + /// 返回经过排序的 _startupControlScriptList 列表,子控件排在父控件的前面 + /// </summary> + /// <returns></returns> + internal List<ScriptBlock> GetSortedControlScriptList() + { + List<ScriptBlock> result = new List<ScriptBlock>(); + + #region old code + + //if (!String.IsNullOrEmpty(_exclusiveScript)) + //{ + // result.Add(new ScriptBlock(null, _exclusiveScript)); + + // return result; + //} + + #endregion + + #region 1.插入AbsoluteScript(Level<0) + + // Level的正值和负值的分割点 + int levelZeroIndex = 0; + + // 插入所有 Control 为 null 的记录 + for (levelZeroIndex = 0; levelZeroIndex < _startupAbsoluteScriptBlockList.Count; levelZeroIndex++) + { + AbsoluteScriptBlock controlScript = _startupAbsoluteScriptBlockList[levelZeroIndex]; + + if (controlScript.Level < 0) + { + result.Add(new ScriptBlock(null, controlScript.Script)); + } + else + { + break; + } + } + + #endregion + + #region 2.排序,子控件排在父控件的前面 + + for (int i = 0, count = _startupScriptBlockList.Count; i < count; i++) + { + ScriptBlock controlScript = _startupScriptBlockList[i]; + + // Alert 静态类的 Control 为null + if (controlScript.Control == null) + { + // 如果 Control 为null,则不处理这条记录 + continue; + } + + int insertIndex = GetInsertIndex(controlScript.Control, result); + + #region old code + //#if DEBUG + // // 在JS脚本前面增加 \t ,这样层次关系明显一点 + // controlScript.Script = GetLineBreakString(insertIndex, result) + controlScript.Script; + //#endif + #endregion + + result.Insert(insertIndex, controlScript); + } + + #endregion + + #region 计算渲染时间 + + //string timeScript ="F.endDateTime=new Date();"; + //string totalTime = "'FineUI渲染时间:'+X.endDateTime.getElapsed(X.startDateTime)+'ms'"; + //totalTime += "+'['+X.startPageLayoutDateTime.getElapsed(X.startDateTime)+','"; + //totalTime += "+X.endPageLayoutDateTime.getElapsed(X.startPageLayoutDateTime)+']'"; + //timeScript += String.Format("if(!X.startPageLayoutDateTime){{X.startPageLayoutDateTime=X.endPageLayoutDateTime=X.endDateTime;}}if(window.location.href.indexOf('DEBUG')>0){{alert({0});}}", totalTime); + + //result.Add(new ScriptBlock(null, "box_alertDEBUG();")); + + #endregion + + #region 4.插入AbsoluteScript(Level>0) + + // 插入所有 Control 为 null 的记录 + for (levelZeroIndex = 0; levelZeroIndex < _startupAbsoluteScriptBlockList.Count; levelZeroIndex++) + { + AbsoluteScriptBlock controlScript = _startupAbsoluteScriptBlockList[levelZeroIndex]; + + if (controlScript.Level >= 0) + { + //#if DEBUG + // controlScript.Script = "\r\n" + controlScript.Script; + //#endif + + result.Add(new ScriptBlock(null, controlScript.Script)); + } + } + + #endregion + + return result; + } + + #region GetLineBreakString + + ///// <summary> + ///// 取得要插入位置的 换行前缀 + ///// </summary> + ///// <param name="insertIndex"></param> + ///// <param name="list"></param> + ///// <returns></returns> + //private string GetLineBreakString(int insertIndex, List<ScriptBlock> list) + //{ + // if (insertIndex == list.Count) + // { + // return DEBUG_LINE_BREAK; + // } + // else + // { + // return "\r\n" + '\t' + GetStringPrefix(list[insertIndex].Script); + // } + //} + + ///// <summary> + ///// 取得字符串的换行前缀 + ///// </summary> + ///// <param name="script"></param> + ///// <returns></returns> + //private string GetStringPrefix(string script) + //{ + // StringBuilder sb = new StringBuilder(); + // for (int i = 2, count = script.Length; i < count; i++) + // { + // if (script[i] == '\t') + // { + // sb.Append("\t"); + // } + // else + // { + // break; + // } + // } + + // return sb.ToString(); + //} + + #endregion + + #region GetInsertIndex + + /// <summary> + /// 取得应该将Script插入的位置 + /// 要能够向上回溯,因为控件的父控件可能不存在列表中,而父控件的父控件存在列表中 + /// </summary> + /// <param name="testControl"></param> + /// <param name="checkList"></param> + /// <returns></returns> + private int GetInsertIndex(ControlBase testControl, List<ScriptBlock> checkList) + { + int returnIndex = checkList.Count; + + // 这个地方不能是ControlBase,比如用户控件中控件,要能向上回溯到UserControlConnector + Control parentControl = testControl.Parent; + while (parentControl != null) + { + for (int i = 0, count = checkList.Count; i < count; i++) + { + Control checkControl = checkList[i].Control; + + if (checkControl != null && parentControl == checkControl) + { + return i; + } + } + + parentControl = parentControl.Parent; + } + + if (testControl is Menu) + { + // 如果菜单控件没有上级,则默认将脚本放在最前面 + return 0; + } + else + { + return returnIndex; + } + } + + ///// <summary> + ///// 测试testControl 是否 existControl的子控件 + ///// </summary> + ///// <param name="testControl"></param> + ///// <param name="existControl"></param> + ///// <returns></returns> + //private bool IsTestControlChildOf(Control testControl, Control existControl) + //{ + // bool result = false; + + // Control parentControl = testControl.Parent; + + // // 如果父控件不是HtmlForm + // while (!(parentControl is System.Web.UI.HtmlControls.HtmlForm)) + // { + + // } + //} + + #endregion + + #endregion + + #region AddStartupCSS + + /// <summary> + /// 添加样式 + /// </summary> + /// <param name="key"></param> + /// <param name="cssConent"></param> + /// <returns></returns> + public void AddStartupCSS(string key, string cssConent) + { + // 如果已经包含Key的样式已经存在,则覆盖 + if (_startupCssDic.ContainsKey(key)) + { + _startupCssDic[key] = cssConent; + } + else + { + _startupCssDic.Add(key, cssConent); + } + + //// 内容有相同的 + //foreach (string name in _startupCssDic.Keys) + //{ + // if (_startupCssDic[name] == cssConent) + // { + // return name; + // } + //} + } + + /// <summary> + /// 删除已经添加的CSS样式 + /// </summary> + /// <param name="key"></param> + public void RemoveStartupCSS(string key) + { + if (_startupCssDic.ContainsKey(key)) + { + _startupCssDic.Remove(key); + } + } + + #endregion + + #region AddAbsoluteStartupScript + + public void AddAbsoluteStartupScript(string script) + { + AddAbsoluteStartupScript(script, Constants.ABSOLUTE_STARTUP_SCRIPT_DEFAULT_LEVEL); + } + + public void AddAbsoluteStartupScript(string script, int level) + { + AbsoluteScriptBlock scriptBlock = new AbsoluteScriptBlock(script, level); + + for (int i = 0; i < _startupAbsoluteScriptBlockList.Count; i++) + { + AbsoluteScriptBlock currentScript = _startupAbsoluteScriptBlockList[i]; + if (scriptBlock.Level < currentScript.Level) + { + _startupAbsoluteScriptBlockList.Insert(i, scriptBlock); + return; + } + } + + _startupAbsoluteScriptBlockList.Add(scriptBlock); + } + + #endregion + + #region AddStartupScript/IsStartupScriptExist + + public void AddStartupScript(ControlBase control, string script) + { + AddStartupScript(control, script, String.Empty); + } + + /// <summary> + /// 添加脚本 + /// 相同控件的脚本合并在一起(30372245@qq.com 2008-7-4) + /// </summary> + /// <param name="control"></param> + /// <param name="script"></param> + /// <param name="extraScript"></param> + public void AddStartupScript(ControlBase control, string script, string extraScript) + { + ScriptBlock cs = new ScriptBlock(control, script); + + ScriptBlock existBlock = GetStartupScript(control); + if (existBlock == null) + { + _startupScriptBlockList.Add(cs); + } + else + { + existBlock.Script += script; + //existBlock.ExtraScript += extraScript; + } + } + + + /// <summary> + /// 控件control的注册脚本是否存在 + /// </summary> + /// <param name="control"></param> + /// <returns></returns> + public bool IsStartupScriptExist(ControlBase control) + { + foreach (ScriptBlock cs in _startupScriptBlockList) + { + if (cs.Control == control) + { + return true; + } + } + + return false; + } + + + public ScriptBlock GetStartupScript(ControlBase control) + { + foreach (ScriptBlock cs in _startupScriptBlockList) + { + if (cs.Control == control) + { + return cs; + } + } + + return null; + } + + + public void RemoveStartupScript(ControlBase control) + { + for (int i = 0; i < _startupScriptBlockList.Count; i++) + { + if (_startupScriptBlockList[i].Control == control) + { + _startupScriptBlockList.RemoveAt(i); + break; + } + } + } + + #endregion + + #region PostBackStates + + private JObject _requestStates = null; + + public JObject PostBackStates + { + get + { + if (_requestStates == null && Page.IsPostBack) + { + //string state = HttpUtility.UrlDecode(HttpContext.Current.Request.Form["F_STATE"]); + string state = HttpContext.Current.Request.Form["F_STATE"]; + string xstateURI = HttpContext.Current.Request.Form["F_STATE_URI"]; + if (!String.IsNullOrEmpty(state)) + { + if (String.IsNullOrEmpty(xstateURI)) + { + state = DecodeFrom64(state); + } + else + { + state = HttpUtility.UrlDecode(state); + } + } + + if (String.IsNullOrEmpty(state)) + { + state = "{}"; + } + _requestStates = JObject.Parse(state); + } + return _requestStates; + } + } + + + + public static string DecodeFrom64(string encodedData) + { + byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); + return System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes); + } + + public static string EncodeTo64(string toEncode) + { + byte[] toEncodeAsBytes = System.Text.UTF8Encoding.UTF8.GetBytes(toEncode); + return System.Convert.ToBase64String(toEncodeAsBytes); + } + + #endregion + + #region IsFineUIAjaxPostBack + + public bool IsFineUIAjaxPostBack + { + get + { + return HttpContext.Current.Request.Form["F_AJAX"] == "true"; + } + } + + #endregion + + #region oldcode - we don't support Asp.Net Ajax + + ///// <summary> + ///// 注册脚本 - 控件级别 + ///// </summary> + ///// <param name="control"></param> + ///// <param name="scriptKey"></param> + ///// <param name="scriptContent"></param> + //public void AjaxScriptManagerRegisterStartupScript(Control control, string scriptKey, string scriptContent) + //{ + // object scriptManagerInstance = GetAjaxScriptManagerInstance(); + + // if (scriptManagerInstance != null) + // { + // Type[] types = new Type[] { typeof(Control), typeof(Type), typeof(string), typeof(string), typeof(bool) }; + // MethodInfo method = scriptManagerInstance.GetType().GetMethod("RegisterStartupScript", types); + // object[] parameters = new object[] { control, control.GetType(), scriptKey, scriptContent, true }; + // method.Invoke(scriptManagerInstance, parameters); + // } + //} + + ///// <summary> + ///// 注册脚本 - 页面级别 + ///// </summary> + ///// <param name="control"></param> + ///// <param name="scriptKey"></param> + ///// <param name="scriptContent"></param> + //public void AjaxScriptManagerRegisterStartupScript(Page page, string scriptKey, string scriptContent) + //{ + // object scriptManagerInstance = GetAjaxScriptManagerInstance(); + + // if (scriptManagerInstance != null) + // { + // Type[] types = new Type[] { typeof(Page), typeof(Type), typeof(string), typeof(string), typeof(bool) }; + // MethodInfo method = scriptManagerInstance.GetType().GetMethod("RegisterStartupScript", types); + // object[] parameters = new object[] { page, page.GetType(), scriptKey, scriptContent, true }; + // method.Invoke(scriptManagerInstance, parameters); + // } + //} + + /////// <summary> + /////// 是否局部回发 + /////// 这种方法也是也可以的 + /////// </summary> + /////// <returns></returns> + ////public static bool IsPartialPostBack() + ////{ + //// if (HttpContext.Current != null && HttpContext.Current.Request != null) + //// { + //// string ajaxValue = HttpContext.Current.Request.Headers["X-MicrosoftAjax"]; + + //// if (!String.IsNullOrEmpty(ajaxValue) && ajaxValue.ToLower().Contains("delta=true")) + //// { + //// return true; + //// } + //// } + + //// return false; + ////} + + ///// <summary> + ///// 当前是否局部回发 + ///// </summary> + ///// <param name="page"></param> + ///// <returns></returns> + //public bool IsAspNetAjaxPostBack + //{ + // get + // { + // object scriptManagerInstance = GetAjaxScriptManagerInstance(); + + // if (scriptManagerInstance != null) + // { + // PropertyInfo pInfo = scriptManagerInstance.GetType().GetProperty("IsInAsyncPostBack"); + + // object isInAsyncPostBackObj = pInfo.GetValue(scriptManagerInstance, null); + + // if (Convert.ToBoolean(isInAsyncPostBackObj)) + // { + // return true; + // } + // } + + // return false; + // } + //} + + ///// <summary> + ///// 包含的 System.Web.UI.ScriptManager 实例 + ///// </summary> + ///// <returns></returns> + //public object GetAjaxScriptManagerInstance() + //{ + // foreach (DictionaryEntry entry in Page.Items) + // { + // if (entry.Key.ToString().Contains("System.Web.UI.ScriptManager")) + // { + // return entry.Value; + // } + // } + + // return null; + //} + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/ResponseFilter.cs b/FineUI_v6/FineUI/Business/ResourceManager/ResponseFilter.cs new file mode 100644 index 0000000..987e49f --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/ResponseFilter.cs @@ -0,0 +1,578 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Web; +using System.Web.UI; +using HtmlAgilityPack; +using System.Text.RegularExpressions; + + +namespace FineUI +{ + /// <summary> + /// AJAX输出过滤器 + /// </summary> + internal class ResponseFilter : Stream + { + #region fields + + private Stream _responseStream; + private MemoryStream _memoryStream; + + #endregion + + #region Constructor + + internal ResponseFilter(Stream responseStream) + { + _responseStream = responseStream; + _memoryStream = new MemoryStream(); + } + + #endregion + + #region overrides + + public override bool CanRead + { + get { return false; } + } + + public override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override void Flush() + { + _memoryStream.Flush(); + } + + public override long Length + { + get { return 0; } + } + + public override long Position + { + get { return 0; } + set { } + } + + public override int Read(byte[] buffer, int offset, int count) + { + return 0; + } + + public override long Seek(long offset, SeekOrigin origin) + { + return 0; + } + + public override void SetLength(long value) + { + } + + public override void Write(byte[] buffer, int offset, int count) + { + _memoryStream.Write(buffer, offset, count); + } + + public override void Close() + { + StringBuilder sb = new StringBuilder(); + ResolveResponseScripts(sb); + + string responseText = sb.ToString(); + + // 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,不编码会导致HTML标签错乱 + if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data")) + { + // HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20 + responseText = HttpUtility.UrlEncode(responseText); + responseText = responseText.Replace("+", "%20"); + } + + // 从输出流创建TextWriter + TextWriter writer = new StreamWriter(_responseStream, Encoding.UTF8); + + writer.Write(responseText); + + // 输出 + writer.Flush(); + writer.Dispose(); + base.Close(); + _responseStream.Close(); + } + + + + #endregion + + #region ResolveResponseScripts + + private void ResolveResponseScripts(StringBuilder sb) + { + // 我们不需要把Response的代码放在自执行的函数中,因为在X.ajax.js中,通过new Function(scripts)();来执行Response的代码。 + // Wrapper all the JavaScript in a self-execution function to prevent pollution of global JavaScript namespace. + //writer.Write("(function(){"); + + #region 网页重定向 + + // 重定向页面 + if (HttpContext.Current.Response.RedirectLocation != null) + { + sb.Append("window.location.replace('" + HttpContext.Current.Response.RedirectLocation + "');"); + return; + } + + #endregion + + #region 生成的HTML代码 + + // 生成的页面内容 + string completeHtml = GetCompleteHtml(); + + HtmlDocument doc = new HtmlDocument(); + doc.OptionFixNestedTags = true; + doc.LoadHtml(completeHtml); + + #endregion + + #region 监视ViewState的改变 + + // 更新ViewState,如果本AJAX请求的ViewState和当前页面上的ViewState不一致,则丢弃本次更新 + UpdateViewState(sb, doc); + + + #endregion + #region 页面上每个控件应该输出的脚本 + + //// 设置提交表单的按钮等元素可用enable(有可能在后面的被覆盖) + //sb.Append(GetEnableTargetControlScript()); + + // 添加所有需要在AJAX时更新的脚本 + StringBuilder ajaxScriptBuilder = new StringBuilder(); + foreach (string script in ResourceManager.Instance.AjaxScriptList) + { + ajaxScriptBuilder.Append(script); + } + foreach (string script in ResourceManager.Instance.AjaxAbsoluteScriptList) + { + ajaxScriptBuilder.Append(script); + } + + /* + StringBuilder gridTplsBuilder = new StringBuilder(); + StringBuilder shortNameBuilder = new StringBuilder(); + Dictionary<string, string> shortNameDic = ResourceManager.Instance.AjaxShortNameList; + if (shortNameDic.Count > 0) + { + shortNameBuilder.Append("var "); + int index = 0, count = shortNameDic.Count; + foreach (string clientId in shortNameDic.Keys) + { + string xid = shortNameDic[clientId]; + string scriptId = String.Format("F('{0}')", clientId); + shortNameBuilder.AppendFormat("{0}={1}", xid, scriptId); + if (index == count - 1) + { + shortNameBuilder.Append(';'); + } + else + { + shortNameBuilder.Append(','); + } + + // 不能将所有的F('RegionPanel1_Button1')替换为x0,因为有时F('RegionPanel1_Button1')会出现在HTML片段中 + //ajaxScriptBuilder.Replace(scriptId, xid); + + + ///////////////////////// + // 重新加载表格数据(也就是存在对x_loadData函数的调用) + if (PageManager.Instance.AjaxGridReloadedClientIDs.Contains(clientId) && PageManager.Instance.AjaxGridClientIDs.Contains(clientId)) + { + PageManager.Instance.AjaxGridClientIDs.Remove(clientId); + + gridTplsBuilder.AppendFormat("{0}.f_tpls={1};", xid, GetGridTpls(doc, clientId)); + + } + + index++; + } + } + + // 不需要重新加载表格数据,但是要更新模板列 + if (PageManager.Instance.AjaxGridClientIDs.Count != 0) + { + foreach (string clientId in PageManager.Instance.AjaxGridClientIDs) + { + gridTplsBuilder.AppendFormat("F('{0}').f_updateTpls({1});", clientId, GetGridTpls(doc, clientId)); + } + } + */ + + // 2. 短名称 + string shortNameScript = String.Empty; + List<string> shortNameList = new List<string>(); + Dictionary<string, string> shortNameDic = ResourceManager.Instance.AjaxShortNameList; + if (shortNameDic.Count > 0) + { + foreach (string clientId in shortNameDic.Keys) + { + string xid = shortNameDic[clientId]; + shortNameList.Add(String.Format("{0}=F('{1}')", xid, clientId)); + } + } + if (shortNameList.Count > 0) + { + shortNameScript = String.Format("var {0};", String.Join(",", shortNameList.ToArray())); + } + + // 3. 表格相关 + StringBuilder gridTplsBuilder = new StringBuilder(); + + // 重新加载表格数据(也就是存在对f_loadData函数的调用) + if (PageManager.Instance.AjaxGridReloadedClientIDs.Count > 0) + { + foreach (string reloadGridClientID in PageManager.Instance.AjaxGridReloadedClientIDs) + { + string xid = shortNameDic[reloadGridClientID]; + gridTplsBuilder.AppendFormat("{0}.f_tpls={1};", xid, GetGridTpls(doc, reloadGridClientID)); + } + } + + + // 当前控件 + sb.Append(shortNameScript + gridTplsBuilder.ToString() + ajaxScriptBuilder.ToString()); + + + //// 执行 onReady 脚本 + //sb.Append(GetExecuteOnReadyScript()); + + #endregion + + #region 监视输出HTML的改变 + + // 更新执行的控件(一般是标准的ASP.NET控件) + UpdateASPNETControls(sb, doc); + + //// 更新ViewState + //UpdateViewState(sb, doc, false); + + //// 更新压缩后的ViewState + //UpdateViewState(sb, doc, true); + + // 更新EventValidation(如果存在则更新) + UpdateEventValidation(sb, doc); + + + #endregion + + //writer.Write("})();"); + + #region oldcode + //List<ScriptBlock> sortedList = ResourceManager.Instance.GetSortedControlScriptList(); + //for (int i = 0, count = sortedList.Count; i < count; i++) + //{ + // //Control control = sortedList[i].Control as Control; + // string scriptContent = sortedList[i].Script; + + // // 如果要注册脚本为空,则跳过 + // if (String.IsNullOrEmpty(scriptContent)) + // { + // continue; + // } + + // // 换行符去掉 + // scriptContent = scriptContent.Replace("\r\n", ""); + // writer.Write(scriptContent); + //} + #endregion + } + + #region GetEnableTargetControlScript + + //// 执行用户自定义的 onReady 脚本 + //private static string GetExecuteOnReadyScript() + //{ + // StringBuilder sb = new StringBuilder(); + // if (PageManager.Instance.ExecuteOnReadyWhenPostBack) + // { + // // 每次ajax调用后都要调用onReady脚本 + // //sb.Append("if(typeof(onReady)=='function'){onReady();}"); + // sb.Append("F.ready();"); + // } + + // //sb.Append("if(typeof(onAjaxReady)=='function'){onAjaxReady();}"); + // //sb.Append("F.ajaxReady();"); + + // return sb.ToString(); + //} + + + ///// <summary> + ///// 设置引起本次回发的按钮(或其他控件)可用 + ///// </summary> + ///// <returns></returns> + //private static string GetEnableTargetControlScript() + //{ + // string targetControlClientID = HttpContext.Current.Request.Form[ResourceManager.DISABLED_CONTROL_BEFORE_POSTBACK]; + // if (!String.IsNullOrEmpty(targetControlClientID)) + // { + // return String.Format("F.f_enable('{0}');", targetControlClientID); + // } + // return String.Empty; + //} + + #endregion + + #endregion + + #region GetGridTpls + + private string GetGridTpls(HtmlDocument doc, string controlId) + { + string html = String.Empty; + string tpls = GetHtmlNodeInnerHTML(controlId + "_tpls", doc); + if (!String.IsNullOrEmpty(tpls)) + { + // 删除生成HTML中的 "\r\n " + html = Regex.Replace(tpls, "\r?\n\\s*", ""); + } + + return JsHelper.Enquote(html); + } + + #endregion + + #region UpdateViewState & UpdateEventValidation + + /// <summary> + /// 更新 EventValidation 节点的值 + /// </summary> + /// <param name="sb"></param> + /// <param name="doc"></param> + private void UpdateEventValidation(StringBuilder sb, HtmlDocument doc) + { + string oldEventValidation = HttpContext.Current.Request.Form["__EVENTVALIDATION"]; + //string newEventValidation = GetHtmlNodeValue("<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"", completeHtml); + string newEventValidation = GetHtmlNodeValue("__EVENTVALIDATION", doc); + + if (!String.IsNullOrEmpty(newEventValidation) && (oldEventValidation != newEventValidation)) + { + sb.Append(String.Format("F.f_eventValidation('{0}');", newEventValidation)); + } + + } + + /// <summary> + /// 更新 ViewState 节点的值 + /// </summary> + /// <param name="sb"></param> + /// <param name="doc"></param> + private void UpdateViewState(StringBuilder sb, HtmlDocument doc) + { + string viewStateHiddenFieldID = StringUtil.VIEWSTATE_ID; + //if (gzipped) + //{ + // viewStateHiddenFieldID = StringUtil.GZIPPED_VIEWSTATE_ID; + //} + + string oldViewState = HttpContext.Current.Request.Form[viewStateHiddenFieldID]; + string newViewState = GetHtmlNodeValue(viewStateHiddenFieldID, doc); + + if (!String.IsNullOrEmpty(newViewState) && (oldViewState != newViewState)) + { + int minLength = Math.Min(oldViewState.Length, newViewState.Length); + int changeIndex = minLength; + for (int i = 0, length = minLength; i < length; i++) + { + if (newViewState[i] != oldViewState[i]) + { + changeIndex = i; + break; + } + } + + + /* + if (changeIndex == 0) + { + sb.Append(String.Format("F.util.updateViewState('{0}',{1});", newViewState, gzipped.ToString().ToLower())); + } + else + { + string changedStr = String.Empty; + if (newViewState.Length >= changeIndex) + { + changedStr = newViewState.Substring(changeIndex); + } + + sb.Append(String.Format("F.util.updateViewState('{0}',{1},{2});", changedStr, changeIndex, gzipped.ToString().ToLower())); + } + */ + + + // 如果只有很少的一些字符没改变(小于等于150个字符),还是返回完整的ViewState + if (changeIndex <= 150) + { + sb.Append(String.Format("if(!F.f_viewState(__VIEWSTATE,'{0}'))return;", newViewState)); + } + else + { + string changedStr = String.Empty; + if (newViewState.Length >= changeIndex) + { + changedStr = newViewState.Substring(changeIndex); + } + + sb.Append(String.Format("if(!F.f_viewState(__VIEWSTATE,'{0}',{1}))return;", changedStr, changeIndex)); + } + } + else + { + sb.Append("if(!F.f_viewState(__VIEWSTATE))return;"); + } + } + + + + #endregion + + #region UpdateASPNETControls + + /// <summary> + /// 更新ASP.NET控件 + /// </summary> + /// <param name="sb"></param> + /// <param name="doc"></param> + private void UpdateASPNETControls(StringBuilder sb, HtmlDocument doc) + { + if (PageManager.Instance.AjaxAspnetControls == null) + { + return; + } + foreach (string controlId in PageManager.Instance.AjaxAspnetControls) + { + string controlClientID = controlId; + Control control = ControlUtil.FindControl(controlId); + if (control != null) + { + controlClientID = control.ClientID; + } + string updateHtml = GetHtmlNodeOuterHTML(controlClientID, doc); + if (!String.IsNullOrEmpty(updateHtml)) + { + sb.Append(String.Format("F.util.replace('{0}',{1});", controlClientID, JsHelper.Enquote(updateHtml))); + + /* + // 如果是Asp.net按钮或者ImageButton,需要重新注册点击时AJAX回发页面,而不是调用Button(type=submit)的默认行为 + if (control != null && (control is System.Web.UI.WebControls.Button + || control is System.Web.UI.WebControls.ImageButton)) + { + sb.Append(String.Format("F.util.makeAspnetSubmitButtonAjax('{0}');", control.ClientID)); + } + * */ + } + } + + } + + #endregion + + #region GetCompleteHtml & GetHtmlNodeValue & GetHtmlNodeOuterHTML + + ///// <summary> + ///// 取得 HTML 中一个节点的值 + ///// </summary> + ///// <param name="searchValue"></param> + ///// <param name="completeHtml"></param> + ///// <returns></returns> + //public string GetHtmlNodeValue(string searchValue, string completeHtml) + //{ + // //string search = "<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\""; + // int si = completeHtml.IndexOf(searchValue); + // if (si >= 0) + // { + // si += searchValue.Length; + // int ei = completeHtml.IndexOf('\"', si); + // if (ei >= 0) + // { + // return completeHtml.Substring(si, ei - si); + // } + // } + + // return null; + //} + + + /// <summary> + /// 取得 HTML 中一个节点的值 + /// </summary> + /// <param name="nodeId"></param> + /// <param name="doc"></param> + /// <returns></returns> + public string GetHtmlNodeValue(string nodeId, HtmlDocument doc) + { + HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='" + nodeId + "']"); + if (node != null) + { + return node.Attributes["value"].Value; + } + return null; + } + + /// <summary> + /// 取得 HTML 中一个节点的OuterHtml + /// </summary> + /// <param name="nodeId"></param> + /// <param name="doc"></param> + /// <returns></returns> + public string GetHtmlNodeOuterHTML(string nodeId, HtmlDocument doc) + { + HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='" + nodeId + "']"); + if (node != null) + { + return node.OuterHtml; + } + return null; + } + + public string GetHtmlNodeInnerHTML(string nodeId, HtmlDocument doc) + { + HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='" + nodeId + "']"); + if (node != null) + { + return node.InnerHtml; + } + return null; + } + + /// <summary> + /// 获取当前输出流的HTML内容 + /// </summary> + /// <returns></returns> + public string GetCompleteHtml() + { + string _completeHtml; + + _memoryStream.Position = 0; + using (TextReader reader = new StreamReader(_memoryStream)) + { + _completeHtml = reader.ReadToEnd(); + } + + return _completeHtml; + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/ScriptBlock.cs b/FineUI_v6/FineUI/Business/ResourceManager/ScriptBlock.cs new file mode 100644 index 0000000..44c13ac --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/ScriptBlock.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 控件相关脚本 + /// </summary> + internal class ScriptBlock + { + private ControlBase _control; + + /// <summary> + /// 要注册脚本的控件 + /// </summary> + public ControlBase Control + { + get { return _control; } + set { _control = value; } + } + + + private string _script; + + /// <summary> + /// 脚本 + /// </summary> + public string Script + { + get { return _script; } + set { _script = value; } + } + + + + //private string _extraScript; + + ///// <summary> + ///// 额外的脚本 + ///// </summary> + //public string ExtraScript + //{ + // get { return _extraScript; } + // set { _extraScript = value; } + //} + + + + public ScriptBlock() + { + } + + + public ScriptBlock(ControlBase control, string script) + { + _control = control; + _script = script; + + } + + //public ScriptBlock(Control control, string script, string extraScript) + //{ + // _control = control; + // _script = script; + // _extraScript = extraScript; + //} + + + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/ScriptModule.cs b/FineUI_v6/FineUI/Business/ResourceManager/ScriptModule.cs new file mode 100644 index 0000000..42e8741 --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/ScriptModule.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Web; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ģ飨ҪResponse.Redirect + /// </summary> + public class ScriptModule : IHttpModule + { + private void PreSendRequestHeadersHandler(object sender, EventArgs args) + { + HttpApplication application = (HttpApplication)sender; + HttpResponse response = application.Response; + + if (response.StatusCode == 302) + { + if (application.Request.Form["F_AJAX"] == "true") + { + string redirectLocation = response.RedirectLocation; + List<HttpCookie> cookies = new List<HttpCookie>(response.Cookies.Count); + for (int i = 0; i < response.Cookies.Count; i++) + { + cookies.Add(response.Cookies[i]); + } + + + response.ClearContent(); + response.ClearHeaders(); + for (int i = 0; i < cookies.Count; i++) + { + response.AppendCookie(cookies[i]); + } + response.Cache.SetCacheability(HttpCacheability.NoCache); + response.ContentType = "text/html"; + response.Write(String.Format("window.location.href='{0}';", redirectLocation)); + } + } + } + + #region IHttpModule Ա + + /// <summary> + /// Դ + /// </summary> + public void Dispose() + { + + } + + /// <summary> + /// ʼģ + /// </summary> + /// <param name="context">HttpӦó</param> + public void Init(HttpApplication context) + { + context.PreSendRequestHeaders += new EventHandler(PreSendRequestHeadersHandler); + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/ResourceManager/TreeNodeIDManager.cs b/FineUI_v6/FineUI/Business/ResourceManager/TreeNodeIDManager.cs new file mode 100644 index 0000000..8d34957 --- /dev/null +++ b/FineUI_v6/FineUI/Business/ResourceManager/TreeNodeIDManager.cs @@ -0,0 +1,81 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: TreeNodeIDManager.cs + * CreatedOn: 2012-08-13 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Configuration; +using System.Reflection; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 存在 Page.Items 上下文中,用于生成JavascriptID + /// </summary> + internal class TreeNodeIDManager + { + #region static fields + public static readonly string CONTEXT_NAME = "TreeNodeIDManagerContextName"; + + #endregion + + #region Instance + + public static TreeNodeIDManager Instance + { + get + { + if (HttpContext.Current != null) + { + TreeNodeIDManager manager = HttpContext.Current.Items[CONTEXT_NAME] as TreeNodeIDManager; + if (manager == null) + { + manager = new TreeNodeIDManager(); + HttpContext.Current.Items[CONTEXT_NAME] = manager; + } + return manager; + } + return null; + } + } + + #endregion + + #region methods + + private int _num = 0; + + public string GetNextTreeNodeID() + { + return String.Format("fnode{0}", _num++); + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/SimulateTree/SimulateTreeHeper.cs b/FineUI_v6/FineUI/Business/SimulateTree/SimulateTreeHeper.cs new file mode 100644 index 0000000..4db24a7 --- /dev/null +++ b/FineUI_v6/FineUI/Business/SimulateTree/SimulateTreeHeper.cs @@ -0,0 +1,273 @@ + + +#region Comment + +/* + * Project: FineUI + * + * FileName: SimulateTreeNode.cs + * CreatedOn: 2008-06-26 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// 模拟树帮助类(用于表格和树控件) + /// </summary> + internal class SimulateTreeHeper + { + // "|-" + private static string X_ELBOW = "<div class=\"x-elbow\"></div>"; + // "|_" + private static string X_ELBOW_END = "<div class=\"x-elbow-end\"></div>"; + // "| " + private static string X_ELBOW_LINE = "<div class=\"x-elbow-line\"></div>"; + // " " + private static string X_ELBOW_EMPTY = "<div class=\"x-elbow-empty\"></div>"; + + + public void ResolveSimulateTree(List<SimulateTreeNode> silumateTreeNodes, bool modifiyOriginalContent) + { + int rowIndex = 0; + foreach (SimulateTreeNode node in silumateTreeNodes) + { + node.ParentNode = GetParentNode(silumateTreeNodes, rowIndex); + node.HasLittleBrother = GetHasLittleBrother(silumateTreeNodes, rowIndex); + + rowIndex++; + } + + foreach (SimulateTreeNode node in silumateTreeNodes) + { + string treePrefix = GetNodeContentLevelPrefix(node); + if (modifiyOriginalContent) + { + node.Text = treePrefix + node.Text; + } + node.SimulateTreeText = treePrefix; + } + } + + private string GetNodeContentLevelPrefix(SimulateTreeNode node) + { + StringBuilder sb = new StringBuilder(); + for (int i = node.Level; i > 0; i--) + { + sb.Append(GetNodeContentLevelPrefix(node, i)); + } + + return sb.ToString(); + } + + + + private string GetNodeContentLevelPrefix(SimulateTreeNode node, int level) + { + #region Rules + + //level = 0, + //level = 1, 有弟节点 |- + // 没弟节点 |_ + //level = 2, 父有弟节点 | 有弟节点 |- + // 父没弟节点 没弟节点 |_ + //level = 3, 父的父有弟节点 | 父有弟节点 | 有弟节点 |- + // 父的父没弟节点 父没弟节点 没弟节点 |_ + + #endregion + + if (level == 1) + { + if (node.HasLittleBrother) + { + return X_ELBOW; + } + else + { + return X_ELBOW_END; + } + } + else + { + if (GetParentNodeByLevel(node, level).HasLittleBrother) + { + return X_ELBOW_LINE; + } + else + { + return X_ELBOW_EMPTY; + } + } + //else if (level == 3) + //{ + // if (node.ParentNode.ParentNode.HasLittleBrother) + // { + // return X_ELBOW_LINE; + // } + // else + // { + // return X_ELBOW_EMPTY; + // } + //} + //else if (level == 4) + //{ + // if (node.ParentNode.ParentNode.ParentNode.HasLittleBrother) + // { + // return X_ELBOW_LINE; + // } + // else + // { + // return X_ELBOW_EMPTY; + // } + //} + //else if (level == 5) + //{ + // if (node.ParentNode.ParentNode.ParentNode.ParentNode.HasLittleBrother) + // { + // return X_ELBOW_LINE; + // } + // else + // { + // return X_ELBOW_EMPTY; + // } + //} + //else if (level == 6) + //{ + // if (node.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.HasLittleBrother) + // { + // return X_ELBOW_LINE; + // } + // else + // { + // return X_ELBOW_EMPTY; + // } + //} + + //// We support 6 levels at the most. + //return " "; + } + + private SimulateTreeNode GetParentNodeByLevel(SimulateTreeNode node, int level) + { + SimulateTreeNode parentNode = node; + for (int i = 1; i < level; i++) + { + parentNode = parentNode.ParentNode; + } + return parentNode; + } + + private SimulateTreeNode GetParentNode(List<SimulateTreeNode> silumateTree, int rowIndex) + { + SimulateTreeNode currentNode = silumateTree[rowIndex]; + if (currentNode.Level == 0) + { + return null; + } + else + { + for (int i = rowIndex - 1; i >= 0; i--) + { + SimulateTreeNode node = silumateTree[i]; + if (node.Level == currentNode.Level - 1) + { + return node; + } + } + } + + return null; + } + + private bool GetHasLittleBrother(List<SimulateTreeNode> silumateTree, int rowIndex) + { + SimulateTreeNode currentNode = silumateTree[rowIndex]; + if (rowIndex == silumateTree.Count - 1) + { + // 树的最后一个节点,当然没有弟节点 + return false; + } + else + { + //SilumateTreeNode nextNode = silumateTree[rowIndex + 1]; + //if (nextNode.Level != currentNode.Level) + //{ + // return false; + //} + //else + //{ + // return true; + //} + for (int i = rowIndex + 1; i < silumateTree.Count; i++) + { + SimulateTreeNode node = silumateTree[i]; + if (node.Level == currentNode.Level) + { + return true; + } + else if (node.Level < currentNode.Level) + { + return false; + } + } + } + + return false; + } + + + #region old code + //private string X_ELBOW + //{ + // get + // { + // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow.gif")); + // return "<div class=\"x-elbow\"></div>"; + // } + //} + //private string X_ELBOW_END + //{ + // get + // { + // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow-end\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow-end.gif")); + // return "<div class=\"x-elbow-end\"></div>"; + // } + //} + //private string X_ELBOW_LINE + //{ + // get + // { + // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow-line\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow-line.gif")); + // return "<div class=\"x-elbow-line\"></div>"; + // } + //} + //private string X_ELBOW_EMPTY + //{ + // get + // { + // //return String.Format("<img src=\"{0}\" style=\"vertical-align:text-bottom;\" alt=\"elbow-empty\">", ResourceHelper.GetWebResourceUrl("FineUI.res.X.images.elbow-empty.gif")); + // return "<div class=\"x-elbow-empty\"></div>"; + // } + //} + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/Business/SimulateTree/SimulateTreeNode.cs b/FineUI_v6/FineUI/Business/SimulateTree/SimulateTreeNode.cs new file mode 100644 index 0000000..8e1c195 --- /dev/null +++ b/FineUI_v6/FineUI/Business/SimulateTree/SimulateTreeNode.cs @@ -0,0 +1,112 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: SimulateTreeNode.cs + * CreatedOn: 2008-06-26 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// 模拟树结构的节点类 + /// </summary> + internal class SimulateTreeNode + { + private string _simulateTreeText; + + /// <summary> + /// 模拟树的节点内容 + /// </summary> + public string SimulateTreeText + { + get { return _simulateTreeText; } + set { _simulateTreeText = value; } + } + + + private string _text; + + /// <summary> + /// 节点内容 + /// </summary> + public string Text + { + get { return _text; } + set { _text = value; } + } + + private string _value; + + /// <summary> + /// 节点内容 + /// </summary> + public string Value + { + get { return _value; } + set { _value = value; } + } + + private int _level; + + /// <summary> + /// 节点所在层次(从0开始,0表示根节点) + /// </summary> + public int Level + { + get { return _level; } + set { _level = value; } + } + + private SimulateTreeNode _parentNode; + + /// <summary> + /// 父节点 + /// </summary> + public SimulateTreeNode ParentNode + { + get { return _parentNode; } + set { _parentNode = value; } + } + + private bool _hasLittleBrother; + + /// <summary> + /// 是否有弟节点 + /// </summary> + public bool HasLittleBrother + { + get { return _hasLittleBrother; } + set { _hasLittleBrother = value; } + } + + + private bool _enableSelect; + + public bool EnableSelect + { + get { return _enableSelect; } + set { _enableSelect = value; } + } + } +} diff --git a/FineUI_v6/FineUI/Business/Util/ControlUtil.cs b/FineUI_v6/FineUI/Business/Util/ControlUtil.cs new file mode 100644 index 0000000..7570411 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/ControlUtil.cs @@ -0,0 +1,253 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ControlUtil.cs + * CreatedOn: 2008-05-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Web; + +namespace FineUI +{ + /// <summary> + /// 控件相关帮助函数 + /// </summary> + public class ControlUtil + { + #region FindParentControl + + /// <summary> + /// 查找父控件 + /// </summary> + /// <param name="control">当前控件</param> + /// <param name="controlType">查找控件的类型</param> + /// <param name="checkSubclassOf">如果找到的控件实例继承自controlType,同样也认为是找到了</param> + /// <returns>找到的第一个父控件</returns> + public static Control FindParentControl(Control control, Type controlType, Boolean checkSubclassOf) + { + if (control == null || control is System.Web.UI.HtmlControls.HtmlForm) + { + return null; + } + + if (control.Parent != null) + { + Type parentType = control.Parent.GetType(); + + // http://stackoverflow.com/questions/2742276/in-c-how-do-i-check-if-a-type-is-a-subtype-or-the-type-of-an-object + if (parentType.Equals(controlType) || (checkSubclassOf && parentType.IsSubclassOf(controlType))) + { + return control.Parent; + } + else + { + return FindParentControl(control.Parent, controlType, checkSubclassOf); + } + } + + return null; + } + + + /// <summary> + /// 查找父控件 + /// </summary> + /// <param name="control">当前控件</param> + /// <param name="controlType">查找控件的类型</param> + /// <returns>找到的第一个父控件</returns> + public static Control FindParentControl(Control control, Type controlType) + { + return FindParentControl(control, controlType, false); + } + + + #endregion + + /// <summary> + /// 获得服务器控件ID的客户端ID数组 + /// </summary> + /// <param name="serverIDs"></param> + /// <returns></returns> + public static JsArrayBuilder GetControlClientIDs(string[] serverIDs) + { + JsArrayBuilder array = new JsArrayBuilder(); + foreach (string controlID in serverIDs) + { + Control control = ControlUtil.FindControl(controlID); + if (control != null && control is ControlBase) + { + array.AddProperty((control as ControlBase).ClientID); + } + } + return array; + } + + #region FindControl + + /// <summary> + /// 查找父层次结构中是否存在用户控件 + /// </summary> + /// <param name="ctrl">当前控件</param> + /// <returns>父层次中的用户控件</returns> + public static UserControl FindParentUserControl(Control ctrl) + { + Control found = FindParentControl(ctrl, typeof(UserControl), true); + if (found != null) + { + return found as UserControl; + } + else + { + return null; + } + /* + while (ctrl != null && !(ctrl is UserControl)) + { + ctrl = ctrl.Parent; + } + if (ctrl != null) + { + return ctrl as UserControl; + } + return null; + * */ + } + + // 在当前 ctrl 所在的用户控件中查找,如果找不到则在页面中查找 + internal static Control FindControlInUserControlOrPage(Control ctrl, string findControlID) + { + Control found = null; + + UserControl parentUserControl = FindParentUserControl(ctrl); + if (parentUserControl != null) + { + found = FindControl(parentUserControl, findControlID); + } + + if (found == null) + { + found = FindControl(findControlID); + } + + return found; + } + + /// <summary> + /// 根据控件ID查找控件 + /// </summary> + /// <param name="findControlID">要查找的控件ID</param> + /// <returns>找到的控件</returns> + public static Control FindControl(string findControlID) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + return FindControl(page, findControlID); + } + + return null; + } + + + + /// <summary> + /// 根据控件类型查找控件 + /// </summary> + /// <param name="controlType">要查找的控件类型</param> + /// <returns>找到的控件</returns> + public static Control FindControl(Type controlType) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + return FindControl(page, controlType); + } + + return null; + } + + /// <summary> + /// 在父控件的所有子控件中查找控件 + /// </summary> + /// <param name="control">父控件</param> + /// <param name="findControlId">要查找的控件ID</param> + /// <returns>找到的控件</returns> + public static Control FindControl(Control control, string findControlId) + { + if (control != null && control.Controls.Count > 0) + { + foreach (Control c in control.Controls) + { + if (c != null && c.ID == findControlId) + { + return c; + } + else + { + Control childControl = FindControl(c, findControlId); + if (childControl != null) + { + return childControl; + } + } + } + } + + return null; + } + + /// <summary> + /// 在父控件的所有子控件中查找控件 + /// </summary> + /// <param name="control">父控件</param> + /// <param name="controlType">要查找的控件类型</param> + /// <returns>找到的控件</returns> + public static Control FindControl(Control control, Type controlType) + { + if (control != null && control.Controls.Count > 0) + { + foreach (Control c in control.Controls) + { + if (c != null && c.GetType() == controlType) + { + return c; + } + else + { + Control childControl = FindControl(c, controlType); + if (childControl != null) + { + return childControl; + } + } + } + } + + return null; + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/Business/Util/DateUtil.cs b/FineUI_v6/FineUI/Business/Util/DateUtil.cs new file mode 100644 index 0000000..9100b60 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/DateUtil.cs @@ -0,0 +1,165 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: DateUtil.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// Extjs和.Net之间的日期格式转换 + /// </summary> + public class DateUtil + { + /// <summary> + /// 创建Javascript的Date对象字符串 + /// </summary> + /// <param name="date">日期对象</param> + /// <returns>日期的客户端脚本形式</returns> + public static string GetClientDateObject(DateTime date) + { + // 注意:这个地方有一个bug,要把月份减一才正确,晕 + return String.Format("new Date({0},{1},{2})", + date.Year.ToString("D4"), (date.Month - 1).ToString(), date.Day.ToString()); + } + + /// <summary> + /// 将.Net日期格式字符串转换为ExtJS的日期格式字符串 + /// </summary> + /// <param name="dotnetFormat">.Net日期格式字符串</param> + /// <returns>ExtJS的日期格式字符串</returns> + public static string ConvertToClientDateFormat(string dotnetFormat) + { + // DotNet - 年月日 + //d 月中的某一天。一位数的日期没有前导零。 + //dd 月中的某一天。一位数的日期有一个前导零。 + //ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 + //dddd 周中某天的完整名称,在 DayNames 中定义。 + //M 月份数字。一位数的月份没有前导零。 + //MM 月份数字。一位数的月份有一个前导零。 + //MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 + //MMMM 月份的完整名称,在 MonthNames 中定义。 + //y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 + //yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 + //yyyy 包括纪元的四位数的年份。 + + + // DotNet - 时分秒 + //h 12 小时制的小时。一位数的小时数没有前导零。 + //hh 12 小时制的小时。一位数的小时数有前导零。 + //H 24 小时制的小时。一位数的小时数没有前导零。 + //HH 24 小时制的小时。一位数的小时数有前导零。 + //m 分钟。一位数的分钟数没有前导零。 + //mm 分钟。一位数的分钟数有一个前导零。 + //s 秒。一位数的秒数没有前导零。 + //ss 秒。一位数的秒数有一个前导零。 + + // DotNet - AM/PM 时区 + //t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。 + //tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。 + //z 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。 + //zz 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。 + //zzz 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。 + + + // ExtJS + //d Day of the month, 2 digits with leading zeros 01 to 31 + //D A short textual representation of the day of the week Mon to Sun + //j Day of the month without leading zeros 1 to 31 + //l A full textual representation of the day of the week Sunday to Saturday + //N ISO-8601 numeric representation of the day of the week 1 (for Monday) through 7 (for Sunday) + //S English ordinal suffix for the day of the month, 2 characters st, nd, rd or th. Works well with j + //w Numeric representation of the day of the week 0 (for Sunday) to 6 (for Saturday) + //z The day of the year (starting from 0) 0 to 364 (365 in leap years) + //W ISO-8601 week number of year, weeks starting on Monday 01 to 53 + //F A full textual representation of a month, such as January or March January to December + //m Numeric representation of a month, with leading zeros 01 to 12 + //M A short textual representation of a month Jan to Dec + //n Numeric representation of a month, without leading zeros 1 to 12 + //t Number of days in the given month 28 to 31 + //L Whether it's a leap year 1 if it is a leap year, 0 otherwise. + //o ISO-8601 year number (identical to (Y), but if the ISO week number (W) Examples: 1998 or 2004 + // belongs to the previous or next year, that year is used instead) + //Y A full numeric representation of a year, 4 digits Examples: 1999 or 2003 + //y A two digit representation of a year Examples: 99 or 03 + + // ExtJS - 时分秒 + //a Lowercase Ante meridiem and Post meridiem am or pm + //A Uppercase Ante meridiem and Post meridiem AM or PM + //g 12-hour format of an hour without leading zeros 1 to 12 + //G 24-hour format of an hour without leading zeros 0 to 23 + //h 12-hour format of an hour with leading zeros 01 to 12 + //H 24-hour format of an hour with leading zeros 00 to 23 + //i Minutes, with leading zeros 00 to 59 + //s Seconds, with leading zeros 00 to 59 + + + + string extjsFormat = dotnetFormat; + extjsFormat = extjsFormat.Replace("yyyy", "Y").Replace("yy", "y"); + extjsFormat = extjsFormat.Replace("MMMM", "F").Replace("MMM", "M").Replace("MM", "m").Replace("M", "n"); + extjsFormat = extjsFormat.Replace("dddd", "l").Replace("ddd", "D"); + + //extjsFormat = extjsFormat.Replace("hh", "h").Replace("HH", "H"); + extjsFormat = extjsFormat.Replace("mm", "i"); + extjsFormat = extjsFormat.Replace("ss", "s"); + extjsFormat = extjsFormat.Replace("tt", "A"); + + // 日 + if (extjsFormat.Contains("dd")) + { + extjsFormat = extjsFormat.Replace("dd", "d"); + } + else + { + extjsFormat = extjsFormat.Replace("d", "j"); + } + + // 24 - 小时 + if (extjsFormat.Contains("HH")) + { + extjsFormat = extjsFormat.Replace("HH", "H"); + } + else + { + extjsFormat = extjsFormat.Replace("H", "G"); + } + + // 12 - 小时 + if (extjsFormat.Contains("hh")) + { + extjsFormat = extjsFormat.Replace("hh", "h"); + } + else + { + extjsFormat = extjsFormat.Replace("h", "g"); + } + + + return extjsFormat; + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Util/ExtDateTimeConvertor.cs b/FineUI_v6/FineUI/Business/Util/ExtDateTimeConvertor.cs new file mode 100644 index 0000000..c3114df --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/ExtDateTimeConvertor.cs @@ -0,0 +1,167 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ExtDateTimeConvertor.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// Extjs和.Net之间的日期格式转换 + /// </summary> + public class ExtDateTimeConvertor + { + + + /// <summary> + /// 创建Javascript的Date对象字符串 + /// </summary> + /// <param name="date">日期对象</param> + /// <returns>日期的客户端脚本形式</returns> + public static string GetExtDateObject(DateTime date) + { + // 注意:这个地方有一个bug,要把月份减一才正确,晕 + return String.Format("new Date({0},{1},{2})", + date.Year.ToString("D4"), (date.Month - 1).ToString(), date.Day.ToString()); + } + + /// <summary> + /// 将.Net日期格式字符串转换为ExtJS的日期格式字符串 + /// </summary> + /// <param name="dotnetFormat">.Net日期格式字符串</param> + /// <returns>ExtJS的日期格式字符串</returns> + public static string ConvertToExtDateFormat(string dotnetFormat) + { + // DotNet - 年月日 + //d 月中的某一天。一位数的日期没有前导零。 + //dd 月中的某一天。一位数的日期有一个前导零。 + //ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 + //dddd 周中某天的完整名称,在 DayNames 中定义。 + //M 月份数字。一位数的月份没有前导零。 + //MM 月份数字。一位数的月份有一个前导零。 + //MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 + //MMMM 月份的完整名称,在 MonthNames 中定义。 + //y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 + //yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 + //yyyy 包括纪元的四位数的年份。 + + + // DotNet - 时分秒 + //h 12 小时制的小时。一位数的小时数没有前导零。 + //hh 12 小时制的小时。一位数的小时数有前导零。 + //H 24 小时制的小时。一位数的小时数没有前导零。 + //HH 24 小时制的小时。一位数的小时数有前导零。 + //m 分钟。一位数的分钟数没有前导零。 + //mm 分钟。一位数的分钟数有一个前导零。 + //s 秒。一位数的秒数没有前导零。 + //ss 秒。一位数的秒数有一个前导零。 + + // DotNet - AM/PM 时区 + //t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。 + //tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。 + //z 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。 + //zz 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。 + //zzz 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。 + + + // ExtJS + //d Day of the month, 2 digits with leading zeros 01 to 31 + //D A short textual representation of the day of the week Mon to Sun + //j Day of the month without leading zeros 1 to 31 + //l A full textual representation of the day of the week Sunday to Saturday + //N ISO-8601 numeric representation of the day of the week 1 (for Monday) through 7 (for Sunday) + //S English ordinal suffix for the day of the month, 2 characters st, nd, rd or th. Works well with j + //w Numeric representation of the day of the week 0 (for Sunday) to 6 (for Saturday) + //z The day of the year (starting from 0) 0 to 364 (365 in leap years) + //W ISO-8601 week number of year, weeks starting on Monday 01 to 53 + //F A full textual representation of a month, such as January or March January to December + //m Numeric representation of a month, with leading zeros 01 to 12 + //M A short textual representation of a month Jan to Dec + //n Numeric representation of a month, without leading zeros 1 to 12 + //t Number of days in the given month 28 to 31 + //L Whether it's a leap year 1 if it is a leap year, 0 otherwise. + //o ISO-8601 year number (identical to (Y), but if the ISO week number (W) Examples: 1998 or 2004 + // belongs to the previous or next year, that year is used instead) + //Y A full numeric representation of a year, 4 digits Examples: 1999 or 2003 + //y A two digit representation of a year Examples: 99 or 03 + + // ExtJS - 时分秒 + //a Lowercase Ante meridiem and Post meridiem am or pm + //A Uppercase Ante meridiem and Post meridiem AM or PM + //g 12-hour format of an hour without leading zeros 1 to 12 + //G 24-hour format of an hour without leading zeros 0 to 23 + //h 12-hour format of an hour with leading zeros 01 to 12 + //H 24-hour format of an hour with leading zeros 00 to 23 + //i Minutes, with leading zeros 00 to 59 + //s Seconds, with leading zeros 00 to 59 + + + + string extjsFormat = dotnetFormat; + extjsFormat = extjsFormat.Replace("yyyy", "Y").Replace("yy", "y"); + extjsFormat = extjsFormat.Replace("MMMM", "F").Replace("MMM", "M").Replace("MM", "m").Replace("M", "n"); + extjsFormat = extjsFormat.Replace("dddd", "l").Replace("ddd", "D"); + + //extjsFormat = extjsFormat.Replace("hh", "h").Replace("HH", "H"); + extjsFormat = extjsFormat.Replace("mm", "i"); + extjsFormat = extjsFormat.Replace("ss", "s"); + extjsFormat = extjsFormat.Replace("tt", "A"); + + // 日 + if (extjsFormat.Contains("dd")) + { + extjsFormat = extjsFormat.Replace("dd", "d"); + } + else + { + extjsFormat = extjsFormat.Replace("d", "j"); + } + + // 24 - 小时 + if (extjsFormat.Contains("HH")) + { + extjsFormat = extjsFormat.Replace("HH", "H"); + } + else + { + extjsFormat = extjsFormat.Replace("H", "G"); + } + + // 12 - 小时 + if (extjsFormat.Contains("hh")) + { + extjsFormat = extjsFormat.Replace("hh", "h"); + } + else + { + extjsFormat = extjsFormat.Replace("h", "g"); + } + + + return extjsFormat; + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Util/FState.cs b/FineUI_v6/FineUI/Business/Util/FState.cs new file mode 100644 index 0000000..0750008 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/FState.cs @@ -0,0 +1,312 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace FineUI +{ + /// <summary> + /// FineUI控件的状态保持机制 + /// </summary> + public class FState + { + #region Constructor + + private ControlBase _control = null; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="control">控件</param> + public FState(ControlBase control) + { + _control = control; + } + + #endregion + + #region Index Property + + private Dictionary<string, object> _state = new Dictionary<string, object>(); + + /// <summary> + /// 获取设置 FState 属性值 + /// </summary> + /// <param name="key"></param> + /// <returns></returns> + public object this[string key] + { + get + { + if (!_state.ContainsKey(key)) + { + return null; + } + else + { + return _state[key]; + } + } + set + { + _state[key] = value; + + // 如果是页面第一次加载(页面初始化时那些不是AjaxProperties的属性的更改,也要保存到FState中) + // _control.Page == null, 是在初始化页面控件的属性的时候 + if (_control.Page != null && !_control.Page.IsPostBack && _control.InitialComplete) + { + if (!_control.AjaxProperties.Contains(key)) + { + AddModifiedProperty(key); + } + } + } + } + + #endregion + + #region ModifiedProperties ClientPropertiesModifiedInServer + + private List<string> _modifiedProperties = new List<string>(); + + /// <summary> + /// 当前请求中改变的属性列表,既包含服务器端改变的属性,也包含客户端改变的属性 + /// </summary> + public List<string> ModifiedProperties + { + get { return _modifiedProperties; } + set { _modifiedProperties = value; } + } + + /// <summary> + /// 增加在当前请求中改变的属性列表(控件可以自己手工设置,以便保存在 F_STATE 中) + /// </summary> + /// <param name="property"></param> + public void AddModifiedProperty(string property) + { + if (!_modifiedProperties.Contains(property)) + { + _modifiedProperties.Add(property); + } + } + + + private List<string> _clientPropertiesModifiedInServer = new List<string>(); + + /// <summary> + /// 客户端可以改变的属性在服务器端被改变了 + /// </summary> + public List<string> ClientPropertiesModifiedInServer + { + get { return _clientPropertiesModifiedInServer; } + set { _clientPropertiesModifiedInServer = value; } + } + + + private void AddClientPropertyModifiedInServer(string property) + { + if (!_clientPropertiesModifiedInServer.Contains(property)) + { + _clientPropertiesModifiedInServer.Add(property); + } + } + + #endregion + + #region BackupInitializedProperties BackupPostDataProperty + + private Dictionary<string, string> _initializedProperties = new Dictionary<string, string>(); + private Dictionary<string, string> _postDataProperties = new Dictionary<string, string>(); + + /// <summary> + /// 备份初始化属性值 + /// 在输出 AJAX 回发之前,会拿这个初始属性值和当时属性值做对比,以确定这些属性是否被用户改变 + /// </summary> + public void BackupInitializedProperties() + { + foreach (string prop in _control.AjaxProperties) + { + _initializedProperties.Add(prop, GetPropertyHashcode(prop)); + } + } + + /// <summary> + /// 备份 PostData 的属性值(也就是在客户端改变的属性值) + /// </summary> + /// <param name="prop"></param> + public void BackupPostDataProperty(string prop) + { + // 可能会添加多次 + string propValue = GetPropertyHashcode(prop); + if (_postDataProperties.ContainsKey(prop)) + { + _postDataProperties[prop] = propValue; + } + else + { + _postDataProperties.Add(prop, propValue); + } + } + + /// <summary> + /// 计算被修改的属性列表(更新 ModifiedProperties 和 ClientPropertiesModifiedInServer 两个值) + /// 这个需要在 OnPreRender 中调用,在页面第一次加载,正常的回发以及AJAX回发时都要调用 + /// </summary> + public void CalculateModifiedProperties() + { + // Step1 + foreach (string prop in _control.AjaxProperties) + { + if (_initializedProperties[prop] != GetPropertyHashcode(prop)) + { + AddModifiedProperty(prop); + } + } + + // Step2 + foreach (string prop in _control.ClientAjaxProperties) + { + string backupValue = String.Empty; + if (_postDataProperties.ContainsKey(prop)) + { + backupValue = _postDataProperties[prop]; + } + else + { + backupValue = _initializedProperties[prop]; + } + + if (backupValue != GetPropertyHashcode(prop)) + { + AddClientPropertyModifiedInServer(prop); + + //既然这个ClientAjaxProperty在服务器端被改变,则这个属性一定是属于ModifiedProperties,因为存在如下逻辑: + // 一个CheckBox默认的Checked为false,客户端改变为true,服务器端又修改为false,则在Step1中就无法判断出这是一个ModifiedProperty. + AddModifiedProperty(prop); + } + } + } + + private string GetPropertyHashcode(string prop) + { + object propValue = _control.GetPropertyJSONValue(prop); + return propValue == null ? "" : propValue.ToString(); + } + #endregion + + #region GetTotalModifiedProperties + + /// <summary> + /// 页面第一次加载至今改变过的属性列表总和(其中可能经历多次正常的页面回发和局部 AJAX 回发) + /// </summary> + /// <returns></returns> + public List<string> GetTotalModifiedProperties() + { + List<string> props = new List<string>(); + + // Now we are in a page postback. + if (_control.Page.IsPostBack) + { + // Get modified properties from current HTTP request values (These properties must have been changed in post client or server). + foreach (JProperty prop in _control.PostBackState.Properties()) + { + props.Add(prop.Name); + } + } + + // Modified properties in current page load. + foreach (string prop in _modifiedProperties) + { + if (!props.Contains(prop)) + { + props.Add(prop); + } + } + + return props; + } + + + #endregion + + #region oldcode + + + //private List<string> _clientModifiedProperties = new List<string>(); + //public void AddClientModifiedProperties(string property) + //{ + // if (!_clientModifiedProperties.Contains(property)) + // { + // _clientModifiedProperties.Add(property); + // } + //} + //public List<string> GetClientModifiedProperties() + //{ + // return _clientModifiedProperties; + //} + //public bool ClientModifiedPropertiesContains(string property) + //{ + // return _clientModifiedProperties.Contains(property); + //} + //public void SetPropertyViaPostData(string property, object value) + //{ + // _state[property] = value; + + // AddClientModifiedProperties(property); + //} + + + + + + //public object this[string key] + //{ + // get + // { + // if (!_state.ContainsKey(key)) + // { + // return null; + // } + // else + // { + // return _state[key]; + // } + // } + // set + // { + // //object oldValue = ObjectUtil.GetPropertyValue(_control, key); + // //if (IsValueChanged(oldValue, value)) + // //{ + // _state[key] = value; + + // if (_control.ControlInitialized) // && _ajaxProperties.Contains(key) + // { + // _modifiedProperties.Add(key); + // } + // //} + // } + //} + + + //// It's impossible + //private bool IsValueChanged(object oldValue, object newValue) + //{ + // if (oldValue != null && newValue != null) + // { + // if (oldValue.GetType().BaseType == typeof(Array)) + // { + // return new JArray((Array)oldValue).ToString() != new JArray((Array)newValue).ToString(); + // } + // return !oldValue.Equals(newValue); + // } + // return oldValue != newValue; + //} + + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/Business/Util/HtmlNodeBuilder.cs b/FineUI_v6/FineUI/Business/Util/HtmlNodeBuilder.cs new file mode 100644 index 0000000..86bd7a8 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/HtmlNodeBuilder.cs @@ -0,0 +1,123 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: HtmlNodeBuilder.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Web; + +namespace FineUI +{ + /// <summary> + /// 创建HTML节点的帮助类 + /// </summary> + public class HtmlNodeBuilder + { + private string _nodeName; + private string _innerProperty; + + private Dictionary<string, string> _properties = new Dictionary<string, string>(); + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="nodeName">节点名称</param> + public HtmlNodeBuilder(string nodeName) + { + _nodeName = nodeName; + } + + /// <summary> + /// 节点内部值 + /// </summary> + public string InnerProperty + { + get { return _innerProperty; } + set { _innerProperty = value; } + } + + /// <summary> + /// 设置属性 + /// </summary> + /// <param name="name">属性名</param> + /// <param name="value">属性值</param> + public void SetProperty(string name, string value) + { + if (_properties.ContainsKey(name)) + { + _properties[name] = value; + } + else + { + _properties.Add(name, value); + } + } + + /// <summary> + /// 取得属性的值 + /// </summary> + /// <param name="name">属性名</param> + /// <returns>属性值</returns> + public string GetProperty(string name) + { + if (_properties.ContainsKey(name)) + { + return _properties[name]; + } + else + { + return String.Empty; + } + } + + + /// <summary> + /// 转化为客户端可用的HTML标签字符串 + /// </summary> + /// <returns>客户端可用的HTML标签字符串</returns> + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + + sb.AppendFormat("<{0}", _nodeName); + + foreach (string name in _properties.Keys) + { + //// Double quote is forbidden in html node property value. + //sb.AppendFormat(" {0}={1}", name, JsHelper.Enquote(_properties[name].Replace("\"", "\\\""))); + + // HTML节点属性中不能包括双引号、左尖括号,右尖括号等等 + // <input value="ss\"dd" /> -> <input dd?="" value="ss\"/> + // 需要对其进行HTML转意 + sb.AppendFormat(" {0}=\"{1}\"", name, HttpUtility.HtmlEncode(_properties[name])); + } + + sb.AppendFormat(">{0}</{1}>", _innerProperty, _nodeName); + + return sb.ToString(); + } + } +} diff --git a/FineUI_v6/FineUI/Business/Util/JSONUtil.cs b/FineUI_v6/FineUI/Business/Util/JSONUtil.cs new file mode 100644 index 0000000..a5388a2 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/JSONUtil.cs @@ -0,0 +1,110 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: JSONUtil.cs + * CreatedOn: 2010-04-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Reflection; +using System.Data; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + + +namespace FineUI +{ + /// <summary> + /// JSON帮助类 + /// </summary> + public class JSONUtil + { + /// <summary> + /// 将JArray转换为整型数组 + /// </summary> + /// <param name="ja">JArray对象</param> + /// <returns>整型数组</returns> + public static int[] IntArrayFromJArray(JArray ja) + { + if (ja == null || ja.Count == 0) + { + return new int[0]; + } + + int length = ja.Count; + + int[] array = new int[length]; + for (int i = 0; i < length; i++) + { + array[i] = ja[i].Value<int>(); + } + return array; + } + + /// <summary> + /// 将JArray转换为字符串数组 + /// </summary> + /// <param name="ja">JArray对象</param> + /// <returns>字符串数组</returns> + public static string[] StringArrayFromJArray(JArray ja) + { + if (ja == null || ja.Count == 0) + { + return new string[0]; + } + + int length = ja.Count; + + string[] array = new string[length]; + for (int i = 0; i < length; i++) + { + array[i] = ja[i].Value<string>();// ja.getString(i); + } + return array; + } + + /// <summary> + /// 将JArray转换为对象数组 + /// </summary> + /// <param name="ja">JArray对象</param> + /// <returns>对象数组</returns> + public static object[] ObjectArrayFromJArray(JArray ja) + { + if (ja == null || ja.Count == 0) + { + return new object[0]; + } + + int length = ja.Count; + + object[] array = new object[length]; + for (int i = 0; i < length; i++) + { + array[i] = ja[i].Value<JValue>().Value;// ja.getValue(i); + } + return array; + } + + } +} diff --git a/FineUI_v6/FineUI/Business/Util/ObjectUtil.cs b/FineUI_v6/FineUI/Business/Util/ObjectUtil.cs new file mode 100644 index 0000000..6fb7829 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/ObjectUtil.cs @@ -0,0 +1,118 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ObjectUtil.cs + * CreatedOn: 2008-06-11 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Reflection; +using System.Data; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace FineUI +{ + /// <summary> + /// 对象帮助类 + /// </summary> + public class ObjectUtil + { + /// <summary> + /// 获取对象的属性值 + /// </summary> + /// <param name="obj">可能是DataRowView或一个对象</param> + /// <param name="propertyName">属性名</param> + /// <returns>属性值</returns> + public static object GetPropertyValue(object obj, string propertyName) + { + object result = null; + + try + { + if (obj is DataRow) + { + result = (obj as DataRow)[propertyName]; + } + else if (obj is DataRowView) + { + result = (obj as DataRowView)[propertyName]; + } + else if (obj is JObject) + { + result = (obj as JObject).Value<JValue>(propertyName).Value; //.getValue(propertyName); + } + else + { + result = GetPropertyValueFormObject(obj, propertyName); + } + } + catch (Exception) + { + // 找不到此属性 + } + + return result; + } + + /// <summary> + /// 获取对象的属性值 + /// </summary> + /// <param name="obj">对象</param> + /// <param name="propertyName">属性名("Color"、"BodyStyle"或者"Info.UserName")</param> + /// <returns>属性值</returns> + private static object GetPropertyValueFormObject(object obj, string propertyName) + { + object rowObj = obj; + object result = null; + + if (propertyName.IndexOf(".") > 0) + { + string[] properties = propertyName.Split('.'); + object tmpObj = rowObj; + + for (int i = 0; i < properties.Length; i++) + { + PropertyInfo property = tmpObj.GetType().GetProperty(properties[i], BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (property != null) + { + tmpObj = property.GetValue(tmpObj, null); + } + } + + result = tmpObj; + } + else + { + PropertyInfo property = rowObj.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (property != null) + { + result = property.GetValue(rowObj, null); + } + } + + return result; + } + } +} diff --git a/FineUI_v6/FineUI/Business/Util/StringUtil.cs b/FineUI_v6/FineUI/Business/Util/StringUtil.cs new file mode 100644 index 0000000..6e6cadc --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/StringUtil.cs @@ -0,0 +1,559 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: StringUtil.cs + * CreatedOn: 2008-06-25 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; +using System.Web; +using System.Text.RegularExpressions; +using System.IO; +using System.IO.Compression; + +namespace FineUI +{ + /// <summary> + /// 字符串帮助类 + /// </summary> + public class StringUtil + { + #region GZIPPED_VIEWSTATE + + /// <summary> + /// GZIP压缩的ViewState隐藏字段的ID + /// </summary> + public static readonly string VIEWSTATE_ID = "__VIEWSTATE"; + + ///// <summary> + ///// GZIP压缩的ViewState隐藏字段的ID + ///// </summary> + //public static readonly string GZIPPED_VIEWSTATE_ID = "__VIEWSTATE_GZ"; + + #endregion + + #region EnumFromName EnumToName + + /// <summary> + /// 获取枚举实例 + /// </summary> + /// <param name="enumType">枚举类型</param> + /// <param name="enumName">枚举实例名称</param> + /// <returns>枚举实例</returns> + public static object EnumFromName(Type enumType, string enumName) + { + return Enum.Parse(enumType, enumName); + } + + /// <summary> + /// 获取枚举实例名称 + /// </summary> + /// <param name="param">枚举实例</param> + /// <returns>枚举实例名称</returns> + public static string EnumToName(Enum param) + { + return Enum.GetName(param.GetType(), param); + } + + #endregion + + #region StripHtml + + /// <summary> + /// 去除字符串中的Html + /// </summary> + /// <param name="source">字符串</param> + /// <returns>字符串</returns> + public static string StripHtml(string source) + { + return Regex.Replace(source, @"<[\s\S]*?>", "", RegexOptions.IgnoreCase); + } + + #endregion + + #region GetIntListFromString GetStringListFromString + + /// <summary> + /// 将字符串"1,2,3"转化为整形列表[1,2,3] + /// </summary> + /// <param name="postValue">字符串</param> + /// <returns>整形列表</returns> + public static List<int> GetIntListFromString(string postValue) + { + return GetIntListFromString(postValue, false); + } + + /// <summary> + /// 将字符串"1,2,3"转化为整形列表[1,2,3] + /// </summary> + /// <param name="postValue">字符串</param> + /// <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> + /// <returns>整形列表</returns> + public static List<int> GetIntListFromString(string postValue, bool sortBeforeReturn) + { + if (String.IsNullOrEmpty(postValue)) + { + return new List<int>(); + } + + List<int> intList = new List<int>(); + string[] intStrArray = postValue.Trim().TrimEnd(',').Split(','); + foreach (string rowIndex in intStrArray) + { + if (!String.IsNullOrEmpty(rowIndex)) + { + intList.Add(Convert.ToInt32(rowIndex)); + } + } + + if (sortBeforeReturn) + { + // 按照从小到大排序 + intList.Sort(); + } + + return intList; + } + + + /// <summary> + /// 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] + /// </summary> + /// <param name="postValue">字符串</param> + /// <returns>字符串列表</returns> + public static List<string> GetStringListFromString(string postValue) + { + return GetStringListFromString(postValue, false); + } + + /// <summary> + /// 将字符串"ssdd,2,ok"转化为字符串列表["ssdd","2","ok"] + /// </summary> + /// <param name="postValue"></param> + /// <param name="sortBeforeReturn">返回之前是否对数组进行排序(由小到大)</param> + /// <returns>字符串列表</returns> + public static List<string> GetStringListFromString(string postValue, bool sortBeforeReturn) + { + if (String.IsNullOrEmpty(postValue)) + { + return new List<string>(); + } + + List<string> strList = new List<string>(); + string[] strArray = postValue.Trim().TrimEnd(',').Split(','); + foreach (string str in strArray) + { + if (!String.IsNullOrEmpty(str)) + { + strList.Add(str); + } + } + + if (sortBeforeReturn) + { + // 按照从小到大排序 + strList.Sort(); + } + + return strList; + } + + /// <summary> + /// 将字符串数组["ssdd","2","ok"]转化为字符串"ssdd,2,ok" + /// </summary> + /// <param name="strArray">字符串数组</param> + /// <returns>字符串</returns> + public static string GetStringFromStringArray(string[] strArray) + { + if (strArray == null || strArray.Length == 0) + { + return String.Empty; + } + + StringBuilder sb = new StringBuilder(); + foreach (string str in strArray) + { + sb.AppendFormat("{0},", str); + } + + return sb.ToString().TrimEnd(','); + } + + /// <summary> + /// 将整型数组[2,3,4]转化为字符串"2,3,4" + /// </summary> + /// <param name="intArray">整形数组</param> + /// <returns>字符串</returns> + public static string GetStringFromIntArray(int[] intArray) + { + if (intArray == null || intArray.Length == 0) + { + return String.Empty; + } + + StringBuilder sb = new StringBuilder(); + foreach (int str in intArray) + { + sb.AppendFormat("{0},", str); + } + + return sb.ToString().TrimEnd(','); + } + + #endregion + + #region CompareIntArray/CompareStringArray + + /// <summary> + /// 比较两个整形数组是否相等 + /// 顺序无关,比如 [1,2] 和 [2,1] 被认为是相同的 + /// </summary> + /// <param name="array1">整形数组1</param> + /// <param name="array2">整形数组2</param> + /// <returns>是否相等</returns> + public static bool CompareIntArray(int[] array1, int[] array2) + { + return CompareIntArray(array1, array2, false); + } + + /// <summary> + /// 比较两个整形数组是否相等 + /// </summary> + /// <param name="array1">整形数组1</param> + /// <param name="array2">整形数组2</param> + /// <param name="keepOrder">是否保持顺序</param> + /// <returns>是否相等</returns> + public static bool CompareIntArray(int[] array1, int[] array2, bool keepOrder) + { + if (array1 == null && array2 == null) + { + return true; + } + + if ((array1 == null && array2 != null) || (array1 != null && array2 == null)) + { + return false; + } + + if (array1.Length != array2.Length) + { + return false; + } + + if (keepOrder) + { + for (int i = 0, count = array1.Length; i < count; i++) + { + if (array1[i] != array2[i]) + { + return false; + } + } + } + else + { + List<int> list1 = new List<int>(array1); + List<int> list2 = new List<int>(array2); + + foreach (int item in list1) + { + if (!list2.Contains(item)) + { + return false; + } + } + } + + /* + for (int i = 0; i < list1.Count; i++) + { + if (list1[i] != list2[i]) + { + return false; + } + } + */ + + return true; + } + + /// <summary> + /// 比较两个字符串数组是否相等 + /// 顺序无关,比如 ["value1","value2"] 和 ["value2","value1"] 被认为是相同的 + /// </summary> + /// <param name="array1">字符串数组1</param> + /// <param name="array2">字符串数组2</param> + /// <returns>是否相等</returns> + public static bool CompareStringArray(string[] array1, string[] array2) + { + return CompareStringArray(array1, array2, false); + } + + /// <summary> + /// 比较两个字符串数组是否相等 + /// </summary> + /// <param name="array1">字符串数组1</param> + /// <param name="array2">字符串数组2</param> + /// <param name="keepOrder">是否保持顺序</param> + /// <returns>是否相等</returns> + public static bool CompareStringArray(string[] array1, string[] array2, bool keepOrder) + { + if (array1 == null && array2 == null) + { + return true; + } + + if ((array1 == null && array2 != null) || (array1 != null && array2 == null)) + { + return false; + } + + if (array1.Length != array2.Length) + { + return false; + } + + if (keepOrder) + { + for (int i = 0, count = array1.Length; i < count; i++) + { + if (array1[i] != array2[i]) + { + return false; + } + } + } + else + { + List<string> list1 = new List<string>(array1); + List<string> list2 = new List<string>(array2); + + foreach (string item in list1) + { + if (!list2.Contains(item)) + { + return false; + } + } + } + + /* + for (int i = 0; i < list1.Count; i++) + { + if (list1[i] != list2[i]) + { + return false; + } + } + */ + + return true; + } + + #endregion + + #region ConvertPercentageToDecimalString + + /// <summary> + /// 将 10% 转换为 0.1 的字符串的形式 + /// </summary> + /// <param name="percentageStr">百分比字符串</param> + /// <returns>小数</returns> + public static string ConvertPercentageToDecimalString(string percentageStr) + { + //string decimalStr = String.Empty; + + //percentageStr = percentageStr.Trim().Replace("%", "%").TrimEnd('%'); + + //try + //{ + // decimalStr = (Convert.ToDouble(percentageStr) * 0.01).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); + //} + //catch + //{ + // ; + //} + + //return decimalStr; + + string decimalStr = String.Empty; + + percentageStr = percentageStr.Trim().ToLower().Replace("%", "%"); + if (percentageStr.EndsWith("%")) + { + percentageStr = percentageStr.TrimEnd('%'); + + try + { + decimalStr = (Convert.ToDouble(percentageStr) * 0.01).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); + } + catch + { + // nothing + } + } + else if (percentageStr.EndsWith("px")) + { + decimalStr = percentageStr.Substring(0, percentageStr.Length - 2); + } + else + { + decimalStr = percentageStr; + } + + return decimalStr; + } + + #endregion + + #region DecodeFrom64/EncodeTo64 + + /// <summary> + /// Base64解码 + /// </summary> + /// <param name="encodedDataAsBytes">需要解码的字节数组</param> + /// <returns>解码后的字符串</returns> + public static string DecodeFrom64(byte[] encodedDataAsBytes) + { + return System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes); + } + + /// <summary> + /// Base64解码 + /// </summary> + /// <param name="encodedData">需要解码的字符串</param> + /// <returns>解码后的字符串</returns> + public static string DecodeFrom64(string encodedData) + { + byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); + return System.Text.UTF8Encoding.UTF8.GetString(encodedDataAsBytes); + } + + /// <summary> + /// Base64编码 + /// </summary> + /// <param name="toEncodeAsBytes">需要编码的字节数组</param> + /// <returns>编码后的字符串</returns> + public static string EncodeTo64(byte[] toEncodeAsBytes) + { + return System.Convert.ToBase64String(toEncodeAsBytes); + } + + /// <summary> + /// Base64编码 + /// </summary> + /// <param name="toEncode">需要编码的字符串</param> + /// <returns>编码后的字符串</returns> + public static string EncodeTo64(string toEncode) + { + byte[] toEncodeAsBytes = System.Text.UTF8Encoding.UTF8.GetBytes(toEncode); + return System.Convert.ToBase64String(toEncodeAsBytes); + } + #endregion + + #region Gzip/Ungzip + + /// <summary> + /// Gzip编码字符串 + /// </summary> + /// <param name="source">源字符串</param> + /// <returns>Gzip后的字符串</returns> + public static string Gzip(string source) + { + using (var outStream = new MemoryStream()) + { + using (var gzipStream = new GZipStream(outStream, CompressionMode.Compress)) + { + using (var mStream = new MemoryStream(Encoding.UTF8.GetBytes(source))) + { + mStream.WriteTo(gzipStream); + } + } + + return StringUtil.EncodeTo64(outStream.ToArray()); + } + } + + /// <summary> + /// 解码Gzip字符串 + /// </summary> + /// <param name="source">Gzip后的字符串</param> + /// <returns>源字符串</returns> + public static string Ungzip(string source) + { + byte[] bytes = Convert.FromBase64String(source); + + using (GZipStream stream = new GZipStream(new MemoryStream(bytes), CompressionMode.Decompress)) + { + const int size = 512; + byte[] buffer = new byte[size]; + using (MemoryStream memory = new MemoryStream()) + { + int count = 0; + do + { + count = stream.Read(buffer, 0, size); + if (count > 0) + { + memory.Write(buffer, 0, count); + } + } while (count > 0); + + return System.Text.Encoding.UTF8.GetString(memory.ToArray()); + } + } + } + #endregion + + #region LoadGzippedViewState + /// <summary> + /// 加载Gzipped的ViewState + /// </summary> + /// <param name="gzippedState"></param> + /// <returns></returns> + public static object LoadGzippedViewState(string gzippedState) + { + string ungzippedState = StringUtil.Ungzip(gzippedState); + LosFormatter formatter = new LosFormatter(); + return formatter.Deserialize(ungzippedState); + } + + /// <summary> + /// 生成Gzipped的ViewState + /// </summary> + /// <param name="viewState"></param> + /// <returns></returns> + public static string GenerateGzippedViewState(object viewState) + { + LosFormatter formatter = new LosFormatter(); + using (StringWriter writer = new StringWriter()) + { + formatter.Serialize(writer, viewState); + return StringUtil.Gzip(writer.ToString()); + } + } + #endregion + + } +} diff --git a/FineUI_v6/FineUI/Business/Util/StyleUtil.cs b/FineUI_v6/FineUI/Business/Util/StyleUtil.cs new file mode 100644 index 0000000..fcc31d1 --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/StyleUtil.cs @@ -0,0 +1,113 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: StyleUtil.cs + * CreatedOn: 2008-05-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI.WebControls; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 样式帮助类 + /// </summary> + public class StyleUtil + { + /// <summary> + /// 提取样式字符串 + /// </summary> + /// <param name="css">CSS字符串</param> + /// <param name="styleName">样式名称</param> + /// <returns>样式字符串</returns> + public static string GetSingleStyleFormCSS(string css, string styleName) + { + // 从字符串padding:5px;background-color:#DFE8F6;中提取background-color:#DFE8F6; + styleName = styleName.ToLower(); + css = css.ToLower().Replace(" ", ""); + + if (css.Contains(styleName)) + { + int styleStartIndex = css.IndexOf(styleName); + int styleEndIndex = css.IndexOf(";", styleStartIndex); + + return css.Substring(styleStartIndex, styleEndIndex - styleStartIndex + 1); + } + + return String.Empty; + } + + /// <summary> + /// 获取背景图片样式 + /// </summary> + /// <param name="selector">选择符</param> + /// <param name="imageUrl">图片地址</param> + /// <returns>CSS样式</returns> + public static string GetBackgroundStyle(string selector, string imageUrl) + { + return String.Format("{0}{{background: url({1}) !important;}}", selector, imageUrl); + } + + /// <summary> + /// 获取背景图片样式(no-repeat) + /// </summary> + /// <param name="selector">选择符</param> + /// <param name="imageUrl">图片地址</param> + /// <returns>CSS样式</returns> + public static string GetNoRepeatBackgroundStyle(string selector, string imageUrl) + { + return String.Format("{0}{{background: url({1}) no-repeat;}}", selector, imageUrl); + } + + internal static string GetTriggerIconUrlStyle(string selector, string imageUrl) + { + // background-position:0 3px !important,其中!important必须存在,否则hover时会消失 + return String.Format("{0}{{background: url({1}) no-repeat;background-position:0 3px !important;height:16px;}}", selector, imageUrl); + } + + /// <summary> + /// 获取适合CSS的Margin或者Padding定义 + /// </summary> + /// <param name="source">源字符串</param> + /// <returns>CSS样式</returns> + public static string GetMarginPaddingStyle(string source) { + + List<string> result = new List<string>(); + foreach (string item in source.Split(' ')) + { + if (item.Contains("px") || item.Contains("pt") || item.Contains("em")) + { + result.Add(item); + } + else + { + result.Add(Convert.ToInt32(item) + "px"); + } + } + + return String.Join(" ", result.ToArray()); + } + } + +} diff --git a/FineUI_v6/FineUI/Business/Util/XState.cs b/FineUI_v6/FineUI/Business/Util/XState.cs new file mode 100644 index 0000000..c73e87c --- /dev/null +++ b/FineUI_v6/FineUI/Business/Util/XState.cs @@ -0,0 +1,303 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace FineUI +{ + /// <summary> + /// FineUI控件的状态保持机制 + /// </summary> + public class XState + { + #region Constructor + + private ControlBase _control = null; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="control">控件</param> + public XState(ControlBase control) + { + _control = control; + } + + #endregion + + #region Index Property + + private Dictionary<string, object> _state = new Dictionary<string, object>(); + + /// <summary> + /// 获取设置 XState 属性值 + /// </summary> + /// <param name="key"></param> + /// <returns></returns> + public object this[string key] + { + get + { + if (!_state.ContainsKey(key)) + { + return null; + } + else + { + return _state[key]; + } + } + set + { + _state[key] = value; + + // 如果是页面第一次加载(页面初始化时那些不是AjaxProperties的属性的更改,也要保存到XState中) + // _control.Page == null, 是在初始化页面控件的属性的时候 + if (_control.Page != null && !_control.Page.IsPostBack && _control.InitialComplete) + { + if (!_control.AjaxProperties.Contains(key)) + { + AddModifiedProperty(key); + } + } + } + } + + #endregion + + #region ModifiedProperties ClientPropertiesModifiedInServer + + private List<string> _modifiedProperties = new List<string>(); + + /// <summary> + /// 当前请求中改变的属性列表,既包含服务器端改变的属性,也包含客户端改变的属性 + /// </summary> + public List<string> ModifiedProperties + { + get { return _modifiedProperties; } + set { _modifiedProperties = value; } + } + + /// <summary> + /// 增加在当前请求中改变的属性列表(控件可以自己手工设置,以便保存在 X_STATE 中) + /// </summary> + /// <param name="property"></param> + public void AddModifiedProperty(string property) + { + if (!_modifiedProperties.Contains(property)) + { + _modifiedProperties.Add(property); + } + } + + + private List<string> _clientPropertiesModifiedInServer = new List<string>(); + + /// <summary> + /// 客户端可以改变的属性在服务器端被改变了 + /// </summary> + public List<string> ClientPropertiesModifiedInServer + { + get { return _clientPropertiesModifiedInServer; } + set { _clientPropertiesModifiedInServer = value; } + } + + + private void AddClientPropertyModifiedInServer(string property) + { + if (!_clientPropertiesModifiedInServer.Contains(property)) + { + _clientPropertiesModifiedInServer.Add(property); + } + } + + #endregion + + #region BackupInitializedProperties BackupPostDataProperty + + private Dictionary<string, string> _initializedProperties = new Dictionary<string, string>(); + private Dictionary<string, string> _postDataProperties = new Dictionary<string, string>(); + + /// <summary> + /// 备份初始化属性值 + /// 在输出 AJAX 回发之前,会拿这个初始属性值和当时属性值做对比,以确定这些属性是否被用户改变 + /// </summary> + public void BackupInitializedProperties() + { + foreach (string prop in _control.AjaxProperties) + { + _initializedProperties.Add(prop, GetPropertyHashcode(prop)); + } + } + + /// <summary> + /// 备份 PostData 的属性值(也就是在客户端改变的属性值) + /// </summary> + /// <param name="prop"></param> + public void BackupPostDataProperty(string prop) + { + _postDataProperties.Add(prop, GetPropertyHashcode(prop)); + } + + /// <summary> + /// 计算被修改的属性列表(更新 ModifiedProperties 和 ClientPropertiesModifiedInServer 两个值) + /// 这个需要在 OnPreRender 中调用,在页面第一次加载,正常的回发以及AJAX回发时都要调用 + /// </summary> + public void CalculateModifiedProperties() + { + // Step1 + foreach (string prop in _control.AjaxProperties) + { + if (_initializedProperties[prop] != GetPropertyHashcode(prop)) + { + AddModifiedProperty(prop); + } + } + + // Step2 + foreach (string prop in _control.ClientAjaxProperties) + { + string backupValue = String.Empty; + if (_postDataProperties.ContainsKey(prop)) + { + backupValue = _postDataProperties[prop]; + } + else + { + backupValue = _initializedProperties[prop]; + } + + if (backupValue != GetPropertyHashcode(prop)) + { + AddClientPropertyModifiedInServer(prop); + + //既然这个ClientAjaxProperty在服务器端被改变,则这个属性一定是属于ModifiedProperties,因为存在如下逻辑: + // 一个CheckBox默认的Checked为false,客户端改变为true,服务器端又修改为false,则在Step1中就无法判断出这是一个ModifiedProperty. + AddModifiedProperty(prop); + } + } + } + + private string GetPropertyHashcode(string prop) + { + object propValue = _control.GetPropertyJSONValue(prop); + return propValue == null ? "" : propValue.ToString(); + } + #endregion + + #region GetTotalModifiedProperties + + /// <summary> + /// 页面第一次加载至今改变过的属性列表总和(其中可能经历多次正常的页面回发和局部 AJAX 回发) + /// </summary> + /// <returns></returns> + public List<string> GetTotalModifiedProperties() + { + List<string> props = new List<string>(); + + // Now we are in a page postback. + if (_control.Page.IsPostBack) + { + // Get modified properties from current HTTP request values (These properties must have been changed in post client or server). + foreach (JProperty prop in _control.PostBackState.Properties()) + { + props.Add(prop.Name); + } + } + + // Modified properties in current page load. + foreach (string prop in _modifiedProperties) + { + if (!props.Contains(prop)) + { + props.Add(prop); + } + } + + return props; + } + + + #endregion + + #region oldcode + + + //private List<string> _clientModifiedProperties = new List<string>(); + //public void AddClientModifiedProperties(string property) + //{ + // if (!_clientModifiedProperties.Contains(property)) + // { + // _clientModifiedProperties.Add(property); + // } + //} + //public List<string> GetClientModifiedProperties() + //{ + // return _clientModifiedProperties; + //} + //public bool ClientModifiedPropertiesContains(string property) + //{ + // return _clientModifiedProperties.Contains(property); + //} + //public void SetPropertyViaPostData(string property, object value) + //{ + // _state[property] = value; + + // AddClientModifiedProperties(property); + //} + + + + + + //public object this[string key] + //{ + // get + // { + // if (!_state.ContainsKey(key)) + // { + // return null; + // } + // else + // { + // return _state[key]; + // } + // } + // set + // { + // //object oldValue = ObjectUtil.GetPropertyValue(_control, key); + // //if (IsValueChanged(oldValue, value)) + // //{ + // _state[key] = value; + + // if (_control.ControlInitialized) // && _ajaxProperties.Contains(key) + // { + // _modifiedProperties.Add(key); + // } + // //} + // } + //} + + + //// It's impossible + //private bool IsValueChanged(object oldValue, object newValue) + //{ + // if (oldValue != null && newValue != null) + // { + // if (oldValue.GetType().BaseType == typeof(Array)) + // { + // return new JArray((Array)oldValue).ToString() != new JArray((Array)newValue).ToString(); + // } + // return !oldValue.Equals(newValue); + // } + // return oldValue != newValue; + //} + + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/FineUI.csproj b/FineUI_v6/FineUI/FineUI.csproj new file mode 100644 index 0000000..9c57ce0 --- /dev/null +++ b/FineUI_v6/FineUI/FineUI.csproj @@ -0,0 +1,406 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{0F8BF1F6-DDC2-43DA-BB0B-416CC287AC1B}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>FineUI</RootNamespace> + <AssemblyName>FineUI</AssemblyName> + <TargetFrameworkVersion>v2.0</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <Nonshipping>true</Nonshipping> + <FileUpgradeFlags> + </FileUpgradeFlags> + <UpgradeBackupLocation> + </UpgradeBackupLocation> + <OldToolsVersion>3.5</OldToolsVersion> + <PublishUrl>http://localhost/FineUI/</PublishUrl> + <Install>true</Install> + <InstallFrom>Web</InstallFrom> + <UpdateEnabled>true</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>true</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <PlatformTarget>AnyCPU</PlatformTarget> + <DocumentationFile>bin\Release\FineUI.xml</DocumentationFile> + <RegisterForComInterop>false</RegisterForComInterop> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + </PropertyGroup> + <PropertyGroup> + <SignAssembly>true</SignAssembly> + </PropertyGroup> + <PropertyGroup> + <AssemblyOriginatorKeyFile>StrongName.snk</AssemblyOriginatorKeyFile> + </PropertyGroup> + <ItemGroup> + <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\Newtonsoft.Json\Net20\Newtonsoft.Json.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.configuration" /> + <Reference Include="System.Data" /> + <Reference Include="System.Design" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="BaseWebControls\BoxComponent.Container.PanelBase.CollapsablePanel.FormBase\FormBase.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Container.PanelBase.CollapsablePanel\CollapsablePanel.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Container.PanelBase\PanelBase.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Container\Container.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Field.TextField.RealTextField\RealTextField.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Field.TextField\TextField.cs" /> + <Compile Include="BaseWebControls\ControlBase\Listener\Listener.cs" /> + <Compile Include="BaseWebControls\ControlBase\Listener\ListenerCollection.cs" /> + <Compile Include="Business\Enums\ButtonType.cs" /> + <Compile Include="Business\Enums\Grid\FieldType.cs" /> + <Compile Include="Business\Enums\Grid\Renderer.cs" /> + <Compile Include="Business\Enums\MessageTarget.cs" /> + <Compile Include="Business\Enums\SummaryPosition.cs" /> + <Compile Include="Business\Enums\ToolbarAlign.cs" /> + <Compile Include="Business\Util\FState.cs" /> + <Compile Include="Business\Util\DateUtil.cs" /> + <Compile Include="WebControls\ControlBase.CPHConnector\CPHConnector.cs" /> + <Compile Include="WebControls\ControlBase.PageManager\CustomEventArgs.cs" /> + <Compile Include="WebControls\Field.CheckBox\EventArgs\CheckedEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreeNodeEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreePreNodeEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\Editor\GridColumnEditorCollection.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Field\Field.cs" /> + <Compile Include="BaseWebControls\ControlBase.Component.BoxComponent\BoxComponent.cs" /> + <Compile Include="BaseWebControls\ControlBase.Component\Component.cs" /> + <Compile Include="BaseWebControls\ControlBase\ControlBase.cs" /> + <Compile Include="BaseWebControls\ControlBase\ControlBaseCollection.cs" /> + <Compile Include="Business\ControlBuilder\NotAllowWhitespaceLiteralsBuilder.cs" /> + <Compile Include="BaseWebControls\ControlBase\BaseCollection.cs" /> + <Compile Include="Business\ControlBuilder\ContentPanelBuilder.cs" /> + <Compile Include="Business\Config\GlobalConfig.cs" /> + <Compile Include="Business\Editor\ControlBaseItemsEditor.cs" /> + <Compile Include="Business\Editor\MenuItemsEditor.cs" /> + <Compile Include="Business\Editor\ToolbarItemsEditor.cs" /> + <Compile Include="Business\Editor\GridColumnEditorEditor.cs" /> + <Compile Include="Business\Enums\CompareType.cs" /> + <Compile Include="Business\Enums\HideMode.cs" /> + <Compile Include="Business\Enums\Icon.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Business\Enums\IconHelper.cs" /> + <Compile Include="Business\Enums\Theme.cs" /> + <Compile Include="Business\Enums\Language.cs" /> + <Compile Include="Business\Enums\Operator.cs" /> + <Compile Include="Business\Enums\TriggerIcon.cs" /> + <Compile Include="Business\Enums\WindowPosition.cs" /> + <Compile Include="Business\Enums\ToolbarPosition.cs" /> + <Compile Include="Business\Enums\Target.cs" /> + <Compile Include="Business\Enums\RegexPattern.cs" /> + <Compile Include="Business\Enums\CloseAction.cs" /> + <Compile Include="Business\Enums\Position.cs" /> + <Compile Include="Business\Enums\TabPosition.cs" /> + <Compile Include="Business\Enums\IconAlign.cs" /> + <Compile Include="Business\Enums\ButtonSize.cs" /> + <Compile Include="Business\Enums\BoxLayoutAlign.cs" /> + <Compile Include="Business\Enums\BoxLayoutPosition.cs" /> + <Compile Include="Business\Enums\AjaxLoadingType.cs" /> + <Compile Include="Business\Enums\TextAlign.cs" /> + <Compile Include="Business\Enums\LabelAlign.cs" /> + <Compile Include="Business\Enums\VerticalAlign.cs" /> + <Compile Include="Business\JsHelper\JsArrayBuilder.cs" /> + <Compile Include="Business\JsHelper\OptionBuilder.cs" /> + <Compile Include="Business\ResourceManager\ClientJavascriptIDManager.cs" /> + <Compile Include="Business\ResourceManager\CommonResourceHelper.cs" /> + <Compile Include="Business\ResourceManager\ResourceHandler.cs" /> + <Compile Include="Business\ResourceManager\ResponseFilter.cs" /> + <Compile Include="Business\ResourceManager\ScriptModule.cs" /> + <Compile Include="Business\ResourceManager\TreeNodeIDManager.cs" /> + <Compile Include="Business\SimulateTree\SimulateTreeHeper.cs" /> + <Compile Include="Business\SimulateTree\SimulateTreeNode.cs" /> + <Compile Include="Business\Util\ControlUtil.cs" /> + <Compile Include="Business\Util\StringUtil.cs" /> + <Compile Include="Business\Util\ObjectUtil.cs" /> + <Compile Include="Business\Util\HtmlNodeBuilder.cs" /> + <Compile Include="Business\Util\StyleUtil.cs" /> + <Compile Include="Business\Util\JSONUtil.cs" /> + <Compile Include="lib\HtmlAgilityPack\crc32.cs" /> + <Compile Include="lib\HtmlAgilityPack\EncodingFoundException.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlAttribute.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlAttributeCollection.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlCmdLine.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlCommentNode.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlConsoleListener.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlDocument.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlElementFlag.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlEntity.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNameTable.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNode.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNodeCollection.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNodeNavigator.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlNodeType.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlParseError.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlParseErrorCode.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlTextNode.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlWeb.cs" /> + <Compile Include="lib\HtmlAgilityPack\HtmlWebException.cs" /> + <Compile Include="lib\HtmlAgilityPack\IOLibrary.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocument.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentCodeFragment.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentFragment.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentFragmentList.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentFragmentType.cs" /> + <Compile Include="lib\HtmlAgilityPack\MixedCodeDocumentTextFragment.cs" /> + <Compile Include="lib\HtmlAgilityPack\NameValuePair.cs" /> + <Compile Include="lib\HtmlAgilityPack\NameValuePairList.cs" /> + <Compile Include="lib\JSBeautifyLib\JSBeautify.cs" /> + <Compile Include="WebControls\BoxComponent.Toolbar\ToolbarCollection.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuCheckBox.cs" /> + <Compile Include="WebControls\ControlBase.Timer\Timer.cs" /> + <Compile Include="BaseWebControls\BoxComponent.Field\TooltipField.cs" /> + <Compile Include="WebControls\ControlBase.UserControlConnector\UserControlConnector.cs" /> + <Compile Include="WebControls\Field.RadioButtonList\RadioItem\RadioItem.cs" /> + <Compile Include="WebControls\Field.RadioButtonList\RadioItem\RadioItemCollection.cs" /> + <Compile Include="StaticClass\Confirm.cs" /> + <Compile Include="StaticClass\ActiveWindow.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuItem.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuButton.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuText.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuSeparator.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuHyperLink.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\MenuItemCollection.cs" /> + <Compile Include="WebControls\Component.Menu\MenuItem\BaseMenuItem.cs" /> + <Compile Include="WebControls\Component.SplitButton\SplitButton.cs" /> + <Compile Include="WebControls\Component.Menu\Menu.cs" /> + <Compile Include="WebControls\ControlBase.PageManager\PageManager.cs" /> + <Compile Include="WebControls\Field.Label.Image\Image.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.FileUpload\FileUpload.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.HiddenField\HiddenField.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TwinTriggerBox\TwinTriggerBox.cs" /> + <Compile Include="WebControls\Field.Label.LinkButton\LinkButton.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\Field.RadioButtonList\RadioButtonList.cs" /> + <Compile Include="WebControls\Field.RadioButton\RadioButton.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TriggerBox\TriggerBox.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Business\Editor\GridColumnsEditor.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridRowSelectEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridAfterEditEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\BaseField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\RenderField\RenderField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\RenderField\RenderCheckField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\RenderField\RenderBaseField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\RowNumberField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\GroupField.cs" /> + <Compile Include="WebControls\PanelBase.RegionPanel\RegionPanel.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Accordion\Accordion.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Accordion\AccordionPane\AccordionPane.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Accordion\AccordionPane\AccordionPaneCollection.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreeCommandEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\EventArgs\TreeCheckEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\TreeNode\TreeNode.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\TreeNode\TreeNodeCollection.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\XmlAttributeMapping\XmlAttributeMapping.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\XmlAttributeMapping\XmlAttributeMappingCollection.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Window\EventArgs\WindowCloseEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridPreRowEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridPageEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridCommandEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridRowEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridRowClickEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\LinkButtonField.cs" /> + <Compile Include="WebControls\PanelBase.RegionPanel\Region\Region.cs" /> + <Compile Include="WebControls\PanelBase.RegionPanel\Region\RegionCollection.cs" /> + <Compile Include="WebControls\Component.Calendar\Calendar.cs" /> + <Compile Include="WebControls\BoxComponent.Toolbar\Toolbar.cs" /> + <Compile Include="WebControls\BoxComponent.Toolbar\Component.ToolbarText\ToolbarText.cs" /> + <Compile Include="WebControls\BoxComponent.Toolbar\Component.ToolbarSeparator\ToolbarSeparator.cs"> + </Compile> + <Compile Include="WebControls\BoxComponent.Toolbar\Component.ToolbarFill\ToolbarFill.cs"> + </Compile> + <Compile Include="WebControls\Field.Label.HyperLink\HyperLink.cs" /> + <Compile Include="StaticClass\PageContext.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Tree\Tree.cs" /> + <Compile Include="Business\ResourceManager\AbsoluteScriptBlock.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.ContentPanel\ContentPanel.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Form\Form.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Form\FormRow\FormRow.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Form\FormRow\FormRowCollection.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.CollapsablePanel.GroupPanel\GroupPanel.cs" /> + <Compile Include="WebControls\Field.CheckBox\CheckBox.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.SimpleForm\SimpleForm.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Window\Window.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.Grid\EventArgs\GridSortEventArgs.cs" /> + <Compile Include="WebControls\PanelBase.Grid\Grid.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\BoundField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\CheckBoxField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\WindowField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\ImageField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\TemplateField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\HyperLinkField.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\GridColumn\GridColumn.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridColumn\GridColumn\GridColumnCollection.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridRow\GridTemplateContainer.cs" /> + <Compile Include="WebControls\PanelBase.Grid\GridRow\GridRow.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\PanelBase.Grid\GridRow\GridRowCollection.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="WebControls\Field.TextField.DropDownList\ListItem\ListItem.cs" /> + <Compile Include="WebControls\Field.TextField.DropDownList\ListItem\ListItemCollection.cs" /> + <Compile Include="WebControls\Field.TextField.DropDownList\DropDownList.cs" /> + <Compile Include="WebControls\Field.Label\Label.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TextArea\TextArea.cs" /> + <Compile Include="WebControls\PanelBase.TabStrip\Tab\Tab.cs" /> + <Compile Include="WebControls\PanelBase.TabStrip\TabStrip.cs" /> + <Compile Include="WebControls\PanelBase.CollapsablePanel.Panel\Panel.cs" /> + <Compile Include="WebControls\Field.HtmlEditor\HtmlEditor.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.DatePicker\DatePicker.cs" /> + <Compile Include="WebControls\PanelBase.TabStrip\Tab\TabCollection.cs" /> + <Compile Include="Business\ResourceManager\ScriptBlock.cs" /> + <Compile Include="Business\Enums\Layout.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.NumberBox\NumberBox.cs" /> + <Compile Include="Business\Enums\TextMode.cs" /> + <Compile Include="Business\Enums\ToolTipType.cs" /> + <Compile Include="Business\JsHelper\JsHelper.cs" /> + <Compile Include="StaticClass\Alert.cs" /> + <Compile Include="Business\Enums\MessageBoxIcon.cs" /> + <Compile Include="WebControls\Component.Button\Button.cs" /> + <Compile Include="Business\JsHelper\JsObjectBuilder.cs" /> + <Compile Include="Business\ResourceManager\ResourceHelper.cs" /> + <Compile Include="Business\Config\Constants.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TextBox\TextBox.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Business\Config\ConfigSection.cs" /> + <Compile Include="Business\ResourceManager\ResourceManager.cs" /> + <Compile Include="WebControls\Field.CheckBoxList\CheckBoxList.cs" /> + <Compile Include="WebControls\Field.CheckBoxList\CheckItem\CheckItem.cs" /> + <Compile Include="WebControls\Field.CheckBoxList\CheckItem\CheckItemCollection.cs" /> + <Compile Include="WebControls\Field.TextField.RealTextField.TimePicker\TimePicker.cs" /> + </ItemGroup> + <ItemGroup> + <Content Include="release_history_en.txt" /> + <EmbeddedResource Include="toolbox\Accordion.bmp" /> + <EmbeddedResource Include="toolbox\Button.bmp" /> + <EmbeddedResource Include="toolbox\Calendar.bmp" /> + <EmbeddedResource Include="toolbox\CheckBox.bmp" /> + <EmbeddedResource Include="toolbox\CheckBoxList.bmp" /> + <EmbeddedResource Include="toolbox\ContentPanel.bmp" /> + <EmbeddedResource Include="toolbox\DataList.bmp" /> + <EmbeddedResource Include="toolbox\DatePicker.bmp" /> + <EmbeddedResource Include="toolbox\DropDownList.bmp" /> + <EmbeddedResource Include="toolbox\FileUpload.bmp" /> + <EmbeddedResource Include="toolbox\Form.bmp" /> + <EmbeddedResource Include="toolbox\Grid.bmp" /> + <EmbeddedResource Include="toolbox\GroupPanel.bmp" /> + <EmbeddedResource Include="toolbox\HiddenField.bmp" /> + <EmbeddedResource Include="toolbox\HtmlEditor.bmp" /> + <EmbeddedResource Include="toolbox\HyperLink.bmp" /> + <EmbeddedResource Include="toolbox\Image.bmp" /> + <EmbeddedResource Include="toolbox\ImageButton.bmp" /> + <EmbeddedResource Include="toolbox\Label.bmp" /> + <EmbeddedResource Include="toolbox\LinkButton.bmp" /> + <EmbeddedResource Include="toolbox\ListBox.bmp" /> + <EmbeddedResource Include="toolbox\Literal.bmp" /> + <EmbeddedResource Include="toolbox\Menu.bmp" /> + <EmbeddedResource Include="toolbox\MenuButton.bmp" /> + <EmbeddedResource Include="toolbox\MenuCheckBox.bmp" /> + <EmbeddedResource Include="toolbox\MenuHyperLink.bmp" /> + <EmbeddedResource Include="toolbox\MenuSeparator.bmp" /> + <EmbeddedResource Include="toolbox\MenuText.bmp" /> + <EmbeddedResource Include="toolbox\NumberBox.bmp" /> + <EmbeddedResource Include="toolbox\PageLoading.bmp" /> + <EmbeddedResource Include="toolbox\PageManager.bmp" /> + <EmbeddedResource Include="toolbox\Panel.bmp" /> + <EmbeddedResource Include="toolbox\PlaceHolder.bmp" /> + <EmbeddedResource Include="toolbox\RadioButton.bmp" /> + <EmbeddedResource Include="toolbox\RadioButtonList.bmp" /> + <EmbeddedResource Include="toolbox\RegionPanel.bmp" /> + <EmbeddedResource Include="toolbox\SimpleForm.bmp" /> + <EmbeddedResource Include="toolbox\SplitButton.bmp" /> + <EmbeddedResource Include="toolbox\Table.bmp" /> + <EmbeddedResource Include="toolbox\TabStrip.bmp" /> + <EmbeddedResource Include="toolbox\TextArea.bmp" /> + <EmbeddedResource Include="toolbox\TextBox.bmp" /> + <EmbeddedResource Include="toolbox\TimePicker.bmp" /> + <EmbeddedResource Include="toolbox\Toolbar.bmp" /> + <EmbeddedResource Include="toolbox\ToolbarFill.bmp" /> + <EmbeddedResource Include="toolbox\ToolbarSeparator.bmp" /> + <EmbeddedResource Include="toolbox\ToolbarText.bmp" /> + <EmbeddedResource Include="toolbox\Tree.bmp" /> + <EmbeddedResource Include="toolbox\TriggerBox.bmp" /> + <EmbeddedResource Include="toolbox\TwinTriggerBox.bmp" /> + <EmbeddedResource Include="toolbox\UserControlConnector.bmp" /> + <EmbeddedResource Include="toolbox\View.bmp" /> + <EmbeddedResource Include="toolbox\Window.bmp" /> + <None Include="StrongName.snk" /> + </ItemGroup> + <ItemGroup> + <Content Include="release_history.txt" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/FineUI_v6/FineUI/Properties/AssemblyInfo.cs b/FineUI_v6/FineUI/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..402b603 --- /dev/null +++ b/FineUI_v6/FineUI/Properties/AssemblyInfo.cs @@ -0,0 +1,49 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Web.UI; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +#if DEBUG +[assembly: AssemblyTitle("FineUI - Debug")] +#else +[assembly: AssemblyTitle("FineUI - Release")] +#endif + +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("FineUI")] +[assembly: AssemblyProduct("FineUI")] +[assembly: AssemblyCopyright("Copyright (C) 2008-2012 30372245@qq.com")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e5b98f13-3bde-4009-bc43-82267c23c5f6")] + + +[assembly: TagPrefix("FineUI", "f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("6.0.3")] + + + + diff --git a/FineUI_v6/FineUI/StaticClass/ActiveWindow.cs b/FineUI_v6/FineUI/StaticClass/ActiveWindow.cs new file mode 100644 index 0000000..ed7ae9c --- /dev/null +++ b/FineUI_v6/FineUI/StaticClass/ActiveWindow.cs @@ -0,0 +1,215 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ActiveWindow.cs + * CreatedOn: 2008-06-18 22:30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; + +namespace FineUI +{ + /// <summary> + /// 当前活动窗体帮助类(静态类) + /// </summary> + public static class ActiveWindow + { + #region old code + + // aw = aw + //private static readonly string ACTIVE_WINDOW_SCRIPT = "if(!aw){var aw=parent.window.X.window_default_group.getActive();}"; + //private static readonly string ACTIVE_WINDOW_SCRIPT = "var parentClientID=box_getParentClientIdFromUrl();if(parentClientID){var window2=parent.window;var aw=parent.window.Ext.getCmp(parentClientID);if(aw.box_property_frame_element_name){window2=parent.Ext.query('iframe[name='+aw.box_property_frame_element_name+']')[0].contentWindow;aw=eval('window2.X.'+aw.id);}}"; + //private static readonly string ACTIVE_WINDOW_SCRIPT = "var aw=F.wnd.getActiveWindow();"; + + #endregion + + #region GetWriteBackValueReference + + + /// <summary> + /// 获取将values值写回控件的客户端脚本 + /// </summary> + /// <param name="values">需要写回的字符串列表</param> + /// <returns>客户端脚本</returns> + public static string GetWriteBackValueReference(params string[] values) + { + #region old code + + //// 去除重复的 ACTIVE_WINDOW_SCRIPT + //if (controlClientIds.Contains(ACTIVE_WINDOW_SCRIPT)) + //{ + // controlClientIds = controlClientIds.Replace(ACTIVE_WINDOW_SCRIPT, ""); + //} + + //// 此时 controlClientId 是个字符串 或者是 是个字符串的数组,里面是需要赋值的文本框的ClientID + //StringBuilder sb = new StringBuilder(); + //sb.Append(ACTIVE_WINDOW_SCRIPT); + //sb.AppendFormat("var controlClientIds={0};", controlClientIds); + + //sb.AppendFormat("if(typeof(controlClientIds)=='string'){{{0}}}", "aw[1].Ext.getCmp(controlClientIds).setValue(" + JsHelper.Enquote(value) + ");"); + + //// values + //StringBuilder valuesBuilder = new StringBuilder(); + //if (values.Length > 0) + //{ + // valuesBuilder.AppendFormat("var controlValues={0};", JsHelper.GetJsStringArray(values)); + // valuesBuilder.Append("var controlCount=Math.min(controlClientIds.length-1,controlValues.length);"); + + // valuesBuilder.AppendFormat("for(var i=0;i<controlCount;i++){{{0}}}", "aw[1].Ext.getCmp(controlClientIds[i+1]).setValue(controlValues[i]);"); + //} + + + //sb.AppendFormat("else{{{0}{1}}}", "aw[1].Ext.getCmp(controlClientIds[0]).setValue(" + JsHelper.Enquote(value) + ");", valuesBuilder.ToString()); + //return sb.ToString(); + + #endregion + + return String.Format("F.wnd.writeBackValue.apply(window,{0});", JsHelper.EnquoteStringArray(values)); + + } + + #endregion + + #region GetHideReference/GetHideRefreshReference/GetHidePostBackReference + + /// <summary> + /// 获取关闭当前激活窗体的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public static string GetHideReference() + { + //return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide();}})();"; + return "F.activeWnd.hide();"; + } + + /// <summary> + /// 获取关闭当前激活窗体并刷新父页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public static string GetHideRefreshReference() + { + //return ACTIVE_WINDOW_SCRIPT + "if(aw){eval('aw[1].X.'+aw[0].id+'_hide_refresh();');}"; + //return ACTIVE_WINDOW_SCRIPT + "if(aw){aw[0].box_hide_refresh();}"; + //return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide_refresh();}})();"; + return "F.activeWnd.hideRefresh();"; + } + + /// <summary> + /// 获取关闭当前激活窗体并回发父页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public static string GetHidePostBackReference() + { + //return ACTIVE_WINDOW_SCRIPT + "if(aw){eval('aw[1].X.'+aw[0].id+'_hide_postback();');}"; + //return ACTIVE_WINDOW_SCRIPT + "if(aw){aw[0].box_hide_postback();}"; + //return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide_postback();}})();"; + return "F.activeWnd.hidePostBack();"; + } + + /// <summary> + /// 获取关闭当前激活窗体并回发父页面的客户端脚本 + /// </summary> + /// <param name="argument">回发参数</param> + /// <returns>客户端脚本</returns> + public static string GetHidePostBackReference(string argument) + { + //return ACTIVE_WINDOW_SCRIPT + "if(aw){eval('aw[1].X.'+aw[0].id+'_hide_postback(\"" + argument + "\");');}"; + //return ACTIVE_WINDOW_SCRIPT + "if(aw){aw[0].box_hide_postback('" + argument + "');}"; + + //return "(function(){var aw=F.wnd.getActiveWindow(); if(aw){ aw[0].box_hide_postback('" + argument + "'); }})();"; + //return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide_postback(" + JsHelper.Enquote(argument) + ");}})();"; + return "F.activeWnd.hidePostBack(" + JsHelper.Enquote(argument) + ");"; + } + + + /// <summary> + /// 获取关闭当前激活窗体并执行脚本的客户端脚本 + /// </summary> + /// <param name="argument">回发参数</param> + /// <returns>客户端脚本</returns> + public static string GetHideExecuteScriptReference(string argument) + { + //return "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.f_hide_executescript(" + JsHelper.Enquote(argument) + ");}})();"; + return "F.activeWnd.hideExecuteScript(" + JsHelper.Enquote(argument) + ");"; + } + + + + #endregion + + #region oldcode + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHideReference() + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHideReference()); + //} + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再刷新父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHideRefreshReference() + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHideRefreshReference()); + //} + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHidePostBackReference() + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHidePostBackReference()); + //} + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再回发父页面的客户端脚本 + ///// </summary> + ///// <param name="argument">回发参数</param> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHidePostBackReference(string argument) + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHidePostBackReference(argument)); + //} + + ///// <summary> + ///// 获取先确认当前页面中表单是否更改,然后关闭当前激活窗体,再执行脚本的客户端脚本 + ///// </summary> + ///// <param name="argument">执行的脚本</param> + ///// <returns>客户端脚本</returns> + //public static string GetConfirmHideExecuteScriptReference(string argument) + //{ + // return String.Format("F.wnd.confirmModified(function(){{{0}}});", GetHideExecuteScriptReference(argument)); + //} + + + #endregion + } +} diff --git a/FineUI_v6/FineUI/StaticClass/Alert.cs b/FineUI_v6/FineUI/StaticClass/Alert.cs new file mode 100644 index 0000000..7d1bdfd --- /dev/null +++ b/FineUI_v6/FineUI/StaticClass/Alert.cs @@ -0,0 +1,754 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Alert.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * ->2008-04-30 30372245@qq.com 改为静态帮助类 + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; + +namespace FineUI +{ + /// <summary> + /// 对话框帮助类 + /// </summary> + public class Alert + { + #region public static + + /// <summary> + /// 默认提示对话图标 + /// </summary> + public static readonly MessageBoxIcon DefaultMessageBoxIcon = MessageBoxIcon.Information; + + #endregion + + #region class + + private string _cssClass; + + /// <summary> + /// 样式类名 + /// </summary> + public string CssClass + { + get { return _cssClass; } + set { _cssClass = value; } + } + + + private string _message; + + /// <summary> + /// 对话框消息正文 + /// </summary> + public string Message + { + get { return _message; } + set { _message = value; } + } + + private string _title; + + /// <summary> + /// 对话框标题 + /// </summary> + public string Title + { + get { return _title; } + set { _title = value; } + } + + private MessageBoxIcon _messageBoxIcon = DefaultMessageBoxIcon; + + /// <summary> + /// 对话框图标 + /// </summary> + public MessageBoxIcon MessageBoxIcon + { + get { return _messageBoxIcon; } + set { _messageBoxIcon = value; } + } + + private string _okScript; + + /// <summary> + /// 点击确认按钮执行的JavaScript脚本 + /// </summary> + public string OkScript + { + get { return _okScript; } + set { _okScript = value; } + } + + private Target _target; + + /// <summary> + /// 对话框的目标位置 + /// </summary> + public Target Target + { + get { return _target; } + set { _target = value; } + } + + private string _iconUrl; + + /// <summary> + /// 自定义对话框图标地址 + /// </summary> + public string IconUrl + { + get { return _iconUrl; } + set { _iconUrl = value; } + } + + private Icon _icon = Icon.None; + + /// <summary> + /// 自定义对话框图标 + /// </summary> + public Icon Icon + { + get { return _icon; } + set { _icon = value; } + } + + + /// <summary> + /// 显示对话框 + /// </summary> + public void Show() + { + //Show(Message, Title, MessageBoxIcon, OkScript, Target, Icon, IconUrl); + PageContext.RegisterStartupScript(this.GetShowReference()); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetShowReference() + { + //return GetShowReference(Message, Title, MessageBoxIcon, OkScript, Target, Icon, IconUrl); + + //if (message == null) + //{ + // message = String.Empty; + //} + //if (title == null) + //{ + // title = String.Empty; + //} + + string message = ""; + string title = ""; + if (!String.IsNullOrEmpty(Message)) + { + message = Message; + } + if (!String.IsNullOrEmpty(Title)) + { + title = Title; + } + + + string addCSSScript = String.Empty; + string iconScriptFragment = String.Empty; + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); + + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + resolvedIconUrl = page.ResolveUrl(resolvedIconUrl); + } + + Target target = Target; + // Icon 或者 IconUrl 不为空 + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + string className = String.Format("f-{0}-alert-icon", System.Guid.NewGuid().ToString("N")); + + var addCSSPrefix = String.Empty; + if (target == Target.Parent) + { + addCSSPrefix = "parent."; + } + else if (target == Target.Top) + { + addCSSPrefix = "top."; + } + addCSSScript = String.Format("{0}F.addCSS('{1}','{2}');", addCSSPrefix, className, StyleUtil.GetNoRepeatBackgroundStyle("." + className, resolvedIconUrl)); + + iconScriptFragment = String.Format("'{0}'", className); + } + else + { + iconScriptFragment = MessageBoxIconHelper.GetName(MessageBoxIcon); + } + + message = message.Replace("\r\n", "\n").Replace("\n", "<br/>"); + title = title.Replace("\r\n", "\n").Replace("\n", "<br/>"); + string targetScript = "window"; + if (target != Target.Self) + { + targetScript = TargetHelper.GetScriptName(target); + } + + JsObjectBuilder jsob = new JsObjectBuilder(); + if (!String.IsNullOrEmpty(CssClass)) + { + jsob.AddProperty("cls", CssClass); + } + if (!String.IsNullOrEmpty(title)) + { + jsob.AddProperty("title", title); + } + if (!String.IsNullOrEmpty(OkScript)) + { + jsob.AddProperty("ok", JsHelper.GetFunction(OkScript), true); + } + if (!String.IsNullOrEmpty(message)) + { + jsob.AddProperty("message", JsHelper.EnquoteWithScriptTag(message), true); + } + if (!String.IsNullOrEmpty(iconScriptFragment)) + { + jsob.AddProperty("messageIcon", iconScriptFragment, true); + } + + return addCSSScript + String.Format("{0}.F.alert({1});", targetScript, jsob); + } + + #endregion + + #region static Show + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + public static void Show(string message) + { + Show(message, String.Empty, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">标题</param> + public static void Show(string message, string title) + { + Show(message, title, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="icon">图标</param> + public static void Show(string message, MessageBoxIcon icon) + { + Show(message, String.Empty, icon, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void Show(string message, string title, string okScript) + { + Show(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + public static void Show(string message, string title, MessageBoxIcon icon) + { + Show(message, title, icon, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void Show(string message, string title, MessageBoxIcon icon, string okScript) + { + PageContext.RegisterStartupScript(GetShowReference(message, title, icon, okScript)); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="target">显示对话框的目标页面</param> + public static void Show(string message, string title, MessageBoxIcon icon, string okScript, Target target) + { + PageContext.RegisterStartupScript(GetShowReference(message, title, icon, okScript, target)); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="messageBoxIcon"></param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="target">显示对话框的目标页面</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="iconUrl">自定义对话框图标地址</param> + public static void Show(string message, string title, MessageBoxIcon messageBoxIcon, string okScript, Target target, Icon icon, string iconUrl) + { + PageContext.RegisterStartupScript(GetShowReference(message, title, messageBoxIcon, okScript, target, icon, iconUrl)); + } + + #endregion + + #region static ShowInParent + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + public static void ShowInParent(string message) + { + ShowInParent(message, String.Empty, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">标题</param> + public static void ShowInParent(string message, string title) + { + ShowInParent(message, title, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="icon">图标</param> + public static void ShowInParent(string message, MessageBoxIcon icon) + { + ShowInParent(message, String.Empty, icon, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void ShowInParent(string message, string title, string okScript) + { + ShowInParent(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + public static void ShowInParent(string message, string title, MessageBoxIcon icon) + { + ShowInParent(message, title, icon, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void ShowInParent(string message, string title, MessageBoxIcon icon, string okScript) + { + PageContext.RegisterStartupScript(GetShowInParentReference(message, title, icon, okScript)); + } + + #endregion + + #region static ShowInTop + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + public static void ShowInTop(string message) + { + ShowInTop(message, String.Empty, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">对话框标题</param> + public static void ShowInTop(string message, string title) + { + ShowInTop(message, title, DefaultMessageBoxIcon, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="icon">自定义对话框图标</param> + public static void ShowInTop(string message, MessageBoxIcon icon) + { + ShowInTop(message, String.Empty, icon, String.Empty); + } + + /// <summary> + /// + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void ShowInTop(string message, string title, string okScript) + { + ShowInTop(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + public static void ShowInTop(string message, string title, MessageBoxIcon icon) + { + ShowInTop(message, title, icon, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + public static void ShowInTop(string message, string title, MessageBoxIcon icon, string okScript) + { + PageContext.RegisterStartupScript(GetShowInTopReference(message, title, icon, okScript)); + } + + #endregion + + #region static GetShowReference + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message) + { + return GetShowReference(message, String.Empty, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title) + { + return GetShowReference(message, title, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, MessageBoxIcon icon) + { + return GetShowReference(message, String.Empty, icon); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon) + { + return GetShowReference(message, title, icon, String.Empty); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, string okScript) + { + return GetShowReference(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript) + { + return GetShowReference(message, title, icon, okScript, Target.Self); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="target">显示对话框的目标页面</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript, Target target) + { + return GetShowReference(message, title, icon, okScript, target, Icon.None, null); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="messageBoxIcon"></param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="target">显示对话框的目标页面</param> + /// <param name="icon"></param> + /// <param name="iconUrl">自定义对话框图标地址</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon messageBoxIcon, string okScript, Target target, Icon icon, string iconUrl) + { + Alert alert = new Alert(); + alert.Message = message; + alert.Title = title; + alert.MessageBoxIcon = messageBoxIcon; + alert.OkScript = okScript; + alert.Target = target; + alert.Icon = icon; + alert.IconUrl = iconUrl; + return alert.GetShowReference(); + + + //if (String.IsNullOrEmpty(title) && + // messageBoxIcon == DefaultMessageBoxIcon && + // String.IsNullOrEmpty(okScript) && + // String.IsNullOrEmpty(resolvedIconUrl)) + //{ + // return addCSSScript + String.Format("{0}.F.alert({1});", targetScript, JsHelper.Enquote(message)); + //} + //else + //{ + // return addCSSScript + String.Format("{0}.F.alert({1},{2},{3},{4});", + // targetScript, + // JsHelper.EnquoteWithScriptTag(message), + // JsHelper.Enquote(title), + // iconScriptFragment, + // String.IsNullOrEmpty(okScript) ? "''" : JsHelper.GetFunction(okScript)); + //} + + } + #endregion + + #region static GetShowInParentReference + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message) + { + return GetShowInParentReference(message, String.Empty, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title) + { + return GetShowInParentReference(message, title, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, MessageBoxIcon icon) + { + return GetShowInParentReference(message, String.Empty, icon); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title, MessageBoxIcon icon) + { + return GetShowInParentReference(message, title, icon, String.Empty); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title, string okScript) + { + return GetShowInParentReference(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title, MessageBoxIcon icon, string okScript) + { + return GetShowReference(message, title, icon, okScript, Target.Parent); + } + + #endregion + + #region static GetShowInTopReference + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message) + { + return GetShowInTopReference(message, String.Empty, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title) + { + return GetShowInTopReference(message, title, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, MessageBoxIcon icon) + { + return GetShowInTopReference(message, String.Empty, icon); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title, MessageBoxIcon icon) + { + return GetShowInTopReference(message, title, icon, String.Empty); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title, string okScript) + { + return GetShowInTopReference(message, title, DefaultMessageBoxIcon, okScript); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">自定义对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title, MessageBoxIcon icon, string okScript) + { + return GetShowReference(message, title, icon, okScript, Target.Top); + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/StaticClass/Confirm.cs b/FineUI_v6/FineUI/StaticClass/Confirm.cs new file mode 100644 index 0000000..7e7a2c8 --- /dev/null +++ b/FineUI_v6/FineUI/StaticClass/Confirm.cs @@ -0,0 +1,781 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Confirm.cs + * CreatedOn: 2008-06-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; + +namespace FineUI +{ + /// <summary> + /// 确认对话框帮助类(静态类) + /// </summary> + public class Confirm + { + #region public static + + //public static string DefaultTitle = "确认对话框"; + + /// <summary> + /// 确认对话框默认图标 + /// </summary> + public static MessageBoxIcon DefaultMessageBoxIcon = MessageBoxIcon.Question; + + + ///// <summary> + ///// 确认对话框默认图标 + ///// </summary> + //public static MessageBoxIcon DefaultIcon = MessageBoxIcon.Question; + + + #endregion + + #region class + + private string _cssClass; + + /// <summary> + /// 样式类名 + /// </summary> + public string CssClass + { + get { return _cssClass; } + set { _cssClass = value; } + } + + + private string _message; + + /// <summary> + /// 对话框消息正文 + /// </summary> + public string Message + { + get { return _message; } + set { _message = value; } + } + + private string _title; + + /// <summary> + /// 对话框标题 + /// </summary> + public string Title + { + get { return _title; } + set { _title = value; } + } + + private MessageBoxIcon _messageBoxIcon = DefaultMessageBoxIcon; + + /// <summary> + /// 对话框图标 + /// </summary> + public MessageBoxIcon MessageBoxIcon + { + get { return _messageBoxIcon; } + set { _messageBoxIcon = value; } + } + + private string _okScript; + + /// <summary> + /// 点击确认按钮执行的JavaScript脚本 + /// </summary> + public string OkScript + { + get { return _okScript; } + set { _okScript = value; } + } + + + private string _cancelScript; + + /// <summary> + /// 点击取消按钮执行的JavaScript脚本 + /// </summary> + public string CancelScript + { + get { return _cancelScript; } + set { _cancelScript = value; } + } + + private Target _target; + + /// <summary> + /// 对话框的目标位置 + /// </summary> + public Target Target + { + get { return _target; } + set { _target = value; } + } + + //private string _iconUrl; + + ///// <summary> + ///// 自定义对话框图标地址 + ///// </summary> + //public string IconUrl + //{ + // get { return _iconUrl; } + // set { _iconUrl = value; } + //} + + //private Icon _icon = Icon.None; + + ///// <summary> + ///// 自定义对话框图标 + ///// </summary> + //public Icon Icon + //{ + // get { return _icon; } + // set { _icon = value; } + //} + + + /// <summary> + /// 显示对话框 + /// </summary> + public void Show() + { + //Show(Message, Title, MessageBoxIcon, OkScript, Target, Icon, IconUrl); + PageContext.RegisterStartupScript(this.GetShowReference()); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetShowReference() + { + string message = ""; + string title = ""; + if (!String.IsNullOrEmpty(Message)) + { + message = Message; + } + if (!String.IsNullOrEmpty(Title)) + { + title = Title; + } + + + JsObjectBuilder jsOB = new JsObjectBuilder(); + + if (!String.IsNullOrEmpty(CancelScript)) + { + jsOB.AddProperty("cancel", CancelScript); + } + + if (!String.IsNullOrEmpty(OkScript)) + { + jsOB.AddProperty("ok", OkScript); + } + + if (Target != Target.Self) + { + jsOB.AddProperty("target", TargetHelper.GetName(Target)); + } + + if (MessageBoxIcon != MessageBoxIcon.Warning) + { + jsOB.AddProperty("messageIcon", MessageBoxIconHelper.GetShortName(MessageBoxIcon)); + } + + if (!String.IsNullOrEmpty(title)) + { + jsOB.AddProperty("title", title.Replace("\r\n", "\n").Replace("\n", "<br/>")); + } + + if (!String.IsNullOrEmpty(message)) + { + jsOB.AddProperty("message", JsHelper.EnquoteWithScriptTag(message.Replace("\r\n", "\n").Replace("\n", "<br/>")), true); + } + + return String.Format("F.confirm({0});", jsOB.ToString()); + } + + #endregion + + + #region static Show + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + public static void Show(string message) + { + Show(message, String.Empty, DefaultMessageBoxIcon, String.Empty, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">标题</param> + public static void Show(string message, string title) + { + Show(message, title, DefaultMessageBoxIcon, String.Empty, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="icon">图标</param> + public static void Show(string message, MessageBoxIcon icon) + { + Show(message, String.Empty, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + public static void Show(string message, string title, string okScript, string cancelScript) + { + Show(message, title, DefaultMessageBoxIcon, okScript, cancelScript); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + public static void Show(string message, string title, MessageBoxIcon icon) + { + Show(message, title, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + public static void Show(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript) + { + PageContext.RegisterStartupScript(GetShowReference(message, title, icon, okScript, cancelScript)); + } + + /// <summary> + /// 显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <param name="target">显示对话框的目标页面</param> + public static void Show(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript, Target target) + { + PageContext.RegisterStartupScript(GetShowReference(message, title, icon, okScript, cancelScript, target)); + } + + #endregion + + #region static ShowInParent + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + public static void ShowInParent(string message) + { + ShowInParent(message, String.Empty, DefaultMessageBoxIcon, String.Empty, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">标题</param> + public static void ShowInParent(string message, string title) + { + ShowInParent(message, title, DefaultMessageBoxIcon, String.Empty, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="icon">图标</param> + public static void ShowInParent(string message, MessageBoxIcon icon) + { + ShowInParent(message, String.Empty, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + public static void ShowInParent(string message, string title, string okScript, string cancelScript) + { + ShowInParent(message, title, DefaultMessageBoxIcon, okScript, cancelScript); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + public static void ShowInParent(string message, string title, MessageBoxIcon icon) + { + ShowInParent(message, title, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 在父页面中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + public static void ShowInParent(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript) + { + PageContext.RegisterStartupScript(GetShowInParentReference(message, title, icon, okScript, cancelScript)); + } + + #endregion + + #region static ShowInTop + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + public static void ShowInTop(string message) + { + ShowInTop(message, String.Empty, DefaultMessageBoxIcon, String.Empty, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">对话框标题</param> + public static void ShowInTop(string message, string title) + { + ShowInTop(message, title, DefaultMessageBoxIcon, String.Empty, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="icon">对话框消息图标</param> + public static void ShowInTop(string message, MessageBoxIcon icon) + { + ShowInTop(message, String.Empty, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + public static void ShowInTop(string message, string title, string okScript, string cancelScript) + { + ShowInTop(message, title, DefaultMessageBoxIcon, okScript, cancelScript); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">消息正文</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + public static void ShowInTop(string message, string title, MessageBoxIcon icon) + { + ShowInTop(message, title, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 在顶层窗口中显示对话框 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + public static void ShowInTop(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript) + { + PageContext.RegisterStartupScript(GetShowInTopReference(message, title, icon, okScript, cancelScript)); + } + + #endregion + + #region GetShowReference + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message) + { + return GetShowReference(message, String.Empty, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title) + { + return GetShowReference(message, title, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="icon">对话框消息图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, MessageBoxIcon icon) + { + return GetShowReference(message, String.Empty, icon); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon) + { + return GetShowReference(message, title, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, string okScript, string cancelScript) + { + return GetShowReference(message, title, DefaultMessageBoxIcon, okScript, cancelScript); + } + + /// <summary> + /// 获取显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript) + { + return GetShowReference(message, title, icon, okScript, cancelScript, Target.Self); + } + + /// <summary> + /// 获取显示确认对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <param name="target">弹出对话框的目标页面</param> + /// <returns>客户端脚本</returns> + public static string GetShowReference(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript, Target target) + { + Confirm confirm = new Confirm(); + confirm.Message = message; + confirm.Title = title; + confirm.MessageBoxIcon = icon; + confirm.OkScript = okScript; + confirm.CancelScript = cancelScript; + confirm.Target = target; + + return confirm.GetShowReference(); + + /* + if (String.IsNullOrEmpty(title)) + { + title = "F.util.confirmTitle"; + } + else + { + title = JsHelper.GetJsString(title.Replace("\r\n", "\n").Replace("\n", "<br/>")); + } + message = message.Replace("\r\n", "\n").Replace("\n", "<br/>"); + + + JsObjectBuilder ob = new JsObjectBuilder(); + ob.AddProperty("title", title, true); + ob.AddProperty("msg", JsHelper.GetJsStringWithScriptTag(message), true); + ob.AddProperty("buttons", "Ext.MessageBox.OKCANCEL", true); + ob.AddProperty("icon", String.Format("{0}", MessageBoxIconHelper.GetName(icon)), true); + ob.AddProperty("fn", String.Format("function(btn){{if(btn=='cancel'){{{0}}}else{{{1}}}}}", cancelScript, okScriptstring), true); + + string targetName = "window"; + if (target != Target.Self) + { + targetName = TargetHelper.GetScriptName(target); + } + return String.Format("{0}.Ext.MessageBox.show({1});", targetName, ob.ToString()); + */ + //string scriptTitle = "''"; + //if (!String.IsNullOrEmpty(title)) + //{ + // scriptTitle = JsHelper.Enquote(title.Replace("\r\n", "\n").Replace("\n", "<br/>")); + //} + //string scriptMessage = JsHelper.EnquoteWithScriptTag(message.Replace("\r\n", "\n").Replace("\n", "<br/>")); + + //string scriptIconName = "''"; + //if (icon != MessageBoxIcon.Warning) + //{ + // scriptIconName = String.Format("'{0}'", MessageBoxIconHelper.GetShortName(icon)); + //} + + //string scriptTargetName = "''"; + //if (target != Target.Self) + //{ + // scriptTargetName = String.Format("'{0}'", TargetHelper.GetName(target)); + //} + //string scriptCancel = JsHelper.Enquote(cancelScript); + //string scriptOK = JsHelper.Enquote(okScript); + + + + //JsObjectBuilder jsOB = new JsObjectBuilder(); + + //if (!String.IsNullOrEmpty(cancelScript)) + //{ + // jsOB.AddProperty("cancel", cancelScript); + //} + + //if (!String.IsNullOrEmpty(okScript)) + //{ + // jsOB.AddProperty("ok", okScript); + //} + + //if (target != Target.Self) + //{ + // jsOB.AddProperty("target", TargetHelper.GetName(target)); + //} + + //if (icon != MessageBoxIcon.Warning) + //{ + // jsOB.AddProperty("messageIcon", MessageBoxIconHelper.GetShortName(icon)); + //} + + //if (!String.IsNullOrEmpty(title)) + //{ + // jsOB.AddProperty("title", title.Replace("\r\n", "\n").Replace("\n", "<br/>")); + //} + + //if (!String.IsNullOrEmpty(message)) + //{ + // jsOB.AddProperty("message", JsHelper.EnquoteWithScriptTag(message.Replace("\r\n", "\n").Replace("\n", "<br/>")), true); + //} + + //return String.Format("F.confirm({0});", jsOB.ToString()); + + + } + + #endregion + + + #region static GetShowInParentReference + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message) + { + return GetShowInParentReference(message, String.Empty, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title) + { + return GetShowInParentReference(message, title, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="icon">对话框消息图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, MessageBoxIcon icon) + { + return GetShowInParentReference(message, String.Empty, icon); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title, MessageBoxIcon icon) + { + return GetShowInParentReference(message, title, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title, string okScript, string cancelScript) + { + return GetShowInParentReference(message, title, DefaultMessageBoxIcon, okScript, cancelScript); + } + + /// <summary> + /// 获取在父页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInParentReference(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript) + { + return GetShowReference(message, title, icon, okScript, cancelScript, Target.Parent); + } + + #endregion + + #region static GetShowInTopReference + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message) + { + return GetShowInTopReference(message, String.Empty, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title) + { + return GetShowInTopReference(message, title, DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="icon">对话框消息图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, MessageBoxIcon icon) + { + return GetShowInTopReference(message, String.Empty, icon); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title, MessageBoxIcon icon) + { + return GetShowInTopReference(message, title, icon, String.Empty, String.Empty); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title, string okScript, string cancelScript) + { + return GetShowInTopReference(message, title, DefaultMessageBoxIcon, okScript, cancelScript); + } + + /// <summary> + /// 获取在最上层页面中显示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框消息图标</param> + /// <param name="okScript">点击确定按钮执行的客户端脚本</param> + /// <param name="cancelScript">点击取消按钮执行的客户端脚本</param> + /// <returns>客户端脚本</returns> + public static string GetShowInTopReference(string message, string title, MessageBoxIcon icon, string okScript, string cancelScript) + { + return GetShowReference(message, title, icon, okScript, cancelScript, Target.Top); + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/StaticClass/PageContext.cs b/FineUI_v6/FineUI/StaticClass/PageContext.cs new file mode 100644 index 0000000..d745d0f --- /dev/null +++ b/FineUI_v6/FineUI/StaticClass/PageContext.cs @@ -0,0 +1,299 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: PageContext.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> 什么是PageStateChanged?(表单中任何一个字段发生改变,则页面状态PageState就改变了) + * PageStateChanged 更改为 FormChanged + * 30372245@qq.com 2009-02-26 + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; + +namespace FineUI +{ + /// <summary> + /// 页面上下文帮助类(静态类),包括向页面注册脚本、刷新当前页面、页面重定向等实用函数 + /// </summary> + public static class PageContext + { + #region static readonly + + //private static readonly string PAGE_STATE_CHANGED_FUNCTION_NAME = "F.box_pageStateChanged"; + + #endregion + + #region Redirect + + /// <summary> + /// 跳转到指定的Url + /// </summary> + /// <param name="url"></param> + public static void Redirect(string url) + { + Redirect(url, "_self"); + } + + /// <summary> + /// 跳转到指定的Url,Target指定在哪个窗口中跳转(_self,_parent,_top) + /// </summary> + /// <param name="url"></param> + /// <param name="target">_self,_parent,_top</param> + public static void Redirect(string url, string target) + { + Page page = HttpContext.Current.CurrentHandler as Page; + if (page != null) + { + url = page.ResolveUrl(url); + } + + string redirectScript = String.Empty; + switch (target.ToLower()) + { + case "_parent": + redirectScript = String.Format("parent.window.location.href='{0}';", url); + break; + case "_top": + redirectScript = String.Format("top.window.location.href='{0}';", url); + break; + default: + redirectScript = String.Format("window.location.href='{0}';", url); + break; + } + + RegisterStartupScript(redirectScript); + + + //if (ResourceManager.Instance.IsFineUIAjaxPostBack) + //{ + // RegisterStartupScript(redirectScript); + //} + //else + //{ + // page.ClientScript.RegisterStartupScript(page.GetType(), "redirect", redirectScript, true); + //} + + //if (ResourceManager.Instance.IsFineUIAjaxPostBack) + //{ + // HttpContext.Current.Response.RedirectLocation = url; + //} + //else + //{ + // HttpContext.Current.Response.Redirect(url); + //} + + + + } + + #endregion + + #region Refresh + + /// <summary> + /// 刷新当前页面 + /// </summary> + public static void Refresh() + { + Refresh("_self"); + } + + /// <summary> + /// 刷新指定页面 + /// </summary> + /// <param name="target">目标页面</param> + public static void Refresh(string target) + { + string refreshScript = String.Empty; + switch (target.ToLower()) + { + case "_parent": + refreshScript = "parent.window.location.reload();"; + break; + case "_top": + refreshScript = "top.window.location.reload();"; + break; + default: + refreshScript = "window.location.reload();"; + break; + } + + RegisterStartupScript(refreshScript); + } + + #endregion + + #region RegisterStartupScript + + #region old code + + ///// <summary> + ///// 是否独占的脚本,将禁止页面元素的渲染 + ///// </summary> + ///// <param name="scriptContent"></param> + //public static void RegisterExclusiveScript(string scriptContent) + //{ + // Page page = HttpContext.Current.CurrentHandler as Page; + // if (page != null) + // { + // ResourceManager.Instance.SetExclusiveScript(scriptContent); + // } + + //} + + //public static void RegisterStartupScript(string scriptContent, bool preRegister) + //{ + // if (preRegister) + // { + // RegisterStartupScript(scriptContent, -100); + // } + // else + // { + // RegisterStartupScript(scriptContent); + // } + //} + + ///// <summary> + ///// 注册页面加载后的JS脚本 + ///// Level 层次(层次越高,注册越靠后)(缺省100),负值表示在所有注册脚本之前执行 + ///// </summary> + ///// <param name="page"></param> + ///// <param name="scriptContent"></param> + //public static void RegisterStartupScript(string scriptContent, int level) + //{ + // Page page = HttpContext.Current.CurrentHandler as Page; + // if (page != null) + // { + // ResourceManager.Instance.AddAbsoluteStartupScript(scriptContent, level); + // } + //} + + #endregion + + /// <summary> + /// 注册页面脚本 + /// </summary> + /// <param name="scriptContent">客户端脚本</param> + public static void RegisterStartupScript(string scriptContent) + { + ResourceManager manager = ResourceManager.Instance; + if (manager.IsFineUIAjaxPostBack) + { + manager.AjaxAbsoluteScriptList.Add(scriptContent); + } + else + { + manager.AddAbsoluteStartupScript(scriptContent); + } + } + + #endregion + + #region old code + + + ///// <summary> + ///// 获取当前页面中表单修改的确认提示框的脚本 + ///// </summary> + ///// <returns></returns> + //public static string GetConfirmFormModifiedReference() + //{ + // //return String.Format("{0}();", PAGE_STATE_CHANGED_FUNCTION_NAME); + // return "F.wnd.confirmFormModified();"; + //} + + //public static void RegisterPageStateChangedStartupScript() + //{ + // string confirmText = "是否确认关闭当前页?<br/>您在当前页所做的修改没有保存。继续编辑当前页,请选择“取消”。<br/>选择“确定”关闭当前页,选择“取消”继续编辑当前页。"; + + // RegisterPageStateChangedStartupScript(confirmText); + //} + + //public static void RegisterPageStateChangedStartupScript(string confirmText) + //{ + // string okScript = CurrentActiveWindow.GetCloseReference(); + // string cancelScript = "return false;"; + + // RegisterPageStateChangedStartupScript(confirmText, okScript, cancelScript); + //} + + ///// <summary> + ///// PageManager 的一个属性 + ///// </summary> + ///// <param name="page"></param> + ///// <param name="scriptContent"></param> + //public static void RegisterPageStateChangedStartupScript(string confirmText, string okScript, string cancelScript) + //{ + // string pageStateChangeScript = PageContext.GetPageStateChangedConfirmReference("确认关闭", confirmText, okScript, cancelScript); + + // string scriptContent = String.Format("{0}={1};", PAGE_STATE_CHANGED_FUNCTION_NAME, JsHelper.GetFunctionWrapper(pageStateChangeScript)); + + // RegisterStartupScript(scriptContent); + //} + + + + ///// <summary> + ///// 页面状态已经变化的提示信息 + ///// </summary> + ///// <param name="alertMsg"></param> + ///// <returns></returns> + //private static string GetPageStateChangedReference() + //{ + // return "F.util.isPageStateChanged();"; + //} + + ///// <summary> + ///// 页面状态已经变化的提示信息 + ///// </summary> + ///// <param name="alertMsg"></param> + ///// <returns></returns> + //private static string GetPageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript) + //{ + // // okScript 和 notChangeScript 一样 + // return GetPageStateChangedConfirmReference(confirmTitle, confirmMsg, okScript, cancelScript, okScript); + //} + + ///// <summary> + ///// 页面状态已经变化的提示信息 + ///// </summary> + ///// <param name="alertMsg"></param> + ///// <returns></returns> + //private static string GetPageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript, string notChangeScript) + //{ + // //string closeScript = notChangeScript; + // //string confirmScript = FineUI.Confirm.GetShowReference(confirmMsg, confirmTitle, FineUI.MessageBoxIcon.Question, "return false;", closeScript); + // //btnClose.OnClientClick = String.Format("if({0}){{{1}}}else{{{2}}}", FineUI.PageContext.GetPageStateChangedReference(), confirmScript, closeScript); + + // string confirmScript = Confirm.GetShowReference(confirmMsg, confirmTitle, MessageBoxIcon.Warning, okScript, cancelScript); + // return String.Format("if({0}){{{1}}}else{{{2}}}", GetPageStateChangedReference(), confirmScript, notChangeScript); + //} + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/StrongName.snk b/FineUI_v6/FineUI/StrongName.snk new file mode 100644 index 0000000000000000000000000000000000000000..d3de039171f7733f7279b2af5d744712b3c60e3c GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097F4gOLq#-r6loUjBmWL)01;CTsIHQnv- z6d?7Y*@OC0yP}~hdGvx%-7&mAVFMqD3p;#9YrR|-Gn7#9%V3WikIz$@_#>G(Lo592 zbElKl|9_DhVP@*wS(_mRp6Ze7RBl^*wA7poyE6ME(pOK3T2}mKV-noNM}#BQp{}Me z+Q4fbaiUwI0Ee8v`{Ubd>vQ(4Z?p<y*nGNBKE`1&v#73J_!6OaAUPQyr-_7!6OYKs z1)hB+wy$yTUijwI=cumHO4h}_loUt1gXk7*e9mw^bo=siEl^##HP<xQo}|pWApWEO zQ!*{@!t^pkzFzh|Sk23{Ml~yV#J;%EVcoWEwvyI@JXDwxyX7H<w*0S&0DdA%bLQV# z`wHhZI+@p2X6LXpsBRs>LaaX4SYIrged-^6D(bhEir?U?tgS(7<pH;+9#<-(>wX>- z2%C;;)5uR4WBoW%n`KD6BqFBm)dn=e0m6;kKcyP36nzZ2CDLNf8Bfr4w2B-@K9<bV zmDVG({E#*pe7rF4neie9X~}VdJlCW`Jy3}T^O2hs*E$bhB0GfdR_t%gmTrGUWpBwH zoO7_J{I{o}(wOCmRt55RMPwy7vd51n{6-=eLVqbX3I$I+3vt!c6rJxg>5FR1>gCD@ zB^+iV5#P{5LZ*80)>*BcasCpMpwktNhl>7xotg43WOgD5Ol;al)2&S*=d>h%1I;x8 i^B1@py@+S;J%EfGSBre!x?7d)jJsOHyo#b<t8*=sEhcOL literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarFill/ToolbarFill.cs b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarFill/ToolbarFill.cs new file mode 100644 index 0000000..48a72b0 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarFill/ToolbarFill.cs @@ -0,0 +1,104 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarFill.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// 工具栏左右分隔符控件 + /// </summary> + [Designer("FineUI.Design.ToolbarFillDesigner, FineUI.Design")] + [ToolboxData("<{0}:ToolbarFill runat=server></{0}:ToolbarFill>")] + [ToolboxBitmap(typeof(ToolbarFill), "toolbox.ToolbarFill.bmp")] + [Description("工具栏左右分隔符控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class ToolbarFill : Component + { + + #region Properties + + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + //OB.RemoveProperty("stateful"); + //OB.RemoveProperty("id"); + + + //string hideScript = String.Empty; + //// Ext.Toolbar.Separator 没有 "hidden"/"hideMode" 参数 + //if (Hidden) + //{ + // OB.RemoveProperty("hidden"); + // OB.RemoveProperty("hideMode"); + + // hideScript = String.Format("{0}.hide();", ClientJavascriptID); + //} + //AddPageFirstLoadAbsoluteScript(hideScript); + + + string jsContent = String.Format("var {0}=F.create('Ext.toolbar.Fill',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarSeparator/ToolbarSeparator.cs b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarSeparator/ToolbarSeparator.cs new file mode 100644 index 0000000..e2943c4 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarSeparator/ToolbarSeparator.cs @@ -0,0 +1,104 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarSeparator.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// 工具栏分隔符控件 + /// </summary> + [Designer("FineUI.Design.ToolbarSeparatorDesigner, FineUI.Design")] + [ToolboxData("<{0}:ToolbarSeparator runat=server></{0}:ToolbarSeparator>")] + [ToolboxBitmap(typeof(ToolbarSeparator), "toolbox.ToolbarSeparator.bmp")] + [Description("工具栏分隔符控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class ToolbarSeparator : Component + { + + #region Properties + + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + //OB.RemoveProperty("stateful"); + //OB.RemoveProperty("id"); + + //string hideScript = String.Empty; + //// Ext.Toolbar.Separator 没有 "hidden"/"hideMode" 参数 + //if (Hidden) + //{ + // OB.RemoveProperty("hidden"); + // OB.RemoveProperty("hideMode"); + + // hideScript = String.Format("{0}.hide();", ClientJavascriptID); + //} + //AddPageFirstLoadAbsoluteScript(hideScript); + + + + string jsContent = String.Format("var {0}=F.create('Ext.toolbar.Separator',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarText/ToolbarText.cs b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarText/ToolbarText.cs new file mode 100644 index 0000000..1a30291 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Component.ToolbarText/ToolbarText.cs @@ -0,0 +1,144 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarText.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// 工具栏文本控件 + /// </summary> + [Designer("FineUI.Design.ToolbarTextDesigner, FineUI.Design")] + [ToolboxData("<{0}:ToolbarText runat=server></{0}:ToolbarText>")] + [ToolboxBitmap(typeof(ToolbarText), "toolbox.ToolbarText.bmp")] + [Description("工具栏文本控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class ToolbarText : Component + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public ToolbarText() + { + AddServerAjaxProperties("Text"); + AddClientAjaxProperties(); + } + + #endregion + + + #region Properties + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Text")) + { + sb.AppendFormat("{0}.setText({1});", XID, JsHelper.Enquote(Text)); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("text", Text); + + //OB.RemoveProperty("stateful"); + //OB.RemoveProperty("id"); + + + //string hideScript = String.Empty; + //// Ext.Toolbar.Separator 没有 "hidden"/"hideMode" 参数 + //if (Hidden) + //{ + // OB.RemoveProperty("hidden"); + // OB.RemoveProperty("hideMode"); + + // hideScript = String.Format("{0}.hide();", ClientJavascriptID); + //} + //AddPageFirstLoadAbsoluteScript(hideScript); + + + + //if (AjaxPropertyChanged("Text", Text)) + //{ + // // 这是extjs2.2中使用的小技巧,extjs3.0已经支持对文本进行更新 + // // AddAjaxPartialUpdateScript(String.Format("{0}.getEl().innerHTML={1};", ClientJavascriptID, JsHelper.Enquote(Text))); + // AddAjaxPropertyChangedScript(String.Format("{0}.setText({1});", XID, JsHelper.Enquote(Text))); + //} + + string jsContent = String.Format("var {0}=F.create('Ext.toolbar.TextItem',{1});", XID, OB.ToString()); + + AddStartupScript(jsContent); + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Toolbar.cs b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Toolbar.cs new file mode 100644 index 0000000..bea3a51 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/Toolbar.cs @@ -0,0 +1,273 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Toolbar.cs + * CreatedOn: 2008-05-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 工具条控件 + /// </summary> + [Designer("FineUI.Design.ToolbarDesigner, FineUI.Design")] + [ToolboxData("<{0}:Toolbar runat=\"server\"><Items></Items></{0}:Toolbar>")] + [ToolboxBitmap(typeof(Toolbar), "toolbox.Toolbar.bmp")] + [Description("工具条控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Toolbar : BoxComponent + { + #region Properties + + + //private bool IsPageMenu_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否页面菜单")] + //public bool IsPageMenu + //{ + // get + // { + // object obj = BoxState["IsPageMenu"]; + // return obj == null ? IsPageMenu_Default : (bool)obj; + // } + // set + // { + // BoxState["IsPageMenu"] = value; + // } + //} + + /// <summary> + /// 页脚工具栏的排列位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ToolbarAlign.Left)] + [Description("工具栏的排列位置")] + public ToolbarAlign ToolbarAlign + { + get + { + object obj = FState["ToolbarAlign"]; + return obj == null ? ToolbarAlign.Left : (ToolbarAlign)obj; + } + set + { + FState["ToolbarAlign"] = value; + } + } + + + + /// <summary> + /// 工具条的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ToolbarPosition.Top)] + [Description("工具条的位置")] + public virtual ToolbarPosition Position + { + get + { + object obj = FState["Position"]; + return obj == null ? ToolbarPosition.Top : (ToolbarPosition)obj; + } + set + { + FState["Position"] = value; + } + } + + + #endregion + + #region Items + + private ControlBaseCollection _items; + + /// <summary> + /// 工具条项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(ToolbarItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ControlBaseCollection Items + { + get + { + if (_items == null) + { + _items = new ControlBaseCollection(this); + } + return _items; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("toolbar"); + + #region Items + + // 重新设置Items + if (Controls.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (Control item in Controls) + { + if (item is ControlBase && item.Visible) + { + #region old code + + //// 如果是分隔符 + //if (item is ToolbarSeparator) + //{ + // ab.AddProperty("'-'", true); + //} + //else if (item is ToolbarText) + //{ + // ab.AddProperty(String.Format("'{0}'", (item as ToolbarText).Text), true); + //} + //if (item is ToolbarFill) + //{ + // ab.AddProperty("'->'", true); + //} + //else + //{ + //ab.AddProperty(String.Format("{0}", (item as ControlBase).ClientJavascriptID), true); + //} + + #endregion + + ab.AddProperty(String.Format("{0}", (item as ControlBase).XID), true); + } + } + + if (ab.Count > 0) + { + OB.AddProperty("items", ab.ToString(), true); + } + } + + + #endregion + + + JsObjectBuilder layoutOB = new JsObjectBuilder(); + layoutOB.AddProperty("pack", ToolbarAlignHelper.GetName(ToolbarAlign)); + + OB.AddProperty("layout", layoutOB, true); + + OB.AddProperty("xtype", "toolbar"); + + OB.AddProperty("dock", ToolbarPositionHelper.GetExtName(Position)); + + string jsContent = String.Format("var {0}=F.create('Ext.Toolbar',{1});", XID, OB.ToString()); + + //string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + + AddStartupScript(jsContent); + + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/ToolbarCollection.cs b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/ToolbarCollection.cs new file mode 100644 index 0000000..7475d43 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/BoxComponent.Toolbar/ToolbarCollection.cs @@ -0,0 +1,94 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ToolbarCollection.cs + * CreatedOn: 2009-08-31 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 工具条控件集合 + /// </summary> + public class ToolbarCollection : BaseCollection<Toolbar> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public ToolbarCollection(PanelBase parent) + : base(parent) + { + } + + /* + protected override void InsertItem(int index, Toolbar item) + { + item.RenderWrapperNode = false; + panelBase.Controls.AddAt(GetStartIndex() + index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + panelBase.Controls.RemoveAt(GetStartIndex() + index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + // We should only remove this collection related controls + // Note we must loop from the last element(startIndex + Count - 1) to the first one(startIndex) + int startIndex = GetStartIndex(); + for (int i = startIndex + Count - 1; i >= startIndex; i--) + { + panelBase.Controls.RemoveAt(i); + } + + base.ClearItems(); + } + + /// <summary> + /// Calculate the start index of Toolbars in base.Controls collection. + /// </summary> + /// <returns></returns> + private int GetStartIndex() + { + if (panelBase is TabStrip) + { + return (panelBase as TabStrip).Tabs.Count; + } + else + { + return panelBase.Items.Count; + } + } + * */ + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Button/Button.cs b/FineUI_v6/FineUI/WebControls/Component.Button/Button.cs new file mode 100644 index 0000000..30ec7cd --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Button/Button.cs @@ -0,0 +1,1017 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Button.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 按钮控件 + /// </summary> + [Designer("FineUI.Design.ButtonDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:Button Text=\"Button\" runat=\"server\"></{0}:Button>")] + [ToolboxBitmap(typeof(Button), "toolbox.Button.bmp")] + [Description("按钮控件")] + [DefaultEvent("Click")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Button : BoxComponent, IPostBackEventHandler, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Button() + { + AddServerAjaxProperties("Text", "Icon", "IconUrl", "ToolTip", "OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmIcon", "ConfirmTarget"); + AddClientAjaxProperties("Pressed"); + } + + #endregion + + #region Properties + + /// <summary> + /// 回发之前禁用按钮(防止重复提交) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("回发之前禁用按钮(防止重复提交)")] + public bool DisableControlBeforePostBack + { + get + { + object obj = FState["DisableControlBeforePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["DisableControlBeforePostBack"] = value; + } + } + + /// <summary> + /// 是否可以回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnablePostBack + { + get + { + object obj = FState["EnablePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePostBack"] = value; + } + } + + + /// <summary> + /// [AJAX属性]是否被按下 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否被按下")] + public bool Pressed + { + get + { + object obj = FState["Pressed"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Pressed"] = value; + } + } + + /// <summary> + /// 是否可以按下 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以按下")] + public bool EnablePress + { + get + { + object obj = FState["EnablePress"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnablePress"] = value; + } + } + + /// <summary> + /// [AJAX属性]点击按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]点击按钮时需要执行的客户端脚本")] + public string OnClientClick + { + get + { + object obj = FState["OnClientClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientClick"] = value; + } + } + + /// <summary> + /// [AJAX属性]预定义图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("[AJAX属性]预定义图标")] + public Icon Icon + { + get + { + object obj = FState["Icon"]; + return obj == null ? Icon.None : (Icon)obj; + } + set + { + FState["Icon"] = value; + } + } + + /// <summary> + /// 按钮的大小 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ButtonSize.Small)] + [Description("按钮的大小")] + public ButtonSize Size + { + get + { + object obj = FState["Size"]; + return obj == null ? ButtonSize.Small : (ButtonSize)obj; + } + set + { + FState["Size"] = value; + } + } + + /// <summary> + /// 图标地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("图标地址")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + object obj = FState["IconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["IconUrl"] = value; + } + } + + /// <summary> + /// 图标摆放位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(IconAlign.Left)] + [Description("图标摆放位置")] + public IconAlign IconAlign + { + get + { + object obj = FState["IconAlign"]; + return obj == null ? IconAlign.Left : (IconAlign)obj; + } + set + { + FState["IconAlign"] = value; + } + } + + + /// <summary> + /// [AJAX属性]按钮文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]按钮文本")] + public string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// <summary> + /// [AJAX属性]提示文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]提示文本")] + public string ToolTip + { + get + { + object obj = FState["ToolTip"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ToolTip"] = value; + } + } + + + /// <summary> + /// 提示文本类型 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ToolTipType.Qtip)] + [Description("提示文本类型")] + public ToolTipType ToolTipType + { + get + { + object obj = FState["ToolTipType"]; + return obj == null ? ToolTipType.Qtip : (ToolTipType)obj; + } + set + { + FState["ToolTipType"] = value; + } + } + + + + /// <summary> + /// Tab键索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("Tab键索引")] + public short? TabIndex + { + get + { + object obj = FState["TabIndex"]; + return obj == null ? null : (short?)obj; + } + set + { + FState["TabIndex"] = value; + } + } + + /// <summary> + /// 按钮类型 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ButtonType.Button)] + [Description("按钮类型")] + public virtual ButtonType Type + { + get + { + object obj = FState["ButtonType"]; + return obj == null ? ButtonType.Button : (ButtonType)obj; + } + set + { + FState["ButtonType"] = value; + } + } + + + #endregion + + #region ValidateForms/ValidateTarget/ValidateMessageBox + + + /// <summary> + /// 需要验证的表单名称列表(逗号分隔) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("需要验证的表单名称列表(逗号分隔)")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + object obj = FState["ValidateForms"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["ValidateForms"] = value; + } + } + + /// <summary> + /// 验证失败时提示对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("验证失败时提示对话框弹出位置")] + public Target ValidateTarget + { + get + { + object obj = FState["ValidateTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ValidateTarget"] = value; + } + } + + + /// <summary> + /// 验证失败时是否出现提示对话框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("验证失败时是否出现提示对话框")] + public bool ValidateMessageBox + { + get + { + object obj = FState["ValidateMessageBox"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ValidateMessageBox"] = value; + } + } + + #endregion + + #region ConfirmText/ConfirmTitle/ConfirmIcon/ConfirmTarget + + /// <summary> + /// [AJAX属性]确认对话框标题 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]确认对话框标题")] + public string ConfirmTitle + { + get + { + object obj = FState["ConfirmTitle"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmTitle"] = value; + } + } + + /// <summary> + /// [AJAX属性]确认对话框内容 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]确认对话框内容")] + public string ConfirmText + { + get + { + object obj = FState["ConfirmText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmText"] = value; + } + } + + + /// <summary> + /// [AJAX属性]确认对话框提示图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(MessageBoxIcon.Warning)] + [Description("[AJAX属性]确认对话框提示图标")] + public MessageBoxIcon ConfirmIcon + { + get + { + object obj = FState["ConfirmIcon"]; + return obj == null ? MessageBoxIcon.Warning : (MessageBoxIcon)obj; + } + set + { + FState["ConfirmIcon"] = value; + } + } + + /// <summary> + /// [AJAX属性]确认对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("[AJAX属性]确认对话框弹出位置")] + public Target ConfirmTarget + { + get + { + object obj = FState["ConfirmTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ConfirmTarget"] = value; + } + } + + #endregion + + #region Menu + + /// <summary> + /// 按钮的上下文菜单 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("按钮的上下文菜单")] + public string MenuID + { + get + { + object obj = FState["MenuID"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["MenuID"] = value; + } + } + + + + private Menu _menu; + + /// <summary> + /// 按钮的上下文菜单 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Description("按钮的上下文菜单")] + public Menu Menu + { + get + { + if (_menu == null) + { + _menu = new Menu(); + + //_menu.RenderWrapperNode = false; + Controls.Add(_menu); + + } + return _menu; + } + } + + + #endregion + + #region PressedHiddenFieldID + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string PressedHiddenFieldID + { + get + { + return String.Format("{0}_Pressed", ClientID); + } + } + + #endregion + + #region OnAjaxPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("Text")) + { + sb.AppendFormat("{0}.f_setText();", XID); + } + + if (EnablePress) + { + if (PropertyModified("Pressed")) + { + //if (ClientPropertyModifiedInServer("Pressed")) + + sb.AppendFormat("{0}.f_toggle();", XID); + + } + } + + if (PropertyModified("Icon", "IconUrl")) + { + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + sb.AppendFormat("{0}.setIcon({1});", XID, JsHelper.Enquote(resolvedIconUrl)); + } + } + + if (PropertyModified("ToolTip")) + { + sb.AppendFormat("{0}.f_setTooltip();", XID); + } + + if (PropertyModified("OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmTarget", "ConfirmIcon")) + { + //sb.AppendFormat("{0}.un('click', {0}.initialConfig.listeners.click);", XID); + //sb.AppendFormat("{0}.on('click',{1});", XID, GetClickScriptFunction()); + + sb.AppendFormat("{0}.setHandler({1});", XID, JsHelper.GetFunction(GetClickScript())); + } + + AddAjaxScript(sb); + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("button"); + //if (Menu.Items.Count > 0) + //{ + // ResourceManager.Instance.AddJavaScriptComponent("menu"); + //} + + #region Properties + if (TabIndex != null) + { + OB.AddProperty("tabIndex", TabIndex); + } + + if (!String.IsNullOrEmpty(ToolTip)) + { + OB.AddProperty("tooltip", ToolTip); + OB.AddProperty("tooltipType", ToolTipTypeName.GetName(ToolTipType)); + } + + OB.AddProperty("text", Text); + + if (EnablePress) + { + OB.AddProperty("enableToggle", EnablePress); + OB.AddProperty("pressed", Pressed); + + //hiddenFieldsScript += GetSetHiddenFieldValueScript(PressedHiddenFieldID, Pressed.ToString().ToLower()); + //string toggleScript = String.Format("function(btn,pressed){{F.util.setHiddenFieldValue('{0}',pressed);}}", PressedHiddenFieldID); + //OB.Listeners.AddProperty(OptionName.Toggle, toggleScript, true); + } + + //if (Type != ButtonType.Button) + //{ + // OB.AddProperty("type", ButtonTypeName.GetName(Type)); + //} + + + + if (Size != ButtonSize.Small) + { + OB.AddProperty("scale", ButtonSizeName.GetName(Size)); + } + + #endregion + + #region Icon IconUrl + + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + // 不需要先删除原来的属性,因为在AddProperty内部已经有这个逻辑了 + OB.AddProperty("cls", CssClass + " x-btn-text-icon"); + OB.AddProperty("icon", resolvedIconUrl); + + if (IconAlign != IconAlign.Left) + { + OB.AddProperty("iconAlign", IconAlignHelper.GetName(IconAlign)); + } + } + + #endregion + + #region Click + + string clickScript = GetClickScript(); + if (!String.IsNullOrEmpty(clickScript)) + { + OB.AddProperty("handler", JsHelper.GetFunction(clickScript), true); + } + + #endregion + + #region oldcode + + //string clickScriptFunction = GetClickScriptFunction(); + //if (AjaxPropertyChanged("ClickScriptFunction", clickScriptFunction)) + //{ + // string ajaxClickFunction = String.Empty; + // //ajaxClickFunction += String.Format("{0}.purgeListeners('click');", ClientJavascriptID); + // ajaxClickFunction += String.Format("{0}.un('click', X.{0}.initialConfig.listeners.click);", XID); + // ajaxClickFunction += String.Format("{0}.on('click',{1});", XID, clickScriptFunction); + + // AddAjaxPropertyChangedScript(ajaxClickFunction); + //} + + //OB.Listeners.AddProperty(OptionName.Click, String.Format("{0}_click", ClientJavascriptID), true); + + + //OB.AddProperty(OptionName.Handler, "function(){alert('sss');}", true); + + + + //string style = String.Empty; + + //if (CssStyle == "" || !CssStyle.ToLower().Contains("display")) + //{ + // style += CssStyle + "display:inline;"; + //} + + //OB.RemoveProperty(OptionName.Style); + //OB.AddProperty(OptionName.Style, style); + + //AddExtraStyle("display", "inline"); + + #endregion + + #region Menu + + if (_menu != null && Menu.Items.Count > 0) + { + OB.AddProperty("menu", Menu.XID, true); + } + else if (!String.IsNullOrEmpty(MenuID)) + { + Menu contextMenu = ControlUtil.FindControlInUserControlOrPage(this, MenuID) as Menu; + if (contextMenu != null) + { + OB.AddProperty("menu", contextMenu.XID, true); + } + } + + + #endregion + + #region Type + + string submitButtonScript = String.Empty; + if (Type == ButtonType.Submit) + { + submitButtonScript = String.Format("F.submitbutton='{0}';", ClientID); + } + else if (Type == ButtonType.Reset) + { + OB.AddProperty("handler", JsHelper.GetFunction("F.util.reset();"), true); + } + + #endregion + + string createScript = String.Format("var {0}=F.create('Ext.button.Button',{1});", XID, OB.ToString()); + AddStartupScript(submitButtonScript + createScript); + } + + private string GetClickScript() + { + string disableControlJavascriptID = ClientID; + if (!DisableControlBeforePostBack) + { + disableControlJavascriptID = String.Empty; + } + + //string clientScript = OnClientClick; + //if (Type == ButtonType.Reset) + //{ + // clientScript += "document.forms[0].reset();"; + //} + + return ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, GetPostBackEventReference(), + ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, disableControlJavascriptID); + } + + #endregion + + #region ResolveClientScript + + /// <summary> + /// 获取按钮客户端点击事件的脚本 + /// </summary> + /// <param name="validateForms">验证表单列表</param> + /// <param name="validateTarget">表单验证提示消息目标页面</param> + /// <param name="validateMessageBox">是否显示表单验证提示对话框</param> + /// <param name="enablePostBack">启用回发</param> + /// <param name="postBackEventReference">回发脚本</param> + /// <param name="confirmText">确认对话框消息</param> + /// <param name="confirmTitle">确认对话框标题</param> + /// <param name="confirmIcon">确认对话框图标</param> + /// <param name="confirmTarget">确认对话框目标页面</param> + /// <param name="onClientClick">自定义客户端点击脚本</param> + /// <param name="disableControlJavascriptID">需要禁用的控件客户端ID</param> + /// <returns>客户端脚本</returns> + internal static string ResolveClientScript(string[] validateForms, Target validateTarget, bool validateMessageBox, bool enablePostBack, string postBackEventReference, + string confirmText, string confirmTitle, MessageBoxIcon confirmIcon, Target confirmTarget, string onClientClick, string disableControlJavascriptID) + { + // 1. 表单验证 + string validateScript = String.Empty; + if (validateForms != null && validateForms.Length > 0) + { + //JsArrayBuilder array = new JsArrayBuilder(); + //foreach (string formID in validateForms) + //{ + // Control control = ControlUtil.FindControl(formID); + // if (control != null && control is ControlBase) + // { + // array.AddProperty((control as ControlBase).ClientID); + // } + //} + + JsArrayBuilder array = ControlUtil.GetControlClientIDs(validateForms); + + validateScript = String.Format("if(!F.util.validForms({0},'{1}',{2})){{return false;}}", array.ToString(), TargetHelper.GetName(validateTarget), validateMessageBox.ToString().ToLower()); + } + + // 2. 用户自定义脚本 + string clientClickScript = onClientClick; + if (!String.IsNullOrEmpty(clientClickScript) && !clientClickScript.EndsWith(";")) + { + clientClickScript += ";"; + } + + + // 3. 回发脚本 + string postBackScript = String.Empty; + if (enablePostBack) + { + if (!String.IsNullOrEmpty(disableControlJavascriptID)) + { + postBackScript += String.Format("F.f_disable('{0}');", disableControlJavascriptID); + } + postBackScript += postBackEventReference; + } + + // 确认对话框 + if (!String.IsNullOrEmpty(confirmText)) + { + postBackScript = Confirm.GetShowReference(confirmText, confirmTitle, confirmIcon, postBackScript, "", confirmTarget); + + // ExtJSv6.2中模式弹出框会阻止事件传播,导致点击删除图标时不能选中单元格,所以一定要加上延迟! + postBackScript = String.Format("F.defer(function(){{{0}}},100);", postBackScript); + } + + return validateScript + clientClickScript + postBackScript; + } + + + #endregion + + #region IPostBackDataHandler + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + if (EnablePress) + { + bool pressed = Convert.ToBoolean(postCollection[PressedHiddenFieldID]); + if (pressed != Pressed) + { + Pressed = pressed; + FState.BackupPostDataProperty("Pressed"); + } + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnClick(EventArgs.Empty); + } + + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("按钮点击事件")] + public event EventHandler Click + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnClick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region oldcode + + //protected override void CreateChildControls() + //{ + // base.CreateChildControls(); + + // //// 添加子控件 + // //foreach (Menu menu in Menus) + // //{ + // // menu.RenderWrapperDiv = false; + // // Controls.Add(menu); + // //} + //} + + //#region HiddenFieldID + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("是否按下隐藏字段的ID")] + //protected string PressedHiddenFieldID + //{ + // get + // { + // return String.Format("{0}_pressed", XID); + // } + //} + + //#endregion + + //public Unit MarginRight_Default = Unit.Empty; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(typeof(Unit), "")] + //[Description("右侧空白宽度")] + //public Unit MarginRight + //{ + // get + // { + // object obj = BoxState["MarginRight"]; + // return obj == null ? MarginRight_Default : (Unit)obj; + // } + // set + // { + // BoxState["MarginRight"] = value; + // } + //} + + //private Unit MinWidth_Default = Unit.Empty; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(typeof(Unit), "")] + //[Description("最小宽度")] + //public Unit MinWidth + //{ + // get + // { + // object obj = BoxState["MinWidth"]; + // return obj == null ? MinWidth_Default : (Unit)obj; + // } + // set + // { + // BoxState["MinWidth"] = value; + // } + //} + + //public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + //{ + // //if (EnablePress) + // //{ + // // string postValue = postCollection[PressedHiddenFieldID]; + // // bool postPressed = Convert.ToBoolean(postValue); + // // if (Pressed != postPressed) + // // { + // // Pressed = postPressed; + // // return true; + // // } + // //} + + // return false; + //} + + //public void RaisePostDataChangedEvent() + //{ + // //throw new NotImplementedException(); + //} + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Calendar/Calendar.cs b/FineUI_v6/FineUI/WebControls/Component.Calendar/Calendar.cs new file mode 100644 index 0000000..11745f9 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Calendar/Calendar.cs @@ -0,0 +1,361 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Globalization; + +namespace FineUI +{ + /// <summary> + /// 日期控件 + /// </summary> + [Designer("FineUI.Design.CalendarDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:Calendar runat=server></{0}:Calendar>")] + [ToolboxBitmap(typeof(Calendar), "toolbox.Calendar.bmp")] + [DefaultEvent("DateSelect")] + [Description("日期控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Calendar : Component, IPostBackEventHandler, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Calendar() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("SelectedDate"); + } + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]选择的日期 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("[AJAX属性]选择的日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? SelectedDate + { + get + { + object obj = FState["SelectedDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + if (DesignMode) + { + FState["SelectedDate"] = value; + } + else + { + // 传入的值可能包含时间信息,这里就是为了把时间信息去掉,只保留日期信息 + FState["SelectedDate"] = DateTime.ParseExact(value.Value.ToString(DateFormatString), DateFormatString, CultureInfo.InvariantCulture); + } + } + } + + + /// <summary> + /// 日期格式 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("yyyy-MM-dd")] + [Description("日期格式")] + public string DateFormatString + { + get + { + object obj = FState["DateFormatString"]; + return obj == null ? "yyyy-MM-dd" : (string)obj; + } + set + { + FState["DateFormatString"] = value; + } + } + + /// <summary> + /// 最大日期 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("最大日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MaxDate + { + get + { + object obj = FState["MaxDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MaxDate"] = value; + } + } + + /// <summary> + /// 最小日期 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("最小日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MinDate + { + get + { + object obj = FState["MinDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MinDate"] = value; + } + } + + ///// <summary> + ///// 选择日期是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("选择日期是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableDateSelectEvent属性")] + //public bool EnableDateSelect + //{ + // get + // { + // object obj = FState["EnableDateSelect"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableDateSelect"] = value; + // } + //} + + /// <summary> + /// 选择日期是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("选择日期是否自动回发")] + public bool EnableDateSelectEvent + { + get + { + object obj = FState["EnableDateSelectEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableDateSelectEvent"] = value; + } + } + + #endregion + + #region SelectedDateHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedDateHiddenFieldID + { + get + { + return String.Format("{0}_SelectedDate", ClientID); + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("SelectedDate")) + { + sb.AppendFormat("{0}.setValue({1});", XID, DateUtil.GetClientDateObject(SelectedDate.Value)); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + // extjs 的日期格式化字符串 + string extjsDateFormatString = DateUtil.ConvertToClientDateFormat(DateFormatString); + OB.AddProperty("format", extjsDateFormatString); + + //if (EnableChineseAltFormats) + //{ + // OB.AddProperty("altFormats", "Y-m-d|Y-n-j|Ymd|Ynj|y-m-d|y-n-j|ymd|ynj"); + //} + + if (SelectedDate != null) + { + OB.AddProperty("value", DateUtil.GetClientDateObject(SelectedDate.Value), true); + } + + if (MaxDate != null) + { + OB.AddProperty("maxDate", DateUtil.GetClientDateObject(MaxDate.Value), true); + } + + if (MinDate != null) + { + OB.AddProperty("minDate", DateUtil.GetClientDateObject(MinDate.Value), true); + } + + + if (EnableDateSelectEvent) + { + //OB.Listeners.AddProperty("select", JsHelper.GetFunction(GetPostBackEventReference("Select")), true); + AddListener("select", GetPostBackEventReference("Select")); + } + + + string jsContent = String.Format("var {0}=F.create('Ext.picker.Date',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region RaisePostBackEvent + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + if (eventArgument.StartsWith("Select")) + { + OnDateSelect(EventArgs.Empty); + } + } + + #endregion + + #region OnDateSelect + + private object _handlerKey = new object(); + + /// <summary> + /// 日期选定事件(需要启用EnableDateSelect) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("日期选定事件(需要启用EnableDateSelect)")] + public virtual event EventHandler DateSelect + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发日期选定事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnDateSelect(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + string postSelectedDateStr = postCollection[SelectedDateHiddenFieldID]; + if (!String.IsNullOrEmpty(postSelectedDateStr)) + { + DateTime currentSelectedDate = DateTime.ParseExact(postSelectedDateStr, DateFormatString, CultureInfo.InvariantCulture); + if (currentSelectedDate != SelectedDate) + { + SelectedDate = currentSelectedDate; + FState.BackupPostDataProperty("SelectedDate"); + } + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public virtual void RaisePostDataChangedEvent() + { + //OnCollapsedChanged(EventArgs.Empty); + } + + + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Menu/Menu.cs b/FineUI_v6/FineUI/WebControls/Component.Menu/Menu.cs new file mode 100644 index 0000000..3b7ce1b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Menu/Menu.cs @@ -0,0 +1,209 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Menu.cs + * CreatedOn: 2008-07-11 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单控件 + /// </summary> + [Designer("FineUI.Design.MenuDesigner, FineUI.Design")] + [ToolboxData("<{0}:Menu runat=\"server\"></{0}:Menu>")] + [ToolboxBitmap(typeof(Menu), "toolbox.Menu.bmp")] + [Description("菜单控件")] + [ParseChildren(true, "Items")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Menu : Component + { + #region Properties + + /// <summary> + /// 不向页面输出控件的外部容器 + /// </summary> + internal override bool RenderWrapperNode + { + get + { + return false; + } + } + + + #endregion + + #region Items + + private MenuItemCollection _items; + + /// <summary> + /// 菜单项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + [Editor(typeof(MenuItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual MenuItemCollection Items + { + get + { + if (_items == null) + { + _items = new MenuItemCollection(this); + } + return _items; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //if (Items.Count > 0) + //{ + // ResourceManager.Instance.AddJavaScriptComponent("menu"); + //} + + #region Items + + if (Items.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (BaseMenuItem item in Items) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + + //if (item.Visible) + //{ + // ab.AddProperty(String.Format("{0}", item.ClientJavascriptID), true); + //} + + //// 如果Item是否显示隐藏发生变化 + //if (HashCodeChanged(item.ID + "", item.Visible)) + //{ + // if (item.Visible) + // { + // item.AjaxForceCompleteUpdate = true; + + // AddAjaxPartialUpdateScript(String.Format("{0}.insert({1},X.{2});", ClientJavascriptID, ab.Count - 1, item.ClientJavascriptID)); + // } + // else + // { + // AddAjaxPartialUpdateScript(String.Format("{0}.remove(X.{1});", ClientJavascriptID, item.ClientJavascriptID)); + // } + //} + } + + if (ab.Count > 0) + { + OB.AddProperty("items", ab.ToString(), true); + } + } + + #region old code + + //if (HashCodeChanged("Items", itemsString)) + //{ + // StringBuilder ajaxUpdateBuilder = new StringBuilder(); + + // StringBuilder preUpdateBuilder = new StringBuilder(); + // ajaxUpdateBuilder.AppendFormat("{0}.removeAll();", ClientJavascriptID); + // foreach (BaseMenuItem item in Items) + // { + // if (item.Visible) + // { + // if (item is MenuSeparator) + // { + // ajaxUpdateBuilder.AppendFormat("{0}.addSeparator();", ClientJavascriptID); + // } + // else if (item is MenuText) + // { + // ajaxUpdateBuilder.AppendFormat("{0}.addText({1});", ClientJavascriptID, JsHelper.Enquote((item as MenuText).Text)); + // } + // else + // { + // preUpdateBuilder.AppendFormat("{0}_config=X.{0}.cloneConfig();", item.ClientJavascriptID); + // ajaxUpdateBuilder.AppendFormat("{1}=new Ext.menu.Item(X.{1}_config);X.{0}.addItem(X.{1});", ClientJavascriptID, item.ClientJavascriptID); + // } + // } + // } + + // AddAjaxPartialUpdateScript(preUpdateBuilder.ToString() + ajaxUpdateBuilder.ToString()); + //} + #endregion + + #endregion + + + if (Items.Count > 0) + { + string jsContent = String.Format("var {0}=F.create('Ext.menu.Menu',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/BaseMenuItem.cs b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/BaseMenuItem.cs new file mode 100644 index 0000000..11408c7 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/BaseMenuItem.cs @@ -0,0 +1,88 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuItem.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项控件基类(抽象类) + /// </summary> + [ToolboxData("<{0}:MenuItem runat=\"server\"></{0}:MenuItem>")] + [ToolboxBitmap(typeof(BaseMenuItem), "toolbox.MenuItem.bmp")] + [Description("菜单项控件基类")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public abstract class BaseMenuItem : Component + { + + #region Properties + + + + + #endregion + + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + } + #endregion + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuButton.cs b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuButton.cs new file mode 100644 index 0000000..29c6ed5 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuButton.cs @@ -0,0 +1,402 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuButton.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项按钮控件 + /// </summary> + [Designer("FineUI.Design.MenuButtonDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuButton runat=\"server\"></{0}:MenuButton>")] + [ToolboxBitmap(typeof(MenuButton), "toolbox.MenuButton.bmp")] + [Description("菜单项按钮控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [DefaultEvent("Click")] + public class MenuButton : MenuItem, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public MenuButton() + { + // Two type of ajax properties: 1. Can only be changed in server-side. 2. Can be changed both in client and server. + // Can be changed in client and server properties: null + // AddAjaxProperties("ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"); + + } + + #endregion + + #region Properties + + /// <summary> + /// 是否可以回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnablePostBack + { + get + { + object obj = FState["EnablePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePostBack"] = value; + } + } + + + /// <summary> + /// 点击按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击按钮时需要执行的客户端脚本")] + public string OnClientClick + { + get + { + object obj = FState["OnClientClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientClick"] = value; + } + } + + + /// <summary> + /// 提交之前需要验证的表单名称列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("提交之前需要验证的表单名称列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + object obj = FState["ValidateForms"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["ValidateForms"] = value; + } + } + + /// <summary> + /// 验证失败时提示对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("验证失败时提示对话框弹出位置")] + public Target ValidateTarget + { + get + { + object obj = FState["ValidateTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ValidateTarget"] = value; + } + } + + /// <summary> + /// 验证失败时是否出现提示对话框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("验证失败时是否出现提示对话框")] + public bool ValidateMessageBox + { + get + { + object obj = FState["ValidateMessageBox"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ValidateMessageBox"] = value; + } + } + + #endregion + + #region ConfirmText/ConfirmTitle/ConfirmIcon + + + /// <summary> + /// 确认对话框标题 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("确认对话框标题")] + public string ConfirmTitle + { + get + { + object obj = FState["ConfirmTitle"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmTitle"] = value; + } + } + + + /// <summary> + /// 确认对话框内容 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("确认对话框内容")] + public string ConfirmText + { + get + { + object obj = FState["ConfirmText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmText"] = value; + } + } + + + /// <summary> + /// 确认对话框提示图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(MessageBoxIcon.Warning)] + [Description("确认对话框提示图标")] + public MessageBoxIcon ConfirmIcon + { + get + { + object obj = FState["ConfirmIcon"]; + return obj == null ? MessageBoxIcon.Warning : (MessageBoxIcon)obj; + } + set + { + FState["ConfirmIcon"] = value; + } + } + + ///// <summary> + ///// 确认对话框弹出位置 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("确认对话框弹出位置")] + //public string ConfirmTarget + //{ + // get + // { + // object obj = BoxState["ConfirmTarget"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // BoxState["ConfirmTarget"] = value; + // } + //} + + /// <summary> + /// 确认对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("确认对话框弹出位置")] + public Target ConfirmTarget + { + get + { + object obj = FState["ConfirmTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ConfirmTarget"] = value; + } + } + + #endregion + + #region OnPreLoad + + //protected override void OnPreLoad(object sender, EventArgs e) + //{ + // base.OnPreLoad(sender, e); + + // SaveAjaxProperty("ClickScriptFunction", GetClickScriptFunction()); + //} + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick")) + { + sb.AppendFormat("{0}.un('click', {0}.initialConfig.listeners.click);", XID); + sb.AppendFormat("{0}.on('click',{1});", XID, GetClientClickFunction()); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region options + + + #endregion + + #region Click + + //string clickScriptFunction = GetClickScriptFunction(); + //if (AjaxPropertyChanged("ClickScriptFunction", clickScriptFunction)) + //{ + // string ajaxClickFunction = String.Empty; + // ajaxClickFunction += String.Format("{0}.un('click',X.{0}_click);", XID); + // ajaxClickFunction += clickScriptFunction; + // ajaxClickFunction += String.Format("{0}.on('click',X.{0}_click);", XID); + + // AddAjaxPropertyChangedScript(ajaxClickFunction); + //} + + //OB.Listeners.AddProperty("click", String.Format("{0}_click", XID), true); + + OB.Listeners.AddProperty("click", GetClientClickFunction(), true); + + #endregion + + string jsContent = String.Format("var {0}=F.create('Ext.menu.Item',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + private string GetClientClickFunction() + { + string clickScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, GetPostBackEventReference(), + ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, ClientID); + + clickScript += "e.stopEvent();"; + + return GetListenerFunction("click", clickScript, "button", "e"); + + //return String.Format("function(button,e){{{0}e.stopEvent();}}", clickScript); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnClick(EventArgs.Empty); + } + + #endregion + + #region OnClick + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("按钮点击事件")] + public event EventHandler Click + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnClick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuCheckBox.cs b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuCheckBox.cs new file mode 100644 index 0000000..8ffc3c6 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuCheckBox.cs @@ -0,0 +1,274 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuCheckBox.cs + * CreatedOn: 2012-11-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项复选框控件(单选框) + /// </summary> + [Designer("FineUI.Design.MenuCheckBoxDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuCheckBox runat=\"server\"></{0}:MenuCheckBox>")] + [ToolboxBitmap(typeof(MenuCheckBox), "toolbox.MenuCheckBox.bmp")] + [Description("菜单项复选框控件(单选框)")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [DefaultEvent("Click")] + public class MenuCheckBox : MenuItem, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public MenuCheckBox() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Checked"); + } + + #endregion + + #region Properties + + /// <summary> + /// 分组名(如果指定分组名,则此控件被渲染为单选框) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("分组名(如果指定分组名,则此控件被渲染为单选框)")] + public string GroupName + { + get + { + object obj = FState["GroupName"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["GroupName"] = value; + } + } + + + /// <summary> + /// [AJAX属性]是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否选中")] + public bool Checked + { + get + { + object obj = FState["Checked"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Checked"] = value; + } + } + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + #endregion + + #region CheckedHiddenFieldID + + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string CheckedHiddenFieldID + { + get + { + return String.Format("{0}_Checked", ClientID); + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Checked")) + { + sb.AppendFormat("{0}.f_setChecked();", XID); + } + + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + #region options + + OB.AddProperty("checked", Checked); + + if (!String.IsNullOrEmpty(GroupName)) + { + OB.AddProperty("group", GroupName); + } + + #endregion + + #region AutoPostBack + + if (AutoPostBack) + { + string checkScript = String.Empty; + if (!String.IsNullOrEmpty(GroupName)) + { + checkScript = "if(F.util.checkGroupLastTime('" + GroupName + "')){" + GetPostBackEventReference() + "}"; + } + else + { + checkScript = GetPostBackEventReference(); + } + + //OB.Listeners.AddProperty("checkchange", JsHelper.GetFunction(checkScript), true); + AddListener("checkchange", checkScript); + } + + #endregion + + string jsContent = String.Format("var {0}=F.create('Ext.menu.CheckItem',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region IPostBackDataHandler + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + bool postChecked = Convert.ToBoolean(postCollection[CheckedHiddenFieldID]); + if (Checked != postChecked) + { + Checked = postChecked; + FState.BackupPostDataProperty("Checked"); + return true; + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnCheckedChanged(new CheckedEventArgs(Checked)); + } + + #endregion + + #region OnCheckedChanged + + private object _handlerKey = new object(); + + /// <summary> + /// 复选框状态改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("复选框状态改变事件(需要启用AutoPostBack)")] + public event EventHandler<CheckedEventArgs> CheckedChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发复选框状态改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnCheckedChanged(CheckedEventArgs e) + { + EventHandler<CheckedEventArgs> handler = Events[_handlerKey] as EventHandler<CheckedEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuHyperLink.cs b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuHyperLink.cs new file mode 100644 index 0000000..b088209 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuHyperLink.cs @@ -0,0 +1,149 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuHyperLink.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项超链接控件 + /// </summary> + [Designer("FineUI.Design.MenuHyperLinkDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuHyperLink runat=\"server\"></{0}:MenuHyperLink>")] + [ToolboxBitmap(typeof(MenuHyperLink), "toolbox.MenuHyperLink.bmp")] + [Description("菜单项超链接控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class MenuHyperLink : MenuItem + { + + #region Properties + + /// <summary> + /// 链接地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("链接地址")] + public string NavigateUrl + { + get + { + object obj = FState["NavigateUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["NavigateUrl"] = value; + } + } + + /// <summary> + /// 链接目标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("链接目标")] + public string Target + { + get + { + object obj = FState["Target"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Target"] = value; + } + } + + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region options + + if (!String.IsNullOrEmpty(NavigateUrl)) + { + OB.AddProperty("href", NavigateUrl); + OB.AddProperty("hrefTarget", Target); + } + + + #endregion + + string jsContent = String.Format("var {0}=F.create('Ext.menu.Item',{1});", XID, OB.ToString()); + + //if (AjaxForceCompleteUpdate) + //{ + // ClearAjaxUpdateScript(); + // AddAjaxUpdateScript(jsContent); + // AjaxForceCompleteUpdate = false; + //} + + AddStartupScript(jsContent); + + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuItem.cs b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuItem.cs new file mode 100644 index 0000000..9bbee90 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuItem.cs @@ -0,0 +1,289 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuItem.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 菜单项控件基类(抽象类) + /// </summary> + [ToolboxData("<{0}:MenuItem runat=\"server\"></{0}:MenuItem>")] + [ToolboxBitmap(typeof(MenuItem), "toolbox.MenuItem.bmp")] + [Description("菜单项控件基类")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [ParseChildren(true)] + [PersistChildren(false)] + public abstract class MenuItem : BaseMenuItem + { + #region Properties + + /// <summary> + /// 点击时隐藏菜单,可以配合使用CssStyle=cursor:default; + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("点击时隐藏菜单,可以配合使用CssStyle=cursor:default;")] + public bool HideOnClick + { + get + { + object obj = FState["HideOnClick"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["HideOnClick"] = value; + } + } + + + /// <summary> + /// 图标地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("图标地址")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + object obj = FState["IconUrl"]; + if (obj == null) + { + if (!DesignMode) + { + if (Icon != Icon.None) + { + obj = IconHelper.GetIconUrl(Icon); + } + } + } + return obj == null ? "" : (string)obj; + } + set + { + FState["IconUrl"] = value; + } + } + + + /// <summary> + /// 预定义图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("预定义图标")] + public virtual Icon Icon + { + get + { + object obj = FState["Icon"]; + return obj == null ? Icon.None : (Icon)obj; + } + set + { + FState["Icon"] = value; + } + } + + /// <summary> + /// 文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + #endregion + + #region Menu + + private Menu _menu; + + /// <summary> + /// 上下文菜单 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Description("上下文菜单")] + public Menu Menu + { + get + { + if (_menu == null) + { + _menu = new Menu(); + } + return _menu; + } + } + + //private MenuCollection _menus; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerProperty)] + //public virtual MenuCollection Menus + //{ + // get + // { + // if (_menus == null) + // { + // _menus = new MenuCollection(this); + // } + // return _menus; + // } + //} + + //private Menu _menu; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual Menu Menu + //{ + // get + // { + // if (_menu == null) + // { + // _menu = new Menu(); + + // _menu.RenderWrapperDiv = false; + // Controls.Add(_menu); + // } + // return _menu; + // } + //} + #endregion + + #region CreateChildControls + + /// <summary> + /// 添加子控件 + /// </summary> + protected override void CreateChildControls() + { + base.CreateChildControls(); + + //Menu.RenderWrapperNode = false; + Controls.Add(Menu); + } + + #endregion + + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region options + + OB.AddProperty("text", Text); + + if (!String.IsNullOrEmpty(IconUrl)) + { + OB.AddProperty("icon", ResolveUrl(IconUrl)); + } + + + // 默认是点击就隐藏 + if (!HideOnClick) OB.AddProperty("hideOnClick", false); + + + #endregion + + #region Menu + + //if (Menus.Count > 0) + //{ + // // 一个Button只能有一个Menu + // OB.AddProperty("menu", String.Format("{0}", Menus[0].XID), true); + //} + + if (Menu.Items.Count > 0) + { + OB.AddProperty("menu", String.Format("{0}", Menu.XID), true); + } + + //if (Menu != null && Menu.Items.Count > 0) + //{ + // OB.AddProperty(OptionName.Menu, String.Format("{0}", Menu.ClientJavascriptID), true); + //} + + #endregion + + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuItemCollection.cs b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuItemCollection.cs new file mode 100644 index 0000000..c99e032 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuItemCollection.cs @@ -0,0 +1,70 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuItemCollection.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 菜单项控件集合 + /// </summary> + public class MenuItemCollection : BaseCollection<BaseMenuItem> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public MenuItemCollection(Menu parent) + : base(parent) + { + + } + /* + private Menu _parent; + + /// <summary> + /// /// 构造函数 + /// </summary> + /// <param name="parent">菜单实例</param> + public MenuItemCollection(Menu parent) + { + _parent = parent; + } + + protected override void InsertItem(int index, BaseMenuItem item) + { + base.InsertItem(index, item); + + item.RenderWrapperNode = false; + _parent.Controls.AddAt(index, item); + } + * */ + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuSeparator.cs b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuSeparator.cs new file mode 100644 index 0000000..7cde1bd --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuSeparator.cs @@ -0,0 +1,95 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuSeparator.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项分隔符控件 + /// </summary> + [Designer("FineUI.Design.MenuSeparatorDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuSeparator runat=\"server\"></{0}:MenuSeparator>")] + [ToolboxBitmap(typeof(MenuSeparator), "toolbox.MenuSeparator.bmp")] + [Description("菜单项分隔符控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class MenuSeparator : BaseMenuItem + { + + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}=F.create('Ext.menu.Separator',{1});", XID, OB.ToString()); + + + //if (AjaxForceCompleteUpdate) + //{ + // ClearAjaxUpdateScript(); + // AddAjaxUpdateScript(jsContent); + // AjaxForceCompleteUpdate = false; + //} + + AddStartupScript(jsContent); + + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuText.cs b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuText.cs new file mode 100644 index 0000000..6ee8b6b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.Menu/MenuItem/MenuText.cs @@ -0,0 +1,113 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: MenuText.cs + * CreatedOn: 2008-07-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 菜单项文本控件 + /// </summary> + [Designer("FineUI.Design.MenuTextDesigner, FineUI.Design")] + [ToolboxData("<{0}:MenuText runat=\"server\"></{0}:MenuText>")] + [ToolboxBitmap(typeof(MenuText), "toolbox.MenuText.bmp")] + [Description("菜单项文本控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class MenuText : MenuItem + { + + #region Properties + + ///// <summary> + ///// 文本 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("文本")] + //public virtual string Text + //{ + // get + // { + // object obj = FState["Text"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["Text"] = value; + // } + //} + + #endregion + + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + //OB.AddProperty("text", Text); + + + string jsContent = String.Format("var {0}=F.create('Ext.menu.Item',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Component.SplitButton/SplitButton.cs b/FineUI_v6/FineUI/WebControls/Component.SplitButton/SplitButton.cs new file mode 100644 index 0000000..bcce01a --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Component.SplitButton/SplitButton.cs @@ -0,0 +1,97 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: SplitButton.cs + * CreatedOn: 2008-07-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 带下拉列表的按钮 + /// </summary> + [Designer("FineUI.Design.SplitButtonDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:SplitButton runat=\"server\"></{0}:SplitButton>")] + [ToolboxBitmap(typeof(SplitButton), "toolbox.SplitButton.bmp")] + [Description("按钮控件")] + [DefaultEvent("Click")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [ParseChildren(true, "Menus")] + [PersistChildren(false)] + public class SplitButton : Button, IPostBackEventHandler + { + + #region Properties + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + // 首先删除注册脚本(因为已经在Button中注册过了) + ResourceManager.Instance.RemoveStartupScript(this); + + string jsContent = String.Format("var {0}=F.create('Ext.button.Split',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + + #endregion + + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/ControlBase.CPHConnector/CPHConnector.cs b/FineUI_v6/FineUI/WebControls/ControlBase.CPHConnector/CPHConnector.cs new file mode 100644 index 0000000..1bb28ee --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/ControlBase.CPHConnector/CPHConnector.cs @@ -0,0 +1,215 @@ + +#region Comment + +/* + * Project: FineUIPro + * + * FileName: CPHConnector.cs + * CreatedOn: 2014-08-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Web.UI.WebControls; + +namespace FineUI +{ + /// <summary> + /// 母版页ContentPlaceHolder控件的容器 + /// </summary> + //[Designer(typeof(FineUIPro.Design.UserControlConnectorDesigner))] + [ToolboxData("<{0}:CPHConnector runat=\"server\"></{0}:CPHConnector>")] + [ToolboxBitmap(typeof(UserControlConnector), "toolbox.UserControlConnector.bmp")] + [Description("母版页ContentPlaceHolder控件的容器")] + [ParseChildren(false)] + [PersistChildren(true)] + [ControlBuilder(typeof(ContentPanelBuilder))] + public class CPHConnector : ControlBase + { + #region Properties + + /// <summary> + /// 不向页面输出控件的外部容器 + /// </summary> + internal override bool RenderWrapperNode + { + get + { + return false; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + // 不渲染,此控件只作为中间转化层 + //RenderWrapperNode = false; + AddStartupScript(String.Empty); + + // 一个UserControlConnector里面可能放多个UserControl, + // 每个UserControl中的所有直接子节点都不要即时渲染 + StringBuilder sb = new StringBuilder(); + foreach (Control userControl in Controls) + { + if (userControl is ContentPlaceHolder) + { + // 用户控件中的FineUIPro控件(x1,x4,x6) + sb.AppendFormat("{0},", GetControlIds(userControl.Controls)); + + // 用户控件里面的都不要即时渲染 + foreach (Control c in userControl.Controls) + { + ControlBase childControl = c as ControlBase; + if (childControl != null) + { + childControl.RenderWrapperNode = false; + } + } + } + } + + // 重新设置父节点的注册脚本 + ControlBase parentControl = Parent as ControlBase; + if (parentControl != null) + { + ScriptBlock cs = ResourceManager.Instance.GetStartupScript(parentControl); + cs.Script = GetResolveScript(cs.Script, sb.ToString().TrimEnd(',')); + } + + } + + #endregion + + #region private GetFirstChildUserControl + + /// <summary> + /// 取得第一个子控件 + /// </summary> + /// <param name="controls"></param> + /// <returns></returns> + private UserControl GetFirstChildUserControl(ControlCollection controls) + { + foreach (Control c in controls) + { + if (c is UserControl) + { + return (c as UserControl); + } + } + + return null; + } + + #endregion + + #region private GetControlIds + + private string GetControlIds(ControlCollection controls) + { + StringBuilder sb = new StringBuilder(); + if (controls.Count > 0) + { + foreach (Control item in controls) + { + // 再次检查是否ControlBase,并且只有Visible时才添加 + // 还有一个例外情况,Window控件不作为任何控件的子控件 + if (item is ControlBase && item.Visible && !(item is Window) && !(item is Toolbar)) + { + string itemJSId = String.Format("{0}", (item as ControlBase).XID); + sb.AppendFormat("{0},", itemJSId); + } + } + } + + return sb.ToString().TrimEnd(','); + } + + #endregion + + #region private GetResolveScript + + private string GetResolveScript(string script, string ids) + { + int itemsStartIndex = script.IndexOf("items:["); + if (itemsStartIndex >= 0) + { + itemsStartIndex += "items:[".Length; + int itemsEndIndex = script.IndexOf("]", itemsStartIndex); + string itemsStr = script.Substring(itemsStartIndex, itemsEndIndex - itemsStartIndex); + + // 防止itemsStr出现类似:x1,x2,x13,x20的情况 + string newItemStr = itemsStr + ","; + newItemStr = newItemStr.Replace(XID + ",", ids + ","); + newItemStr = newItemStr.TrimEnd(','); + + return script.Substring(0, itemsStartIndex) + newItemStr + script.Substring(itemsEndIndex); + + //StringBuilder sb = new StringBuilder(); + //string currentId = String.Format("box.{0}", ClientJavascriptID); + //Nii.JSON.JSONArray ja = new Nii.JSON.JSONArray(itemsStr); + //for (int i = 0; i < ja.Count; i++) + //{ + // string item = ja.getString(i); + // if (item == currentId) + // { + // sb.AppendFormat("{0},", ids); + // } + // else + // { + // sb.AppendFormat("{0},", item); + // } + //} + + //string newItemsStr = String.Format("[{0}]", sb.ToString().TrimEnd(',')); + + //return script.Replace(itemsStr, newItemsStr); + } + + return script; + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/ControlBase.PageLoading/PageLoading.cs b/FineUI_v6/FineUI/WebControls/ControlBase.PageLoading/PageLoading.cs new file mode 100644 index 0000000..4bf54b1 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/ControlBase.PageLoading/PageLoading.cs @@ -0,0 +1,202 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: PageLoading.cs + * CreatedOn: 2008-05-15 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 页面加载提示控件 + /// </summary> + [Designer("FineUI.Design.PageLoadingDesigner, FineUI.Design")] + [ToolboxData("<{0}:PageLoading runat=server></{0}:PageLoading>")] + [ToolboxBitmap(typeof(PageLoading), "toolbox.PageLoading.bmp")] + [Description("")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class PageLoading : ControlBase + { + #region static readonly + + internal static readonly string LOADING_TEMLATE = "<div id='loading-mask'></div><div id='loading'><div class='loading-indicator'><img align='absmiddle' src='#LOADING_IMAGE_SRC#'/></div></div>"; + + internal static readonly string LOADING_IMAGE_PATH = "/res/images/loading_32.gif"; + + #endregion + + #region Properties + + + /// <summary> + /// 自定义的加载图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自定义的加载图片")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string ImageUrl + { + get + { + object obj = FState["ImageUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ImageUrl"] = value; + } + } + + + + ///// <summary> + ///// 回发时是否显示 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("回发时是否显示")] + //public bool ShowOnPostBack + //{ + // get + // { + // object obj = FState["ShowOnPostBack"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["ShowOnPostBack"] = value; + // } + //} + + + ///// <summary> + ///// 是否启用淡出效果 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用淡出效果")] + //public bool EnableFadeOut + //{ + // get + // { + // object obj = FState["EnableFadeOut"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableFadeOut"] = value; + // } + //} + + + #endregion + + #region RenderBeginTag/RenderEndTag + + /// <summary> + /// 渲染控件的开始标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderBeginTag(HtmlTextWriter writer) + { + //base.RenderBeginTag(writer); + + if (!Page.IsPostBack || (Page.IsPostBack && ShowOnPostBack)) + { + string content = LOADING_TEMLATE; + + string imageUrl = String.Empty; + if (String.IsNullOrEmpty(ImageUrl)) + { + imageUrl = ResolveUrl(GlobalConfig.GetJSBasePath() + LOADING_IMAGE_PATH); //ResourceHelper.GetWebResourceUrl(Page, LOADING_IMAGE_NAME); + } + else + { + imageUrl = ResolveUrl(ImageUrl); + } + + content = content.Replace("#LOADING_IMAGE_SRC#", imageUrl); + + writer.Write(content); + + } + + + } + + /// <summary> + /// 渲染控件的结束标签(不生成结束标签) + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderEndTag(HtmlTextWriter writer) + { + + //base.RenderEndTag(writer); + } + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (!Page.IsPostBack || (Page.IsPostBack && ShowOnPostBack)) + { + string jsContent = String.Empty; + + jsContent = String.Format("F.util.removePageLoading();"); //, EnableFadeOut.ToString().ToLower()); + + AddStartupAbsoluteScript(jsContent, 50); + } + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/ControlBase.PageManager/CustomEventArgs.cs b/FineUI_v6/FineUI/WebControls/ControlBase.PageManager/CustomEventArgs.cs new file mode 100644 index 0000000..f3e144f --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/ControlBase.PageManager/CustomEventArgs.cs @@ -0,0 +1,58 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: CustomEventArgs.cs + * CreatedOn: 2014-01-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// 自定义事件参数 + /// </summary> + public class CustomEventArgs : EventArgs + { + private string _eventArgument; + + /// <summary> + /// 事件参数 + /// </summary> + public string EventArgument + { + get { return _eventArgument; } + set { _eventArgument = value; } + } + + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public CustomEventArgs(string eventArgument) + { + _eventArgument = eventArgument; + } + + } +} diff --git a/FineUI_v6/FineUI/WebControls/ControlBase.PageManager/PageManager.cs b/FineUI_v6/FineUI/WebControls/ControlBase.PageManager/PageManager.cs new file mode 100644 index 0000000..d831904 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/ControlBase.PageManager/PageManager.cs @@ -0,0 +1,1639 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: PageManager.cs + * CreatedOn: 2008-07-31 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Web.UI.WebControls; +using System.Web; +using System.Web.UI.Design; +using System.Drawing.Design; +using Newtonsoft.Json.Linq; + +namespace FineUI +{ + /// <summary> + /// 页面配置管理器(每个页面必须包含一个 PageManager 控件) + /// </summary> + [Designer("FineUI.Design.PageManagerDesigner, FineUI.Design")] + [ToolboxData("<{0}:PageManager runat=\"server\"></{0}:PageManager>")] + [ToolboxBitmap(typeof(PageManager), "toolbox.PageManager.bmp")] + [Description("页面配置管理器(每个页面必须包含一个 PageManager 控件)")] + [ParseChildren(true)] + [PersistChildren(false)] + public class PageManager : ControlBase, IPostBackEventHandler + { + #region static + + //internal static readonly string PAGELOADING_TEMLATE = "<div id='loading-mask'></div><div id='loading'><div class='loading-indicator'><img align='absmiddle' src='#LOADING_IMAGE_SRC#'/></div></div>"; + + //internal static readonly string PAGELOADING_IMAGE_PATH = "/res/images/loading_32.gif"; + + + #endregion + + #region Unsupported Properties + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool WrapperDisplayInline + //{ + // get + // { + // return false; + // } + //} + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Enabled + { + get + { + return true; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Hidden + { + get + { + return false; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Visible + { + get + { + return true; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override HideMode HideMode + { + get + { + return HideMode.Display; + } + } + + #endregion + + #region Properties + /// <summary> + /// 自定义页面加载图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自定义页面加载图片")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string LoadingImageUrl + { + get + { + object obj = FState["LoadingImageUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["LoadingImageUrl"] = value; + } + } + + + /// <summary> + /// 自定义页面加载图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自定义页面加载图片")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + [Obsolete("已废除,请使用LoadingImageUrl")] + public string PageLoadingImageUrl + { + get + { + return LoadingImageUrl; + } + set + { + LoadingImageUrl = value; + } + } + + #region old code + + + // v1.2.9版本后不需要此属性,实现为JS的静态方法 + ///// <summary> + ///// 向页面注册监视页面中表单内容改变的脚本 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("向页面注册监视页面中表单内容改变的脚本")] + //public bool RegisterPageStateChangedScript + //{ + // get + // { + // object obj = BoxState["RegisterPageStateChangedScript"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["RegisterPageStateChangedScript"] = value; + // } + //} + + + // 内联样式表和Javascipt + // 这两个没啥效果,干脆先去掉 + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用内联的样式表和脚本引擎")] + //public bool EnableInlineStyleJavascript + //{ + // get + // { + // object obj = BoxState["EnableInlineStyleJavascript"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableInlineStyleJavascript"] = value; + // } + //} + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("使用父页面的样式表和脚本引擎")] + //public bool ApplyParentStyleJavascript + //{ + // get + // { + // object obj = BoxState["ApplyParentStyleJavascript"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["ApplyParentStyleJavascript"] = value; + // } + //} + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用设计时样式")] + //public bool EnableDesignTimeStyle + //{ + // get + // { + // object obj = BoxState["EnableDesignTimeStyle"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableDesignTimeStyle"] = value; + // } + //} + + #endregion + + /// <summary> + /// 自动调整此容器的宽度和高度,以填充整个页面 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自动调整此容器的宽度和高度,以填充整个页面")] + public string AutoSizePanelID + { + get + { + object obj = FState["AutoSizePanelID"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["AutoSizePanelID"] = value; + } + } + + ///// <summary> + ///// 是否隐藏滚动条 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否隐藏滚动条")] + //[Obsolete("请使用 HideScrollbars 属性")] + //public bool HideScrollbar + //{ + // get + // { + // return HideScrollbars; + // } + // set + // { + // HideScrollbars = value; + // } + //} + + + /// <summary> + /// 是否隐藏滚动条 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否隐藏滚动条")] + public bool HideScrollbars + { + get + { + object obj = FState["HideScrollbars"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["HideScrollbars"] = value; + } + } + + ///// <summary> + ///// 启用Asp.Net提交按钮(type=submit)的AJAX功能 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("启用Asp.Net提交按钮(type=submit)的AJAX功能")] + //public bool EnableAspnetSubmitButtonAjax + //{ + // get + // { + // object obj = FState["EnableAspnetSubmitButtonAjax"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["EnableAspnetSubmitButtonAjax"] = value; + // } + //} + + + /// <summary> + /// 每次页面回发后总是执行onReady脚本(包括Ajax局部回发) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("每次页面回发后总是执行onReady脚本(包括Ajax局部回发)")] + public bool ExecuteOnReadyWhenPostBack + { + get + { + object obj = FState["ExecuteOnReadyWhenPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ExecuteOnReadyWhenPostBack"] = value; + } + } + + + /// <summary> + /// 是否启用页面加载标示 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用页面加载标示")] + public bool EnablePageLoading + { + get + { + object obj = FState["EnablePageLoading"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePageLoading"] = value; + } + } + + + /// <summary> + /// 需要在AJAX回发时更新的Asp.net控件列表(逗号分隔) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("需要在AJAX回发时更新的Asp.net控件列表(逗号分隔)")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] AjaxAspnetControls + { + get + { + object obj = FState["AjaxAspnetControls"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["AjaxAspnetControls"] = value; + } + } + + + //private List<string> _ajaxGridClientIDs = new List<string>(); + ///// <summary> + ///// 本次AJAX请求过程中需要更新TemplateField的表格 + ///// </summary> + //internal List<string> AjaxGridClientIDs + //{ + // get + // { + // return _ajaxGridClientIDs; + // } + // set + // { + // _ajaxGridClientIDs = value; + // } + //} + //internal void AddAjaxGridClientID(string clientID) + //{ + // if (!_ajaxGridClientIDs.Contains(clientID)) + // { + // _ajaxGridClientIDs.Add(clientID); + // } + //} + + private List<string> _ajaxGridReloadedClientIDs = new List<string>(); + + /// <summary> + /// 本次AJAX请求过程中重新加载的表格 + /// </summary> + internal List<string> AjaxGridReloadedClientIDs + { + get + { + return _ajaxGridReloadedClientIDs; + } + set + { + _ajaxGridReloadedClientIDs = value; + } + } + + internal void AddAjaxGridReloadedClientID(string clientID) + { + if (!_ajaxGridReloadedClientIDs.Contains(clientID)) + { + _ajaxGridReloadedClientIDs.Add(clientID); + } + } + + + #endregion + + #region 配置参数 + + /// <summary> + /// 加载图片的数字编码 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ConfigPropertyValue.LOADING_IMAGE_NUMBER_DEFAULT)] + [Description("加载图片的数字编码")] + public int LoadingImageNumber + { + get + { + object obj = FState["LoadingImageNumber"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.LOADING_IMAGE_NUMBER_DEFAULT; + } + else + { + return GlobalConfig.GetLoadingImageNumber(); + } + } + return (int)obj; + } + set + { + FState["LoadingImageNumber"] = value; + } + } + + + + /// <summary> + /// 是否启用表单改变确认对话框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ConfigPropertyValue.ENABLE_FORMCHANGECONFIRM_DEFAULT)] + [Description("是否启用表单改变确认对话框")] + public bool EnableFormChangeConfirm + { + get + { + object obj = FState["EnableFormChangeConfirm"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.ENABLE_FORMCHANGECONFIRM_DEFAULT; + } + else + { + return GlobalConfig.GetEnableFormChangeConfirm(); + } + } + return (bool)obj; + } + set + { + FState["EnableFormChangeConfirm"] = value; + } + } + + + /// <summary> + /// 样式 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Theme.Neptune)] + [Description("样式")] + public Theme Theme + { + get + { + object obj = FState["Theme"]; + if (obj == null) + { + if (DesignMode) + { + return Theme.Neptune; + } + else + { + return GlobalConfig.GetTheme(); + } + } + return (Theme)obj; + } + set + { + FState["Theme"] = value; + } + } + + /// <summary> + /// 自定义样式的根路径 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自定义样式的根路径")] + public string CustomThemeBasePath + { + get + { + object obj = FState["CustomThemeBasePath"]; + if (obj == null) + { + if (DesignMode) + { + return ""; + } + else + { + return GlobalConfig.GetCustomThemeBasePath(); + } + } + return obj.ToString(); + } + set + { + FState["CustomThemeBasePath"] = value; + } + } + + + /// <summary> + /// 自定义样式的名称 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自定义样式的名称")] + public string CustomTheme + { + get + { + object obj = FState["CustomTheme"]; + if (obj == null) + { + if (DesignMode) + { + return ""; + } + else + { + return GlobalConfig.GetCustomTheme(); + } + } + return obj.ToString(); + } + set + { + FState["CustomTheme"] = value; + } + } + + + /// <summary> + /// 语言 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Language.ZH_CN)] + [Description("语言")] + public Language Language + { + get + { + object obj = FState["Language"]; + if (obj == null) + { + if (DesignMode) + { + return Language.ZH_CN; + } + else + { + return GlobalConfig.GetLanguage(); + } + } + return (Language)obj; + } + set + { + FState["Language"] = value; + } + } + + + ///// <summary> + ///// 是否启用大字体 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用大字体")] + //public bool EnableBigFont + //{ + // get + // { + // object obj = FState["EnableBigFont"]; + // if (obj == null) + // { + // if (DesignMode) + // { + // return false; + // } + // else + // { + // return GlobalConfig.GetEnableBigFont(); + // } + // } + // return (bool)obj; + // } + // set + // { + // FState["EnableBigFont"] = value; + // } + //} + + + /// <summary> + /// 是否启用Ajax + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用Ajax")] + public override bool EnableAjax + { + get + { + object obj = FState["EnableAjax"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return GlobalConfig.GetEnableAjax(); + } + } + return (bool)obj; + } + set + { + FState["EnableAjax"] = value; + } + } + + + + /// <summary> + /// 是否启用Ajax正在加载提示 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用Ajax正在加载提示")] + public new bool EnableAjaxLoading + { + get + { + object obj = FState["EnableAjaxLoading"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return GlobalConfig.GetEnableAjaxLoading(); + } + } + return (bool)obj; + } + set + { + FState["EnableAjaxLoading"] = value; + } + } + + + /// <summary> + /// Ajax正在加载提示的类型 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(AjaxLoadingType.Default)] + [Description("Ajax正在加载提示的类型")] + public new AjaxLoadingType AjaxLoadingType + { + get + { + object obj = FState["AjaxLoadingType"]; + if (obj == null) + { + if (DesignMode) + { + return AjaxLoadingType.Default; + } + else + { + return GlobalConfig.GetAjaxLoadingType(); + } + } + return (AjaxLoadingType)obj; + } + set + { + FState["AjaxLoadingType"] = value; + } + } + + + /// <summary> + /// Ajax超时时间(单位:秒,默认:60秒) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT)] + [Description("Ajax超时时间(单位:秒,默认:60秒)")] + public int AjaxTimeout + { + get + { + object obj = FState["AjaxTimeout"]; + if (obj == null) + { + if (DesignMode) + { + return (int)ConfigPropertyValue.AJAX_TIMEOUT_DEFAULT; + } + else + { + return (int)GlobalConfig.GetAjaxTimeout(); + } + } + return (int)obj; + } + set + { + FState["AjaxTimeout"] = value; + } + } + + + /// <summary> + /// 是否启用FState压缩(不支持!!) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否启用FState压缩(不支持!!)")] + public bool EnableFStateCompress + { + get + { + object obj = FState["EnableFStateCompress"]; + if (obj == null) + { + if (DesignMode) + { + return false; + } + else + { + return GlobalConfig.GetEnableFStateCompress(); + } + } + return (bool)obj; + } + set + { + FState["EnableFStateCompress"] = value; + } + } + + /// <summary> + /// 是否启用FState验证(默认为false) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否启用FState验证(默认为false)")] + public bool EnableFStateValidation + { + get + { + object obj = FState["EnableFStateValidation"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return GlobalConfig.GetEnableFStateValidation(); + } + } + return (bool)obj; + } + set + { + FState["EnableFStateValidation"] = value; + } + } + + + /// <summary> + /// 是否向页面输出IE=edge标识 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否向页面输出IE=edge标识")] + public bool IEEdge + { + get + { + object obj = FState["IEEdge"]; + if (obj == null) + { + if (DesignMode) + { + return true; + } + else + { + return GlobalConfig.GetIEEdge(); + } + } + return (bool)obj; + } + set + { + FState["IEEdge"] = value; + } + } + + #endregion + + #region ValidateForms/ValidateTarget/ValidateMessageBox + + + /// <summary> + /// 需要验证的表单名称列表(逗号分隔),需配合CustomEvent使用 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("需要验证的表单名称列表(逗号分隔),需配合CustomEvent使用")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + object obj = FState["ValidateForms"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["ValidateForms"] = value; + } + } + + /// <summary> + /// 验证失败时提示对话框弹出位置,需配合CustomEvent使用 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("验证失败时提示对话框弹出位置,需配合CustomEvent使用")] + public Target ValidateTarget + { + get + { + object obj = FState["ValidateTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ValidateTarget"] = value; + } + } + + + /// <summary> + /// 验证失败时是否出现提示对话框,需配合CustomEvent使用 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("验证失败时是否出现提示对话框,需配合CustomEvent使用")] + public bool ValidateMessageBox + { + get + { + object obj = FState["ValidateMessageBox"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ValidateMessageBox"] = value; + } + } + + #endregion + + #region Form Settings + + /// <summary> + /// 表单中消息的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(MessageTarget), ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT_STRING)] + [Description("表单中提示消息的位置")] + public MessageTarget FormMessageTarget + { + get + { + object obj = FState["FormMessageTarget"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_MESSAGETARGET_DEFAULT; + } + else + { + return GlobalConfig.GetFormMessageTarget(); + } + } + return (MessageTarget)obj; + } + set + { + FState["FormMessageTarget"] = value; + } + } + + /// <summary> + /// 表单行子项之间的间距 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORMROW_ITEMSSPACE_DEFAULT_STRING)] + [Description("表单行子项之间的间距")] + public Unit FormRowItemsSpace + { + get + { + object obj = FState["FormRowItemsSpace"]; + if (obj == null) + { + if (DesignMode) + { + return (Unit)ConfigPropertyValue.FORMROW_ITEMSSPACE_DEFAULT; + } + else + { + return (Unit)GlobalConfig.GetFormRowItemsSpace(); + } + } + return (Unit)obj; + } + set + { + FState["FormRowItemsSpace"] = value; + } + } + + + + /// <summary> + /// 表单中标签的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(LabelAlign), ConfigPropertyValue.FORM_LABELALIGN_DEFAULT_STRING)] + [Description("表单中标签的位置")] + public LabelAlign FormLabelAlign + { + get + { + object obj = FState["FormLabelAlign"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_LABELALIGN_DEFAULT; + } + else + { + return GlobalConfig.GetFormLabelAlign(); + } + } + return (LabelAlign)obj; + } + set + { + FState["FormLabelAlign"] = value; + } + } + + /// <summary> + /// 表单中右侧的空白宽度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT_STRING)] + [Description("表单中右侧的空白宽度")] + public Unit FormOffsetRight + { + get + { + object obj = FState["FormOffsetRight"]; + if (obj == null) + { + if (DesignMode) + { + return (Unit)ConfigPropertyValue.FORM_OFFSETRIGHT_DEFAULT; + } + else + { + return (Unit)GlobalConfig.GetFormOffsetRight(); + } + } + return (Unit)obj; + } + set + { + FState["FormOffsetRight"] = value; + } + } + + + /// <summary> + /// 表单中字段标签的宽度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT_STRING)] + [Description("表单中标签的宽度")] + public Unit FormLabelWidth + { + get + { + object obj = FState["FormLabelWidth"]; + if (obj == null) + { + if (DesignMode) + { + return (Unit)ConfigPropertyValue.FORM_LABELWIDTH_DEFAULT; + } + else + { + return (Unit)GlobalConfig.GetFormLabelWidth(); + } + } + return (Unit)obj; + } + set + { + FState["FormLabelWidth"] = value; + } + } + + /// <summary> + /// 表单中字段与标签的分隔符 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(String), ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT)] + [Description("表单中字段与标签的分隔符")] + public string FormLabelSeparator + { + get + { + object obj = FState["FormLabelSeparator"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORM_LABELSEPARATOR_DEFAULT; + } + else + { + return GlobalConfig.GetFormLabelSeparator(); + } + } + return (String)obj; + } + set + { + FState["FormLabelSeparator"] = value; + } + } + + #endregion + + #region oldcode + + ///// <summary> + ///// PageLoading控件是否存在页面 + ///// </summary> + //internal bool PageLoadingControlExist + //{ + // get + // { + // Control loading = ControlUtil.FindControl(Page, typeof(PageLoading)); + // return loading != null; + // } + //} + + #endregion + + #region RenderBeginTag/RenderEndTag + + internal static readonly string[] LOADING_IMAGES_MAP = new string[] { + "3", "1", "2", "67", "6", "53", + "74", "13", "21", "25", "61", "62", + "109", "72", "75", "76", "92", "93", + "104", "8", "31", "43", "54", "68", + "99","102", "36", "40", "52", "66" }; + + /// <summary> + /// 获取加载图片路径 + /// </summary> + /// <param name="loadingImageNumber"></param> + /// <returns></returns> + public string GetLoadingImageUrl(int loadingImageNumber) + { + // 映射到文件夹名称 + if (loadingImageNumber > LOADING_IMAGES_MAP.Length) + { + loadingImageNumber = LOADING_IMAGES_MAP.Length; + } + string loadingImageFolder = "_" + LOADING_IMAGES_MAP[loadingImageNumber - 1]; + + return ResolveUrl("~/res/loading/") + loadingImageFolder + "/" + "ffffff_444444.gif"; + } + + /// <summary> + /// 获取加载图片路径 + /// </summary> + /// <returns></returns> + public string GetLoadingImageUrl() + { + string imageUrl = ""; + + if (!String.IsNullOrEmpty(LoadingImageUrl)) + { + imageUrl = ResolveUrl(LoadingImageUrl); + } + else + { + imageUrl = GetLoadingImageUrl(LoadingImageNumber); + } + + return imageUrl; + } + + + /// <summary> + /// 渲染控件的开始标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderBeginTag(HtmlTextWriter writer) + { + if (EnablePageLoading) + { + //string content = PAGELOADING_TEMLATE; + //content = content.Replace("#LOADING_IMAGE_SRC#", ResolveUrl(GlobalConfig.GetJSBasePath() + PAGELOADING_IMAGE_PATH)); // ResourceHelper.GetWebResourceUrlResAxd(Page, PageLoading.LOADING_IMAGE_NAME)); + + //string content = PAGELOADING_TEMLATE; + + //string imageUrl = String.Empty; + //if (!String.IsNullOrEmpty(PageLoadingImageUrl)) + //{ + // imageUrl = ResolveUrl(PageLoadingImageUrl); + //} + //else + //{ + // imageUrl = ResolveUrl(GlobalConfig.GetJSBasePath() + PAGELOADING_IMAGE_PATH); //ResourceHelper.GetWebResourceUrl(Page, LOADING_IMAGE_NAME); + //} + + string loadingImageUrl = GetLoadingImageUrl(); + + //content = content.Replace("#LOADING_IMAGE_SRC#", imageUrl); + + StringBuilder sb = new StringBuilder(); + sb.Append("<div id=\"f_loading_mask\" class=\"f-loading-mask\"></div>"); + sb.Append("<div id=\"f_loading\" class=\"f-loading\"><div class=\"f-loading-img"); + if (!String.IsNullOrEmpty(LoadingImageUrl)) + { + sb.Append("f-loading-img-custom"); + } + sb.AppendFormat("\"><img src=\"{0}\"/></div></div>", loadingImageUrl); + + writer.Write(sb.ToString()); + } + + + + base.RenderBeginTag(writer); + } + + /// <summary> + /// 渲染控件的结束标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderEndTag(HtmlTextWriter writer) + { + base.RenderEndTag(writer); + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + // 不渲染 + RenderWrapperNode = false; + + // 这个是必须的,2009-08-04 + // 因为每个页面都会有 PageManager 控件,每个页面要至少调用 GetPostBackEventReference 一次,以在页面产生 __doPostBack 函数。 + Page.ClientScript.GetPostBackEventReference(this, ""); + + // Move it to ResourceManager.cs + // 为页面的 Form 添加 autocomplete="off" 属性 + // 参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 + // Page.Form.Attributes["autocomplete"] = "off"; + + #region HideScrollbars + + if (HideScrollbars) + { + //if (Page.Request.UserAgent.ToLower().Contains("msie")) + //{ + // //Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "noscroll", String.Format("window.document.body.scroll='no';"), true); + // AddStartupAbsoluteScript("window.document.body.scroll='no';"); + //} + //else + //{ + // //Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "noscroll", String.Format("window.document.body.style.overflow='hidden';"), true); + // AddStartupAbsoluteScript("window.document.body.style.overflow='hidden';"); + //} + AddStartupAbsoluteScript("F.util.hideScrollbar();"); + } + + #endregion + + #region oldcode + + //if (!PageLoadingControlExist) + //{ + // string jsContent = String.Empty; + + // if (EnablePageLoading) + // { + // jsContent += "F.util.removePageLoading(false);"; + // } + + // AddStartupAbsoluteScript(jsContent); + //} + + + #endregion + + //#region EnableAjax + + //if (!EnableAjax) + //{ + // AddStartupAbsoluteScript("F.global_disable_ajax=true;"); + //} + + //#endregion + + #region AutoSizePanelID + + if (!String.IsNullOrEmpty(AutoSizePanelID)) + { + PanelBase autosizePanel = ControlUtil.FindControl(Page.Form, AutoSizePanelID) as PanelBase; + + if (autosizePanel != null) + { + #region oldcode + //string resizePanelScript = String.Empty; + + //resizePanelScript += String.Format("{0}_resize_outerpanel=function(){{var panel=Ext.getCmp('{1}');panel.setSize(Ext.getBody().getSize());panel.doLayout();}};", ClientJavascriptID, panel.ClientID); + //resizePanelScript += String.Format("{0}_resize_outerpanel();", ClientJavascriptID); + //resizePanelScript += String.Format("if(Ext.isIE){{X.{0}_resize_outerpanel.defer(60);}}", ClientJavascriptID); + //resizePanelScript += String.Format("Ext.EventManager.onWindowResize(function(){{X.{0}_resize_outerpanel();}},box);", ClientJavascriptID); + + //AddAbsoluteStartupScript(resizePanelScript); + + // X._3=new Ext.FormViewport({renderTo:"RegionPanel1_wrapper",id:"RegionPanel1",layout:"border",items:[X._1,X._2],bodyStyle:"",border:false,animCollapse:false}); + + #endregion + + // 子节点不向页面输出HTML,此PageManager向页面输出HTML + autosizePanel.RenderWrapperNode = false; + RenderWrapperNode = true; + + OB.AddProperty("layout", "fit"); + OB.AddProperty("border", false); + OB.AddProperty("items", String.Format("{0}", autosizePanel.XID), true); + + string jsContent = String.Format("var {0}=F.create('Ext.ux.FormViewport',{1});", XID, OB.ToString()); + + // 确保FormViewport脚本在所以用户自定义脚本(PageContext.RegisterStartupScript)之前执行 + AddStartupAbsoluteScript(jsContent, Constants.ABSOLUTE_STARTUP_SCRIPT_DEFAULT_LEVEL - 20); + } + } + + #endregion + + //if (EnableBigFont) + //{ + // AddStartupAbsoluteScript("Ext.getBody().addClass('bigfont');"); + //} + + #region oldcode + + // Move to F.util.init + // Asp.Net Buttons(type="submit") + // AddStartupAbsoluteScript("F.util.makeAspnetSubmitButtonAjax();"); + + #endregion + + JsObjectBuilder job = new JsObjectBuilder(); + + job.AddProperty("name", UniqueID); + + if (ValidateForms != null && ValidateForms.Length > 0) + { + JsObjectBuilder validate = new JsObjectBuilder(); + validate.AddProperty("forms", ControlUtil.GetControlClientIDs(ValidateForms)); + validate.AddProperty("target", TargetHelper.GetName(ValidateTarget)); + validate.AddProperty("messagebox", ValidateMessageBox.ToString().ToLower()); + job.AddProperty("validate", validate); + + } + + string createScript = String.Format("F.f_pagemanager={1};", XID, job); + AddStartupScript(createScript); + } + + #region old code + + //private PanelBase GetFirstPanelControl(ControlCollection controls) + //{ + // foreach (Control c in controls) + // { + // if (c is PanelBase) + // { + // return c as PanelBase; + // } + // else if (c.Controls != null && c.Controls.Count > 0) + // { + // PanelBase findPanel = GetFirstPanelControl(c.Controls); + // if (findPanel != null) + // { + // return findPanel; + // } + // } + // } + + // return null; + //} + + #endregion + + #endregion + + #region Instance + + //// 这是一个严重的错误,不应该将_manager保存为全局变量,而是作为随页面存在的 + //private static PageManager _manager = null; + /// <summary> + /// PageManager在当前页面的实例 + /// </summary> + public static PageManager Instance + { + get + { + if (HttpContext.Current != null) + { + if (HttpContext.Current.Items["PageManagerInstanceCached"] == null) + { + HttpContext.Current.Items["PageManagerInstanceCached"] = true; + HttpContext.Current.Items["PageManagerInstance"] = ControlUtil.FindControl(typeof(FineUI.PageManager)) as PageManager; + } + return HttpContext.Current.Items["PageManagerInstance"] as PageManager; + } + // It's design time. + return null; + } + } + + ///// <summary> + ///// 获取PageManager实例 + ///// </summary> + ///// <param name="site"></param> + ///// <returns></returns> + //public static PageManager GetInstance(ISite site) + //{ + // foreach (System.ComponentModel.IComponent c in site.Container.Components) + // { + // if (c is FineUI.PageManager) + // { + // return c as FineUI.PageManager; + // } + // } + // return null; + //} + + //public static PageManager GetInstance(Page page) + //{ + // if (page == null) + // { + // page = HttpContext.Current.CurrentHandler as Page; + // } + + // PageManager pageManager = ControlUtil.FindControl(page, typeof(FineUI.PageManager)) as PageManager; + // if (pageManager == null) + // { + // throw new Exception("每个页面必须包含一个PageManager控件。"); + // } + + // return pageManager; + //} + + #endregion + + #region oldcode + + //private List<string> beforeAjaxPostBackScriptKeys = new List<string>(); + + //private string beforeAjaxPostBackScript = String.Empty; + + //internal string BeforeAjaxPostBackScript + //{ + // get { return beforeAjaxPostBackScript; } + // set { beforeAjaxPostBackScript = value; } + //} + + ///// <summary> + ///// Used by FCKeditor, Add script before ajax postback. + ///// </summary> + ///// <param name="key"></param> + ///// <param name="script"></param> + //public void RegisterOnAjaxPostBack(string key, string script) + //{ + // if (!beforeAjaxPostBackScriptKeys.Contains(key)) + // { + // beforeAjaxPostBackScriptKeys.Add(key); + // BeforeAjaxPostBackScript += script; + // } + //} + + #endregion + + #region GetCustomEventReference + + /// <summary> + /// 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <returns>客户端脚本</returns> + public string GetCustomEventReference(string eventArgument) + { + return GetCustomEventReference(eventArgument, false); + } + + /// <summary> + /// 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="enableAjax">当前请求是否启用AJAX</param> + /// <param name="eventArgument">事件参数</param> + /// <returns>客户端脚本</returns> + public string GetCustomEventReference(bool enableAjax, string eventArgument) + { + return GetCustomEventReference(enableAjax, eventArgument, false); + } + + /// <summary> + /// 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <param name="validateForms">是否在回发前验证表单(在PageManager上进行表单配置)</param> + /// <returns>客户端脚本</returns> + public string GetCustomEventReference(string eventArgument, bool validateForms) + { + return GetCustomEventReference(eventArgument, validateForms, false); + } + + /// <summary> + /// 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="enableAjax">当前请求是否启用AJAX</param> + /// <param name="eventArgument">事件参数</param> + /// <param name="validateForms">是否在回发前验证表单(在PageManager上进行表单配置)</param> + /// <returns>客户端脚本</returns> + public string GetCustomEventReference(bool enableAjax, string eventArgument, bool validateForms) + { + return GetCustomEventReference(enableAjax, eventArgument, validateForms, false); + } + + /// <summary> + /// 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <param name="validateForms">是否在回发前验证表单(在PageManager上进行表单配置)</param> + /// <param name="persistOriginal">保持eventArgument参数原样输出</param> + /// <returns>客户端脚本</returns> + public string GetCustomEventReference(string eventArgument, bool validateForms, bool persistOriginal) + { + string arg = eventArgument; + if (!persistOriginal) + { + arg = JsHelper.Enquote(arg); + } + return String.Format("F.f_customEvent({0},{1});", arg, validateForms.ToString().ToLower()); + } + + /// <summary> + /// 获取回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="enableAjax">当前请求是否启用AJAX</param> + /// <param name="eventArgument">事件参数</param> + /// <param name="validateForms">是否在回发前验证表单(在PageManager上进行表单配置)</param> + /// <param name="persistOriginal">保持eventArgument参数原样输出</param> + /// <returns>客户端脚本</returns> + public string GetCustomEventReference(bool enableAjax, string eventArgument, bool validateForms, bool persistOriginal) + { + string arg = eventArgument; + if (!persistOriginal) + { + arg = JsHelper.Enquote(arg); + } + return String.Format("F.f_customEvent({0},{1},{2});", enableAjax.ToString().ToLower(), arg, validateForms.ToString().ToLower()); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnCustomEvent(new CustomEventArgs(eventArgument)); + } + + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 自定义事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("自定义事件")] + public event EventHandler<CustomEventArgs> CustomEvent + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发自定义事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnCustomEvent(CustomEventArgs e) + { + EventHandler<CustomEventArgs> handler = Events[_handlerKey] as EventHandler<CustomEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/ControlBase.Timer/Timer.cs b/FineUI_v6/FineUI/WebControls/ControlBase.Timer/Timer.cs new file mode 100644 index 0000000..02a200a --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/ControlBase.Timer/Timer.cs @@ -0,0 +1,207 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Timer.cs + * CreatedOn: 2009-09-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 定时器控件 + /// </summary> + [Designer("FineUI.Design.TimerDesigner, FineUI.Design")] + [ToolboxData("<{0}:Timer Interval=\"30\" runat=\"server\"></{0}:Timer>")] + [ToolboxBitmap(typeof(Timer), "toolbox.Timer.bmp")] + [Description("定时器")] + [DefaultEvent("Tick")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Timer : ControlBase, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Timer() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region Properties + + /// <summary> + /// 不向页面输出控件的外部容器 + /// </summary> + internal override bool RenderWrapperNode + { + get + { + return false; + } + } + + + /// <summary> + /// 定时间隔(单位:秒) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(30)] + [Description("定时间隔(单位:秒)")] + public int Interval + { + get + { + object obj = FState["Interval"]; + return obj == null ? 30 : (int)obj; + } + set + { + FState["Interval"] = value; + } + } + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + //RenderWrapperNode = false; + + base.OnFirstPreRender(); + + if (Enabled) + { + AddStartupAbsoluteScript(GetTimerScript()); + } + + string contentScript = String.Format("var {0}=F.create('Ext.Component',{1});", XID, OB.ToString()); + AddStartupScript(contentScript); + } + + private string GetTimerScript() + { + StringBuilder sb = new StringBuilder(); + + sb.AppendFormat("window.clearInterval({0}.f_timer);", XID); + + if (Enabled) + { + sb.AppendFormat("{0}.f_timer=window.setInterval(function(){{{1}}}, {2});", XID, GetPostBackEventReference(), Interval * 1000); + } + + return sb.ToString(); + } + + /// <summary> + /// 获取 Hidden 属性改变的 JavaScript 脚本 + /// </summary> + /// <returns>客户端脚本</returns> + protected override string GetEnabledPropertyChangedScript() + { + if (PropertyModified("Enabled")) + { + return GetTimerScript(); + } + return String.Empty; + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnTick(EventArgs.Empty); + } + + #endregion + + #region OnTick + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 定时事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("定时事件")] + public event EventHandler Tick + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发定时事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/ControlBase.UserControlConnector/UserControlConnector.cs b/FineUI_v6/FineUI/WebControls/ControlBase.UserControlConnector/UserControlConnector.cs new file mode 100644 index 0000000..70df505 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/ControlBase.UserControlConnector/UserControlConnector.cs @@ -0,0 +1,243 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: UserControlConnector.cs + * CreatedOn: 2008-07-02 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Web.UI; +using System.ComponentModel; +using System.Drawing; +using System.Web.UI.WebControls; + +namespace FineUI +{ + /// <summary> + /// 用户控件的容器 + /// </summary> + [Designer("FineUI.Design.UserControlConnectorDesigner, FineUI.Design")] + [ToolboxData("<{0}:UserControlConnector runat=\"server\"></{0}:UserControlConnector>")] + [ToolboxBitmap(typeof(UserControlConnector), "toolbox.UserControlConnector.bmp")] + [Description("用户控件的容器")] + [ParseChildren(false)] + [PersistChildren(true)] + [ControlBuilder(typeof(ContentPanelBuilder))] + public class UserControlConnector : ControlBase + { + #region Properties + + /// <summary> + /// 不向页面输出控件的外部容器 + /// </summary> + internal override bool RenderWrapperNode + { + get + { + return false; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + // 不渲染,此控件只作为中间转化层 + //RenderWrapperNode = false; + AddStartupScript(String.Empty); + + + + // 一个UserControlConnector里面可能放多个UserControl, + // 每个UserControl中的所有直接子节点都不要即时渲染 + StringBuilder sb = new StringBuilder(); + foreach (Control userControl in Controls) + { + if (userControl is UserControl) + { + // 用户控件中的FineUI控件(x1,x4,x6) + sb.AppendFormat("{0},", GetControlIds(userControl.Controls)); + + // 用户控件里面的都不要即时渲染 + foreach (Control c in userControl.Controls) + { + ControlBase childControl = c as ControlBase; + if (childControl != null) + { + childControl.RenderWrapperNode = false; + } + } + } + } + + + // 重新设置父节点的注册脚本 + ControlBase parentControl = Parent as ControlBase; + if (parentControl != null) + { + ScriptBlock cs = ResourceManager.Instance.GetStartupScript(parentControl); + cs.Script = GetResolveScript(cs.Script, sb.ToString().TrimEnd(',')); + } + + + //// 目前只处理第一个子控件,其他的舍弃 + //UserControl userControl = GetFirstChildUserControl(Controls); + //if (userControl != null) + //{ + // // 用户控件里面的都不要即时渲染 + // foreach (Control c in userControl.Controls) + // { + // ControlBase childControl = c as ControlBase; + // if (childControl != null) + // { + // childControl.RenderWrapperNode = false; + // } + // } + + + // // 重新设置父节点的注册脚本 + // ControlBase parentControl = Parent as ControlBase; + // if (parentControl != null) + // { + // ScriptBlock cs = ResourceManager.Instance.GetStartupScript(parentControl); + // cs.Script = GetResolveScript(cs.Script, GetControlIds(userControl.Controls)); + // } + //} + + } + + #endregion + + #region private GetFirstChildUserControl + + /// <summary> + /// 取得第一个子控件 + /// </summary> + /// <param name="controls"></param> + /// <returns></returns> + private UserControl GetFirstChildUserControl(ControlCollection controls) + { + foreach (Control c in controls) + { + if (c is UserControl) + { + return (c as UserControl); + } + } + + return null; + } + + #endregion + + #region private GetControlIds + + private string GetControlIds(ControlCollection controls) + { + StringBuilder sb = new StringBuilder(); + if (controls.Count > 0) + { + foreach (Control item in controls) + { + // 再次检查是否ControlBase,并且只有Visible时才添加 + // 还有一个例外情况,Window控件不作为任何控件的子控件 + if (item is ControlBase && item.Visible && !(item is Window) && !(item is Toolbar)) + { + string itemJSId = String.Format("{0}", (item as ControlBase).XID); + sb.AppendFormat("{0},", itemJSId); + } + } + } + + return sb.ToString().TrimEnd(','); + } + + #endregion + + #region private GetResolveScript + + private string GetResolveScript(string script, string ids) + { + int itemsStartIndex = script.IndexOf("items:["); + if (itemsStartIndex >= 0) + { + itemsStartIndex += "items:[".Length; + int itemsEndIndex = script.IndexOf("]", itemsStartIndex); + string itemsStr = script.Substring(itemsStartIndex, itemsEndIndex - itemsStartIndex); + + // 防止itemsStr出现类似:x1,x2,x13,x20的情况 + string newItemStr = itemsStr + ","; + newItemStr = newItemStr.Replace(XID + ",", ids + ","); + newItemStr = newItemStr.TrimEnd(','); + + return script.Substring(0, itemsStartIndex) + newItemStr + script.Substring(itemsEndIndex); + + //StringBuilder sb = new StringBuilder(); + //string currentId = String.Format("box.{0}", ClientJavascriptID); + //Nii.JSON.JSONArray ja = new Nii.JSON.JSONArray(itemsStr); + //for (int i = 0; i < ja.Count; i++) + //{ + // string item = ja.getString(i); + // if (item == currentId) + // { + // sb.AppendFormat("{0},", ids); + // } + // else + // { + // sb.AppendFormat("{0},", item); + // } + //} + + //string newItemsStr = String.Format("[{0}]", sb.ToString().TrimEnd(',')); + + //return script.Replace(itemsStr, newItemsStr); + } + + return script; + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.CheckBox/CheckBox.cs b/FineUI_v6/FineUI/WebControls/Field.CheckBox/CheckBox.cs new file mode 100644 index 0000000..ec2710a --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.CheckBox/CheckBox.cs @@ -0,0 +1,268 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: CheckBox.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 复选框控件 + /// </summary> + [Designer("FineUI.Design.CheckBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:CheckBox Label=\"Label\" Text=\"CheckBox\" runat=\"server\"></{0}:CheckBox>")] + [ToolboxBitmap(typeof(CheckBox), "toolbox.CheckBox.bmp")] + [DefaultEvent("CheckedChanged")] + [Description("复选框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class CheckBox : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public CheckBox() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Checked"); + } + + #endregion + + #region Properties + + /// <summary> + /// 文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// <summary> + /// [AJAX属性]是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否选中")] + public bool Checked + { + get + { + object obj = FState["Checked"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Checked"] = value; + } + } + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + #endregion + + #region HiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string CheckedHiddenFieldID + { + get + { + return String.Format("{0}_Checked", ClientID); + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Checked")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("checked", Checked); + + // In CheckBox control, Text is the showing beside the checkbox. + if (!String.IsNullOrEmpty(Text)) + { + OB.AddProperty("boxLabel", Text); + } + + + if (AutoPostBack) + { + // We should attach the "check" event after the control is rendered. + // Because in the rendering process, the control will also trigger the "check" event, then we cann't distinguish it from the actual event. + + // We don't need delay here, because every PostBack has been delayed in global "ajaxPostBack" function. + //string checkEventScript = String.Format("{0}.on('check',{1},X,{{delay:0}});", XID, JsHelper.GetFunction(GetPostBackEventReference())); + //string renderScript = "(function(){" + checkEventScript + "}).defer(20);"; + + //// 既然不需要延迟执行回发请求,那么就没必要放在render事件中了 + //string checkEventScript = String.Format("this.on('check',{0});", JsHelper.GetFunction(GetPostBackEventReference())); + //OB.Listeners.AddProperty("render", "function(){" + checkEventScript + "}", true); + + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(GetPostBackEventReference()), true); + AddListener("change", GetPostBackEventReference()); + } + + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Checkbox',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + //string postValue = postCollection[postDataKey]; + //bool postChecked = !String.IsNullOrEmpty(postValue); + bool postChecked = Convert.ToBoolean(postCollection[CheckedHiddenFieldID]); + if (Checked != postChecked) + { + Checked = postChecked; + FState.BackupPostDataProperty("Checked"); + return true; + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnCheckedChanged(new CheckedEventArgs(Checked)); + } + + #endregion + + #region OnCheckedChanged + + private object _handlerKey = new object(); + + /// <summary> + /// 复选框状态改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("复选框状态改变事件(需要启用AutoPostBack)")] + public event EventHandler<CheckedEventArgs> CheckedChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发复选框状态改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnCheckedChanged(CheckedEventArgs e) + { + EventHandler<CheckedEventArgs> handler = Events[_handlerKey] as EventHandler<CheckedEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.CheckBox/EventArgs/CheckedEventArgs.cs b/FineUI_v6/FineUI/WebControls/Field.CheckBox/EventArgs/CheckedEventArgs.cs new file mode 100644 index 0000000..c640880 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.CheckBox/EventArgs/CheckedEventArgs.cs @@ -0,0 +1,65 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: CheckedEventArgs.cs + * CreatedOn: 2013-10-22 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ѡ/ѡ/ѡ˵ť¼ + /// </summary> + public class CheckedEventArgs : EventArgs + { + + private bool _checked; + + /// <summary> + /// Ƿѡ + /// </summary> + public bool Checked + { + get { return _checked; } + set { _checked = value; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="isChecked">Ƿѡ</param> + public CheckedEventArgs(bool isChecked) + { + _checked = isChecked; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckBoxList.cs b/FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckBoxList.cs new file mode 100644 index 0000000..0f3e726 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckBoxList.cs @@ -0,0 +1,1062 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: CheckBoxList.cs + * CreatedOn: 2012-01-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Data; +using System.Collections; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.ComponentModel.Design; + + +namespace FineUI +{ + /// <summary> + /// 复选框列表控件 + /// </summary> + [Designer("FineUI.Design.CheckBoxListDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:CheckBoxList runat=server></{0}:CheckBoxList>")] + [ToolboxBitmap(typeof(CheckBoxList), "toolbox.CheckBoxList.bmp")] + [Description("复选框列表控件")] + [ParseChildren(true, DefaultProperty = "Items")] + [PersistChildren(false)] + [DefaultEvent("SelectedIndexChanged")] + public class CheckBoxList : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public CheckBoxList() + { + AddServerAjaxProperties("F_Items"); + AddClientAjaxProperties("SelectedValueArray"); + + //AddGzippedAjaxProperties("F_Items"); + } + + #endregion + + #region Properties + + #region old code + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示浅色的背景色")] + //public virtual bool EnableLightBackgroundColor + //{ + // get + // { + // object obj = BoxState["EnableLightBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableLightBackgroundColor"] = value; + // } + //} + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示背景色")] + //public virtual bool EnableBackgroundColor + //{ + // get + // { + // object obj = BoxState["EnableBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableBackgroundColor"] = value; + // } + //} + + + #endregion + + /// <summary> + /// 是否必填项 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("是否必填项")] + public bool Required + { + get + { + object obj = FState["Required"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Required"] = value; + } + } + + /// <summary> + /// 为空时提示信息 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("为空时提示信息")] + public string RequiredMessage + { + get + { + object obj = FState["RequiredMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RequiredMessage"] = value; + } + } + + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + ///// <summary> + ///// 是否选中 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否选中")] + //public bool Checked + //{ + // get + // { + // object obj = FState["Checked"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Checked"] = value; + // } + //} + + /// <summary> + /// 渲染成几列 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("渲染成几列")] + public int ColumnNumber + { + get + { + object obj = FState["ColumnNumber"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["ColumnNumber"] = value; + } + } + + /// <summary> + /// 是否按照纵向顺序渲染 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否按照纵向顺序渲染")] + public bool ColumnVertical + { + get + { + object obj = FState["ColumnVertical"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ColumnVertical"] = value; + } + } + + #endregion + + #region Data Properties + + /// <summary> + /// 显示文本的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的数据字段")] + public string DataTextField + { + get + { + object obj = FState["DataTextField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextField"] = value; + } + } + + /// <summary> + /// 显示文本的格式化字符串 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的格式化字符串")] + public string DataTextFormatString + { + get + { + object obj = FState["DataTextFormatString"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextFormatString"] = value; + } + } + + /// <summary> + /// 显示值的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示值的数据字段")] + public string DataValueField + { + get + { + object obj = FState["DataValueField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataValueField"] = value; + } + } + + private object _dataSource; + + /// <summary> + /// 数据源 + /// </summary> + [DefaultValue(null)] + [Description("数据源")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + #endregion + + #region SelectedIndexArray/SelectedValueArray/SelectedItemArray + + /// <summary> + /// [AJAX属性]选中项的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的值")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string[] SelectedValueArray + { + get + { + List<string> selectedValues = new List<string>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + CheckItem item = Items[i]; + if (item.Selected) + { + selectedValues.Add(item.Value); + } + } + return selectedValues.ToArray(); + } + set + { + List<string> selectedValues = new List<string>(value); + for (int i = 0, count = Items.Count; i < count; i++) + { + CheckItem item = Items[i]; + if (selectedValues.Contains(item.Value)) + { + item.Selected = true; + } + else + { + item.Selected = false; + } + } + } + } + + + /// <summary> + /// [AJAX属性]选中项的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的索引")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int[] SelectedIndexArray + { + get + { + List<int> selectedIndexs = new List<int>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + if (Items[i].Selected) + { + selectedIndexs.Add(i); + } + } + return selectedIndexs.ToArray(); + } + set + { + List<int> selectedIndexs = new List<int>(value); + for (int i = 0, count = Items.Count; i < count; i++) + { + if (selectedIndexs.Contains(i)) + { + Items[i].Selected = true; + } + else + { + Items[i].Selected = false; + } + } + } + } + + /// <summary> + /// 选中项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public CheckItem[] SelectedItemArray + { + get + { + List<CheckItem> selectedItems = new List<CheckItem>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + CheckItem item = Items[i]; + if (item.Selected) + { + selectedItems.Add(item); + } + } + return selectedItems.ToArray(); + } + } + + #endregion + + #region HiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string SelectedValueArrayHiddenFieldID + { + get + { + return String.Format("{0}_SelectedValueArray", ClientID); + } + } + + #endregion + + #region Items + + private CheckItemCollection _items; + + /// <summary> + /// 复选框集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual CheckItemCollection Items + { + get + { + if (_items == null) + { + _items = new CheckItemCollection(); + } + return _items; + } + } + + #endregion + + #region X Properties + + /// <summary> + /// 保存的复选框数据(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JArray F_Items + { + get + { + JArray ja = new JArray(); + foreach (CheckItem item in Items) + { + JArray ja2 = new JArray(); + ja2.Add(item.Text); + ja2.Add(item.Value); + ja.Add(ja2); + } + return ja; + } + set + { + // 和DropDownList的情况相同,清空前备份选中项 + string[] selectedValues = SelectedValueArray; + + Items.Clear(); + foreach (JArray ja2 in value) + { + CheckItem item = new CheckItem(); + item.Text = ja2[0].Value<string>(); //ja2.getString(0); + item.Value = ja2[1].Value<string>(); //ja2.getString(1); + Items.Add(item); + } + + // 恢复选中项 + SelectedValueArray = selectedValues; + } + } + + #endregion + + #region old code + + //private int itemsHashCode; + //protected override void OnInit(EventArgs e) + //{ + // base.OnInit(e); + + // itemsHashCode = XItemsToState().ToString().GetHashCode(); + //} + + //protected override void OnBothPreRender() + //{ + // base.OnBothPreRender(); + + // // Items has been changed in server-side code after onInit. + // if (itemsHashCode != XItemsToState().ToString().GetHashCode()) + // { + // FState.AddModifiedProperty("F_Items"); + // } + //} + + //protected override void LoadFState(JObject state, string property) + //{ + // base.LoadFState(state, property); + + // if (property == "F_Items") + // { + // XItemsFromState(state.getJArray(property)); + // } + //} + + //protected override void SaveFState(JObject state, string property) + //{ + // if (property == "F_Items") + // { + // state.put(property, XItemsToState()); + // } + //} + + //private JArray XItemsToState() + //{ + // JArray ja = new JArray(); + // foreach (CheckItem item in Items) + // { + // JArray ja2 = new JArray(); + // ja2.Add(item.Text); + // ja2.Add(item.Value); + // ja.Add(ja2); + // } + // return ja; + //} + + //private void XItemsFromState(JArray ja) + //{ + // foreach (JArray ja2 in ja.getArrayList()) + // { + // CheckItem item = new CheckItem(); + // item.Text = ja2.getString(0); + // item.Value = ja2.getString(1); + // Items.Add(item); + // } + //} + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + bool dataReloaded = false; + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("F_Items")) + { + sb.AppendFormat("{0}.f_reloadData('{1}');", XID, UniqueID); //, GetItemsJArray().ToString(Formatting.None)); + + // 注意,在x_reloadData中重新创建了列表实例,所以要重新赋值 + sb.AppendFormat("{0}=F('{1}');", XID, ClientID); + + //if (Items.Count == 0) + //{ + // sb.AppendFormat("{0}.f_toBeDeleted();", XID); + //} + + dataReloaded = true; + } + + // 基于 extjs 的实现,如果数据重新加载了,则客户端会重新初始化控件示例 + if (!dataReloaded) + { + if (PropertyModified("SelectedValueArray")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + + } + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + // 确保 F_Items 和 SelectedValue 在页面第一次加载时都存在于f_state中 + FState.AddModifiedProperty("F_Items"); + FState.AddModifiedProperty("SelectedValueArray"); + + base.OnFirstPreRender(); + + #region options + + if (Required) + { + OB.AddProperty("allowBlank", false); + if (!String.IsNullOrEmpty(RequiredMessage)) + { + OB.AddProperty("blankText", RequiredMessage); + } + } + + + OB.RemoveProperty("name"); + + if (ColumnNumber <= 0) + { + OB.AddProperty("columns", "auto"); + } + else + { + OB.AddProperty("columns", ColumnNumber); + } + + if (ColumnVertical) + { + OB.AddProperty("vertical", true); + } + + //OB.AddProperty("name", UniqueID); + + #endregion + + #region Items + /* + string xstateName = String.Format("{0}_xstate", XID); + string xitemsName = String.Format("{0}_xitems", XID); + string hasDataName = xstateName; + + string xstate = OB.GetProperty("f_state"); + OB.AddProperty("f_state", xstateName, true); + + string jsState = String.Format("var {0}={1};", xstateName, xstate); + + if (!FState.ModifiedProperties.Contains("F_Items")) + { + xstate = ConvertPropertiesToJObject(new List<string> { "F_Items", "SelectedValueArray" }).ToString(Formatting.None); + jsState += String.Format("var {0}={1};", xitemsName, xstate); + hasDataName = xitemsName; + } + + OB.AddProperty("name", UniqueID); + OB.AddProperty("items", String.Format("F.util.resolveCheckBoxGroup('{0}',{1},false)", UniqueID, hasDataName), true); + */ + + OB.AddProperty("name", UniqueID); + OB.AddProperty("items", String.Format("F.util.resolveCheckBoxGroup('{0}',{1},false)", UniqueID, GetFStateScriptID()), true); + + + #endregion + + #region AutoPostBack + + if (AutoPostBack) + { + // 道理和RadioButtonList类似。 + //OB.Listeners.AddProperty("change", String.Format("function(group,checkedArray){{if(typeof(checkedArray)!=='boolean'){{{0}}}}}", GetPostBackEventReference()), true); + AddListener("change", String.Format("if(typeof(checkedArray)!=='boolean'){{{0}}}", GetPostBackEventReference()), "group", "checkedArray"); + } + /* + if (!String.IsNullOrEmpty(SelectedValue)) + { + OB.AddProperty("value", SelectedValue); + } + */ + + #region old code + //string autoPostBackScript = String.Empty; + //if (AutoPostBack) + //{ + // //// change 事件只有在失去焦点时才触发,是不及时的 + // //OB.Listeners.RemoveProperty(OptionName.Change); + // //OB.Listeners.AddProperty(OptionName.Check, String.Format("function(newValue,oldValue){{\r\nbox_pageStateChange();alert(newValue+':'+oldValue);\r\n}}"), true); + + // string selectScript = String.Format("function(newValue,oldValue){{\r\nalert(newValue+':'+oldValue);\r\n}}"); + // selectScript = String.Format("{0}.on('{1}',{2},box,{{delay:0}});", ClientID, OptionName.Check, selectScript); + + // autoPostBackScript += selectScript; + //} + + //string backgroundColorStyle = String.Empty; + //if (EnableBackgroundColor) + //{ + // backgroundColorStyle = AboutConfig.GetDefaultBackgroundColor(PageManagerInstance.Theme.ToString()); + //} + //else if (EnableLightBackgroundColor) + //{ + // backgroundColorStyle = AboutConfig.GetLightBackgroundColor(PageManagerInstance.Theme.ToString()); + //} + + //if (!String.IsNullOrEmpty(backgroundColorStyle)) + //{ + // string backgroundColorScript = String.Format("Ext.each(X.{0}.el.query('.x-panel-body'),function(item,index){{Ext.get(item).setStyle('background-color','{1}');}});", ClientJavascriptID, backgroundColorStyle); + + // string renderScript = "(function(){" + backgroundColorScript + "}).defer(20);"; + // OB.Listeners.AddProperty("render", "function(component){" + renderScript + "}", true); + //} + + #endregion + + #endregion + + + // EXTJS的BUG,不支持默认Readonly=true的情况,需要自己修正 + if (Readonly) + { + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.setReadOnly(true);", "cmp"), true); + AddListener("render", "cmp.setReadOnly(true);", "cmp"); + } + + + string jsContent = String.Format("var {0}=F.create('Ext.form.CheckboxGroup',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #region old code + + //private JArray GetItemsJArray() + //{ + // JArray ja = new JArray(); + // int itemIndex = 0; + // foreach (CheckItem item in Items) + // { + // JObject jo = new JObject(); + // jo.Add("inputValue", item.Value); + // jo.Add("boxLabel", item.Text); + // jo.Add("name", UniqueID + "_" + itemIndex.ToString()); + // if (item.Selected) + // { + // jo.Add("checked", true); + // } + + // ja.Add(jo); + + // itemIndex++; + // } + + // return ja; + //} + + #endregion + + #endregion + + #region DataBind + + /// <summary> + /// 绑定到数据源 + /// </summary> + public override void DataBind() + { + // 1. 首先清空 Items 属性 + Items.Clear(); + + if (_dataSource != null) + { + // 2. 绑定到数据源 + if (_dataSource is IDataReader) + { + DataTable dataTable = new DataTable(); + dataTable.Load(_dataSource as IDataReader); + + DataBindToDataTable(dataTable); + } + else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) + { + DataTable dataTable = null; + if (_dataSource is DataView) + { + dataTable = ((DataView)_dataSource).ToTable(); + } + else if (_dataSource is DataSet) + { + dataTable = ((DataSet)_dataSource).Tables[0]; + } + else + { + dataTable = ((DataTable)_dataSource); + } + + DataBindToDataTable(dataTable); + } + else if (_dataSource is IEnumerable) + { + DataBindToEnumerable((IEnumerable)_dataSource); + } + else + { + throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); + } + + //// F_Items属性不是ServerAjaxProperty,所以只在页面第一次加载时判断是否改变 + //if (!Page.IsPostBack) + //{ + // FState.AddModifiedProperty("F_Items"); + //} + } + + base.DataBind(); + } + + /// <summary> + /// 绑定到数据表 + /// </summary> + /// <param name="dataTable"></param> + private void DataBindToDataTable(DataTable dataTable) + { + int startIndex = 0; + int endIndex = Int32.MaxValue; + for (int i = startIndex; i < Math.Min(endIndex, dataTable.Rows.Count); i++) + { + DataRow row = dataTable.Rows[i]; + Items.Add(CreateCheckItem(row)); + } + } + + /// <summary> + /// 绑定到可枚举列表 + /// </summary> + /// <param name="enumerable"></param> + private void DataBindToEnumerable(IEnumerable enumerable) + { + #region old code + //int startIndex = 0; + //int endIndex = Int32.MaxValue; + + //IEnumerator enumerator = enumerable.GetEnumerator(); + + //// 定位开始位置 + //enumerator.Reset(); + //enumerator.MoveNext(); + + //int count = 0; + + //// skip some items? + //while (count < startIndex) + //{ + // enumerator.MoveNext(); + // count++; + //} + + //try + //{ + // if (enumerator.Current == null) + // { + // return; + // } + //} + //catch + //{ + // return; + //} + + //while (enumerator.Current != null && count < endIndex) + //{ + // object currentObject = enumerator.Current; + + // CheckItem item = new CheckItem(); + + // if (currentObject is string) + // { + // item.Text = currentObject.ToString(); + // item.Value = currentObject.ToString(); + // } + // else + // { + // // Load item + // if (DataTextField != "") + // { + // item.Text = GetPropertyValue(currentObject, DataTextField); + // } + // else + // { + // item.Text = currentObject.ToString(); + // } + + // if (DataValueField != "") + // { + // item.Value = GetPropertyValue(currentObject, DataValueField); + // } + // else + // { + // item.Value = currentObject.ToString(); + // } + + // } + + // Items.Add(item); + + // if (!enumerator.MoveNext()) + // { + // break; + // } + + // count++; + //} + #endregion + + IEnumerator enumerator = enumerable.GetEnumerator(); + while (enumerator.MoveNext()) + { + object currentObject = enumerator.Current; + Items.Add(CreateCheckItem(currentObject)); + } + } + + private CheckItem CreateCheckItem(Object obj) + { + CheckItem item = new CheckItem(); + if (obj is string) + { + item.Text = obj.ToString(); + item.Value = obj.ToString(); + } + else + { + if (!String.IsNullOrEmpty(DataTextField)) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + item.Text = String.Format(DataTextFormatString, GetPropertyValue(obj, DataTextField)); + } + else + { + item.Text = GetPropertyValue(obj, DataTextField); + } + } + else + { + item.Text = obj.ToString(); + } + + if (!String.IsNullOrEmpty(DataValueField)) + { + item.Value = GetPropertyValue(obj, DataValueField); + } + else + { + item.Value = obj.ToString(); + } + } + return item; + } + + + + /// <summary> + /// 取得属性值 + /// </summary> + /// <param name="obj"></param> + /// <param name="propertyName"></param> + private string GetPropertyValue(object obj, string propertyName) + { + object result = null; + + result = ObjectUtil.GetPropertyValue(obj, propertyName); + + return result == null ? String.Empty : result.ToString(); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + //List<string> selectedValues = new List<string>(); + //for (int i = 0, count = Items.Count; i < count; i++) + //{ + // if (!String.IsNullOrEmpty(postCollection[postDataKey + "_" + i.ToString()])) + // { + // CheckItem item = Items[i]; + // selectedValues.Add(item.Value); + // } + //} + //string[] selectedValueArray = selectedValues.ToArray(); + + string[] selectedValueArray = StringUtil.GetStringListFromString(postCollection[SelectedValueArrayHiddenFieldID]).ToArray(); + if (!StringUtil.CompareStringArray(selectedValueArray, SelectedValueArray)) + { + SelectedValueArray = selectedValueArray; + FState.BackupPostDataProperty("SelectedValueArray"); + return true; + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public virtual void RaisePostDataChangedEvent() + { + OnSelectedIndexChanged(EventArgs.Empty); + } + + private object _handlerKey = new object(); + + /// <summary> + /// 选中项改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("选中项改变事件(需要启用AutoPostBack)")] + public event EventHandler SelectedIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发选中项改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnSelectedIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItem.cs b/FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItem.cs new file mode 100644 index 0000000..c875804 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItem.cs @@ -0,0 +1,153 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: CheckItem.cs + * CreatedOn: 2012-01-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Collections; + + +namespace FineUI +{ + /// <summary> + /// 复选框列表项 + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Text")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class CheckItem + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public CheckItem() + { + + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + public CheckItem(string text, string value) + { + Text = text; + Value = value; + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <param name="selected">是否选中</param> + public CheckItem(string text, string value, bool selected) + { + Text = text; + Value = value; + Selected = selected; + } + + #endregion + + #region Properties + + private bool _selected = false; + /// <summary> + /// 是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("是否选中")] + [DefaultValue(false)] + [NotifyParentProperty(true)] + public bool Selected + { + get + { + return _selected; + } + set + { + _selected = value; + } + } + + private string _text = String.Empty; + /// <summary> + /// 显示的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示的文本")] + [NotifyParentProperty(true)] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + private string _value = String.Empty; + /// <summary> + /// 值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("值")] + [NotifyParentProperty(true)] + public string Value + { + get + { + return _value; + } + set + { + _value = value; + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItemCollection.cs b/FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItemCollection.cs new file mode 100644 index 0000000..22d09d1 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.CheckBoxList/CheckItem/CheckItemCollection.cs @@ -0,0 +1,117 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: CheckItemCollection.cs + * CreatedOn: 2012-01-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 复选项集合 + /// </summary> + public class CheckItemCollection : Collection<CheckItem> + { + /// <summary> + /// 通过文本查找复选项 + /// </summary> + /// <param name="text">文本</param> + /// <returns>复选项</returns> + public CheckItem FindByText(string text) + { + return FindByText(text, false); + } + + /// <summary> + /// 通过文本查找复选项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="stripHtml">是否去除HTML标签</param> + /// <returns>复选项</returns> + public CheckItem FindByText(string text, bool stripHtml) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + CheckItem item = enumerator.Current as CheckItem; + + if (item != null) + { + string itemText = item.Text; + if (stripHtml) + { + itemText = StringUtil.StripHtml(itemText); + } + if (itemText == text) + { + return item; + } + } + } + + return null; + } + + /// <summary> + /// 通过值查找复选项 + /// </summary> + /// <param name="value">值</param> + /// <returns>复选项</returns> + public CheckItem FindByValue(string value) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + CheckItem item = enumerator.Current as CheckItem; + + if (item != null && item.Value == value) + { + return item; + } + } + + return null; + } + + /// <summary> + /// 添加复选项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <returns>新元素的插入位置</returns> + public int Add(string text, string value) + { + CheckItem item = new CheckItem(text, value); + + return ((IList)this).Add(item); + } + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.HtmlEditor/HtmlEditor.cs b/FineUI_v6/FineUI/WebControls/Field.HtmlEditor/HtmlEditor.cs new file mode 100644 index 0000000..2b0bd4b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.HtmlEditor/HtmlEditor.cs @@ -0,0 +1,474 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: HtmlEditor.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * ->2008-04-28 改名为 HtmlEditor + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using Newtonsoft.Json.Linq; + +namespace FineUI +{ + /// <summary> + /// HTML编辑框控件 + /// </summary> + [Designer("FineUI.Design.HtmlEditorDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:HtmlEditor Label=\"Label\" Text=\"\" Height=\"250px\" runat=server></{0}:HtmlEditor>")] + [ToolboxBitmap(typeof(HtmlEditor), "toolbox.HtmlEditor.bmp")] + [Description("HTML编辑框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class HtmlEditor : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public HtmlEditor() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Text"); + + //AddGzippedAjaxProperties("Text"); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Enabled + { + get + { + return true; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Readonly + { + get + { + return false; + } + } + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + + /// <summary> + /// 启用左右定位 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用左右定位")] + public bool EnableAlignments + { + get + { + object obj = FState["EnableAlignments"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableAlignments"] = value; + } + } + + /// <summary> + /// 启用颜色 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用颜色")] + public bool EnableColors + { + get + { + object obj = FState["EnableColors"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableColors"] = value; + } + } + + + /// <summary> + /// 启用字体 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用字体")] + public bool EnableFont + { + get + { + object obj = FState["EnableFont"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableFont"] = value; + } + } + + + /// <summary> + /// 启用调整字体大小 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用调整字体大小")] + public bool EnableFontSize + { + get + { + object obj = FState["EnableFontSize"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableFontSize"] = value; + } + } + + + /// <summary> + /// 启用格式化 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用格式化")] + public bool EnableFormat + { + get + { + object obj = FState["EnableFormat"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableFormat"] = value; + } + } + + + /// <summary> + /// 启用创建链接 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用创建链接")] + public bool EnableLinks + { + get + { + object obj = FState["EnableLinks"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableLinks"] = value; + } + } + + + /// <summary> + /// 启用创建列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用创建列表")] + public bool EnableLists + { + get + { + object obj = FState["EnableLists"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableLists"] = value; + } + } + + + /// <summary> + /// 启用源码视图 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用源码视图")] + public bool EnableSourceEdit + { + get + { + object obj = FState["EnableSourceEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableSourceEdit"] = value; + } + } + + + /// <summary> + /// 字体列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("字体列表")] + //[Editor("System.Web.UI.Design.WebControls.DataFieldEditor", typeof(UITypeEditor))] + [TypeConverter(typeof(StringArrayConverter))] + public string[] FontFamilies + { + get + { + object obj = FState["FontFamilies"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["FontFamilies"] = value; + } + } + + /// <summary> + /// 启用中文字体 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用中文字体")] + public bool EnableChineseFont + { + get + { + object obj = FState["EnableChineseFont"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableChineseFont"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Text")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (!EnableAlignments) OB.AddProperty("enableAlignments", false); + if (!EnableColors) OB.AddProperty("enableColors", false); + if (!EnableFont) OB.AddProperty("enableFont", false); + if (!EnableFontSize) OB.AddProperty("enableFontSize", false); + if (!EnableFormat) OB.AddProperty("enableFormat", false); + if (!EnableLinks) OB.AddProperty("enableLinks", false); + if (!EnableLists) OB.AddProperty("enableLists", false); + if (!EnableSourceEdit) OB.AddProperty("enableSourceEdit", false); + + #region Fonts + + string[] fonts = null; + if (EnableChineseFont) + { + fonts = new string[] { "宋体", "黑体", "仿宋", "楷体", "隶书", "幼圆", "Arial", "Courier New", "Tahoma", "Times New Roman", "Verdana" }; + } + else if (FontFamilies != null) + { + fonts = FontFamilies; + } + + if (fonts != null && fonts.Length > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (string fontName in fonts) + { + ab.AddProperty(fontName); + } + + OB.AddProperty("fontFamilies", ab); + } + + #endregion + + if (!String.IsNullOrEmpty(Text)) + { + OB.AddProperty("value", Text); + } + + + // 如果Text属性存在于FState中,则不要重复设置value属性,而是在render事件中使用FState的值 + if (FState.ModifiedProperties.Contains("Text")) + { + //OB.RemoveProperty("value"); + //OB.Listeners.AddProperty("initialize", JsHelper.GetFunction("cmp.f_setValue();", "cmp"), true); + OB.AddProperty("value", String.Format("{0}.Text", GetFStateScriptID()), true); + + } + + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.HtmlEditor',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// 回发到服务器,判断控件的属性是否变化, + /// 如果变化返回true,则RaisePostDataChangedEvent + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + string postValue = postCollection[UniqueID]; + + //// Extjs4.0.1 没能正确的设置 htmleditor 的提交隐藏字段,这个在更高版本中可能要删除 + //string postValue = postCollection[ClientID + "_Text"]; + + if (postValue != null && Text != postValue) + { + Text = postValue; + FState.BackupPostDataProperty("Text"); + return true; + } + else + { + return false; + } + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnTextChanged(EventArgs.Empty); + } + + /// <summary> + /// 文本改变事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("文本改变事件")] + public event EventHandler TextChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + private object _handlerKey = new object(); + + /// <summary> + /// 触发文本改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTextChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + + if (handler != null) + { + handler(this, e); + } + } + + + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.Label.HyperLink/HyperLink.cs b/FineUI_v6/FineUI/WebControls/Field.Label.HyperLink/HyperLink.cs new file mode 100644 index 0000000..0b464b5 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.Label.HyperLink/HyperLink.cs @@ -0,0 +1,279 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: HyperLink.cs + * CreatedOn: 2008-06-09 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 链接控件 + /// </summary> + [Designer("FineUI.Design.HyperLinkDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:HyperLink Text=\"HyperLink\" Label=\"Label\" NavigateUrl=\"\" Target=\"_blank\" runat=server></{0}:HyperLink>")] + [ToolboxBitmap(typeof(HyperLink), "toolbox.HyperLink.bmp")] + [Description("链接控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class HyperLink : TooltipField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public HyperLink() + { + AddServerAjaxProperties("NavigateUrl", "Target", "OnClientClick", "Text"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool Enabled + //{ + // get + // { + // return base.Enabled; + // } + //} + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override short? TabIndex + { + get + { + return base.TabIndex; + } + } + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + + /// <summary> + /// [AJAX属性]点击链接时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]点击链接时需要执行的客户端脚本")] + public string OnClientClick + { + get + { + object obj = FState["OnClientClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientClick"] = value; + } + } + + /// <summary> + /// [AJAX属性]链接地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]链接地址")] + public string NavigateUrl + { + get + { + object obj = FState["NavigateUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["NavigateUrl"] = value; + } + } + + /// <summary> + /// [AJAX属性]链接目标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]链接目标")] + public string Target + { + get + { + object obj = FState["Target"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Target"] = value; + } + } + + /// <summary> + /// 是否对文本编码 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否对文本编码")] + public virtual bool EncodeText + { + get + { + object obj = FState["EncodeText"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EncodeText"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("NavigateUrl", "Target", "OnClientClick", "Text", "ToolTip", "ToolTipTitle", "ToolTipAutoHide", "Enabled")) + { + sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("htmlEncode", false); + + OB.AddProperty("value", GetInnerHtml()); + + //AddExtraStyle("display", "inline"); + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Display',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + private string GetInnerHtml() + { + HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("a"); + + if (Enabled) + { + if (!String.IsNullOrEmpty(NavigateUrl)) + { + if (NavigateUrl == "#") + { + htmlBuilder.SetProperty("href", "#"); + } + else + { + htmlBuilder.SetProperty("href", ResolveUrl(NavigateUrl)); + } + } + + if (!String.IsNullOrEmpty(Target)) + { + htmlBuilder.SetProperty("target", Target); + } + + if (!String.IsNullOrEmpty(OnClientClick)) + { + htmlBuilder.SetProperty("onclick", "javascript:" + OnClientClick); + } + } + else + { + htmlBuilder.SetProperty("class", "x-item-disabled"); + htmlBuilder.SetProperty("disabled", "disabled"); + } + + ResolveTooltip(htmlBuilder); + + ResolveAttribuites(htmlBuilder); + + string text = Text; + if (EncodeText) + { + text = HttpUtility.HtmlEncode(text); + } + htmlBuilder.InnerProperty = text; + + return htmlBuilder.ToString(); + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.Label.Image/Image.cs b/FineUI_v6/FineUI/WebControls/Field.Label.Image/Image.cs new file mode 100644 index 0000000..1c402bc --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.Label.Image/Image.cs @@ -0,0 +1,346 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Image.cs + * CreatedOn: 2008-07-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 图片控件 + /// </summary> + [Designer("FineUI.Design.ImageDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:Image Label=\"Label\" ImageUrl=\"\" runat=server></{0}:Image>")] + [ToolboxBitmap(typeof(Image), "toolbox.Image.bmp")] + [Description("图片控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Image : TooltipField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Image() + { + AddServerAjaxProperties("ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt", "Icon"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Enabled + { + get + { + return base.Enabled; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override short? TabIndex + { + get + { + return base.TabIndex; + } + } + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]链接地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]链接地址")] + public string ImageUrl + { + get + { + object obj = FState["ImageUrl"]; + if (obj == null) + { + if (!DesignMode) + { + if (Icon != Icon.None) + { + obj = IconHelper.GetIconUrl(Icon); + } + } + } + return obj == null ? "" : (string)obj; + } + set + { + FState["ImageUrl"] = value; + } + } + + + /// <summary> + /// [AJAX属性]预定义图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("[AJAX属性]预定义图标")] + public virtual Icon Icon + { + get + { + object obj = FState["Icon"]; + return obj == null ? Icon.None : (Icon)obj; + } + set + { + FState["Icon"] = value; + } + } + + + /// <summary> + /// [AJAX属性]图片的宽度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("[AJAX属性]图片的宽度")] + public Unit ImageWidth + { + get + { + object obj = FState["ImageWidth"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["ImageWidth"] = value; + } + } + + + /// <summary> + /// [AJAX属性]图片的高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("[AJAX属性]图片的高度")] + public Unit ImageHeight + { + get + { + object obj = FState["ImageHeight"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["ImageHeight"] = value; + } + } + + /// <summary> + /// [AJAX属性]图片的样式类 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]图片的样式类")] + public string ImageCssClass + { + get + { + object obj = FState["ImageCssClass"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ImageCssClass"] = value; + } + } + + /// <summary> + /// [AJAX属性]图片的样式 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]图片的样式")] + public string ImageCssStyle + { + get + { + object obj = FState["ImageCssStyle"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["ImageCssStyle"] = value; + } + } + + /// <summary> + /// [AJAX属性]图片的Alt + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]图片的Alt")] + public string ImageAlt + { + get + { + object obj = FState["ImageAlt"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["ImageAlt"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt", "ToolTip", "ToolTipTitle", "ToolTipAutoHide", "Icon")) + { + sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + OB.AddProperty("htmlEncode", false); + + OB.AddProperty("value", GetInnerHtml()); + + //AddExtraStyle("display", "inline"); + + #region oldcode + + //if (!String.IsNullOrEmpty(ToolTip)) + //{ + // JsObjectBuilder tooltipBuilder = new JsObjectBuilder(); + // tooltipBuilder.AddProperty("target", String.Format("Ext.get('{0}').child('img')", ClientID), true); + // tooltipBuilder.AddProperty("html", ToolTip); + + // if (!String.IsNullOrEmpty(ToolTipTitle)) + // { + // tooltipBuilder.AddProperty("title", ToolTipTitle); + // } + + // if (!ToolTipAutoHide) + // { + // tooltipBuilder.AddProperty("autoHide", false); + // tooltipBuilder.AddProperty("closable", true); + // tooltipBuilder.AddProperty("draggable", true); + // } + + // string tooltipScript = String.Format("new Ext.ToolTip({0});", tooltipBuilder); + + // string renderScript = JsHelper.GetDeferScript(tooltipScript, 100); //"(function(){" + tooltipScript + "}).defer(20);"; + // OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript, "component"), true); + //} + + #endregion + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Display',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + + private string GetInnerHtml() + { + HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("img"); + if (!String.IsNullOrEmpty(ImageUrl)) + { + htmlBuilder.SetProperty("src", ResolveUrl(ImageUrl)); + } + + if (ImageWidth != Unit.Empty) + { + htmlBuilder.SetProperty("width", String.Format("{0}px", ImageWidth.Value)); + } + if (ImageHeight != Unit.Empty) + { + htmlBuilder.SetProperty("height", String.Format("{0}px", ImageHeight.Value)); + } + + if (!String.IsNullOrEmpty(ImageCssClass)) + { + htmlBuilder.SetProperty("class", ImageCssClass); + } + if (!String.IsNullOrEmpty(ImageCssStyle)) + { + htmlBuilder.SetProperty("style", ImageCssStyle); + } + if (!String.IsNullOrEmpty(ImageAlt)) + { + htmlBuilder.SetProperty("alt", ImageAlt); + } + + ResolveTooltip(htmlBuilder); + + ResolveAttribuites(htmlBuilder); + + return htmlBuilder.ToString(); + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.Label.LinkButton/LinkButton.cs b/FineUI_v6/FineUI/WebControls/Field.Label.LinkButton/LinkButton.cs new file mode 100644 index 0000000..dc02fbe --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.Label.LinkButton/LinkButton.cs @@ -0,0 +1,440 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: LinkButton.cs + * CreatedOn: 2008-06-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 链接按钮控件 + /// </summary> + [Designer("FineUI.Design.LinkButtonDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:LinkButton Text=\"LinkButton\" Label=\"Label\" runat=server></{0}:LinkButton>")] + [ToolboxBitmap(typeof(LinkButton), "toolbox.LinkButton.bmp")] + [Description("链接按钮控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [DefaultEvent("Click")] + public class LinkButton : TooltipField, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public LinkButton() + { + AddServerAjaxProperties("Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + + + #endregion + + #region Properties + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// <summary> + /// [AJAX属性]点击按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]点击按钮时需要执行的客户端脚本")] + public string OnClientClick + { + get + { + object obj = FState["OnClientClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientClick"] = value; + } + } + + + /// <summary> + /// 提交之前需要验证的表单名称列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("提交之前需要验证的表单名称列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + object obj = FState["ValidateForms"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["ValidateForms"] = value; + } + } + + + /// <summary> + /// 验证失败时提示对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("验证失败时提示对话框弹出位置")] + public Target ValidateTarget + { + get + { + object obj = FState["ValidateTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ValidateTarget"] = value; + } + } + + /// <summary> + /// 验证失败时是否出现提示对话框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("验证失败时是否出现提示对话框")] + public bool ValidateMessageBox + { + get + { + object obj = FState["ValidateMessageBox"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ValidateMessageBox"] = value; + } + } + + /// <summary> + /// 是否可以回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnablePostBack + { + get + { + object obj = FState["EnablePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePostBack"] = value; + } + } + + + /// <summary> + /// 是否对文本编码 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否对文本编码")] + public virtual bool EncodeText + { + get + { + object obj = FState["EncodeText"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EncodeText"] = value; + } + } + + + #endregion + + #region ConfirmText/ConfirmTitle/ConfirmIcon + + /// <summary> + /// [AJAX属性]确认对话框标题 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]确认对话框标题")] + public string ConfirmTitle + { + get + { + object obj = FState["ConfirmTitle"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmTitle"] = value; + } + } + + + /// <summary> + /// [AJAX属性]确认对话框内容 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]确认对话框内容")] + public string ConfirmText + { + get + { + object obj = FState["ConfirmText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ConfirmText"] = value; + } + } + + + /// <summary> + /// [AJAX属性]确认对话框提示图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(MessageBoxIcon.Warning)] + [Description("[AJAX属性]确认对话框提示图标")] + public MessageBoxIcon ConfirmIcon + { + get + { + object obj = FState["ConfirmIcon"]; + return obj == null ? MessageBoxIcon.Warning : (MessageBoxIcon)obj; + } + set + { + FState["ConfirmIcon"] = value; + } + } + + ///// <summary> + ///// 确认对话框弹出位置 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("确认对话框弹出位置")] + //public string ConfirmTarget + //{ + // get + // { + // object obj = BoxState["ConfirmTarget"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // BoxState["ConfirmTarget"] = value; + // } + //} + + /// <summary> + /// [AJAX属性]确认对话框弹出位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("[AJAX属性]确认对话框弹出位置")] + public Target ConfirmTarget + { + get + { + object obj = FState["ConfirmTarget"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["ConfirmTarget"] = value; + } + } + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("Enabled", "Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick", "ToolTip", "ToolTipTitle", "ToolTipAutoHide")) + { + sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("htmlEncode", false); + + OB.AddProperty("value", GetInnerHtml()); + + //AddExtraStyle("display", "inline"); + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Display',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + private string GetInnerHtml() + { + string text = Text; + if (EncodeText) + { + text = HttpUtility.HtmlEncode(text); + } + + HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("a"); + + if (Enabled) + { + htmlBuilder.SetProperty("href", "javascript:;"); + + // ValidateForms/Click + string clientScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, GetPostBackEventReference(), + ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, String.Empty); + htmlBuilder.SetProperty("onclick", String.Format("javascript:{0}", clientScript)); + + if (TabIndex != null) + { + htmlBuilder.SetProperty("tabindex", TabIndex.Value.ToString()); + } + + } + else + { + //htmlBuilder.SetProperty("class", "gray"); + htmlBuilder.SetProperty("class", "x-item-disabled"); + htmlBuilder.SetProperty("disabled", "disabled"); + } + + ResolveTooltip(htmlBuilder); + + ResolveAttribuites(htmlBuilder); + + htmlBuilder.InnerProperty = text; + + return htmlBuilder.ToString(); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + OnClick(EventArgs.Empty); + } + + #endregion + + #region OnClick + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("按钮点击事件")] + public event EventHandler Click + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnClick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.Label/Label.cs b/FineUI_v6/FineUI/WebControls/Field.Label/Label.cs new file mode 100644 index 0000000..5fef998 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.Label/Label.cs @@ -0,0 +1,224 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Label.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 文本控件 + /// </summary> + [Designer("FineUI.Design.LabelDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:Label Text=\"Label\" Label=\"Label\" runat=server></{0}:Label>")] + [ToolboxBitmap(typeof(Label), "toolbox.Label.bmp")] + [Description("文本控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Label : TooltipField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Label() + { + AddServerAjaxProperties("Text"); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool Enabled + //{ + // get + // { + // return base.Enabled; + // } + //} + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override short? TabIndex + { + get + { + return base.TabIndex; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool FocusOnPageLoad + { + get + { + return false; + } + } + + #endregion + + #region Properties + + /// <summary> + /// 是否对文本编码 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否对文本编码")] + public virtual bool EncodeText + { + get + { + object obj = FState["EncodeText"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EncodeText"] = value; + } + } + + /// <summary> + /// [AJAX属性]文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Text", "ToolTip", "ToolTipTitle", "ToolTipAutoHide", "Enabled")) + { + sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(GetInnerHtml())); + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + //OB.AddProperty("htmlEncode", false); + + //OB.RemoveProperty(OptionName.Value); + OB.AddProperty("value", GetInnerHtml()); + + //AddExtraStyle("display", "inline"); + + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Display',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + + private string GetInnerHtml() + { + string text = Text; + if (EncodeText) + { + text = HttpUtility.HtmlEncode(text); + } + + HtmlNodeBuilder htmlBuilder = new HtmlNodeBuilder("span"); + + if (!String.IsNullOrEmpty(ToolTip)) + { + ResolveTooltip(htmlBuilder); + } + + ResolveAttribuites(htmlBuilder); + + if (!Enabled) + { + htmlBuilder.SetProperty("class", "x-item-disabled"); + htmlBuilder.SetProperty("disabled", "disabled"); + } + + htmlBuilder.InnerProperty = text; + + string html = htmlBuilder.ToString(); + + if (html == "<span></span>") + { + html = String.Empty; + } + + return html; + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.RadioButton/RadioButton.cs b/FineUI_v6/FineUI/WebControls/Field.RadioButton/RadioButton.cs new file mode 100644 index 0000000..9cb072f --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.RadioButton/RadioButton.cs @@ -0,0 +1,363 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: RadioButton.cs + * CreatedOn: 2008-06-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 单选框控件 + /// </summary> + [Designer("FineUI.Design.RadioButtonDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:RadioButton Label=\"Label\" Text=\"RadioButton\" runat=server></{0}:RadioButton>")] + [ToolboxBitmap(typeof(RadioButton), "toolbox.RadioButton.bmp")] + [Description("单选框控件")] + public class RadioButton : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public RadioButton() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("Checked"); + } + + #endregion + + #region Properties + + /// <summary> + /// 文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本")] + public virtual string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + /// <summary> + /// [AJAX属性]是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("[AJAX属性]是否选中")] + public bool Checked + { + get + { + object obj = FState["Checked"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Checked"] = value; + + ProcessOthersInGroup(); + } + } + + /// <summary> + /// 设置本组内其他RadioButton的Checked属性为false + /// 简单处理,只查找和此RadioButton在同一个层级的RadioButton + /// </summary> + private void ProcessOthersInGroup() + { + // 如果页面已经加载完毕,并且此RadioButton的属于某一个Group + // 则在设置这个控件的Checked属性时需要考虑本组内其他控件的Checked属性。 + if (Page != null && !String.IsNullOrEmpty(GroupName) && Checked) + { + foreach (Control c in this.Parent.Controls) + { + if (c is RadioButton) + { + RadioButton rbtn = c as RadioButton; + if (rbtn != this && rbtn.GroupName == this.GroupName) + { + rbtn.Checked = false; + } + } + } + } + } + + /// <summary> + /// 分组的名称 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("分组的名称")] + public string GroupName + { + get + { + object obj = FState["GroupName"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["GroupName"] = value; + } + } + + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + + #endregion + + #region HiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string CheckedHiddenFieldID + { + get + { + return String.Format("{0}_Checked", ClientID); + } + } + + #endregion + + #region OnInitControl + + /// <summary> + /// 初始化控件 + /// </summary> + protected override void OnInitControl() + { + base.OnInitControl(); + + ProcessOthersInGroup(); + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("Checked")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region options + OB.AddProperty("checked", Checked); + + if (!String.IsNullOrEmpty(Text)) + { + OB.AddProperty("boxLabel", Text); + } + + if (!String.IsNullOrEmpty(GroupName)) + { + OB.RemoveProperty("name"); + OB.AddProperty("name", GroupName); + OB.AddProperty("inputValue", ClientID); + } + + #endregion + + #region AutoPostBack + + if (AutoPostBack) + { + string checkScript = String.Empty; + if (!String.IsNullOrEmpty(GroupName)) + { + checkScript = "if(F.util.checkGroupLastTime('" + GroupName + "')){" + GetPostBackEventReference() + "}"; + } + else + { + checkScript = GetPostBackEventReference(); + } + + //OB.Listeners.AddProperty("change", JsHelper.GetFunction(checkScript), true); + AddListener("change", checkScript); + } + + #endregion + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Radio',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + // 不管单选框是否在分组中,每个单选框的Checked都在POST参数中 + bool postChecked = Convert.ToBoolean(postCollection[CheckedHiddenFieldID]); + if (Checked != postChecked) + { + Checked = postChecked; + FState.BackupPostDataProperty("Checked"); + return true; + } + + //if (String.IsNullOrEmpty(GroupName)) + //{ + // // This radio button is not in a group + // string postValue = postCollection[postDataKey]; + // bool postChecked = !String.IsNullOrEmpty(postValue); + // if (Checked != postChecked) + // { + // Checked = postChecked; + // FState.BackupPostDataProperty("Checked"); + // return true; + // } + //} + //else + //{ + // // This radio is in a group + // string postValue = postCollection[GroupName]; + // if (!String.IsNullOrEmpty(postValue)) + // { + // bool postChecked = (ClientID == postValue) ? true : false; + // if (Checked != postChecked) + // { + // Checked = postChecked; + // FState.BackupPostDataProperty("Checked"); + // return true; + // } + // } + //} + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnCheckedChanged(new CheckedEventArgs(Checked)); + } + + #region OnCheckedChanged + + private object _handlerKey = new object(); + + /// <summary> + /// 单选框状态改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("单选框状态改变事件(需要启用AutoPostBack)")] + public event EventHandler<CheckedEventArgs> CheckedChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发单选框状态改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnCheckedChanged(CheckedEventArgs e) + { + EventHandler<CheckedEventArgs> handler = Events[_handlerKey] as EventHandler<CheckedEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioButtonList.cs b/FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioButtonList.cs new file mode 100644 index 0000000..42127b4 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioButtonList.cs @@ -0,0 +1,978 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: RadioButtonList.cs + * CreatedOn: 2008-06-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Data; +using System.Collections; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// <summary> + /// 单选框列表控件 + /// </summary> + [Designer("FineUI.Design.RadioButtonListDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:RadioButtonList runat=server></{0}:RadioButtonList>")] + [ToolboxBitmap(typeof(RadioButtonList), "toolbox.RadioButtonList.bmp")] + [Description("单选框列表控件")] + [ParseChildren(true, DefaultProperty = "Items")] + [PersistChildren(false)] + [DefaultEvent("SelectedIndexChanged")] + public class RadioButtonList : Field, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public RadioButtonList() + { + AddServerAjaxProperties("F_Items"); + AddClientAjaxProperties("SelectedValue"); + + //AddGzippedAjaxProperties("F_Items"); + } + + #endregion + + #region Properties + + #region old code + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示浅色的背景色")] + //public virtual bool EnableLightBackgroundColor + //{ + // get + // { + // object obj = BoxState["EnableLightBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableLightBackgroundColor"] = value; + // } + //} + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示背景色")] + //public virtual bool EnableBackgroundColor + //{ + // get + // { + // object obj = BoxState["EnableBackgroundColor"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["EnableBackgroundColor"] = value; + // } + //} + + + #endregion + + /// <summary> + /// 是否必填项 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("是否必填项")] + public bool Required + { + get + { + object obj = FState["Required"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["Required"] = value; + } + } + + /// <summary> + /// 为空时提示信息 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue("")] + [Description("为空时提示信息")] + public string RequiredMessage + { + get + { + object obj = FState["RequiredMessage"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["RequiredMessage"] = value; + } + } + + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + ///// <summary> + ///// 是否选中 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否选中")] + //public bool Checked + //{ + // get + // { + // object obj = FState["Checked"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Checked"] = value; + // } + //} + + /// <summary> + /// 渲染成几列 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("渲染成几列")] + public int ColumnNumber + { + get + { + object obj = FState["ColumnNumber"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["ColumnNumber"] = value; + } + } + + /// <summary> + /// 是否按照纵向顺序渲染 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否按照纵向顺序渲染")] + public bool ColumnVertical + { + get + { + object obj = FState["ColumnVertical"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ColumnVertical"] = value; + } + } + + #endregion + + #region Data Properties + + /// <summary> + /// 显示文本的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的数据字段")] + public string DataTextField + { + get + { + object obj = FState["DataTextField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextField"] = value; + } + } + + /// <summary> + /// 显示文本的格式化字符串 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的格式化字符串")] + public string DataTextFormatString + { + get + { + object obj = FState["DataTextFormatString"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextFormatString"] = value; + } + } + + /// <summary> + /// 显示值的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示值的数据字段")] + public string DataValueField + { + get + { + object obj = FState["DataValueField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataValueField"] = value; + } + } + + private object _dataSource; + + /// <summary> + /// 数据源 + /// </summary> + [DefaultValue(null)] + [Description("数据源")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + #endregion + + #region SelectedIndex/SelectedValue/SelectedItem + + /// <summary> + /// [AJAX属性]选中项的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的值")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string SelectedValue + { + get + { + string value = String.Empty; + if (SelectedItem != null) + { + value = SelectedItem.Value; + } + return value; + } + set + { + for (int i = 0, count = Items.Count; i < count; i++) + { + RadioItem item = Items[i]; + if (item.Value == value) + { + item.Selected = true; + } + else + { + item.Selected = false; + } + } + } + } + + + /// <summary> + /// [AJAX属性]选中项的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的索引")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int SelectedIndex + { + get + { + int _selectedIndex = -1; + for (int i = 0, count = Items.Count; i < count; i++) + { + if (Items[i].Selected) + { + _selectedIndex = i; + break; + } + } + return _selectedIndex; + } + set + { + if (value >= 0 && value < Items.Count) + { + foreach (RadioItem item in Items) + { + item.Selected = false; + } + + Items[value].Selected = true; + } + } + } + + /// <summary> + /// 选中项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public RadioItem SelectedItem + { + get + { + int selectedIndex = SelectedIndex; + if (SelectedIndex >= 0 && SelectedIndex < Items.Count) + { + return Items[SelectedIndex]; + } + return null; + } + } + + #endregion + + #region Items + + private RadioItemCollection _items; + + /// <summary> + /// 单选项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual RadioItemCollection Items + { + get + { + if (_items == null) + { + _items = new RadioItemCollection(); + } + return _items; + } + } + + #endregion + + #region HiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + internal string SelectedValueArrayHiddenFieldID + { + get + { + return String.Format("{0}_SelectedValueArray", ClientID); + } + } + + #endregion + + #region X Properties + + /// <summary> + /// 保存的单选项数据(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JArray F_Items + { + get + { + JArray ja = new JArray(); + foreach (RadioItem item in Items) + { + JArray ja2 = new JArray(); + ja2.Add(item.Text); + ja2.Add(item.Value); + ja.Add(ja2); + } + return ja; + } + set + { + // 和DropDownList的情况相同,清空前备份选中项 + string selectedValue = SelectedValue; + Items.Clear(); + + foreach (JArray ja2 in value) + { + RadioItem item = new RadioItem(); + item.Text = ja2[0].Value<string>(); //ja2.getString(0); + item.Value = ja2[1].Value<string>(); //ja2.getString(1); + Items.Add(item); + } + + // 恢复选中项 + SelectedValue = selectedValue; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + bool dataReloaded = false; + + StringBuilder sb = new StringBuilder(); + + if (PropertyModified("F_Items")) + { + sb.AppendFormat("{0}.f_reloadData('{1}',true);", XID, UniqueID); //, GetItemsJArray().ToString(Formatting.None)); + + // 注意,在x_reloadData中重新创建了列表实例,所以要重新赋值 + sb.AppendFormat("{0}=F('{1}');", XID, ClientID); + + //if (Items.Count == 0) + //{ + // sb.AppendFormat("{0}.f_toBeDeleted();", XID); + //} + + dataReloaded = true; + } + + + // 基于 extjs 的实现,如果数据重新加载了,则客户端会重新初始化控件示例 + if (!dataReloaded) + { + if (PropertyModified("SelectedValue")) + { + sb.AppendFormat("{0}.f_setValue();", XID); + + } + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + // 确保 F_Items 和 SelectedValue 在页面第一次加载时都存在于f_state中 + FState.AddModifiedProperty("F_Items"); + FState.AddModifiedProperty("SelectedValue"); + + + base.OnFirstPreRender(); + + #region options + + if (Required) + { + OB.AddProperty("allowBlank", false); + if (!String.IsNullOrEmpty(RequiredMessage)) + { + OB.AddProperty("blankText", RequiredMessage); + } + } + + + OB.RemoveProperty("name"); + + if (ColumnNumber <= 0) + { + OB.AddProperty("columns", "auto"); + } + else + { + OB.AddProperty("columns", ColumnNumber); + } + + if (ColumnVertical) + { + OB.AddProperty("vertical", true); + } + + #endregion + + #region Items + /* + string xstateName = String.Format("{0}_xstate", XID); + string xitemsName = String.Format("{0}_xitems", XID); + string hasDataName = xstateName; + + string xstate = OB.GetProperty("f_state"); + OB.AddProperty("f_state", xstateName, true); + + string jsState = String.Format("var {0}={1};", xstateName, xstate); + + if (!FState.ModifiedProperties.Contains("F_Items")) + { + xstate = ConvertPropertiesToJObject(new List<string> { "F_Items", "SelectedValue" }).ToString(Formatting.None); + jsState += String.Format("var {0}={1};", xitemsName, xstate); + hasDataName = xitemsName; + } + + OB.AddProperty("name", UniqueID); + OB.AddProperty("items", String.Format("F.util.resolveCheckBoxGroup('{0}',{1},true)", UniqueID, hasDataName), true); + */ + + OB.AddProperty("name", UniqueID); + OB.AddProperty("items", String.Format("F.util.resolveCheckBoxGroup('{0}',{1},true)", UniqueID, GetFStateScriptID()), true); + + #endregion + + #region AutoPostBack + + if (AutoPostBack) + { + // This event will be triggered twice, so we must filter the actually change. + // If the current checked radio is losing focus, this function will alse be called and the radio parameter is true. + // 改变选中项时,这个事件会被触发两次。 + // 当前选中项失去焦点时,这个回调函数也会被触发并设置radio为true。 + //OB.Listeners.AddProperty("change", String.Format("function(group,radio){{if(typeof(radio)!=='boolean'){{{0}}}}}", GetPostBackEventReference()), true); + AddListener("change", String.Format("if(typeof(radio)!=='boolean'){{{0}}}", GetPostBackEventReference()), "group", "radio"); + } + + //if (!String.IsNullOrEmpty(SelectedValue)) + //{ + // OB.AddProperty("value", SelectedValue); + //} + + #region old code + //string autoPostBackScript = String.Empty; + //if (AutoPostBack) + //{ + // //// change 事件只有在失去焦点时才触发,是不及时的 + // //OB.Listeners.RemoveProperty(OptionName.Change); + // //OB.Listeners.AddProperty(OptionName.Check, String.Format("function(newValue,oldValue){{\r\nbox_pageStateChange();alert(newValue+':'+oldValue);\r\n}}"), true); + + // string selectScript = String.Format("function(newValue,oldValue){{\r\nalert(newValue+':'+oldValue);\r\n}}"); + // selectScript = String.Format("{0}.on('{1}',{2},box,{{delay:0}});", ClientID, OptionName.Check, selectScript); + + // autoPostBackScript += selectScript; + //} + + //string backgroundColorStyle = String.Empty; + //if (EnableBackgroundColor) + //{ + // backgroundColorStyle = AboutConfig.GetDefaultBackgroundColor(PageManagerInstance.Theme.ToString()); + //} + //else if (EnableLightBackgroundColor) + //{ + // backgroundColorStyle = AboutConfig.GetLightBackgroundColor(PageManagerInstance.Theme.ToString()); + //} + + //if (!String.IsNullOrEmpty(backgroundColorStyle)) + //{ + // string backgroundColorScript = String.Format("Ext.each(X.{0}.el.query('.x-panel-body'),function(item,index){{Ext.get(item).setStyle('background-color','{1}');}});", ClientJavascriptID, backgroundColorStyle); + + // string renderScript = "(function(){" + backgroundColorScript + "}).defer(20);"; + // OB.Listeners.AddProperty("render", "function(component){" + renderScript + "}", true); + //} + + #endregion + + #endregion + + // EXTJS的BUG,不支持默认Readonly=true的情况,需要自己修正 + if (Readonly) + { + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.setReadOnly(true);", "cmp"), true); + AddListener("render", "cmp.setReadOnly(true);", "cmp"); + } + + string jsContent = String.Format("var {0}=F.create('Ext.form.RadioGroup',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #region old code + + //private JArray GetItemsJArray() + //{ + // JArray ja = new JArray(); + // int itemIndex = 0; + // foreach (RadioItem item in Items) + // { + // JObject jo = new JObject(); + // jo.Add("inputValue", item.Value); + // jo.Add("boxLabel", item.Text); + // jo.Add("name", UniqueID); + // if (item.Selected) + // { + // jo.Add("checked", true); + // } + + // ja.Add(jo); + + // itemIndex++; + // } + + // return ja; + //} + + #endregion + + #endregion + + #region DataBind + + /// <summary> + /// 绑定到数据源 + /// </summary> + public override void DataBind() + { + // 1. 首先清空 Items 属性 + Items.Clear(); + + if (_dataSource != null) + { + + // 2. 绑定到数据源 + if (_dataSource is IDataReader) + { + DataTable dataTable = new DataTable(); + dataTable.Load(_dataSource as IDataReader); + + DataBindToDataTable(dataTable); + } + else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) + { + DataTable dataTable = null; + if (_dataSource is DataView) + { + dataTable = ((DataView)_dataSource).ToTable(); + } + else if (_dataSource is DataSet) + { + dataTable = ((DataSet)_dataSource).Tables[0]; + } + else + { + dataTable = ((DataTable)_dataSource); + } + + DataBindToDataTable(dataTable); + } + else if (_dataSource is IEnumerable) + { + DataBindToEnumerable((IEnumerable)_dataSource); + } + else + { + throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); + } + + //// F_Items属性不是ServerAjaxProperty,所以只在页面第一次加载时判断是否改变 + //if (!Page.IsPostBack) + //{ + // FState.AddModifiedProperty("F_Items"); + //} + } + + base.DataBind(); + } + + /// <summary> + /// 绑定到数据表 + /// </summary> + /// <param name="dataTable"></param> + private void DataBindToDataTable(DataTable dataTable) + { + int startIndex = 0; + int endIndex = Int32.MaxValue; + for (int i = startIndex; i < Math.Min(endIndex, dataTable.Rows.Count); i++) + { + DataRow row = dataTable.Rows[i]; + Items.Add(CreateRadioItem(row)); + } + } + + /// <summary> + /// 绑定到可枚举列表 + /// </summary> + /// <param name="enumerable"></param> + private void DataBindToEnumerable(IEnumerable enumerable) + { + #region old code + //int startIndex = 0; + //int endIndex = Int32.MaxValue; + + //IEnumerator enumerator = enumerable.GetEnumerator(); + + //// 定位开始位置 + //enumerator.Reset(); + //enumerator.MoveNext(); + + //int count = 0; + + //// skip some items? + //while (count < startIndex) + //{ + // enumerator.MoveNext(); + // count++; + //} + + //try + //{ + // if (enumerator.Current == null) + // { + // return; + // } + //} + //catch + //{ + // return; + //} + + //while (enumerator.Current != null && count < endIndex) + //{ + // object currentObject = enumerator.Current; + + // RadioItem item = new RadioItem(); + + // if (currentObject is string) + // { + // item.Text = currentObject.ToString(); + // item.Value = currentObject.ToString(); + // } + // else + // { + // // Load item + // if (DataTextField != "") + // { + // item.Text = GetPropertyValue(currentObject, DataTextField); + // } + // else + // { + // item.Text = currentObject.ToString(); + // } + + // if (DataValueField != "") + // { + // item.Value = GetPropertyValue(currentObject, DataValueField); + // } + // else + // { + // item.Value = currentObject.ToString(); + // } + + // } + + // Items.Add(item); + + // if (!enumerator.MoveNext()) + // { + // break; + // } + + // count++; + //} + #endregion + + IEnumerator enumerator = enumerable.GetEnumerator(); + while (enumerator.MoveNext()) + { + object currentObject = enumerator.Current; + Items.Add(CreateRadioItem(currentObject)); + } + } + + private RadioItem CreateRadioItem(Object obj) + { + RadioItem item = new RadioItem(); + if (obj is string) + { + item.Text = obj.ToString(); + item.Value = obj.ToString(); + } + else + { + if (!String.IsNullOrEmpty(DataTextField)) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + item.Text = String.Format(DataTextFormatString, GetPropertyValue(obj, DataTextField)); + } + else + { + item.Text = GetPropertyValue(obj, DataTextField); + } + } + else + { + item.Text = obj.ToString(); + } + + if (!String.IsNullOrEmpty(DataValueField)) + { + item.Value = GetPropertyValue(obj, DataValueField); + } + else + { + item.Value = obj.ToString(); + } + } + return item; + } + + + + /// <summary> + /// 取得属性值 + /// </summary> + /// <param name="obj"></param> + /// <param name="propertyName"></param> + private string GetPropertyValue(object obj, string propertyName) + { + object result = null; + + result = ObjectUtil.GetPropertyValue(obj, propertyName); + + return result == null ? String.Empty : result.ToString(); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + //string postValue = postCollection[postDataKey]; + string[] selectedValueArray = StringUtil.GetStringListFromString(postCollection[SelectedValueArrayHiddenFieldID]).ToArray(); + string postValue = selectedValueArray.Length > 0 ? selectedValueArray[0] : String.Empty; + if (SelectedValue != postValue) + { + SelectedValue = postValue; + FState.BackupPostDataProperty("SelectedValue"); + return true; + } + return false; + } + + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public virtual void RaisePostDataChangedEvent() + { + OnSelectedIndexChanged(EventArgs.Empty); + } + + + + private object _handlerKey = new object(); + + /// <summary> + /// 选中项改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("选中项改变事件(需要启用AutoPostBack)")] + public event EventHandler SelectedIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发选中项改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnSelectedIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItem.cs b/FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItem.cs new file mode 100644 index 0000000..e14029b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItem.cs @@ -0,0 +1,154 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ListItem.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Collections; + + +namespace FineUI +{ + /// <summary> + /// 单项按钮项 + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Text")] + [Description("单项按钮项")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class RadioItem + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public RadioItem() + { + + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + public RadioItem(string text, string value) + { + Text = text; + Value = value; + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <param name="selected">是否选中</param> + public RadioItem(string text, string value, bool selected) + { + Text = text; + Value = value; + Selected = selected; + } + + #endregion + + #region Properties + + private bool _selected = false; + /// <summary> + /// 是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("是否选中")] + [DefaultValue(false)] + [NotifyParentProperty(true)] + public bool Selected + { + get + { + return _selected; + } + set + { + _selected = value; + } + } + + private string _text = String.Empty; + /// <summary> + /// 显示的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示的文本")] + [NotifyParentProperty(true)] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + private string _value = String.Empty; + /// <summary> + /// 值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("值")] + [NotifyParentProperty(true)] + public string Value + { + get + { + return _value; + } + set + { + _value = value; + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItemCollection.cs b/FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItemCollection.cs new file mode 100644 index 0000000..e288725 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.RadioButtonList/RadioItem/RadioItemCollection.cs @@ -0,0 +1,119 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: RadioItemCollection.cs + * CreatedOn: 2010-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 单选项集合 + /// </summary> + public class RadioItemCollection : Collection<RadioItem> + { + /// <summary> + /// 通过文本查找单选项 + /// </summary> + /// <param name="text">文本</param> + /// <returns>单选项</returns> + public RadioItem FindByText(string text) + { + return FindByText(text, false); + } + + /// <summary> + /// 通过文本查找单选项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="stripHtml">是否去除HTML标签</param> + /// <returns>单选项</returns> + public RadioItem FindByText(string text, bool stripHtml) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + RadioItem item = enumerator.Current as RadioItem; + + if (item != null) + { + string itemText = item.Text; + if (stripHtml) + { + itemText = StringUtil.StripHtml(itemText); + } + if (itemText == text) + { + return item; + } + } + } + + return null; + } + + + /// <summary> + /// 通过值查找单选项 + /// </summary> + /// <param name="value">值</param> + /// <returns>单选项</returns> + public RadioItem FindByValue(string value) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + RadioItem item = enumerator.Current as RadioItem; + + if (item != null && item.Value == value) + { + return item; + } + } + + return null; + } + + + /// <summary> + /// 添加单选项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <returns>新元素的插入位置</returns> + public int Add(string text, string value) + { + RadioItem item = new RadioItem(text, value); + + return ((IList)this).Add(item); + } + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/DropDownList.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/DropDownList.cs new file mode 100644 index 0000000..6aea314 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/DropDownList.cs @@ -0,0 +1,2021 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: DropDownList.cs + * CreatedOn: 2008-04-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Collections; +using System.Data; +using System.Reflection; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// <summary> + /// 下拉列表控件 + /// </summary> + [Designer("FineUI.Design.DropDownListDesigner, FineUI.Design")] + [ToolboxData("<{0}:DropDownList Label=\"Label\" runat=\"server\"></{0}:DropDownList>")] + [ToolboxBitmap(typeof(DropDownList), "toolbox.DropDownList.bmp")] + [Description("下拉列表控件")] + [ParseChildren(true, DefaultProperty = "Items")] + [PersistChildren(false)] + [DefaultEvent("SelectedIndexChanged")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class DropDownList : TextField, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public DropDownList() + { + AddServerAjaxProperties("F_Items"); + // 注意,不要添加 SelectedValue,否则在启用多选时,回发 SelectedValue 值可能会覆盖 SelectedValueArray 的值 + AddClientAjaxProperties("SelectedValueArray", "Text"); + + //AddGzippedAjaxProperties("F_Items"); + } + + #endregion + + #region SelectedIndex/SelectedValue/SelectedItem + + + /// <summary> + /// 文本框为空时显示的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("文本框为空时显示的文本")] + public virtual string EmptyText + { + get + { + object obj = FState["EmptyText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["EmptyText"] = value; + } + } + + + /// <summary> + /// [AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]用户输入的文本(只有在允许编辑和不强制选择的情况下才有效)")] + public string Text + { + get + { + object obj = FState["Text"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Text"] = value; + } + } + + + /// <summary> + /// [AJAX属性]选中项的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的值")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string SelectedValue + { + get + { + string value = null; + if (SelectedItem == null) + { + /* + // 如果强制选择一项,我们可能需要选中第一项 + if (AutoSelectFirstItem) + { + if (Items.Count > 0) + { + SelectedIndex = 0; + // If SelectedValue is null, then we select the first item of the list. + value = Items[0].Value; + } + } + */ + } + else + { + value = SelectedItem.Value; + } + return value; + } + set + { + foreach (ListItem item2 in Items) + { + item2.Selected = false; + } + + if (value != null) + { + ListItem item = Items.FindByValue(value); + if (item != null) + { + item.Selected = true; + } + } + } + } + + /// <summary> + /// [AJAX属性]选中项的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的索引")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int SelectedIndex + { + get + { + //if (!Page.IsPostBack) + //{ + // // 获取参数前先尝试修正数据 + // ProcessAutoSelectFirstItem(); + //} + + + int selectedIndex = -1; + for (int i = 0, count = Items.Count; i < count; i++) + { + if (Items[i].Selected) + { + selectedIndex = i; + break; + } + } + + //// 自动修正(仅在页面第一次加载时有效) + //if (selectedIndex == -1 && AutoSelectFirstItem && !Page.IsPostBack && Items.Count > 0) + //{ + // selectedIndex = 0; + //} + // 自动修正(仅在页面第一次加载时有效),但是不改变Items属性 + if (selectedIndex == -1 && AutoSelectFirstItem && !Page.IsPostBack && Items.Count > 0) + { + selectedIndex = 0; + } + + return selectedIndex; + } + set + { + if (value >= 0 && value < Items.Count) + { + foreach (ListItem item in Items) + { + item.Selected = false; + } + + Items[value].Selected = true; + } + } + } + + /// <summary> + /// 选中项的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项的文本")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string SelectedText + { + get + { + if (SelectedItem != null) + { + return SelectedItem.Text; + } + return null; + } + } + + /// <summary> + /// 选中项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public ListItem SelectedItem + { + get + { + int selectedIndex = SelectedIndex; + if (selectedIndex >= 0 && selectedIndex < Items.Count) + { + return Items[selectedIndex]; + } + return null; + } + } + + #endregion + + #region SelectedIndexArray/SelectedValueArray/SelectedItemArray + + /// <summary> + /// [AJAX属性]选中项的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的值")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string[] SelectedValueArray + { + get + { + //if (!Page.IsPostBack) + //{ + // // 获取参数前先尝试修正数据 + // ProcessAutoSelectFirstItem(); + //} + + List<string> selectedValues = new List<string>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + ListItem item = Items[i]; + if (item.Selected) + { + selectedValues.Add(item.Value); + } + } + + /* + // 如果强制选择一项,我们可能需要选中第一项 + if (selectedValues.Count == 0 && AutoSelectFirstItem) + { + if (Items.Count > 0) + { + SelectedIndex = 0; + selectedValues.Add(Items[0].Value); + } + } + */ + // 自动修正(仅在页面第一次加载时有效),但是不改变Items属性 + // Page == null 说明此下拉列表尚未添加到页面 + if (selectedValues.Count == 0 && AutoSelectFirstItem && Items.Count > 0 && (Page == null || !Page.IsPostBack)) + { + selectedValues.Add(Items[0].Value); + } + + return selectedValues.ToArray(); + } + set + { + List<string> selectedValues = new List<string>(value); + for (int i = 0, count = Items.Count; i < count; i++) + { + ListItem item = Items[i]; + if (selectedValues.Contains(item.Value)) + { + item.Selected = true; + } + else + { + item.Selected = false; + } + } + } + } + + + /// <summary> + /// [AJAX属性]选中项的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中项的索引")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int[] SelectedIndexArray + { + get + { + //if (!Page.IsPostBack) + //{ + // // 获取参数前先尝试修正数据 + // ProcessAutoSelectFirstItem(); + //} + + List<int> selectedIndexs = new List<int>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + if (Items[i].Selected) + { + selectedIndexs.Add(i); + } + } + + // 自动修正(仅在页面第一次加载时有效),但是不改变Items属性 + if (selectedIndexs.Count == 0 && AutoSelectFirstItem && !Page.IsPostBack && Items.Count > 0) + { + selectedIndexs.Add(0); + } + + return selectedIndexs.ToArray(); + } + set + { + List<int> selectedIndexs = new List<int>(value); + for (int i = 0, count = Items.Count; i < count; i++) + { + if (selectedIndexs.Contains(i)) + { + Items[i].Selected = true; + } + else + { + Items[i].Selected = false; + } + } + } + } + + /// <summary> + /// 选中项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("选中项")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public ListItem[] SelectedItemArray + { + get + { + //if (!Page.IsPostBack) + //{ + // // 获取参数前先尝试修正数据 + // ProcessAutoSelectFirstItem(); + //} + + List<ListItem> selectedItems = new List<ListItem>(); + for (int i = 0, count = Items.Count; i < count; i++) + { + ListItem item = Items[i]; + if (item.Selected) + { + selectedItems.Add(item); + } + } + + // 自动修正(仅在页面第一次加载时有效),但是不改变Items属性 + if (selectedItems.Count == 0 && AutoSelectFirstItem && !Page.IsPostBack && Items.Count > 0) + { + selectedItems.Add(Items[0]); + } + + return selectedItems.ToArray(); + } + } + + #endregion + + #region Properties + + /// <summary> + /// 下拉列表和字段的宽度相匹配 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("下拉列表和字段的宽度相匹配")] + public bool MatchFieldWidth + { + get + { + object obj = FState["MatchFieldWidth"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["MatchFieldWidth"] = value; + } + } + + + + + /// <summary> + /// 如果未定义选中项,则自动选中第一个子项(默认为true) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("如果未定义选中项,则自动选中第一个子项(默认为true)")] + public bool AutoSelectFirstItem + { + get + { + object obj = FState["AutoSelectFirstItem"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["AutoSelectFirstItem"] = value; + } + } + + + /// <summary> + /// 是否可以选择多项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以选择多项")] + public bool EnableMultiSelect + { + get + { + object obj = FState["EnableMultiSelect"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableMultiSelect"] = value; + } + } + + + private const string MULTISELECT_SEPARATOR_DEFAULT = ", "; + + /// <summary> + /// 选择多项的分隔符 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(string), MULTISELECT_SEPARATOR_DEFAULT)] + [Description("选择多项的分隔符")] + public string MultiSelectSeparator + { + get + { + object obj = FState["MultiSelectSeparator"]; + return obj == null ? MULTISELECT_SEPARATOR_DEFAULT : (string)obj; + } + set + { + FState["MultiSelectSeparator"] = value; + } + } + + + /// <summary> + /// 是否强制选中下拉列表中的项(启用编辑的情况下) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否强制选中下拉列表中的项(启用编辑的情况下)")] + public bool ForceSelection + { + get + { + object obj = FState["ForceSelection"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ForceSelection"] = value; + } + } + + + /// <summary> + /// 是否可编辑,以便在录入时自动过滤下拉框中的值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可编辑,以便在录入时自动过滤下拉框中的值")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + + /// <summary> + /// 是否启用模拟树显示 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否启用模拟树显示")] + public bool EnableSimulateTree + { + get + { + object obj = FState["EnableSimulateTree"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableSimulateTree"] = value; + } + } + + /// <summary> + /// 模拟树显示时指示所在层次的数据字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("模拟树显示时指示所在层次的数据字段")] + public string DataSimulateTreeLevelField + { + get + { + object obj = FState["DataSimulateTreeLevelField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataSimulateTreeLevelField"] = value; + //// 如果设置了DataSimulateTreeLevelField,则设置EnableSimulateTree=true + //if (!String.IsNullOrEmpty(value)) + //{ + // EnableSimulateTree = true; + //} + } + } + + /// <summary> + /// 是否可选择的字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("是否可选择的字段")] + public string DataEnableSelectField + { + get + { + object obj = FState["DataEnableSelectField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataEnableSelectField"] = value; + } + } + + /// <summary> + /// 是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + + ///// <summary> + ///// 是否可以改变下拉列表的宽度 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否可以改变下拉列表的宽度")] + //public bool Resizable + //{ + // get + // { + // object obj = FState["Resizable"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Resizable"] = value; + // } + //} + + #region old code + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("文本框为空时显示的文本")] + //public string EmptyText + //{ + // get + // { + // object obj = BoxState["EmptyText"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // BoxState["EmptyText"] = value; + // } + //} + + //private bool Traditional_Default = true; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("是否渲染为传统的下拉列表")] + //public bool Traditional + //{ + // get + // { + // object obj = BoxState["Editable"]; + // return obj == null ? Traditional_Default : (bool)obj; + // } + // set + // { + // BoxState["Editable"] = value; + // } + //} + + //private bool TypeAhead_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否提前输入")] + //public bool TypeAhead + //{ + // get + // { + // object obj = BoxState["TypeAhead"]; + // return obj == null ? TypeAhead_Default : (bool)obj; + // } + // set + // { + // BoxState["TypeAhead"] = value; + // } + //} + + + //private bool EnableFirstItem_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用“全部”项")] + //public bool EnableFirstItem + //{ + // get + // { + // object obj = BoxState["EnableFirstItem"]; + // return obj == null ? EnableFirstItem_Default : (bool)obj; + // } + // set + // { + // BoxState["EnableFirstItem"] = value; + // } + //} + + //private string FirstItemText_Default = "全部"; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("全部")] + //[Description("“全部”的名称")] + //public string FirstItemText + //{ + // get + // { + // object obj = BoxState["FirstItemText"]; + // return obj == null ? FirstItemText_Default : (string)obj; + // } + // set + // { + // BoxState["FirstItemText"] = value; + // } + //} + + //private string FirstItemValue_Default = "-1"; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("-1")] + //[Description("“全部”的值")] + //public string FirstItemValue + //{ + // get + // { + // object obj = BoxState["FirstItemValue"]; + // return obj == null ? FirstItemValue_Default : (string)obj; + // } + // set + // { + // BoxState["FirstItemValue"] = value; + // } + //} + + #endregion + + #endregion + + #region Data Properties + + /// <summary> + /// 显示文本字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本字段")] + public string DataTextField + { + get + { + object obj = FState["DataTextField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextField"] = value; + } + } + + + /// <summary> + /// 显示文本的格式化字符串 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示文本的格式化字符串")] + public string DataTextFormatString + { + get + { + object obj = FState["DataTextFormatString"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataTextFormatString"] = value; + } + } + + /// <summary> + /// 显示值字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示值字段")] + public string DataValueField + { + get + { + object obj = FState["DataValueField"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["DataValueField"] = value; + } + } + + private object _dataSource; + + /// <summary> + /// 数据源 + /// </summary> + [DefaultValue(null)] + [Description("数据源")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + #endregion + + #region X Properties + + /// <summary> + /// 保存的列表项数据(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JArray F_Items + { + get + { + JArray ja = new JArray(); + foreach (ListItem item in Items) + { + JArray ja2 = new JArray(); + ja2.Add(item.Value); + ja2.Add(item.Text); + ja2.Add(item.EnableSelect ? 1 : 0); + if (EnableSimulateTree) + { + ja2.Add(item.SimulateTreeLevel); + } + ja.Add(ja2); + } + return ja; + } + set + { + // 由于SelectedValue是单独保存的,所以在清空之前的数据之前要先备份 + string selectedValue = SelectedValue; + Items.Clear(); + + foreach (JArray ja2 in value) + { + ListItem item = new ListItem(); + item.Value = ja2[0].Value<string>(); // ja2.getString(0); + item.Text = ja2[1].Value<string>(); //ja2.getString(1); + item.EnableSelect = ja2[2].Value<int>() == 1 ? true : false; + if (EnableSimulateTree) + { + item.SimulateTreeLevel = ja2[3].Value<int>(); + } + Items.Add(item); + } + + // 恢复选中项 + SelectedValue = selectedValue; + } + } + + #endregion + + #region Items + + private ListItemCollection items; + + /// <summary> + /// 列表项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ListItemCollection Items + { + get + { + if (items == null) + { + items = new ListItemCollection(); + } + return items; + } + } + #endregion + + #region LoadFState/SaveFState + //private string lastSelectedValue = null; + //protected override void LoadFState(JObject state, string property) + //{ + // base.LoadFState(state, property); + + // if (property == "F_Items") + // { + // XItemsFromJSON(state.getJArray(property)); + // // After recover Items property, we should recover SelectedValue according to Items. + // SelectedValue = lastSelectedValue; + // } + // else if (property == "X_SelectedValue") + // { + // lastSelectedValue = state.getString(property); + // SaveXProperty("X_SelectedValue", lastSelectedValue); + // SelectedValue = lastSelectedValue; + // } + //} + + //protected override void OnInit(EventArgs e) + //{ + // base.OnInit(e); + + // SaveXProperty("F_Items", XItemsToJSON().ToString()); + // SaveXProperty("X_SelectedValue", SelectedValue); + //} + + //protected override void OnBothPreRender() + //{ + // base.OnBothPreRender(); + + // // Items has been changed in server-side code after onInit. + // if (XPropertyModified("F_Items", XItemsToJSON().ToString())) + // { + // FState.AddModifiedProperty("F_Items"); + // // If Items have been changed, then we must reset the SelectedValue. + // FState.AddModifiedProperty("X_SelectedValue"); + // } + + // if (XPropertyModified("X_SelectedValue", SelectedValue)) + // { + // FState.AddModifiedProperty("X_SelectedValue"); + // } + + //} + + //protected override void SaveFState(JObject state, string property) + //{ + // if (property == "F_Items") + // { + // state.put(property, XItemsToJSON()); + // } + // else if (property == "X_SelectedValue") + // { + // state.put(property, SelectedValue); + // } + //} + + //private JArray XItemsToJSON() + //{ + // JArray ja = new JArray(); + // foreach (ListItem item in Items) + // { + // JArray ja2 = new JArray(); + // ja2.Add(item.Value); + // ja2.Add(item.Text); + // ja2.Add(item.EnableSelect ? 1 : 0); + // if (EnableSimulateTree) + // { + // ja2.Add(item.SimulateTreeLevel); + // } + // ja.Add(ja2); + // } + // return ja; + //} + + //private void XItemsFromJSON(JArray ja) + //{ + // foreach (JArray ja2 in ja.getArrayList()) + // { + // ListItem item = new ListItem(); + // item.Value = ja2.getString(0); + // item.Text = ja2.getString(1); + // item.EnableSelect = ja2.getInt(2) == 1 ? true : false; + // if (EnableSimulateTree) + // { + // item.SimulateTreeLevel = ja2.getInt(3); + // } + // Items.Add(item); + // } + //} + + #endregion + + #region SelectedValueHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedValueHiddenFieldID + { + get + { + return String.Format("{0}$Value", UniqueID); + } + } + + #endregion + + #region OnPreRender + + private string Render_AutoPostBackID + { + get + { + return String.Format("{0}_autopostback", XID); + } + } + + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + bool dataReloaded = false; + if (PropertyModified("F_Items")) + { + dataReloaded = true; + sb.AppendFormat("{0}.f_loadData();", XID); + } + + bool selectedValueChanged = false; + if (PropertyModified("SelectedValueArray")) + { + selectedValueChanged = true; + } + //bool selectedValueChanged = false; + //if (EnableMultiSelect) + //{ + // if (PropertyModified("SelectedValueArray")) + // { + // selectedValueChanged = true; + // } + //} + //else + //{ + // if (PropertyModified("SelectedValue")) + // { + // selectedValueChanged = true; + // } + //} + + // 修改Items记录后要更新SelectedValue + if (dataReloaded || selectedValueChanged) + { + sb.AppendFormat("{0}.f_setValue();", XID); + } + + AddAjaxScript(sb); + } + + private void ProcessAutoSelectFirstItem() + { + //// 如果强制选择一项,我们可能需要选中第一项 + //if (SelectedItem == null && AutoSelectFirstItem) + //{ + // if (Items.Count > 0) + // { + // SelectedIndex = 0; + // } + //} + + // 自动修正 + if (AutoSelectFirstItem && Items.Count > 0) + { + bool hasSelection = false; + foreach (ListItem item in Items) + { + if (item.Selected) + { + hasSelection = true; + break; + } + } + + // 没有选中任何一项,则选中第一项 + if (!hasSelection) + { + Items[0].Selected = true; + } + } + } + + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + ProcessAutoSelectFirstItem(); + + // 确保 F_Items 和 SelectedValue 在页面第一次加载时都存在于f_state中 + FState.AddModifiedProperty("F_Items"); + //FState.AddModifiedProperty("SelectedValue"); + FState.AddModifiedProperty("SelectedValueArray"); + + base.OnFirstPreRender(); + + + #region examples + + //var nextStepList = [ + // ['审核', '1'], + // ['不审核', '2'] + //]; + //var nextStepStore = new Ext.data.SimpleStore({ + // fields: ['text', 'value'], + // data: nextStepList + //}); + //{ + // xtype:'combo', + // store: nextStepStore, + // displayField:'text', + // valueField:'value', + // typeAhead: true, + // mode: 'local', + // triggerAction: 'all', + // value:'1', + // emptyText:'请选择下一步', + // selectOnFocus:true, + // allowBlank:false, + // fieldLabel: '下一步', + // labelSeparator:' <span style="color:red;vertical-align:text-bottom;">*</span>', + // name: 'nextStep', + // anchor:'95%' + //} + + #endregion + + + + #region Properties + + // 从任意位置匹配 + OB.AddProperty("anyMatch", true); + + if (!MatchFieldWidth) + { + OB.AddProperty("matchFieldWidth", false); + } + + + if (EnableEdit) + { + OB.AddProperty("editable", true); + } + else + { + OB.AddProperty("editable", false); + } + + + if (ForceSelection) + { + OB.AddProperty("forceSelection", true); + } + else + { + OB.AddProperty("forceSelection", false); + } + + //if (Resizable) + //{ + // OB.AddProperty("resizable", true); + //} + + OB.AddProperty("hiddenName", SelectedValueHiddenFieldID); + + + if (!String.IsNullOrEmpty(EmptyText)) + { + OB.AddProperty("emptyText", EmptyText); + } + + + + JsObjectBuilder storeBuilder = new JsObjectBuilder(); + storeBuilder.AddProperty("fields", "['value','text','enabled','prefix']", true); + storeBuilder.AddProperty("data", String.Format("F.simulateTree.transform({0}.F_Items)", GetFStateScriptID()), true); + OB.AddProperty("store", String.Format("F.create('Ext.data.ArrayStore',{0})", storeBuilder), true); + + //OB.AddProperty("value", String.Format("{0}.{1}", GetFStateScriptID(), EnableMultiSelect ? "SelectedValueArray" : "SelectedValue"), true); + if (EnableMultiSelect) + { + OB.AddProperty("value", String.Format("{0}.SelectedValueArray", GetFStateScriptID()), true); + } + else + { + // 单选 + if (SelectedValue != null) + { + OB.AddProperty("value", String.Format("{0}.SelectedValueArray[0]", GetFStateScriptID()), true); + } + } + + OB.AddProperty("tpl", "F.util.ddlTPL", true); + + OB.AddProperty("queryMode", "local"); + OB.AddProperty("triggerAction", "all"); + + if (EnableMultiSelect) + { + OB.AddProperty("multiSelect", true); + + + if (MultiSelectSeparator != MULTISELECT_SEPARATOR_DEFAULT) + { + OB.AddProperty("delimiter", MultiSelectSeparator); + } + + } + + + + + + #region old code + //OB.AddProperty("mode", "local"); + //// 点击下拉按钮时显示全部内容 + //OB.AddProperty("triggerAction", "all"); + //// 必须选中一个值,不能自己输入内容 + //OB.AddProperty("forceSelection", true); + //// 此下拉列表控件不可以编辑 + //OB.AddProperty("editable", false); + + //OB.AddProperty(OptionName.Title, "Title"); + //if (TypeAhead) OB.AddProperty(OptionName.TypeAhead, true); + //OB.AddProperty(OptionName.SelectOnFocus, true); + + //// SelectedValue可以为空 + //if (!String.IsNullOrEmpty(SelectedValue)) + //{ + // OB.AddProperty("value", SelectedValue); + //} + #endregion + + #endregion + + #region old code + + //string hiddenFieldsScript = String.Empty; + //if (AutoPostBack) + //{ + // hiddenFieldsScript += GetSetHiddenFieldValueScript(LastSelectedValueHiddenID, SelectedValue); + //} + + //string disableSelectRowIndexsString = GetDisableSelectRowIndexsString(); + //string disableSelectRowIndexsScript = GetSetHiddenFieldValueScript(DisableRowIndexsHiddenID, disableSelectRowIndexsString); + + //// TODO: + //// 这个要放在加载数据的前面,因为加载数据时需要渲染UI,渲染UI时需要用到这个隐藏字段的值 + //if (AjaxPropertyChanged("DisableSelectRowIndexsString", disableSelectRowIndexsString)) + //{ + // AddAjaxPropertyChangedScript(disableSelectRowIndexsScript); + //} + + + // 不管是不是disableSelectFields.Count > 0,都要执行下面的语句,因为可能页面加载时为0,在Ajax后不为零 + //if (disableSelectFields.Count > 0) + //OB.AddProperty(OptionName.Tpl, String.Format("'<tpl for=\".\"><div class=\"x-combo-list-item {{[F.util.isHiddenFieldContains(\"{0}\",xindex-1) ? \"f-combo-list-item-disable-select\" : \"\"]}}\">{{text}}</div></tpl>'", DisableSelectRowIndexsHiddenID), true); + //var tplStr = "'<tpl for=\".\"><div class=\"x-combo-list-item\">{text}</div></tpl>'"; + //var tplStr = "new Ext.XTemplate('<tpl for=\".\"><div class=\"x-combo-list-item\">{text}</div></tpl>')"; + + //var tplStr = "<tpl for=\".\"><div class=\"x-combo-list-item <tpl if=\"!enabled\">x-combo-list-item-disable</tpl>\">{prefix}{text}</div></tpl>"; + //OB.AddProperty("tpl", tplStr); + //OB.AddProperty("tpl", tplStr.Replace("#DisableRowIndexsHiddenID#", DisableRowIndexsHiddenID), true); + + + //string setSimulateTreeTextFunctionScript = String.Empty; + //string setSimulateTreeTextScript = String.Empty; + //if (EnableSimulateTree) + //{ + // string setSimulateTextScript = String.Format("var text=Ext.get('{0}').dom.value;if(text.lastIndexOf('<img')>=0){{Ext.get('{0}').dom.value=F.util.stripHtmlTags(text);}}", ClientID); + // setSimulateTreeTextFunctionScript = String.Format("{0}_setSimulateText=function(){{{1}}};", ClientJavascriptID, setSimulateTextScript); + + // // 加载完毕后,显示选中的值 + // //AddAbsoluteStartupScript(String.Format("{0}_setSimulateText();", ClientJavascriptID)); + // // 下拉列表加载完毕后,立即去掉前面图片的HTML标签 + // string renderScript = JsHelper.GetDeferScript(String.Format("{0}_setSimulateText();", ClientJavascriptID), 20); // "(function(){" + String.Format("{0}_setSimulateText();", ClientJavascriptID) + "}).defer(20);"; + // OB.Listeners.AddProperty(OptionName.EVENT_RENDER, "function(component){" + renderScript + "}", true); + //} + + + //string simulateTreeAllScript = String.Empty; + //if (EnableSimulateTree) + //{ + // // 在选中一项后,立即去掉前面图片的HTML标签 + // simulateTreeAllScript += "\r\n"; + // //string simulateTreeScript = String.Format("function(ddl,record,index){{var text=record.data.text;var startDivIndex=text.lastIndexOf('</div>');text=text.substr(startDivIndex+6);Ext.get('{0}').dom.value=text;}}", ClientID); + // string simulateTreeScript = String.Format("function(ddl,record,index){{X.{0}_setSimulateText();}}", ClientJavascriptID); + // simulateTreeScript = String.Format("{0}.on('{1}',{2},box,{{delay:0}});", ClientJavascriptID, OptionName.Select, simulateTreeScript); + // //AddAbsoluteStartupScript( simulateTreeScript); + // simulateTreeAllScript += simulateTreeScript; + + // simulateTreeAllScript += "\r\n"; + // string simulateTreeBlurScript = String.Format("function(ddl){{X.{0}_setSimulateText();}}", ClientJavascriptID); + // simulateTreeBlurScript = String.Format("{0}.on('{1}',{2},box,{{delay:10}});", ClientJavascriptID, OptionName.Blur, simulateTreeBlurScript); + // //AddAbsoluteStartupScript( simulateTreeBlurScript); + // simulateTreeAllScript += simulateTreeBlurScript; + //} + + + + + // These are default values, which are assignment in extender.js. + //OB.AddProperty("displayField", "text"); + //OB.AddProperty("valueField", "value"); + //OB.AddProperty("store", "new Ext.data.ArrayStore({fields:['value','text','enabled','prefix']})", true); + + //string dataScript = String.Empty; + //string fields = "['value','text','enabled','prefix']"; + //string storeScript = "new Ext.data.ArrayStore({fields:['value','text','enabled','prefix']})";//", fields, GetDataArrayString()); // GetDataArrayString() + + //OB.AddProperty(OptionName.Store, String.Format("new Ext.data.ArrayStore({{fields:['value','text'],data:{0}}})", dataArrayString), true); + //OB.AddProperty("store", String.Format("{0}_data", XID), true); + //string dataScript = String.Format("{0}_data=new Ext.data.ArrayStore({{fields:['value','text'],data:{1}}});", ClientJavascriptID, dataArrayString); + //sb.AppendFormat("this.{0}_store=new Ext.data.SimpleStore({{fields:['text', 'value'],data:this.{0}_data}});", ClientJavascriptID); + #endregion + + #region AutoPostBack + + string autoPostBackScript = String.Empty; + + if (AutoPostBack) + { + autoPostBackScript = String.Format("var {0}={1};", Render_AutoPostBackID, JsHelper.GetFunction("if(cmp.f_tmp_lastvalue!==cmp.getValue()){" + GetPostBackEventReference() + "}", "cmp")); + } + StringBuilder beforeselectSB = new StringBuilder(); + // 是否能选中一项(如果此项不能选中,则点击没用) + //beforeselectSB.AppendFormat("if(F.util.isHiddenFieldContains('{0}',index)){{return false;}}", DisableRowIndexsHiddenID); + beforeselectSB.Append("if(!record.data.enabled){return false;}"); + + if (AutoPostBack) + { + beforeselectSB.Append("cmp.f_tmp_lastvalue=cmp.getValue();"); + + //string selectScript = "if(cmp.f_tmp_lastvalue!==cmp.getValue()){" + GetPostBackEventReference() + "}"; + beforeselectSB.AppendFormat("window.setTimeout(function(){{{0}(cmp);}},100);", Render_AutoPostBackID); + //AddListener("select", selectScript, "cmp"); + } + + AddListener("beforeselect", beforeselectSB.ToString(), "cmp", "record", "index"); + + //if (EnableMultiSelect) + //{ + // StringBuilder beforedeselectSB = new StringBuilder(); + // beforedeselectSB.AppendFormat("window.setTimeout(function(){{{0}(cmp);}},100);", Render_AutoPostBackID); + // AddListener("beforedeselect", beforedeselectSB.ToString(), "cmp", "record", "index"); + //} + + #region old code + //if (AutoPostBack) + //{ + // // Note: we can't use change event, because it get triggered when the combox lost focus, which is not in time. + // // Beforeselect - If current select item is not changed, don't PostBack. + // string beforeselectScript = String.Format("function(ddl,record,index){{Ext.get('{0}').dom.value=Ext.get('{1}').dom.value;}}", LastSelectedValueHiddenID, SelectedValueHiddenID); + // beforeselectScript = String.Format("{0}.on('{1}',{2},X,{{delay:0}});", XID, "beforeselect", beforeselectScript); + // //AddAbsoluteStartupScript( beforeselectScript); + // autoPostBackScript += beforeselectScript; + + // // Select + // string selectScript = String.Format("function(ddl,record,index){{if(record.data.value!=Ext.get('{0}').dom.value){{{1}}}}}", LastSelectedValueHiddenID, GetPostBackEventReference()); + // selectScript = String.Format("{0}.on('{1}',{2},X,{{delay:0}});", XID, "select", selectScript); + // //AddAbsoluteStartupScript( selectScript); + // autoPostBackScript += selectScript; + + + // //OB.Listeners.RemoveProperty(OptionName.Change); + // //OB.Listeners.AddProperty(OptionName.Change, String.Format("function(ddl,newValue,oldValue){{box_pageStateChange();alert(newValue+':'+oldValue);}}"), true); + //} + #endregion + + #endregion + + #region Listeners - render + + //string renderScript = "cmp.f_loadData();cmp.f_setValue();"; + + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript, "cmp"), true); + + string renderScript = String.Empty; + if (!MatchFieldWidth) + { + renderScript = String.Format("cmp.getPicker().addCls('f-field-ddlpop-autowidth')"); + } + + if (!String.IsNullOrEmpty(renderScript)) + { + AddListener("render", renderScript, "cmp"); + } + + #endregion + + #region AddStartupScript + + string contentScript = String.Format("var {0}=F.create('Ext.form.field.ComboBox',{1});", XID, OB.ToString()); + + AddStartupScript(autoPostBackScript + contentScript); + + #region old code + //List<string> totalModifiedProperties = FState.GetTotalModifiedProperties(); + //StringBuilder loadDataSB = new StringBuilder(); + //if (totalModifiedProperties.Contains("F_Items")) + //{ + // loadDataSB.AppendFormat("{0}.f_loadData();", XID); + //} + //else + //{ + // loadDataSB.AppendFormat("{0}.store.loadData({1});", XID, F_Items.ToString()); + //} + + //if (totalModifiedProperties.Contains("SelectedValue")) + //{ + // loadDataSB.AppendFormat("{0}.f_setValue();", XID); + //} + //else + //{ + // loadDataSB.AppendFormat("{0}.f_setValue({1});", XID, JsHelper.Enquote(SelectedValue)); + //} + #endregion + + #endregion + + } + + #region old code + + //private string GetDataArrayString() + //{ + // if (Items.Count == 0) + // { + // return "[[]]"; + // } + // else + // { + // if (EnableSimulateTree) + // { + // List<SimulateTreeNode> silumateTreeNodes = new List<SimulateTreeNode>(); + // // Set up a list for calculate(mainly the front images). + // for (int rowIndex = 0; rowIndex < Items.Count; rowIndex++) + // { + // ListItem item = Items[rowIndex]; + // SimulateTreeNode node = new SimulateTreeNode(); + // node.Text = item.Text; + // node.Value = item.Value; + // node.Level = item.SimulateTreeLevel; + // node.EnableSelect = item.EnableSelect; + // node.HasLittleBrother = false; + // node.ParentNode = null; + // silumateTreeNodes.Add(node); + // } + // // Use a helper class to calculate tree. + // SimulateTreeHeper treeHelper = new SimulateTreeHeper(); + // treeHelper.ResolveSimulateTree(silumateTreeNodes, false); + + + // JArray ja = new JArray(); + // foreach (SimulateTreeNode node in silumateTreeNodes) + // { + // JArray ja2 = new JArray(); + // ja2.Add(node.Value); + // ja2.Add(node.Text); + // ja2.Add(node.EnableSelect ? 1 : 0); + // ja2.Add(node.SimulateTreeText); + + // ja.Add(ja2); + // } + // return ja.ToString(); + // } + // else + // { + // JArray ja = new JArray(); + // foreach (ListItem item in Items) + // { + // JArray ja2 = new JArray(); + // ja2.Add(item.Value); + // ja2.Add(item.Text); + // ja2.Add(item.EnableSelect ? 1 : 0); + + // ja.Add(ja2); + // } + // return ja.ToString(); + // } + // } + //} + + ///// <summary> + ///// Return values: "0,1,2,10" + ///// </summary> + ///// <returns></returns> + //private string GetDisableSelectRowIndexsString() + //{ + // List<int> disableSelectRows = new List<int>(); + // for (int rowIndex = 0, rowCount = Items.Count; rowIndex < rowCount; rowIndex++) + // { + // if (!Items[rowIndex].EnableSelect) + // { + // disableSelectRows.Add(rowIndex); + // } + // } + + // #region old code + // // 下面的条件判断不能加,因为如果页面第一次加载时没有不能选择的项,则以后回发时都不会有不能选择的项 + // //if (disableSelectFields.Count > 0) + // //{ + // // 把这个状态保存在隐藏字段中,因为可能在Ajax中改变 + // //disableSelectScript = String.Format("{0}_disableSelect={1};", ClientJavascriptID, JsHelper.GetJsIntArray(disableSelectFields.ToArray())); + // //disableSelectScript += "\r\n"; + // #endregion + // return StringUtil.GetStringFromIntArray(disableSelectRows.ToArray()); + //} + + + #endregion + + #endregion + + #region DataBind + /// <summary> + /// 绑定到数据源 + /// </summary> + public override void DataBind() + { + // Clear all items + Items.Clear(); + + if (_dataSource != null) + { + if (_dataSource is IDataReader) + { + DataTable dataTable = new DataTable(); + dataTable.Load(_dataSource as IDataReader); + + DataBindToDataTable(dataTable); + } + else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) + { + DataTable dataTable = null; + + if (_dataSource is DataView) + { + dataTable = ((DataView)_dataSource).ToTable(); + } + else if (_dataSource is DataSet) + { + dataTable = ((DataSet)_dataSource).Tables[0]; + } + else + { + dataTable = ((DataTable)_dataSource); + } + + DataBindToDataTable(dataTable); + } + else if (_dataSource is IEnumerable) + { + DataBindToEnumerable((IEnumerable)_dataSource); + } + else + { + throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); + } + } + + //// 重新绑定数据后,判断是否自动选择第一项 + //ProcessAutoSelectFirstItem(); + + base.DataBind(); + } + + #endregion + + #region private DataBind + + + /// <summary> + /// 绑定到数据表格 + /// </summary> + /// <param name="dataTable">数据表格</param> + private void DataBindToDataTable(DataTable dataTable) + { + int startIndex = 0; + int endIndex = Int32.MaxValue; + for (int i = startIndex; i < Math.Min(endIndex, dataTable.Rows.Count); i++) + { + DataRow row = dataTable.Rows[i]; + + Items.Add(CreateListItem(row)); + } + } + + + /// <summary> + /// 绑定到可枚举类型 + /// </summary> + /// <param name="enumerable">可枚举类型</param> + private void DataBindToEnumerable(IEnumerable enumerable) + { + #region old code + //int startIndex = 0; + //int endIndex = Int32.MaxValue; + + //IEnumerator enumerator = enumerable.GetEnumerator(); + + //// 定位开始位置 + //enumerator.Reset(); + //enumerator.MoveNext(); + + //int count = 0; + + //// skip some items? + //while (count < startIndex) + //{ + // enumerator.MoveNext(); + // count++; + //} + + //try + //{ + // if (enumerator.Current == null) + // { + // return; + // } + //} + //catch + //{ + // return; + //} + + //while (enumerator.Current != null && count < endIndex) + //{ + // object currentObject = enumerator.Current; + + // ListItem item = new ListItem(); + + // if (currentObject is string) + // { + // item.Text = currentObject.ToString(); + // item.Value = currentObject.ToString(); + // } + // else + // { + // // Load item + // if (DataTextField != "") + // { + // item.Text = GetPropertyValue(currentObject, DataTextField); + // } + // else + // { + // item.Text = currentObject.ToString(); + // } + + // if (DataValueField != "") + // { + // item.Value = GetPropertyValue(currentObject, DataValueField); + // } + // else + // { + // item.Value = currentObject.ToString(); + // } + + // // 如果需要模拟树 + // if (!String.IsNullOrEmpty(DataSimulateTreeLevelField)) + // { + // item.SimulateTreeLevel = Convert.ToInt32(GetPropertyValue(currentObject, DataSimulateTreeLevelField)); + // } + + // // 是否选择 + // item.EnableSelect = true; + // if (!String.IsNullOrEmpty(DataEnableSelectField)) + // { + // item.EnableSelect = Convert.ToBoolean(GetPropertyValue(currentObject, DataEnableSelectField)); + // } + + // } + + // Items.Add(item); + + // if (!enumerator.MoveNext()) + // { + // break; + // } + + // count++; + //} + #endregion + + IEnumerator enumerator = enumerable.GetEnumerator(); + while (enumerator.MoveNext()) + { + object currentObject = enumerator.Current; + Items.Add(CreateListItem(currentObject)); + } + } + + private ListItem CreateListItem(Object obj) + { + ListItem item = new ListItem(); + + if (obj is string) + { + item.Text = obj.ToString(); + item.Value = obj.ToString(); + } + else + { + if (DataTextField != "") + { + if (DataTextFormatString != "") + { + item.Text = String.Format(DataTextFormatString, GetPropertyValue(obj, DataTextField)); + } + else + { + item.Text = GetPropertyValue(obj, DataTextField); + } + } + else + { + item.Text = obj.ToString(); + } + + if (DataValueField != "") + { + item.Value = GetPropertyValue(obj, DataValueField); + } + else + { + item.Value = obj.ToString(); + } + + // 如果需要模拟树 + if (!String.IsNullOrEmpty(DataSimulateTreeLevelField)) + { + string treeLevelStr = GetPropertyValue(obj, DataSimulateTreeLevelField); + if (String.IsNullOrEmpty(treeLevelStr)) + { + item.SimulateTreeLevel = 0; + } + else + { + item.SimulateTreeLevel = Convert.ToInt32(treeLevelStr); + } + } + + // 是否可以选择 + item.EnableSelect = true; + if (!String.IsNullOrEmpty(DataEnableSelectField)) + { + item.EnableSelect = Convert.ToBoolean(GetPropertyValue(obj, DataEnableSelectField)); + } + } + return item; + } + + /// <summary> + /// 取得属性值 + /// </summary> + /// <param name="obj"></param> + /// <param name="propertyName"></param> + private string GetPropertyValue(object obj, string propertyName) + { + object result = null; + + result = ObjectUtil.GetPropertyValue(obj, propertyName); + + // DBNull.Value.ToString() == "" + return result == null ? String.Empty : result.ToString(); + } + + //private void AfterDataBind() + //{ + // //// 必须重新计算模拟数的数据 + // //mustReCalculateSimulateTreeData = true; + //} + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + // 如果下拉列表被禁用,则postText为null。由于Enabled只能在服务器端被改变,所以被禁用时,不处理回发数据即可 + if (!Enabled) + { + return false; + } + + // 如果下拉列表没有任何项,则不会触发数据改变事件 + if (Items.Count == 0) + { + return false; + } + + + string postText = postCollection[postDataKey]; + + if (EnableMultiSelect) + { + string[] postValues = postCollection.GetValues(SelectedValueHiddenFieldID); + if (postValues == null) + { + postValues = new string[0]; + } + if (!StringUtil.CompareStringArray(postValues, SelectedValueArray)) + { + SelectedValueArray = postValues; + FState.BackupPostDataProperty("SelectedValueArray"); + return true; + } + + } + else + { + string postValue = postCollection[SelectedValueHiddenFieldID]; + + ListItem item = Items.FindByValue(postValue); + if (item != null && item.Text == postText) + { + // 本次选中的是下拉项 + if (SelectedValue != postValue) + { + SelectedValue = postValue; + FState.BackupPostDataProperty("SelectedValueArray"); + return true; + } + } + else + { + //// 本次是用户输入的值 + //if (Text != postText) + //{ + SelectedValue = null; + FState.BackupPostDataProperty("SelectedValueArray"); + + Text = postText; + FState.BackupPostDataProperty("Text"); + return true; + //} + } + } + + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + OnSelectedIndexChanged(EventArgs.Empty); + } + + #endregion + + #region SelectedIndexChanged + + private object _handlerKey = new object(); + + /// <summary> + /// 选中项改变事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("选中项改变事件(需要启用AutoPostBack)")] + public event EventHandler SelectedIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发选中项改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnSelectedIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region old code + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + // states[1] = ((IStateManager)Items).SaveViewState(); + + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Items).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Items).TrackViewState(); + //} + + //protected override void SetDirty() + //{ + // base.SetDirty(); + + // ((ISetDirty)Items).SetDirty(); + //} + + + + ///// <summary> + ///// 保存上次选中值的Input + ///// </summary> + //private string LastSelectedValueHiddenID + //{ + // get + // { + // return String.Format("{0}_last_value", XID); + // } + //} + + ///// <summary> + ///// 保存当前选中值的Input + ///// </summary> + //private string SelectedValueHiddenID + //{ + // get + // { + // return UniqueID; + // } + //} + + + ///// <summary> + ///// 不可用的行Index列表 + ///// </summary> + //private string DisableRowIndexsHiddenID + //{ + // get + // { + // return String.Format("{0}_disable_rows", ClientID); + // } + //} + + + //protected override void OnPreLoad(object sender, EventArgs e) + //{ + // base.OnPreLoad(sender, e); + + // SaveAjaxProperty("DisableSelectRowIndexsString", GetDisableSelectRowIndexsString()); + // SaveAjaxProperty("DataArrayString", GetDataArrayString()); + // SaveAjaxProperty("SelectedValue", SelectedValue); + //} + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItem.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItem.cs new file mode 100644 index 0000000..73cc362 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItem.cs @@ -0,0 +1,195 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ListItem.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.Collections; + + +namespace FineUI +{ + /// <summary> + /// 列表项 + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Text")] + [Description("列表项")] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class ListItem + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public ListItem() + { + + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + public ListItem(string text, string value) + { + Text = text; + Value = value; + } + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <param name="selected">是否选中</param> + public ListItem(string text, string value, bool selected) + { + Text = text; + Value = value; + Selected = selected; + } + + #endregion + + #region Properties + + private bool _selected = false; + /// <summary> + /// 是否选中 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("是否选中")] + [DefaultValue(false)] + [NotifyParentProperty(true)] + public bool Selected + { + get + { + return _selected; + } + set + { + _selected = value; + } + } + + private string _text = String.Empty; + /// <summary> + /// 显示的文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("显示的文本")] + [NotifyParentProperty(true)] + public string Text + { + get + { + return _text; + } + set + { + _text = value; //HttpUtility.HtmlEncode(value); + } + } + + private string _value = String.Empty; + /// <summary> + /// 值 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("值")] + [NotifyParentProperty(true)] + public string Value + { + get + { + return _value; + } + set + { + _value = value; + } + } + + private bool _enableSelect = true; + /// <summary> + /// 是否可选择 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可选择")] + [NotifyParentProperty(true)] + public bool EnableSelect + { + get + { + return _enableSelect; + } + set + { + _enableSelect = value; + } + } + + private int _simulateTreeLevel = 0; + + /// <summary> + /// 模拟树的层次(从0开始为根节点) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("模拟树的层次(从0开始为根节点)")] + [NotifyParentProperty(true)] + public int SimulateTreeLevel + { + get + { + return _simulateTreeLevel; + } + set + { + _simulateTreeLevel = value; + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItemCollection.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItemCollection.cs new file mode 100644 index 0000000..296fb3b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.DropDownList/ListItem/ListItemCollection.cs @@ -0,0 +1,118 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ListItemCollection.cs + * CreatedOn: 2008-04-24 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 列表项集合 + /// </summary> + public class ListItemCollection : Collection<ListItem> + { + /// <summary> + /// 通过文本查找列表项 + /// </summary> + /// <param name="text">文本</param> + /// <returns>列表项</returns> + public ListItem FindByText(string text) + { + return FindByText(text, false); + } + + /// <summary> + /// 通过文本查找列表项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="stripHtml">是否去除HTML标签</param> + /// <returns>列表项</returns> + public ListItem FindByText(string text, bool stripHtml) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + ListItem item = enumerator.Current as ListItem; + + if (item != null) + { + string itemText = item.Text; + if (stripHtml) + { + itemText = StringUtil.StripHtml(itemText); + } + if (itemText == text) + { + return item; + } + } + } + + return null; + } + + + /// <summary> + /// 通过值查找列表项 + /// </summary> + /// <param name="value">值</param> + /// <returns>列表项</returns> + public ListItem FindByValue(string value) + { + IEnumerator enumerator = GetEnumerator(); + + while (enumerator.MoveNext()) + { + ListItem item = enumerator.Current as ListItem; + + if (item != null && item.Value == value) + { + return item; + } + } + + return null; + } + + + /// <summary> + /// 添加列表项 + /// </summary> + /// <param name="text">文本</param> + /// <param name="value">值</param> + /// <returns>新元素的插入位置</returns> + public int Add(string text, string value) + { + ListItem item = new ListItem(text, value); + + return ((IList)this).Add(item); + } + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.DatePicker/DatePicker.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.DatePicker/DatePicker.cs new file mode 100644 index 0000000..e0bb56b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.DatePicker/DatePicker.cs @@ -0,0 +1,407 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * ->2008-4-28 改名为 DatePicker + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Globalization; + +namespace FineUI +{ + /// <summary> + /// 日期选择框控件 + /// </summary> + [Designer("FineUI.Design.DatePickerDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:DatePicker Label=\"Label\" runat=\"server\"></{0}:DatePicker>")] + [ToolboxBitmap(typeof(DatePicker), "toolbox.DatePicker.bmp")] + [DefaultEvent("DateSelect")] + [Description("日期选择框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class DatePicker : RealTextField, IPostBackEventHandler + { + + #region Properties + + /// <summary> + /// 是否允许编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否允许编辑")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + /// <summary> + /// 选择的日期 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("选择的日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? SelectedDate + { + get + { + if (DesignMode) + { + object obj = FState["SelectedDate"]; + return obj == null ? null : (DateTime?)obj; + } + else + { + if (String.IsNullOrEmpty(Text)) + { + return null; + } + else + { + try + { + //return DateTime.Parse(Text); + + // OktaEndy - return null when DateFormatString = "dd/MM/yyyy" - Trying to Parse DateTime using it's DateFormatString + // http://stackoverflow.com/questions/1368636/why-cant-datetime-parseexact-parse-9-1-2009-using-m-d-yyyy + return DateTime.ParseExact(Text, DateFormatString, CultureInfo.InvariantCulture); + } + catch (Exception) + { + // Text is not valid DateTime fomat. + return null; + } + } + } + } + set + { + if (DesignMode) + { + FState["SelectedDate"] = value; + } + else + { + if (value == null) + { + Text = String.Empty; + } + else + { + Text = value.Value.ToString(DateFormatString); + } + } + } + } + + + /// <summary> + /// 启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用中文智能识别,手工输入时如果不匹配指定格式,会尝试按照下面几种格式解析:yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd")] + public bool EnableChineseAltFormats + { + get + { + object obj = FState["EnableChineseAltFormats"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableChineseAltFormats"] = value; + } + } + + + /// <summary> + /// 尝试解析日期的格式列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("尝试解析日期的格式列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] AltFormats + { + get + { + object obj = FState["AltFormats"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["AltFormats"] = value; + } + } + + /// <summary> + /// 日期格式 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("yyyy-MM-dd")] + [Description("日期格式")] + public string DateFormatString + { + get + { + object obj = FState["DateFormatString"]; + return obj == null ? "yyyy-MM-dd" : (string)obj; + } + set + { + FState["DateFormatString"] = value; + } + } + + /// <summary> + /// 最大日期 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MaxDate + { + get + { + object obj = FState["MaxDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MaxDate"] = value; + } + } + + /// <summary> + /// 最小日期 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小日期")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MinDate + { + get + { + object obj = FState["MinDate"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MinDate"] = value; + } + } + + + ///// <summary> + ///// 选择日期是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("选择日期是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableTimeSelectEvent属性")] + //public bool EnableDateSelect + //{ + // get + // { + // return EnableDateSelectEvent; + // } + // set + // { + // EnableDateSelectEvent = value; + // } + //} + + /// <summary> + /// 选择日期是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("选择日期是否自动回发")] + public bool EnableDateSelectEvent + { + get + { + object obj = FState["EnableDateSelectEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableDateSelectEvent"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //// 日期选择器也需要菜单组件的支持 + //ResourceManager.Instance.AddJavaScriptComponent("menu"); + + // extjs 的日期格式化字符串 + string extjsDateFormatString = DateUtil.ConvertToClientDateFormat(DateFormatString); + OB.AddProperty("format", extjsDateFormatString); + + if (EnableChineseAltFormats) + { + OB.AddProperty("altFormats", "Y-m-d|Y-n-j|Ymd|Ynj|y-m-d|y-n-j|ymd|ynj"); + } + else if (AltFormats != null) + { + StringBuilder formats = new StringBuilder(); + foreach (string format in AltFormats) + { + formats.Append(DateUtil.ConvertToClientDateFormat(format)); + formats.Append("|"); + } + OB.AddProperty("altFormats", formats.ToString().TrimEnd('|')); + } + + //// 当前选中的日期值,这个在父类中已经设置了 + //OB.RemoveProperty(OptionName.Value); + //if (SelectedDate != null) OB.AddProperty(OptionName.Value, Text); + + if (MaxDate != null) + { + OB.AddProperty("maxValue", MaxDate.Value.ToString(DateFormatString)); + } + if (MinDate != null) + { + OB.AddProperty("minValue", MinDate.Value.ToString(DateFormatString)); + } + + if (!EnableEdit) + { + OB.AddProperty("editable", false); + } + + + if (EnableDateSelectEvent) + { + //OB.Listeners.AddProperty("select", JsHelper.GetFunction(GetPostBackEventReference("Select")), true); + AddListener("select", GetPostBackEventReference("Select")); + } + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Date',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region RaisePostBackEvent + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument.StartsWith("Select")) + { + OnDateSelect(EventArgs.Empty); + } + } + + #endregion + + #region OnDateSelect + + private object _handlerKey = new object(); + + /// <summary> + /// 日期选定事件(需要启用EnableDateSelect) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("日期选定事件(需要启用EnableDateSelect)")] + public virtual event EventHandler DateSelect + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发日期选定事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnDateSelect(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.FileUpload/FileUpload.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.FileUpload/FileUpload.cs new file mode 100644 index 0000000..d001ed3 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.FileUpload/FileUpload.cs @@ -0,0 +1,405 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: FileUpload.cs + * CreatedOn: 2011-12-25 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * ->2011-12-25 30372245@qq.com + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Web.UI.Design; + +namespace FineUI +{ + /// <summary> + /// 文件上传控件 + /// </summary> + [Designer("FineUI.Design.FileUploadDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:FileUpload Label=\"Label\" runat=\"server\"></{0}:FileUpload>")] + [ToolboxBitmap(typeof(FileUpload), "toolbox.FileUpload.bmp")] + [Description("文件上传控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class FileUpload : RealTextField, IPostBackEventHandler + { + + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public FileUpload() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string Text + { + get + { + return base.Text; + } + } + + #endregion + + #region Properties + + /// <summary> + /// 允许上传的文件类型(仅部分浏览器支持) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("允许上传的文件类型(仅部分浏览器支持)")] + public string AcceptFileTypes + { + get + { + object obj = FState["AcceptFileTypes"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["AcceptFileTypes"] = value; + } + } + + + /// <summary> + /// 按钮文本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("按钮文本")] + public string ButtonText + { + get + { + object obj = FState["ButtonText"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ButtonText"] = value; + } + } + + /// <summary> + /// 是否只显示按钮,不显示只读输入框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否只显示按钮,不显示只读输入框")] + public bool ButtonOnly + { + get + { + object obj = FState["ButtonOnly"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ButtonOnly"] = value; + } + } + + + + /// <summary> + /// 按钮图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("按钮图标")] + public Icon ButtonIcon + { + get + { + object obj = FState["ButtonIcon"]; + return obj == null ? Icon.None : (Icon)obj; + } + set + { + FState["ButtonIcon"] = value; + } + } + + /// <summary> + /// 按钮图标地址 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("按钮图标地址")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string ButtonIconUrl + { + get + { + object obj = FState["ButtonIconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ButtonIconUrl"] = value; + } + } + + + /// <summary> + /// 上传的文件 + /// </summary> + [Description("上传的文件")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public HttpPostedFile PostedFile + { + get + { + return Page.Request.Files[UniqueID]; + } + } + + /// <summary> + /// 是否包含文件 + /// </summary> + [Description("是否包含文件")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool HasFile + { + get + { + return PostedFile != null && PostedFile.ContentLength > 0; + } + } + + /// <summary> + /// 客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名) + /// </summary> + [Description("客户端文件名称,包含目录路径(IE下为完成路径,Chrome下为文件名)")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string FileName + { + get + { + return PostedFile.FileName; + } + } + + + /// <summary> + /// 客户端文件名称,不包含目录路径 + /// </summary> + [Description("客户端文件名称,不包含目录路径")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string ShortFileName + { + get + { + string fileName = FileName; + int lastSlashIndex = fileName.LastIndexOf("\\"); + if (lastSlashIndex >= 0) + { + fileName = fileName.Substring(lastSlashIndex + 1); + } + return fileName; + } + } + + + #endregion + + #region Public + + /// <summary> + /// 将上载文件的内容保存到 Web 服务器上的指定路径 + /// </summary> + /// <param name="filename">保存的文件的名称</param> + public void SaveAs(string filename) + { + if (HasFile) + { + PostedFile.SaveAs(filename); + } + } + + + #endregion + + #region OnPreRender + + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + //AddStartupAbsoluteScript("F.form_upload_file=true;"); + + + if (!String.IsNullOrEmpty(ButtonText)) + { + OB.AddProperty("buttonText", ButtonText); + } + + if (ButtonOnly) + { + OB.AddProperty("buttonOnly", true); + + // 自定义Class,为了让按钮居左显示 + OB.AddProperty("cls", CssClass + " f-fileupload-buttononly"); + } + + + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(ButtonIcon, ButtonIconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + OptionBuilder buttonOB = new OptionBuilder(); + buttonOB.AddProperty("icon", resolvedIconUrl); + + OB.AddProperty("buttonConfig", buttonOB); + } + + //if (AutoPostBack) + //{ + // OB.Listeners.RemoveProperty("change"); + // OB.Listeners.AddProperty("fileselected", JsHelper.GetFunction(GetPostBackEventReference()), true); + //} + + if (!String.IsNullOrEmpty(AcceptFileTypes)) + { + string acceptScript = "cmp.fileInputEl.set({accept:'" + AcceptFileTypes + "'});"; + //OB.Listeners.AddProperty("afterrender", JsHelper.GetFunction(acceptScript, "cmp"), true); + AddListener("afterrender", acceptScript, "cmp"); + } + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.File',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + // FileUpload控件不响应回发数据改变事件(因此此控件不保存文本值,也无法判断文本是否改变) + return false; + } + + + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + OnFileSelected(EventArgs.Empty); + } + + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 文件选定事件(需要启用AutoPostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("文件选定事件(需要启用AutoPostBack)")] + public virtual event EventHandler FileSelected + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发文件选定事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnFileSelected(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.HiddenField/HiddenField.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.HiddenField/HiddenField.cs new file mode 100644 index 0000000..3ff6e1f --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.HiddenField/HiddenField.cs @@ -0,0 +1,73 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-07-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 隐藏表单控件 + /// </summary> + [Designer("FineUI.Design.HiddenFieldDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:HiddenField runat=\"server\"></{0}:HiddenField>")] + [ToolboxBitmap(typeof(HiddenField), "toolbox.HiddenField.bmp")] + [Description("隐藏表单控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class HiddenField : RealTextField + { + #region Properties + + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Hidden',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.NumberBox/NumberBox.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.NumberBox/NumberBox.cs new file mode 100644 index 0000000..788af24 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.NumberBox/NumberBox.cs @@ -0,0 +1,196 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: js_css_resource.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 数字输入框控件 + /// </summary> + [Designer("FineUI.Design.NumberBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:NumberBox Label=\"Label\" runat=\"server\"></{0}:NumberBox>")] + [ToolboxBitmap(typeof(NumberBox), "toolbox.NumberBox.bmp")] + [Description("数字输入框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class NumberBox : RealTextField + { + #region Properties + + + + /// <summary> + /// 不允许小数 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("不允许小数")] + public bool NoDecimal + { + get + { + object obj = FState["NoDecimal"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["NoDecimal"] = value; + } + } + + + /// <summary> + /// 不允许负数 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(false)] + [Description("不允许负数")] + public bool NoNegative + { + get + { + object obj = FState["NoNegative"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["NoNegative"] = value; + } + } + + /// <summary> + /// 最大值 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大值")] + public double? MaxValue + { + get + { + object obj = FState["MaxValue"]; + return obj == null ? null : (double?)obj; + } + set + { + FState["MaxValue"] = value; + } + } + + /// <summary> + /// 最小值 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小值")] + public double? MinValue + { + get + { + object obj = FState["MinValue"]; + return obj == null ? null : (double?)obj; + } + set + { + FState["MinValue"] = value; + } + } + + + /// <summary> + /// 小数点后的位数(默认为2) + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(2)] + [Description("小数点后的位数(默认为2)")] + public int DecimalPrecision + { + get + { + object obj = FState["DecimalPrecision"]; + return obj == null ? 2 : (int)obj; + } + set + { + FState["DecimalPrecision"] = value; + } + } + + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("allowDecimals", !NoDecimal); + //OB.AddProperty("allowNegative", !NoNegative); + if (MaxValue != null) + { + OB.AddProperty("maxValue", MaxValue.Value); + } + + if (MinValue != null) + { + OB.AddProperty("minValue", MinValue.Value); + } + else if (NoNegative) + { + // 未定义 MinValue,但定义了 NoNegative + OB.AddProperty("minValue", 0); + } + + if (DecimalPrecision != 2) + { + OB.AddProperty("decimalPrecision", DecimalPrecision); + } + + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Number',{1});", XID, OB.ToString()); + + AddStartupScript(jsContent); + } + + #endregion + + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TextArea/TextArea.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TextArea/TextArea.cs new file mode 100644 index 0000000..a58c74b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TextArea/TextArea.cs @@ -0,0 +1,239 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: TextArea.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 多行文本框控件 + /// </summary> + [Designer("FineUI.Design.TextAreaDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:TextArea Label=\"Label\" Text=\"\" Height=\"50px\" runat=\"server\"></{0}:TextArea>")] + [ToolboxBitmap(typeof(TextArea), "toolbox.TextArea.bmp")] + [Description("多行文本框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TextArea : RealTextField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public TextArea() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string NextFocusControl + { + get + { + return base.NextFocusControl; + } + } + + + + #endregion + + #region Properties + + /// <summary> + /// 是否自动增长高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否自动增长高度")] + public bool AutoGrowHeight + { + get + { + object obj = FState["AutoGrowHeight"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoGrowHeight"] = value; + } + } + + + /// <summary> + /// 自动增长的最大高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "1000")] + [Description("自动增长的最大高度")] + public Unit AutoGrowHeightMax + { + get + { + object obj = FState["AutoGrowHeightMax"]; + return obj == null ? (Unit)1000 : (Unit)obj; + } + set + { + FState["AutoGrowHeightMax"] = value; + } + } + + /// <summary> + /// 自动增长的最小高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "60")] + [Description("自动增长的最小高度")] + public Unit AutoGrowHeightMin + { + get + { + object obj = FState["AutoGrowHeightMin"]; + return obj == null ? (Unit)60 : (Unit)obj; + } + set + { + FState["AutoGrowHeightMin"] = value; + } + } + + + /// <summary> + /// 是否总是隐藏滚动条 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否总是隐藏滚动条")] + public bool HideScrollbars + { + get + { + object obj = FState["HideScrollbars"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["HideScrollbars"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (AutoGrowHeight) + { + OB.AddProperty("grow", AutoGrowHeight); + + if (AutoGrowHeightMax.Value != 1000) + { + OB.AddProperty("growMax", AutoGrowHeightMax.Value); + } + + if (AutoGrowHeightMin.Value != 60) + { + OB.AddProperty("growMin", AutoGrowHeightMin.Value); + } + + if (HideScrollbars) + { + OB.AddProperty("preventScrollbars", true); + } + } + + + // 如果Text属性存在于FState中,则不要重复设置value属性,而是在render事件中使用FState的值 + if (FState.ModifiedProperties.Contains("Text")) + { + //OB.RemoveProperty("value"); + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.f_setValue();", "cmp"), true); + OB.AddProperty("value", String.Format("{0}.Text", GetFStateScriptID()), true); + } + + + //// 自动增长的最小高度要么等于高度,要么等于50(最小值) + //if (AutoGrowHeight) + //{ + // Unit height = (Unit)50; + // if (Height != Unit.Empty) + // { + // height = Height; + // } + + // OB.AddProperty("growMin", height.Value); + //} + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.TextArea',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TextBox/TextBox.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TextBox/TextBox.cs new file mode 100644 index 0000000..d74beb5 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TextBox/TextBox.cs @@ -0,0 +1,139 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: TextBox.cs + * CreatedOn: 2008-04-07 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 文本框控件 + /// </summary> + [Designer("FineUI.Design.TextBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:TextBox Label=\"Label\" Text=\"\" runat=\"server\"></{0}:TextBox>")] + [ToolboxBitmap(typeof(TextBox), "toolbox.TextBox.bmp")] + [Description("文本框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TextBox : RealTextField + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public TextBox() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + + } + + #endregion + + #region Properties + + + /// <summary> + /// 文本框类型 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TextMode.Text)] + [Description("文本框类型")] + public virtual TextMode TextMode + { + get + { + object obj = FState["TextMode"]; + return obj == null ? TextMode.Text : (TextMode)obj; + } + set + { + FState["TextMode"] = value; + } + } + + #endregion + + #region OnPreRender + + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + + if (TextMode != TextMode.Text) + { + OB.AddProperty("inputType", TextModeHelper.GetName(TextMode)); + } + + + // 如果Text属性存在于FState中,则不要重复设置value属性,而是在render事件中使用FState的值 + if (FState.ModifiedProperties.Contains("Text")) + { + //OB.RemoveProperty("value"); + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.f_setValue();", "cmp"), true); + OB.AddProperty("value", String.Format("{0}.Text", GetFStateScriptID()), true); + } + + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Text',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TimePicker/TimePicker.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TimePicker/TimePicker.cs new file mode 100644 index 0000000..3e975d9 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TimePicker/TimePicker.cs @@ -0,0 +1,457 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: TimePicker.cs + * CreatedOn: 2012-11-01 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; +using System.Globalization; + +namespace FineUI +{ + /// <summary> + /// 时间选择框控件 + /// </summary> + [Designer("FineUI.Design.TimePickerDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [ToolboxData("<{0}:TimePicker Label=\"Label\" runat=\"server\"></{0}:TimePicker>")] + [ToolboxBitmap(typeof(TimePicker), "toolbox.TimePicker.bmp")] + [DefaultEvent("DateSelect")] + [Description("时间选择框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TimePicker : RealTextField, IPostBackEventHandler + { + + #region Properties + + /// <summary> + /// 是否允许编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否允许编辑")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + /// <summary> + /// 选择的时间 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("选择的时间")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? SelectedDate + { + get + { + if (DesignMode) + { + object obj = FState["SelectedDate"]; + return obj == null ? null : (DateTime?)obj; + } + else + { + + if (String.IsNullOrEmpty(Text)) + { + return null; + } + else + { + try + { + // OktaEndy - return null when DateFormatString = "dd/MM/yyyy" - Trying to Parse DateTime using it's DateFormatString + // http://stackoverflow.com/questions/1368636/why-cant-datetime-parseexact-parse-9-1-2009-using-m-d-yyyy + return DateTime.ParseExact(Text, TimeFormatString, CultureInfo.InvariantCulture); + } + catch (Exception) + { + // Text is not valid DateTime fomat. + return null; + } + } + } + } + set + { + if (DesignMode) + { + FState["SelectedDate"] = value; + } + else + { + if (value == null) + { + Text = String.Empty; + } + else + { + Text = value.Value.ToString(TimeFormatString); + } + } + } + } + + + /// <summary> + /// 尝试解析时间的格式列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("尝试解析时间的格式列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] AltFormats + { + get + { + object obj = FState["AltFormats"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["AltFormats"] = value; + } + } + + + /// <summary> + /// 时间格式(默认为HH:mm,24小时制,比如“20:30”) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("HH:mm")] + [Description("时间格式")] + public string TimeFormatString + { + get + { + object obj = FState["TimeFormatString"]; + return obj == null ? "HH:mm" : (string)obj; + } + set + { + FState["TimeFormatString"] = value; + } + } + + /// <summary> + /// 最大时间 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大时间")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MaxTime + { + get + { + object obj = FState["MaxTime"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MaxTime"] = value; + } + } + + /// <summary> + /// 最大时间的字符串形式 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最大时间的字符串形式")] + public string MaxTimeText + { + get + { + object obj = FState["MaxTimeText"]; + return obj == null ? null : (string)obj; + } + set + { + FState["MaxTimeText"] = value; + } + } + + /// <summary> + /// 最小时间 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小时间")] + [Editor("System.ComponentModel.Design.DateTimeEditor", typeof(UITypeEditor))] + public DateTime? MinTime + { + get + { + object obj = FState["MinTime"]; + return obj == null ? null : (DateTime?)obj; + } + set + { + FState["MinTime"] = value; + } + } + + /// <summary> + /// 最小时间的字符串形式 + /// </summary> + [Category(CategoryName.VALIDATION)] + [DefaultValue(null)] + [Description("最小时间的字符串形式")] + public string MinTimeText + { + get + { + object obj = FState["MinTimeText"]; + return obj == null ? null : (string)obj; + } + set + { + FState["MinTimeText"] = value; + } + } + + + private const short INCREMENT_DEFAULT = 15; + + /// <summary> + /// 列表中每个时间值相差的分钟数(默认为15分钟) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(INCREMENT_DEFAULT)] + [Description("列表中每个时间值相差的分钟数(默认为15分钟)")] + public short Increment + { + get + { + object obj = FState["Increment"]; + return obj == null ? INCREMENT_DEFAULT : (short)obj; + } + set + { + FState["Increment"] = value; + } + } + + /// <summary> + /// 选择时间是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("选择时间是否自动回发")] + public bool EnableTimeSelectEvent + { + get + { + object obj = FState["EnableTimeSelectEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableTimeSelectEvent"] = value; + } + } + + ///// <summary> + ///// 选择时间是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("选择时间是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableTimeSelectEvent属性")] + //public bool EnableTimeSelect + //{ + // get + // { + // return EnableTimeSelectEvent; + // } + // set + // { + // EnableTimeSelectEvent = value; + // } + //} + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Readonly")) + //{ + // sb.AppendFormat("{0}.setReadOnly({1});", XID, Readonly.ToString().ToLower()); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //// 日期选择器也需要菜单组件的支持 + //ResourceManager.Instance.AddJavaScriptComponent("menu"); + + // extjs 的日期格式化字符串 + string extjsDateFormatString = DateUtil.ConvertToClientDateFormat(TimeFormatString); + OB.AddProperty("format", extjsDateFormatString); + + if (AltFormats != null) + { + StringBuilder formats = new StringBuilder(); + foreach (string format in AltFormats) + { + formats.Append(DateUtil.ConvertToClientDateFormat(format)); + formats.Append("|"); + } + OB.AddProperty("altFormats", formats.ToString().TrimEnd('|')); + } + + if (Increment != INCREMENT_DEFAULT) + { + OB.AddProperty("increment", Increment); + } + + + ////// 当前选中的日期值,这个在父类中已经设置了 + ////OB.RemoveProperty(OptionName.Value); + ////if (SelectedDate != null) OB.AddProperty(OptionName.Value, Text); + + + if (MaxTime.HasValue) + { + OB.AddProperty("maxValue", MaxTime.Value.ToString(TimeFormatString)); + } + else if (!String.IsNullOrEmpty(MaxTimeText)) + { + OB.AddProperty("maxValue", MaxTimeText); + } + + if (MinTime.HasValue) + { + OB.AddProperty("minValue", MinTime.Value.ToString(TimeFormatString)); + } + else if (!String.IsNullOrEmpty(MinTimeText)) + { + OB.AddProperty("minValue", MinTimeText); + } + + if (!EnableEdit) + { + OB.AddProperty("editable", false); + } + + + if (EnableTimeSelectEvent) + { + //OB.Listeners.AddProperty("select", JsHelper.GetFunction(GetPostBackEventReference("Select")), true); + AddListener("select", GetPostBackEventReference("Select")); + } + + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Time',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region RaisePostBackEvent + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument.StartsWith("Select")) + { + OnDateSelect(EventArgs.Empty); + } + } + + #endregion + + #region OnDateSelect + + private object _handlerKey = new object(); + + /// <summary> + /// 日期选择事件(需要启用EnableDateSelect) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("日期选择事件(需要启用EnableDateSelect)")] + public virtual event EventHandler DateSelect + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发日期选择事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnDateSelect(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TriggerBox/TriggerBox.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TriggerBox/TriggerBox.cs new file mode 100644 index 0000000..a223cb5 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TriggerBox/TriggerBox.cs @@ -0,0 +1,360 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: TriggerBox.cs + * CreatedOn: 2008-06-18 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 扩展文本框控件 + /// </summary> + [Designer("FineUI.Design.TriggerBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [DefaultEvent("TriggerClick")] + [ToolboxData("<{0}:TriggerBox Label=\"Label\" TriggerIcon=\"Search\" runat=\"server\"></{0}:TriggerBox>")] + [ToolboxBitmap(typeof(TriggerBox), "toolbox.TriggerBox.bmp")] + [Description("扩展文本框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TriggerBox : RealTextField, IPostBackEventHandler + { + #region Properties + + /// <summary> + /// 是否允许编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否允许编辑")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + /// <summary> + /// 是否显示触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否显示触发器")] + public bool ShowTrigger + { + get + { + object obj = FState["ShowTrigger"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowTrigger"] = value; + } + } + + + /// <summary> + /// 是否可以回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnablePostBack + { + get + { + object obj = FState["EnablePostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnablePostBack"] = value; + } + } + + + /// <summary> + /// 右侧按钮的图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("右侧按钮的图片")] + public virtual string TriggerIconUrl + { + get + { + object obj = FState["TriggerIconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["TriggerIconUrl"] = value; + } + } + + + /// <summary> + /// 右侧的图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TriggerIcon.None)] + [Description("右侧的图标")] + public virtual TriggerIcon TriggerIcon + { + get + { + object obj = FState["TriggerIcon"]; + return obj == null ? TriggerIcon.None : (TriggerIcon)obj; + } + set + { + FState["TriggerIcon"] = value; + } + } + + + /// <summary> + /// 点击按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击按钮时需要执行的客户端脚本")] + public string OnClientTriggerClick + { + get + { + object obj = FState["OnClientTriggerClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientTriggerClick"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + #region options + if (!ShowTrigger) + { + OB.AddProperty("hideTrigger", true); + } + + if (!EnableEdit) + { + OB.AddProperty("editable", false); + } + + + + #endregion + + #region TriggerIcon + + if (TriggerIcon != TriggerIcon.None) + { + OB.AddProperty("triggerCls", TriggerIconHelper.GetName(TriggerIcon)); + } + else if (!String.IsNullOrEmpty(TriggerIconUrl)) + { + string className = String.Format("{0}-trigger1-icon", ClientID); + string selector = String.Format(".{0}", className); + AddStartupCSS(className, StyleUtil.GetTriggerIconUrlStyle(selector, ResolveUrl(TriggerIconUrl))); + + OB.AddProperty("triggerCls", className); + } + + + #endregion + + #region TriggerClick + + + string clientClickScript = OnClientTriggerClick; + if (!String.IsNullOrEmpty(clientClickScript) && !clientClickScript.EndsWith(";")) + { + clientClickScript += ";"; + } + + string postbackScript = String.Empty; + if (EnablePostBack) + { + postbackScript = GetPostBackEventReference(); + } + + string triggerScript = clientClickScript + postbackScript; + + if (!String.IsNullOrEmpty(triggerScript)) + { + OB.AddProperty("onTriggerClick", JsHelper.GetFunction(triggerScript), true); + } + + #endregion + + #region Specialkey + + //if (Enabled) + //{ + // 首先启用enableKeyEvents + //OB.AddProperty("enableKeyEvents", true); + //OB.Listeners.AddProperty("specialkey", String.Format("function(field,e){{if(e.getKey()==e.ENTER){{{0}.onTriggerClick();e.stopEvent();}}}}", XID), true); + AddListener("specialkey", String.Format("if(e.getKey()==e.ENTER){{{0}.onTriggerClick();e.stopEvent();}}", XID), "field", "e"); + //} + + #endregion + + #region EnableEdit + // extjsv4.x 的enableedit=false,不能点击输入框触发 + if (!EnableEdit) + { + //OB.Listeners.AddProperty("render", "function(field){field.mon(field.inputEl,'click',field.onTriggerClick,field);}", true); + AddListener("render", "field.mon(field.inputEl,'click',field.onTriggerClick,field);", "field"); + + } + #endregion + + + #region old code + + //// 只禁用文本框,不禁用Trigger + //if (Readonly) + //{ + // //OB.AddProperty(OptionName.Disabled, true); + // //AddAbsoluteStartupScript( String.Format("{0}.el.dom.disabled=true;", ClientID)); + + + + // //OB.Listeners.AddProperty(OptionName.Focus, String.Format("function(field){{field.blur.defer(10,field);\r\n}}"), true); + // //OB.Listeners.AddProperty(OptionName.Keydown, String.Format("function(){{return false;}}"), true); + + + // // 晕,最后的解决方案居然是设置 readonly=true + // OB.AddProperty(OptionName.ReadOnly, true); + + // //string cssClassName = CssClass; + // //cssClassName += "x-item-disabled"; + + // //OB.RemoveProperty(OptionName.Cls); + // //OB.AddProperty(OptionName.Cls, cssClassName); + // //OB.AddProperty(OptionName.FocusClass, ""); + //} + + #endregion + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Trigger',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackEventHandler Members + + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("触发按钮点击事件")] + public event EventHandler TriggerClick + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTriggerClick(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + OnTriggerClick(EventArgs.Empty); + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TwinTriggerBox/TwinTriggerBox.cs b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TwinTriggerBox/TwinTriggerBox.cs new file mode 100644 index 0000000..b56e649 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/Field.TextField.RealTextField.TwinTriggerBox/TwinTriggerBox.cs @@ -0,0 +1,562 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: TwinTriggerBox.cs + * CreatedOn: 2008-06-27 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +namespace FineUI +{ + /// <summary> + /// 扩展文本框控件 + /// </summary> + [Designer("FineUI.Design.TwinTriggerBoxDesigner, FineUI.Design")] + [DefaultProperty("Text")] + [DefaultEvent("TriggerClick")] + [ToolboxData("<{0}:TwinTriggerBox Label=\"Label\" Trigger1Icon=\"Clear\" Trigger2Icon=\"Search\" runat=\"server\"></{0}:TwinTriggerBox>")] + [ToolboxBitmap(typeof(TwinTriggerBox), "toolbox.TwinTriggerBox.bmp")] + [Description("扩展文本框控件")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class TwinTriggerBox : RealTextField, IPostBackEventHandler, IPostBackDataHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public TwinTriggerBox() + { + AddServerAjaxProperties("ShowTrigger1", "ShowTrigger2"); + AddClientAjaxProperties(); + } + + #endregion + + #region Properties + + /// <summary> + /// 是否允许编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否允许编辑")] + public bool EnableEdit + { + get + { + object obj = FState["EnableEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableEdit"] = value; + } + } + + + /// <summary> + /// 是否显示触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否显示触发器")] + public bool ShowTrigger + { + get + { + object obj = FState["ShowTrigger"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowTrigger"] = value; + } + } + + /// <summary> + /// [AJAX属性]是否显示第一个触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("[AJAX属性]是否显示第一个触发器")] + public bool ShowTrigger1 + { + get + { + object obj = FState["ShowTrigger1"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowTrigger1"] = value; + } + } + + + /// <summary> + /// [AJAX属性]是否显示第一个触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("[AJAX属性]是否显示第二个触发器")] + public bool ShowTrigger2 + { + get + { + object obj = FState["ShowTrigger2"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowTrigger2"] = value; + } + } + + + /// <summary> + /// 是否可以回发第一个触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发第一个触发器")] + public bool EnableTrigger1PostBack + { + get + { + object obj = FState["EnableTrigger1PostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableTrigger1PostBack"] = value; + } + } + + + /// <summary> + /// 是否可以回发第一个触发器 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以回发")] + public bool EnableTrigger2PostBack + { + get + { + object obj = FState["EnableTrigger2PostBack"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableTrigger2PostBack"] = value; + } + } + + + /// <summary> + /// 第一个触发器图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("第一个触发器图片")] + public virtual string Trigger1IconUrl + { + get + { + object obj = FState["Trigger1IconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Trigger1IconUrl"] = value; + } + } + + /// <summary> + /// 第二个触发器图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("第二个触发器图片")] + public virtual string Trigger2IconUrl + { + get + { + object obj = FState["Trigger2IconUrl"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["Trigger2IconUrl"] = value; + } + } + + + + /// <summary> + /// 第一个触发器图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TriggerIcon.None)] + [Description("第一个触发器图片")] + public virtual TriggerIcon Trigger1Icon + { + get + { + object obj = FState["Trigger1Icon"]; + return obj == null ? TriggerIcon.None : (TriggerIcon)obj; + } + set + { + FState["Trigger1Icon"] = value; + } + } + + /// <summary> + /// 第二个触发器图片 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TriggerIcon.None)] + [Description("第二个触发器图片")] + public virtual TriggerIcon Trigger2Icon + { + get + { + object obj = FState["Trigger2Icon"]; + return obj == null ? TriggerIcon.None : (TriggerIcon)obj; + } + set + { + FState["Trigger2Icon"] = value; + } + } + + /// <summary> + /// 点击第一个触发器时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击第一个触发器时需要执行的客户端脚本")] + public string OnClientTrigger1Click + { + get + { + object obj = FState["OnClientTrigger1Click"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientTrigger1Click"] = value; + } + } + + /// <summary> + /// 点击第二个触发器时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击第二个触发器时需要执行的客户端脚本")] + public string OnClientTrigger2Click + { + get + { + object obj = FState["OnClientTrigger2Click"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientTrigger2Click"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("ShowTrigger1")) + { + sb.AppendFormat("{0}.triggerCell.item(0).setDisplayed({1});", XID, ShowTrigger1 ? "true" : "false"); + } + + if (PropertyModified("ShowTrigger2")) + { + sb.AppendFormat("{0}.triggerCell.item(1).setDisplayed({1});", XID, ShowTrigger2 ? "true" : "false"); + } + + AddAjaxScript(sb); + } + + + + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + #region options + + if (!ShowTrigger) + { + OB.AddProperty("hideTrigger", true); + } + + if (!EnableEdit) + { + OB.AddProperty("editable", false); + } + + + string renderScript = String.Empty; + if (!ShowTrigger1) + { + renderScript += String.Format("this.triggerCell.item(0).setDisplayed(false);"); + } + if (!ShowTrigger2) + { + renderScript += String.Format("this.triggerCell.item(1).setDisplayed(false);"); + } + + if (!String.IsNullOrEmpty(renderScript)) + { + //renderScript += "this.updateLayout();"; + //OB.Listeners.AddProperty("afterrender", JsHelper.GetFunction(renderScript), true); + AddListener("afterrender", renderScript); + } + + + #endregion + + #region Trigger1Icon/Trigger2Icon + + if (Trigger1Icon != TriggerIcon.None) + { + OB.AddProperty("trigger1Cls", TriggerIconHelper.GetName(Trigger1Icon)); + } + else if (!String.IsNullOrEmpty(Trigger1IconUrl)) + { + string className = String.Format("{0}-trigger1-icon", ClientID); + string selector = String.Format(".{0}", className); + AddStartupCSS(className, StyleUtil.GetTriggerIconUrlStyle(selector, ResolveUrl(Trigger1IconUrl))); + + OB.AddProperty("trigger1Cls", className); + } + + + if (Trigger2Icon != TriggerIcon.None) + { + OB.AddProperty("trigger2Cls", TriggerIconHelper.GetName(Trigger2Icon)); + } + else if (!String.IsNullOrEmpty(Trigger2IconUrl)) + { + string className = String.Format("{0}-trigger2-icon", ClientID); + string selector = String.Format(".{0}", className); + AddStartupCSS(className, StyleUtil.GetTriggerIconUrlStyle(selector, ResolveUrl(Trigger2IconUrl))); + + OB.AddProperty("trigger2Cls", className); + } + + + #endregion + + #region Trigger1Click/Trigger1Click + + //if (Enabled) + //{ + string clientTrigger1ClickScript = OnClientTrigger1Click; + if (!String.IsNullOrEmpty(clientTrigger1ClickScript) && !clientTrigger1ClickScript.EndsWith(";")) + { + clientTrigger1ClickScript += ";"; + } + string trigger1PostbackScript = String.Empty; + if (EnableTrigger1PostBack) + { + trigger1PostbackScript = GetPostBackEventReference("Trigger$1"); + } + //string trigger1ClickScript = String.Format("function(){{{0}}}", clientTrigger1ClickScript + trigger1PostbackScript); + //// createDelegate 用来为一个Function创建一个Scope + //OB.AddProperty(OptionName.OnTrigger1Click, String.Format("({0}).createDelegate(box)", trigger1ClickScript), true); + OB.AddProperty("onTrigger1Click", JsHelper.GetFunction(clientTrigger1ClickScript + trigger1PostbackScript), true); + + + string clientTrigger2ClickScript = OnClientTrigger2Click; + if (!String.IsNullOrEmpty(clientTrigger2ClickScript) && !clientTrigger2ClickScript.EndsWith(";")) + { + clientTrigger2ClickScript += ";"; + } + string trigger2PostbackScript = String.Empty; + if (EnableTrigger2PostBack) + { + trigger2PostbackScript = GetPostBackEventReference("Trigger$2"); + } + //string trigger2ClickScript = String.Format("function(){{{0}}}", clientTrigger2ClickScript + Trigger2PostbackScript); + //// createDelegate 用来为一个Function创建一个Scope + //OB.AddProperty(OptionName.OnTrigger2Click, String.Format("({0}).createDelegate(box)", trigger2ClickScript), true); + OB.AddProperty("onTrigger2Click", JsHelper.GetFunction(clientTrigger2ClickScript + trigger2PostbackScript), true); + + //} + + #endregion + + #region Specialkey + + //if (Enabled) + //{ + // 首先启用enableKeyEvents + //OB.AddProperty("enableKeyEvents", true); + //OB.Listeners.AddProperty("specialkey", String.Format("function(field,e){{if(e.getKey()==e.ENTER){{{0}.onTrigger2Click();e.stopEvent();}}}}", XID), true); + AddListener("specialkey", String.Format("if(e.getKey()==e.ENTER){{{0}.onTrigger2Click();e.stopEvent();}}", XID), "field", "e"); + //} + + #endregion + + #region EnableEdit + // extjsv4.x 的enableedit=false,不能点击输入框触发 + if (!EnableEdit) + { + //OB.Listeners.AddProperty("render", "function(field){field.mon(field.inputEl,'click',field.onTrigger2Click,field);}", true); + AddListener("render", "field.mon(field.inputEl,'click',field.onTrigger2Click,field);", "field"); + + } + #endregion + + string jsContent = String.Format("var {0}=F.create('Ext.form.field.Trigger',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region IPostBackEventHandler Members + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument == "Trigger$1") + { + OnTrigger1Click(EventArgs.Empty); + } + else if (eventArgument == "Trigger$2") + { + OnTrigger2Click(EventArgs.Empty); + } + } + + #endregion + + #region Trigger1Click + + private static readonly object _trigger1HandlerKey = new object(); + + /// <summary> + /// 第一个触发按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("第一个触发按钮点击事件")] + public event EventHandler Trigger1Click + { + add + { + Events.AddHandler(_trigger1HandlerKey, value); + } + remove + { + Events.RemoveHandler(_trigger1HandlerKey, value); + } + } + + /// <summary> + /// 触发第一个触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTrigger1Click(EventArgs e) + { + EventHandler handler = Events[_trigger1HandlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region Trigger2Click + + private static readonly object _Trigger2HandlerKey = new object(); + + /// <summary> + /// 第二个触发按钮点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("第二个触发按钮点击事件")] + public event EventHandler Trigger2Click + { + add + { + Events.AddHandler(_Trigger2HandlerKey, value); + } + remove + { + Events.RemoveHandler(_Trigger2HandlerKey, value); + } + } + + /// <summary> + /// 触发第二个触发按钮点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTrigger2Click(EventArgs e) + { + EventHandler handler = Events[_Trigger2HandlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/Accordion.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/Accordion.cs new file mode 100644 index 0000000..6c721a5 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/Accordion.cs @@ -0,0 +1,567 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Accordion.cs + * CreatedOn: 2008-06-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 手风琴控件 + /// </summary> + [Designer("FineUI.Design.AccordionDesigner, FineUI.Design")] + [ToolboxData("<{0}:Accordion Title=\"Accordion\" ShowCollapseTool=\"false\" ShowBorder=\"false\" ShowHeader=\"false\" runat=\"server\"><Panes><{0}:AccordionPane runat=\"server\" Title=\"AccordionPane1\" BodyPadding=\"5px\" ShowBorder=\"false\"></{0}:AccordionPane><{0}:AccordionPane runat=\"server\" Title=\"AccordionPane2\" BodyPadding=\"5px\" ShowBorder=\"false\"></{0}:AccordionPane></Panes></{0}:Accordion>")] + [ToolboxBitmap(typeof(Accordion), "toolbox.Accordion.bmp")] + [Description("手风琴控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Accordion : CollapsablePanel, IPostBackDataHandler, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// + /// </summary> + public Accordion() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("ActivePaneIndex"); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Accordion)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Accordion; + } + } + + + #endregion + + #region Properties + + /// <summary> + /// 是否启用折叠按钮 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用折叠按钮")] + public bool ShowCollapseTool + { + get + { + object obj = FState["ShowCollapseTool"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowCollapseTool"] = value; + } + } + + + /// <summary> + /// 是否启用激活在最上面 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否启用激活在最上面")] + public bool EnableActiveOnTop + { + get + { + object obj = FState["EnableActiveOnTop"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableActiveOnTop"] = value; + } + } + + /// <summary> + /// 是否启用填充整个区域 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用填充整个区域")] + public bool EnableFill + { + get + { + object obj = FState["EnableFill"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableFill"] = value; + } + } + + + //private bool EnableAnimate_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用动画")] + //public bool EnableAnimate + //{ + // get + // { + // object obj = BoxState["EnableAnimate"]; + // return obj == null ? EnableAnimate_Default : (bool)obj; + // } + // set + // { + // BoxState["EnableAnimate"] = value; + // } + //} + + + //private bool PersistActiveIndexInCookie_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("将ActiveIndex保持在Cookie中,以便在页面跳转过程中位置状态")] + //public bool PersistActiveIndexInCookie + //{ + // get + // { + // object obj = BoxState["PersistActiveIndexInCookie"]; + // return obj == null ? PersistActiveIndexInCookie_Default : (bool)obj; + // } + // set + // { + // BoxState["PersistActiveIndexInCookie"] = value; + // } + //} + + + #endregion + + #region ActivePaneIndex + + /// <summary> + /// 切换面板时是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("切换面板时是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + /// <summary> + /// [AJAX属性]激活面板的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("[AJAX属性]激活面板的索引")] + public int ActivePaneIndex + { + get + { + object obj = FState["ActivePaneIndex"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["ActivePaneIndex"] = value; + } + } + + /// <summary> + /// 当前激活的面板 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public AccordionPane ActivePane + { + get + { + if (ActivePaneIndex >= 0 && ActivePaneIndex < Panes.Count) + { + return Panes[ActivePaneIndex]; + } + return null; + } + } + + /* + + private int _activePaneIndex = -1; + + /// <summary> + /// 激活面板的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("激活面板的索引")] + public int ActivePaneIndex + { + get + { + int activeIndex = 0; + for (int i = 0, count = Panes.Count; i < count; i++) + { + if (!Panes[i].Collapsed) + { + activeIndex = i; + break; + } + } + return activeIndex; + } + set + { + // We cann't set children AccordionPane's Collapsed property now, because they may not been loaded yet. + _activePaneIndex = value; + } + } + */ + + + #endregion + + #region Panes + + private AccordionPaneCollection _panes; + + /// <summary> + /// 手风琴面板集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + public AccordionPaneCollection Panes + { + get + { + if (_panes == null) + { + _panes = new AccordionPaneCollection(this); + } + return _panes; + } + } + + #endregion + + #region old code + + //protected override void CreateChildControls() + //{ + // base.CreateChildControls(); + + + // //foreach (AccordionPanel row in Items) + // //{ + // // row.RenderWrapperDiv = false; + // // Controls.Add(row); + // //} + //} + + #endregion + + #region ActivePaneIndexHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string ActivePaneIndexHiddenFieldID + { + get + { + return String.Format("{0}_ActivePaneIndex", ClientID); + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("ActivePaneIndex")) + { + if (ActivePane != null) + { + ActivePane.AddAjaxScript(String.Format("{0}.expand();", ActivePane.XID)); + } + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + #region Reset ActiveIndex + + // 重置面板的 Collapsed 属性 + if (ActivePane != null) + { + foreach (AccordionPane pane in Panes) + { + pane.Collapsed = true; + } + + ActivePane.Collapsed = false; + } + + #endregion + + #region Panes + + if (Panes.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (AccordionPane item in Panes) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + } + OB.AddProperty("items", ab.ToString(), true); + } + + #endregion + + #region LayoutConfig + + OB.RemoveProperty("layout"); + + JsObjectBuilder configBuilder = new JsObjectBuilder(); + configBuilder.AddProperty("animate", false); + configBuilder.AddProperty("activeOnTop", EnableActiveOnTop); + configBuilder.AddProperty("fill", EnableFill); + configBuilder.AddProperty("hideCollapseTool", !ShowCollapseTool); + configBuilder.AddProperty("type", "accordion"); + + //configBuilder.AddProperty("multi", true); + + OB.AddProperty("layout", configBuilder); + + #endregion + + + string jsContent = String.Format("var {0}=F.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + base.LoadPostData(postDataKey, postCollection); + + string postValue = postCollection[ActivePaneIndexHiddenFieldID]; + + int postActivePaneIndex = Convert.ToInt32(postValue); + if (ActivePaneIndex != postActivePaneIndex) + { + ActivePaneIndex = postActivePaneIndex; + FState.BackupPostDataProperty("ActivePaneIndex"); + } + + return false; + } + + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument == "PaneIndexChanged") + { + OnPaneIndexChanged(EventArgs.Empty); + } + } + + #endregion + + #region OnPaneIndexChanged + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 面板改变事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("面板改变事件")] + public event EventHandler PaneIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发面板改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPaneIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPane.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPane.cs new file mode 100644 index 0000000..447c0f6 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPane.cs @@ -0,0 +1,336 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: AccordionPanel.cs + * CreatedOn: 2008-06-16 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 手风琴面板控件 + /// </summary> + [Designer("FineUI.Design.AccordionPaneDesigner, FineUI.Design")] + [ToolboxData("<{0}:AccordionPane Title=\"AccordionPane\" runat=\"server\"></{0}:AccordionPane>")] + [ToolboxBitmap(typeof(AccordionPane), "toolbox.AccordionPane.bmp")] + [Description("手风琴面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class AccordionPane : CollapsablePanel + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public AccordionPane() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region static readonly + + //private static readonly string ACCORDION_HEADER_SELECT = "f-accordion-hd-select"; + //private static readonly string ACCORDION_HEADER_HOVER = "f-accordion-hd-hover"; + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableCollapse + { + get + { + return true; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowHeader + { + get + { + return true; + } + } + + #endregion + + #region Properties + + ///// <summary> + ///// [AJAX属性]是否折叠 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("[AJAX属性]是否折叠")] + //public override bool Collapsed + //{ + // get + // { + // object obj = FState["Collapsed"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["Collapsed"] = value; + // } + //} + + + /// <summary> + /// 鼠标移到标题栏是否高亮显示 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("鼠标移到标题栏是否高亮显示")] + public bool EnableHightlight + { + get + { + object obj = FState["EnableHightlight"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableHightlight"] = value; + } + } + + + #endregion + + #region Links + + //private AccordionLinkCollection _links; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerProperty)] + //public virtual AccordionLinkCollection Links + //{ + // get + // { + // if (_links == null) + // { + // _links = new AccordionLinkCollection(this); + // } + // return _links; + // } + //} + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + #region Check Parent + Accordion parentControl = Parent as Accordion; + if (parentControl == null) + { + throw new Exception("AccordionPane must inside the control Accordion!"); + } + + + if (parentControl.AutoPostBack) + { + //OB.Listeners.AddProperty("expand", JsHelper.GetFunction(parentControl.GetPostBackEventReference("PaneIndexChanged")), true); + AddListener("expand", parentControl.GetPostBackEventReference("PaneIndexChanged")); + } + + #endregion + + + //#region AutoHeight + + + //// 如果要充满整个Accordion,则设置每个AccordionPanel的AutoHeight=false + //if (parentControl.EnableFill) + //{ + // OB.AddProperty("autoHeight", false); + //} + + + //#endregion + + string renderScript = String.Empty; + + #region oldcode + + + //// 如果启用高亮显示选中的,则在每个AccordionPanel的折叠展开时都要改变高亮选中的状态 + //if (EnableLargeHeader && EnableHightlight) + //{ + // renderScript += String.Format("{0}.header.addClassOnOver('{1}');", XID, ACCORDION_HEADER_HOVER); + + // // 如果这个AccordionPanel需要高亮显示 + // if (parentControl.ActiveIndex >= 0 && parentControl.ActiveIndex < parentControl.Panes.Count) + // { + // if (parentControl.Panes[parentControl.ActiveIndex] == this) + // { + // //OB.AddProperty(OptionName.Cls, ACCORDION_BIG_HEADER_SELECT_CLASS); + // renderScript += String.Format("{0}.header.addClass('{1}');", XID, ACCORDION_HEADER_SELECT); + // } + // } + + // OB.Listeners.RemoveProperty("collapse"); + // OB.Listeners.RemoveProperty("expand"); + // OB.Listeners.AddProperty("collapse", String.Format("function(panel){{Ext.get('{0}').dom.value=true;X.{1}.header.removeClass('{2}');}}", CollapsedHiddenFieldID, XID, ACCORDION_HEADER_SELECT), true); + // OB.Listeners.AddProperty("expand", String.Format("function(panel){{Ext.get('{0}').dom.value=false;X.{1}.header.addClass('{2}');}}", CollapsedHiddenFieldID, XID, ACCORDION_HEADER_SELECT), true); + + //} + + + #endregion + + #region Links + + //if (Links.Count > 0) + //{ + // OB.RemoveProperty("items"); + + // StringBuilder sb = new StringBuilder(); + + // sb.Append("<ul class=\"f-accrodion-link-ul\">"); + // foreach (AccordionLink link in Links) + // { + // #region li + + // HtmlNodeBuilder nb = new HtmlNodeBuilder("a"); + + // nb.SetProperty("id", link.ClientID); + // if (!String.IsNullOrEmpty(link.OnClientClick)) + // { + // nb.SetProperty("onclick", String.Format("javascript:{0}", link.OnClientClick)); + // } + // if (!String.IsNullOrEmpty(link.NavigateUrl)) + // { + // nb.SetProperty("href", ResolveUrl(link.NavigateUrl)); + // if (!String.IsNullOrEmpty(link.Target)) + // { + // nb.SetProperty("target", link.Target); + // } + // } + // nb.SetProperty("style", "display:block;cursor:pointer;"); + + // string content = String.Empty; + // if (!String.IsNullOrEmpty(link.IconUrl)) + // { + // content += String.Format("<img src=\"{0}\" align=\"bottom\" alt=\"\" />", ResolveUrl(link.IconUrl)); + // } + // content += " " + link.Text; + // nb.InnerProperty = content; + + // #endregion + + // sb.AppendFormat("<li {1}>{0}</li>", nb.ToString(), link.Selected ? "class=\"f-accrodion-link-select\"" : ""); + // } + // sb.Append("</ul>"); + + // OB.AddProperty("html", sb.ToString()); + + + + + + // // 注册所有链接的脚本 + // // 所有的li,鼠标移动上去是一种样式,鼠标移开又是另外一种样式 + // string hoverScript = "ele = Ext.get(ele);"; + // hoverScript += "ele.on('mouseover',function(){Ext.get(this.findParentNode('li')).addClass('box-accrodion-link-hover');},ele);"; + // hoverScript += "ele.on('mouseout',function(){Ext.get(this.findParentNode('li')).removeClass('box-accrodion-link-hover');},ele);"; + + // //string clickScript = String.Empty; + // //clickScript += String.Format("Ext.each(X.{0}.el.query('ul.box-accrodion-link-ul li'),function(ele){{Ext.get(ele).removeClass('box-accrodion-link-select');}});", parentControl.ClientJavascriptID); + // //clickScript += "Ext.get('{0}').addClass('box-accrodion-link-select');"; + + // string clickScript = String.Format("function(){{X.{0}.box_active(ele.id);}}", parentControl.XID); + // hoverScript += "ele.on('click'," + clickScript + ");"; + + // renderScript += String.Format("Ext.each(X.{0}.el.query('ul.box-accrodion-link-ul li a'),function(ele){{{1}}});", XID, hoverScript); + //} + + #endregion + + if (!String.IsNullOrEmpty(renderScript)) + { + renderScript = JsHelper.GetDeferScript(renderScript, 100); + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript), true); + AddListener("render", renderScript); + } + + string jsContent = String.Format("var {0}=F.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPaneCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPaneCollection.cs new file mode 100644 index 0000000..cb1c097 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Accordion/AccordionPane/AccordionPaneCollection.cs @@ -0,0 +1,70 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: AccordionPanelCollection.cs + * CreatedOn: 2008-06-16 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 手风琴面板控件集合 + /// </summary> + public class AccordionPaneCollection : BaseCollection<AccordionPane> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public AccordionPaneCollection(Accordion parent) + : base(parent) + { + + } + + /* + private Accordion _accordion; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="accordion">手风琴实例</param> + public AccordionPaneCollection(Accordion accordion) + { + _accordion = accordion; + } + + + protected override void InsertItem(int index, AccordionPane item) + { + item.RenderWrapperNode = false; + _accordion.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + */ + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.ContentPanel/ContentPanel.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.ContentPanel/ContentPanel.cs new file mode 100644 index 0000000..cf7338e --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.ContentPanel/ContentPanel.cs @@ -0,0 +1,269 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: ContentPanel.cs + * CreatedOn: 2008-05-30 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 容器面板控件 + /// </summary> + [Designer("FineUI.Design.ContentPanelDesigner, FineUI.Design")] + [ToolboxData("<{0}:ContentPanel Title=\"ContentPanel\" BodyPadding=\"5px\" ShowHeader=\"true\" ShowBorder=\"true\" runat=\"server\"></{0}:ContentPanel>")] + [ToolboxBitmap(typeof(ContentPanel), "toolbox.ContentPanel.bmp")] + [Description("容器面板控件")] + [ParseChildren(false)] + [PersistChildren(true)] + [ControlBuilder(typeof(ContentPanelBuilder))] + public class ContentPanel : CollapsablePanel + { + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Container)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Container; + } + } + + + ///// <summary> + ///// 是否显示边框 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示边框")] + //public override bool ShowBorder + //{ + // get + // { + // object obj = BoxState["Border"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["Border"] = value; + // } + //} + + + ///// <summary> + ///// 是否显示标题栏 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否显示标题栏")] + //public override bool ShowHeader + //{ + // get + // { + // object obj = BoxState["ShowHeader"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["ShowHeader"] = value; + // } + //} + + #endregion + + #region internal RenderChildrenAsContent + + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("渲染子控件为容器内容")] + internal override bool RenderChildrenAsContent + { + get + { + return true; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + string jsContent = String.Format("var {0}=F.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region old code + + //#region Content + + //private HtmlGenericControl _contentControl; + ///// <summary> + ///// 创建的Content控件 + ///// </summary> + //protected HtmlGenericControl ContentControl + //{ + // get + // { + // if (_contentControl == null) + // { + // _contentControl = new HtmlGenericControl("div"); + // _contentControl.ID = "content"; + + // _content.InstantiateIn(_contentControl); + // } + + // return _contentControl; + // } + //} + + //private ITemplate _content; + + //[Category(CategoryName.OPTIONS)] + //[Description("面板内容")] + //[TemplateInstance(TemplateInstance.Single)] + //[Browsable(false)] + //[DefaultValue("")] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual ITemplate Content + //{ + // get + // { + // if (_content == null) + // { + // throw new Exception("必须设置 Content 属性。"); + // } + // return _content; + // } + // set + // { + // _content = value; + // } + //} + + //#endregion + + //#region CreateChildControls + + //protected override void CreateChildControls() + //{ + // base.CreateChildControls(); + + // // Content + // if (Content != null) + // { + // Controls.Add(ContentControl); + // } + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/Form.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/Form.cs new file mode 100644 index 0000000..ba4dd39 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/Form.cs @@ -0,0 +1,665 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Form.cs + * CreatedOn: 2008-04-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.ComponentModel.Design; + +namespace FineUI +{ + /// <summary> + /// 表单面板控件 + /// </summary> + [Designer("FineUI.Design.FormDesigner, FineUI.Design")] + [ToolboxData("<{0}:Form Title=\"Form\" BodyPadding=\"5px\" runat=\"server\"><Rows><{0}:FormRow runat=\"server\"></{0}:FormRow><{0}:FormRow runat=\"server\"></{0}:FormRow></Rows></{0}:Form>")] + [ToolboxBitmap(typeof(Form), "toolbox.Form.bmp")] + [Description("表单面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Form : FormBase + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Form() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override ControlBaseCollection Items + //{ + // get + // { + // return base.Items; + // } + //} + + + + #endregion + + #region Properties + + ///// <summary> + ///// 表单字段上按回车键触发的提交按钮 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("表单字段上按回车键触发的提交按钮")] + //public string SubmitButton + //{ + // get + // { + // object obj = FState["SubmitButton"]; + // return obj == null ? String.Empty : (string)obj; + // } + // set + // { + // FState["SubmitButton"] = value; + // } + //} + + #endregion + + #region FormRowItemsSpace + + /// <summary> + /// 表单行子项之间的间距 + /// </summary> + [Category(CategoryName.LAYOUT)] + [DefaultValue(typeof(Unit), ConfigPropertyValue.FORMROW_ITEMSSPACE_DEFAULT_STRING)] + [Description("表单行子项之间的间距")] + public Unit FormRowItemsSpace + { + get + { + object obj = FState["FormRowItemsSpace"]; + if (obj == null) + { + if (DesignMode) + { + return ConfigPropertyValue.FORMROW_ITEMSSPACE_DEFAULT; + } + else + { + return PageManager.Instance.FormRowItemsSpace; + } + } + return (Unit)obj; + } + set + { + FState["FormRowItemsSpace"] = value; + } + } + + #endregion + + #region Rows + + private FormRowCollection _rows; + + /// <summary> + /// 表单行控件集合 + /// </summary> + [Browsable(false)] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual FormRowCollection Rows + { + get + { + if (_rows == null) + { + _rows = new FormRowCollection(this); + } + return _rows; + } + } + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("form"); + + #region Options + + + + #endregion + + #region ResolveRows + + //// 包含行的列脚本 + //string rowScriptStr = String.Empty; + //// 行的集合 + //string rowItemScriptStr = String.Empty; + + //// 如果存在Rows集合 + //if (Rows.Count > 0) + //{ + // // rowScriptStr + // // rowItemScriptStr: [X.__Panel1_UpdatePanelConnector1_Panel7_Form5_row0,X.__Panel1_UpdatePanelConnector1_Panel7_Form5_row2] + // ResolveRows(ref rowScriptStr, ref rowItemScriptStr); + + // // 添加Items + // OB.RemoveProperty("items"); + // OB.AddProperty("items", rowItemScriptStr, true); + //} + + ////rowScriptStr += "\r\n"; + + + #endregion + + #region Rows + + if (Rows.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (FormRow row in Rows) + { + if (row.Visible) + { + ab.AddProperty(String.Format("{0}", row.XID), true); + } + } + + OB.AddProperty("items", ab.ToString(), true); + } + + #endregion + + + AddListener("dirtychange", "F.util.setPageStateChanged(dirty);", "form", "dirty"); + + + + string formPanelScript = String.Format("var {0}=F.create('Ext.form.Panel',{1});", XID, OB.ToString()); + + //string jsContent = rowScriptStr + formPanelScript; + AddStartupScript(formPanelScript); + } + + #region oldcode + ///// <summary> + ///// 处理列 + ///// </summary> + ///// <returns></returns> + //private void ResolveRows(ref string rowScriptsStr, ref string rowIdsStr) + //{ + // JsArrayBuilder rowIdsBuilder = new JsArrayBuilder(); + + // // 上一行的列数 + // int lastRowColumnCount = 1; + // // 上一行的列数 + // string lastRowColumnWidths = String.Empty; + // // 是否已经开始多列 + // bool isMultiColumnStarted = false; + // // 多列的开始行的序号 + // int multiColumnStartLineIndex = 0; + + // for (int i = 0, rowCount = Rows.Count; i < rowCount; i++) + // { + // FormRow currentRow = Rows[i]; + // int currentRowColumnCount = GetRowColumnCount(currentRow); + // string currentRowColumnWidths = currentRow.ColumnWidths; + + // if (currentRowColumnCount == 0) + // { + // // 如果当前行为空,则跳过此行 + // continue; + // } + // else if (currentRowColumnCount == 1) + // { + // if (isMultiColumnStarted) + // { + // // 如果上一行是多列行,则添加本行之上的所有行 + // rowScriptsStr += AddColumnScript(rowIdsBuilder, multiColumnStartLineIndex, i - 1, lastRowColumnCount); + // //rowScriptsStr += "\r\n"; + + // // 开始重置记录本行为多列的开始 + // isMultiColumnStarted = false; + // multiColumnStartLineIndex = 0; + // } + + // // 如果当前行的列数为1,则直接添加Field元素 + // //AddItemScript(ab, currentRow.Fields[0].ClientID); + // ControlBase component = GetRowColumnControl(currentRow, 0); + // if (component != null) + // { + // rowIdsBuilder.AddProperty(String.Format("{0}", component.XID), true); + // } + // } + // else + // { + // // 如果本行是多列 + // if (!isMultiColumnStarted) + // { + // // 如果上一行还是单列的话,则开始多列 + // isMultiColumnStarted = true; + // multiColumnStartLineIndex = i; + // } + // else + // { + // if (lastRowColumnCount == currentRowColumnCount && lastRowColumnWidths == currentRowColumnWidths) + // { + // // 如果上一行的列数和本行的列数相同(并且上一行每列的宽度和本行的每列宽度也一样),则继续下一行 + // } + // else + // { + // // 如果上一行的列数和本行的列数不相同,则添加本行之上的所有行 + // rowScriptsStr += AddColumnScript(rowIdsBuilder, multiColumnStartLineIndex, i - 1, lastRowColumnCount); + // //rowScriptsStr += "\r\n"; + + // // 开始重新记录本行为多列的开始 + // isMultiColumnStarted = true; + // multiColumnStartLineIndex = i; + // } + // } + // } + + + // lastRowColumnCount = currentRowColumnCount; + // lastRowColumnWidths = currentRowColumnWidths; + // } + + + // // 还要判断一下(如果最后一行是两列的情况) + // if (isMultiColumnStarted) + // { + // rowScriptsStr += AddColumnScript(rowIdsBuilder, multiColumnStartLineIndex, Rows.Count - 1, lastRowColumnCount); + // //rowScriptsStr += "\r\n"; + // } + + // rowIdsStr = rowIdsBuilder.ToString(); + //} + + ///// <summary> + ///// 添加列 + ///// </summary> + ///// <param name="rowIdsBuilder">行ID集合</param> + ///// <param name="startLineIndex">开始行的索引(包含)</param> + ///// <param name="endLineIndex">结束行的索引(包含)</param> + ///// <param name="columnCount">行的列数</param> + //private string AddColumnScript(JsArrayBuilder rowIdsBuilder, int startLineIndex, int endLineIndex, int columnCount) + //{ + // // 注意,注册脚本的控件应该是最后一个 Row + // // 假如有从上之下这些控件: Row1(Field1,Field2), Row2(Field3,Field4),Row3(Field5) + // // 则渲染时,JS脚本的执行顺序为:Field1,Field2,Row1,Field3,Field4,Row2,Field5,Row3 + // // 所以,如果column Panel的脚本注册为控件 Row3,则能保证所有的子控件已经初始化 + // // 需要注意的是:在此设置脚本内容到 Row3 控件 + // // 现在已经不是这样的了!!!,Row不在是一个控件 + + // #region examples + + + // // { + // // layout: 'column', + // // border:false, + // // items:[{ + // // columnWidth: .5, + // // layout: 'form', + // // border:false, + // // items:[{ + // // xtype:'combo', + // // store: nextStepStore, + // // displayField:'text', + // // valueField:'value', + // // typeAhead: true, + // // mode: 'local', + // // triggerAction: 'all', + // // value:'1', + // // emptyText:'请选择下一步', + // // selectOnFocus:true, + // // allowBlank:false, + // // fieldLabel: '下一步', + // // labelSeparator:' <span style="color:red;vertical-align:text-bottom;">*</span>', + // // name: 'nextStep', + // // anchor:'95%' + // // }] + // // },{ + // // columnWidth: .5, + // // layout: 'form', + // // border:false, + // // items:[{ + // // xtype:'combo', + // // store: executePersonStore, + // // displayField:'text', + // // valueField:'value', + // // typeAhead: true, + // // mode: 'local', + // // triggerAction: 'all', + // // value:'1', + // // emptyText:'请选择执行人', + // // selectOnFocus:true, + // // allowBlank:false, + // // fieldLabel: '执行人', + // // labelSeparator:' <span style="color:red;vertical-align:text-bottom;">*</span>', + // // name: 'executePerson', + // // anchor:'95%' + // // }] + // // }] + // // } + + + // #endregion + + + // // 最后一行 + // FormRow endLineRow = Rows[endLineIndex]; + // string rowId = String.Format("{0}_row{1}", XID, endLineIndex); + + + + // string defaultColumnWidthStr = (1.0 / columnCount).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); + // string[] columnWidths = ResolveColumnWidths(columnCount, Rows[startLineIndex].ColumnWidths, defaultColumnWidthStr); + + // // row_column + // JsArrayBuilder rowColumnScriptsBuilder = new JsArrayBuilder(); + // for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) + // { + // #region 计算每一列的值 + + // // 循环每一列 + // JsArrayBuilder fieldsAB = new JsArrayBuilder(); + // for (int rowIndex = startLineIndex; rowIndex <= endLineIndex; rowIndex++) + // { + // FormRow currentRow = Rows[rowIndex]; + + // if (columnIndex <= GetRowColumnCount(currentRow) - 1) + // { + // ControlBase component = GetRowColumnControl(currentRow, columnIndex); + // if (component != null) + // { + // fieldsAB.AddProperty(String.Format("{0}", component.XID), true); + // } + // } + // } + + // // 当前列的创建JS + // JsObjectBuilder columnOB = new JsObjectBuilder(); + // string columnWidth = columnWidths[columnIndex]; + // if (Convert.ToDouble(columnWidth) <= 1.0) + // { + // columnOB.AddProperty("columnWidth", columnWidths[columnIndex], true); + // } + // else + // { + // columnOB.AddProperty("width", columnWidths[columnIndex], true); + // } + + // columnOB.AddProperty("layout", "anchor"); + // columnOB.AddProperty("border", false); + // columnOB.AddProperty("id", rowId + "_column" + columnIndex.ToString()); + + // // 如果不是最后一列,则默认距离右侧 5px + // if (columnIndex != columnCount - 1) + // { + // columnOB.AddProperty("margin", "0 5 0 0"); + // } + + // // 有可能为空 + // if (fieldsAB.Count > 0) + // { + // columnOB.AddProperty("items", fieldsAB.ToString(), true); + // } + + + // rowColumnScriptsBuilder.AddProperty(columnOB.ToString(), true); + + // // 现在采取的是安全的ajax,不会出现下面的情况 + // //// 所有Layout=form的地方必须用Ext.FormPanel,否则删除时不会把FieldLabek删除掉 + // //rowColumnScriptsBuilder.AddProperty(String.Format("new Ext.FormPanel({0})", columnOB.ToString()), true); + + // #endregion + // } + + // // 外面的JS(X.__Panel1_UpdatePanelConnector1_Panel7_Form5_row0) + // JsObjectBuilder rowBuilder = new JsObjectBuilder(); + // rowBuilder.AddProperty("layout", "column"); + // rowBuilder.AddProperty("border", false); + + + + // // 有可能为空 + // if (rowColumnScriptsBuilder.Count > 0) + // { + // rowBuilder.AddProperty("items", rowColumnScriptsBuilder.ToString(), true); + // } + + + // // 把当前节点添加到结果集合中 + // rowIdsBuilder.AddProperty(String.Format("{0}", rowId), true); + // rowBuilder.AddProperty("id", rowId); + + // // 注意要注册 最后 一个 Row的脚本 + // return String.Format("var {0}=F.create('Ext.panel.Panel',{1});", rowId, rowBuilder.ToString()); + //} + + ///// <summary> + ///// 添加Items变量 + ///// </summary> + ///// <param name="ab"></param> + ///// <param name="id"></param> + ///// <returns></returns> + //private void AddItemScript(JsArrayBuilder ab, string id) + //{ + // ab.AddProperty(String.Format("{0}", id), true); + //} + + ///// <summary> + ///// 取得当前行的列数 + ///// </summary> + ///// <param name="row"></param> + ///// <returns></returns> + //private int GetRowColumnCount(FormRow row) + //{ + // int fieldCount = 0; + + // foreach (Control c in row.Controls) + // { + // if (c is ControlBase) + // { + // fieldCount++; + // } + // } + + // #region old code + // //if (row.ColumnCount == null) + // //{ + // // return fieldCount; + // //} + // //else + // //{ + // // if (row.ColumnCount.Value > fieldCount) + // // { + // // return row.ColumnCount.Value; + // // } + // // else + // // { + // // return fieldCount; + // // } + // //} + // #endregion + + // return fieldCount; + //} + + ///// <summary> + ///// 取得当前行 columnIndex 列的控件 + ///// </summary> + ///// <param name="row"></param> + ///// <param name="columnIndex"></param> + ///// <returns></returns> + //private ControlBase GetRowColumnControl(FormRow row, int columnIndex) + //{ + // int index = 0; + // foreach (Control c in row.Controls) + // { + // if (c is ControlBase) + // { + // if (columnIndex == index) + // { + // return c as ControlBase; + // } + + // index++; + // } + // } + + // return null; + //} + + //private string[] ResolveColumnWidths(int columnCount, string columnWidths, string defaultColumnWidthStr) + //{ + // string[] results = null; + // if (!String.IsNullOrEmpty(columnWidths)) + // { + // string[] columnWidthArray = columnWidths.Split(' '); + // if (columnWidthArray.Length == columnCount) + // { + // results = columnWidthArray; + // } + // } + + // if (results == null) + // { + // results = new string[columnCount]; + // for (int i = 0; i < columnCount; i++) + // { + // results[i] = defaultColumnWidthStr; + // } + // } + + // return results; + //} + #endregion + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRow.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRow.cs new file mode 100644 index 0000000..56d6ef2 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRow.cs @@ -0,0 +1,729 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: FormRow.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + + +namespace FineUI +{ + /// <summary> + /// 表单行控件 + /// </summary> + [Designer("FineUI.Design.FormRowDesigner, FineUI.Design")] + //[ToolboxData("<{0}:FormRow runat=\"server\"></{0}:FormRow>")] + //[ToolboxBitmap(typeof(FormRow), "toolbox.FormRow.bmp")] + //[Description("表单行控件")] + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class FormRow : Container + { + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override Layout Layout + { + get + { + return Layout.Column; + } + } + + + #endregion + + #region Properties + + ///// <summary> + ///// 各列的宽度,空格分割 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[DefaultValue("")] + //[Description("各列的宽度,空格分割")] + //public string ColumnWidths + //{ + // get + // { + // object obj = FState["ColumnWidths"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["ColumnWidths"] = ResolveColumnWidths(value); + // } + //} + + /// <summary> + /// 以空格分开的各列宽度(可以是像素数或者百分比,比如200px 50% 50%) + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [DefaultValue("")] + [Description("以空格分开的各列宽度(可以是像素数或者百分比,比如200px 50% 50%)")] + public string ColumnWidths + { + get + { + object obj = FState["ColumnWidths"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["ColumnWidths"] = value; + } + } + + #endregion + + #region Items + + private ControlBaseCollection _items; + + /// <summary> + /// 子控件集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(ControlBaseItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ControlBaseCollection Items + { + get + { + if (_items == null) + { + _items = new ControlBaseCollection(this); + } + return _items; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + OB.AddProperty("border", false); + OB.AddProperty("header", false); + + Form parentForm = Parent as Form; + if (parentForm == null) + { + return; + } + + int formrowItemsSpace = Convert.ToInt32(parentForm.FormRowItemsSpace.Value); + + + if (Items.Count > 0) + { + #region oldcode + /* + * 增加中间的分割面板,会对显示隐藏表单字段造成影响 + int currentItemCount = 0; + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (ControlBase item in Items) + { + if (item.Visible) + { + if (currentItemCount > 0) + { + OptionBuilder separatorOB = new OptionBuilder(); + separatorOB.AddProperty("type", "panelbase"); + separatorOB.AddProperty("width", 8); + ab.AddProperty(String.Format("{0}", separatorOB), true); + } + ab.AddProperty(String.Format("{0}", item.XID), true); + currentItemCount++; + } + } + OB.AddProperty("items", ab.ToString(), true); + */ + + #endregion + + // 为子项添加布局属性 + int columnCount = Items.Count; + string defaultColumnWidthStr = (1.0 / columnCount).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); + List<string> columnWidths = GetTrimedColumnWidths(); + + // 用户自定义ColumnWidths是否和Items的个数匹配 + bool isColumnWidthsMatch = false; + if (columnWidths.Count == columnCount) + { + isColumnWidthsMatch = true; + } + + Dictionary<string, JsObjectBuilder> buttonOptions = new Dictionary<string, JsObjectBuilder>(); + for (int i = 0; i < columnCount; i++) + { + var comp = Items[i] as Component; + + // 如果FormRow的子项是 Button,则用一个面板将其包裹起来,否则按钮的宽度会很长 + bool isbutton = false; + JsObjectBuilder buttonPanelOB = new JsObjectBuilder(); + if (comp is Button) + { + isbutton = true; + + buttonPanelOB.AddProperty("xtype", "panel"); + buttonPanelOB.AddProperty("header", false); + buttonPanelOB.AddProperty("border", false); + + buttonPanelOB.AddProperty("items", String.Format("[{0}]", comp.XID), true); + } + + #region Component + if (comp != null) + { + // 不是最后一列的话,加上空白间隔 + if (columnCount > 1 && i != columnCount - 1) + { + if (isbutton) + { + //buttonOB.AddProperty("marginRight", formrowItemsSpace); + buttonPanelOB.AddProperty("style", String.Format("margin-right:{0}px;", formrowItemsSpace)); + } + else + { + //// 如果尚未设置 MarginRight + //if (comp.MarginRight == Unit.Empty) + //{ + // comp.MarginRight = Unit.Pixel(formrowItemsSpace); + //} + //if (String.IsNullOrEmpty(comp.Margin)) + //{ + // comp.Margin = String.Format("0 {0} 0 0", formrowItemsSpace); + //} + comp.CssStyle += String.Format("margin-right:{0}px;", formrowItemsSpace); + } + } + } + #endregion + + #region BoxComponent + var boxcomp = comp as BoxComponent; + if (boxcomp != null) + { + if (isColumnWidthsMatch) + { + string columnWidth = StringUtil.ConvertPercentageToDecimalString(columnWidths[i]); + if (Convert.ToDouble(columnWidth) <= 1.0) + { + if (isbutton) + { + buttonPanelOB.AddProperty("columnWidth", columnWidth, true); + } + else + { + boxcomp.ColumnWidth = columnWidth; + } + } + else + { + Unit unitColumnWidth = Unit.Parse(columnWidth); + + if (isbutton) + { + buttonPanelOB.AddProperty("width", unitColumnWidth.Value); + } + else + { + boxcomp.Width = unitColumnWidth; + } + } + } + else + { + if (isbutton) + { + buttonPanelOB.AddProperty("columnWidth", defaultColumnWidthStr, true); + } + else + { + boxcomp.ColumnWidth = defaultColumnWidthStr; + } + } + } + #endregion + + if (isbutton) + { + buttonOptions.Add(comp.XID, buttonPanelOB); + } + } + + + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (ControlBase item in Items) + { + if (item.Visible) + { + string itemXID = item.XID; + if (buttonOptions.ContainsKey(itemXID)) + { + itemXID = buttonOptions[itemXID].ToString(); + } + + ab.AddProperty(itemXID, true); + } + } + OB.AddProperty("items", ab.ToString(), true); + } + + // 自定义样式 + OB.AddProperty("cls", "f-formrow"); + + string jsContent = String.Format("var {0}=F.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + ////// 目的:子控件的JS代码在父控件的前面 + ////AddStartupScript(this, String.Empty); + //AddStartupScript(String.Empty); + } + + + private List<string> GetTrimedColumnWidths() + { + List<string> widths = new List<string>(); + foreach (string width in ColumnWidths.Split(' ')) + { + string trimedWith = width.Trim(); + if (!String.IsNullOrEmpty(trimedWith)) + { + widths.Add(trimedWith); + } + } + return widths; + } + + #endregion + + #region private ResolveColumnWidths + + ///// <summary> + ///// 格式化widths + ///// </summary> + ///// <param name="widths"></param> + ///// <returns></returns> + //private string ResolveColumnWidths(string widths) + //{ + // List<string> widthList = new List<string>(); + + // string[] widthArray = widths.Split(' '); + // foreach (string s in widthArray) + // { + // string tmp = s.Trim(); + // if (!String.IsNullOrEmpty(tmp)) + // { + // widthList.Add(ResolveColumnWidth(tmp)); + // } + // } + + // StringBuilder sb = new StringBuilder(); + // foreach (string s in widthList) + // { + // sb.AppendFormat("{0} ", s); + // } + + // return sb.ToString().TrimEnd(); + //} + + //private string ResolveColumnWidth(string width) + //{ + // string result = width; + // if (result.EndsWith("%")) + // { + // result = (Convert.ToInt32(width.TrimEnd('%')) * 0.01).ToString("F2", System.Globalization.CultureInfo.InvariantCulture); + // } + // else if (result.ToLower().EndsWith("px")) + // { + // result = result.ToLower().Substring(0, result.Length - 2); + // } + + // return result; + //} + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + //#region readonly Items + + //private List<ControlBase> _items; + + ///// <summary> + ///// 从AddParsedSubObject解析出来的内容 + ///// </summary> + //internal List<ControlBase> Items + //{ + // get + // { + // if (_items == null) + // { + // _items = new List<ControlBase>(); + // } + + // return _items; + // } + //} + + //#endregion + + // #region AddParsedSubObject + + //protected override void AddParsedSubObject(object obj) + //{ + // ControlBase c = obj as ControlBase; + // if (c != null) + // { + // c.RenderImmediately = false; + // base.AddParsedSubObject(c); + + // Items.Add(c); + // } + + //} + + // #endregion + + //#region override LoadViewState/SaveViewState + + //protected override void LoadViewState(object state) + //{ + // object[] states = (object[])state; + + // base.LoadViewState(states[0]); + + // for (int i = 0, count = Items.Count; i < count; i++) + // { + // ((IStateManager)Items[i]).LoadViewState(states[i + 1]); + // } + //} + + //protected override object SaveViewState() + //{ + // object[] states = new object[Items.Count + 1]; + + // states[0] = base.SaveViewState(); + + // for (int i = 0, count = Items.Count; i < count; i++) + // { + // states[i + 1] = ((IStateManager)Items[i]).SaveViewState(); + // } + + // return states; + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // for (int i = 0, count = Items.Count; i < count; i++) + // { + // ((IStateManager)Items[i]).TrackViewState(); + // } + //} + + //#endregion + + //#region SetDirty + + //protected override void SetDirty() + //{ + // base.SetDirty(); + + // for (int i = 0, count = Items.Count; i < count; i++) + // { + // ((ISetDirty)Items[i]).SetDirty(); + // } + //} + + //#endregion + + #endregion + + #region old code + //#region Controls + + //private List<ControlBase> _controls; + + //public List<ControlBase> Controls + //{ + // get + // { + // if (_controls == null) + // { + // _controls = new List<ControlBase>(); + // } + // return _controls; + // } + // set + // { + // _controls = value; + // } + //} + + //#endregion + + //#region IParserAccessor Members + + //public void AddParsedSubObject(object obj) + //{ + // ControlBase control = obj as ControlBase; + + // if (control != null) + // { + // Controls.Add(control); + // } + //} + + //#endregion + + //#region override ViewState + + //public override void TrackViewState() + //{ + // base.TrackViewState(); + + // foreach (ControlBase control in Controls) + // { + // ((IStateManager)control).TrackViewState(); + // } + //} + + //public override object SaveViewState() + //{ + // int index = 0; + // foreach (ControlBase control in Controls) + // { + // BoxState["control" + index] = ((IStateManager)control).SaveViewState(); + + // index++; + // } + + // return base.SaveViewState(); + //} + + //public override void LoadViewState(object state) + //{ + // base.LoadViewState(state); + + // int index = 0; + // foreach (ControlBase control in Controls) + // { + // ((IStateManager)control).LoadViewState(BoxState["control" + index]); + + // index++; + // } + //} + + + //#endregion + #endregion + + #region old code + + #region Properties + + //private int? ColumnCount_Default = null; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(null)] + //[Description("本行有几列")] + //public int? ColumnCount + //{ + // get + // { + // object obj = BoxState["ColumnCount"]; + // return obj == null ? ColumnCount_Default : (int?)obj; + // } + // set + // { + // BoxState["ColumnCount"] = value; + // } + //} + + #endregion + + #region old code + + //#region AddParsedSubObject + + //protected override void AddParsedSubObject(object obj) + //{ + // ControlBase c = obj as ControlBase; + // if (c != null) + // { + // c.RenderImmediately = false; + // base.AddParsedSubObject(c); + // } + //} + + //#endregion + + //#region OnPreRender + + //protected override void OnPreRender(EventArgs e) + //{ + // base.OnPreRender(e); + + // AddStartupScript(this, String.Empty); + //} + + //#endregion + + //#region IStateManager Members + + //bool IStateManager.IsTrackingViewState + //{ + // get { return base.IsTrackingViewState; } + //} + + //void IStateManager.LoadViewState(object state) + //{ + // base.LoadViewState(state); + //} + + //object IStateManager.SaveViewState() + //{ + // return base.SaveViewState(); + //} + + //void IStateManager.TrackViewState() + //{ + // base.TrackViewState(); + //} + + //#endregion + + #endregion + + #region old code + + //#region Fields + + //private FieldCollection _fields; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual FieldCollection Fields + //{ + // get + // { + // if (_fields == null) + // { + // _fields = new FieldCollection(); + // } + // return _fields; + // } + //} + //#endregion + + + + #endregion + + #endregion + + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRowCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRowCollection.cs new file mode 100644 index 0000000..3fe013d --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Form/FormRow/FormRowCollection.cs @@ -0,0 +1,114 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: FormRowCollection.cs + * CreatedOn: 2008-04-23 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 表单行控件集合 + /// </summary> + public class FormRowCollection : BaseCollection<FormRow> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public FormRowCollection(Form parent) + : base(parent) + { + + } + /* + private Form form; + private Control _control; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="form">表单实例</param> + public FormRowCollection(Form form) + { + this.form = form; + _control = new Control(); + form.Controls.Add(_control); + } + + protected override void InsertItem(int index, FormRow item) + { + item.RenderWrapperNode = false; + _control.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + _control.Controls.RemoveAt(index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + _control.Controls.Clear(); + + base.ClearItems(); + } + */ + + /* + protected override void InsertItem(int index, FormRow item) + { + item.RenderWrapperNode = false; + form.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + form.Controls.RemoveAt(index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + // We should only remove this collection related controls + // Note we must loop from the last element(Count-1) to the first one(0) + for (int i = Count - 1; i >= 0; i--) + { + form.Controls.RemoveAt(i); + } + + base.ClearItems(); + } + */ + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.GroupPanel/GroupPanel.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.GroupPanel/GroupPanel.cs new file mode 100644 index 0000000..4f20958 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.GroupPanel/GroupPanel.cs @@ -0,0 +1,200 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: GroupPanel.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 分组面板控件 + /// </summary> + [Designer("FineUI.Design.GroupPanelDesigner, FineUI.Design")] + [ToolboxData("<{0}:GroupPanel Title=\"GroupPanel\" EnableCollapse=\"True\" runat=server><Items></Items></{0}:GroupPanel>")] + [ToolboxBitmap(typeof(GroupPanel), "toolbox.GroupPanel.bmp")] + [Description("分组面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class GroupPanel : CollapsablePanel + { + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowHeader + { + get + { + return base.ShowHeader; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowBorder + { + get + { + return base.ShowBorder; + } + } + + #endregion + + #region Properties + + + //private HtmlGenericControl _contentControl; + ///// <summary> + ///// 创建的Content控件 + ///// </summary> + //protected HtmlGenericControl ContentControl + //{ + // get + // { + // if (_contentControl == null) + // { + // _contentControl = new HtmlGenericControl("div"); + // _contentControl.ID = "content"; + // } + + // return _contentControl; + // } + //} + + /// <summary> + /// 布局类型 + /// </summary> + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Anchor)] + [Description("布局类型")] + public override Layout Layout + { + get + { + object obj = FState["Layout"]; + return obj == null ? Layout.Anchor : (Layout)obj; + } + set + { + FState["Layout"] = value; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("form"); + + + string jsContent = String.Format("var {0}=F.create('Ext.form.FieldSet',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Panel/Panel.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Panel/Panel.cs new file mode 100644 index 0000000..fa36ba7 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Panel/Panel.cs @@ -0,0 +1,176 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Panel.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 面板控件 + /// </summary> + [Designer("FineUI.Design.PanelDesigner, FineUI.Design")] + [ToolboxData("<{0}:Panel Title=\"Panel\" BodyPadding=\"5px\" ShowHeader=\"true\" ShowBorder=\"true\" runat=\"server\"><Items></Items></{0}:Panel>")] + [ToolboxBitmap(typeof(Panel), "toolbox.Panel.bmp")] + [Description("面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Panel : CollapsablePanel + { + + #region Properties + + + //private HtmlGenericControl _contentControl; + ///// <summary> + ///// 创建的Content控件 + ///// </summary> + //protected HtmlGenericControl ContentControl + //{ + // get + // { + // if (_contentControl == null) + // { + // _contentControl = new HtmlGenericControl("div"); + // _contentControl.ID = "content"; + // } + + // return _contentControl; + // } + //} + + #endregion + + #region oldcodes + + //private ControlBaseCollection _items; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual ControlBaseCollection Items + //{ + // get + // { + // if (_items == null) + // { + // _items = new ControlBaseCollection(this); + + // //if (base.IsTrackingViewState) + // //{ + // // ((IStateManager)_rows).TrackViewState(); + // //} + // } + // return _items; + // } + //} + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + //OB.AddProperty(OptionName.Layout, LayoutTypeName.GetName(LayoutType.Fit)); + + string jsContent = String.Format("var {0}=F.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.SimpleForm/SimpleForm.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.SimpleForm/SimpleForm.cs new file mode 100644 index 0000000..b78a070 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.SimpleForm/SimpleForm.cs @@ -0,0 +1,313 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: SimpleForm.cs + * CreatedOn: 2008-04-22 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 简单的表单容器控件 + /// </summary> + [Designer("FineUI.Design.SimpleFormDesigner, FineUI.Design")] + [ToolboxData("<{0}:SimpleForm Title=\"SimpleForm\" BodyPadding=\"5px\" runat=server><Items></Items></{0}:SimpleForm>")] + [ToolboxBitmap(typeof(SimpleForm), "toolbox.SimpleForm.bmp")] + [Description("简单的表单容器控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class SimpleForm : FormBase + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public SimpleForm() + { + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + + + #endregion + + #region Properties + + ///// <summary> + ///// 表单字段上按回车键触发的提交按钮 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("表单字段上按回车键触发的提交按钮")] + //public string SubmitButton + //{ + // get + // { + // object obj = FState["SubmitButton"]; + // return obj == null ? String.Empty : (string)obj; + // } + // set + // { + // FState["SubmitButton"] = value; + // } + //} + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("form"); + + #region Options + + + + + #endregion + + //OptionBuilder defaultsOB = new OptionBuilder(); + //defaultsOB.Listeners.AddProperty("click", JsHelper.GetFunction("alert('ss');F.util.setPageStateChanged();"), true); + //OB.AddProperty("defaults", defaultsOB); + + //OB.Listeners.AddProperty("dirtychange", JsHelper.GetFunction("F.util.setPageStateChanged(dirty);", "form", "dirty"), true); + AddListener("dirtychange", "F.util.setPageStateChanged(dirty);", "form", "dirty"); + + //if (!String.IsNullOrEmpty(SubmitButton)) + //{ + // Control control = ControlUtil.FindControl(SubmitButton); + // if (control != null && control is ControlBase) + // { + // OB.Listeners.AddProperty("render", JsHelper.GetFunction("F.util.formEnterKey(form,'" + control.ClientID + "');", "form"), true); + // } + //} + + /* + Ext.override(Ext.form.Panel, { + listeners: { + render: function () { + F.create('Ext.util.KeyNav', this.el, { + "enter": function (e) { + var el = Ext.Element.getActiveElement(); + if (el.type != 'textarea') { + var b = Ext.DomQuery.select('div[id=' + this.getId() + ']'); + var a = Ext.DomQuery.select('*[type=submit]', b[0]); + if (a[0]) { + a[0].click(); + } + } else { + // The user is in a textarea in the form so this feature + // is diabled to allow for character returns + // in field data. + } + }, + scope: this + }); + } + } + }); + */ + + + string jsContent = String.Format("var {0}=F.create('Ext.form.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + #endregion + + #region oldcode + + //private ControlBaseCollection _items; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual ControlBaseCollection Items + //{ + // get + // { + // if (_items == null) + // { + // _items = new ControlBaseCollection(this); + // } + // return _items; + // } + //} + + //#endregion + + //#region CreateChildControls + + //protected override void CreateChildControls() + //{ + // base.CreateChildControls(); + + + // //// 添加子控件 + // //foreach (ControlBase item in Items) + // //{ + // // item.RenderWrapperDiv = false; + // // Controls.Add(item); + // //} + //} + + #endregion + + #region oldcode + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + //#region Fields + + //private FieldCollection _fields; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //[Browsable(false)] + //[Description("表单字段集合")] + //public virtual FieldCollection Fields + //{ + // get + // { + // if (_fields == null) + // { + // _fields = new FieldCollection(); + + // if (base.IsTrackingViewState) + // { + // ((IStateManager)_fields).TrackViewState(); + // } + // } + // return _fields; + // } + //} + //#endregion + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[] { base.SaveViewState(), ((IStateManager)Fields).SaveViewState() }; + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Fields).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Fields).TrackViewState(); + //} + + //#endregion + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCheckEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCheckEventArgs.cs new file mode 100644 index 0000000..a1001b7 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCheckEventArgs.cs @@ -0,0 +1,89 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeCheckEventArgs.cs + * CreatedOn: 2008-09-14 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ڵѡ¼ + /// </summary> + public class TreeCheckEventArgs : EventArgs + { + private TreeNode _node; + + /// <summary> + /// ڵ + /// </summary> + public TreeNode Node + { + get { return _node; } + set { _node = value; } + } + + + private string _nodeID; + + /// <summary> + /// ڵID + /// </summary> + public string NodeID + { + get { return _nodeID; } + set { _nodeID = value; } + } + + private bool _checked; + + /// <summary> + /// Ƿѡ + /// </summary> + public bool Checked + { + get { return _checked; } + set { _checked = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="node">ڵ</param> + /// <param name="isChecked">Ƿѡ</param> + public TreeCheckEventArgs(TreeNode node, bool isChecked) + { + _node = node; + _nodeID = node.NodeID; + _checked = isChecked; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCommandEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCommandEventArgs.cs new file mode 100644 index 0000000..b3d1f97 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeCommandEventArgs.cs @@ -0,0 +1,105 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeCommandEventArgs.cs + * CreatedOn: 2008-07-22 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + + /// <summary> + /// ڵ¼ + /// </summary> + public class TreeCommandEventArgs : EventArgs + { + private TreeNode _node; + + /// <summary> + /// ʵ + /// </summary> + public TreeNode Node + { + get { return _node; } + set { _node = value; } + } + + private string _nodeID; + + /// <summary> + /// ڵID + /// </summary> + public string NodeID + { + get { return _nodeID; } + set { _nodeID = value; } + } + + + private string _commandName; + + /// <summary> + /// + /// </summary> + public string CommandName + { + get { return _commandName; } + set { _commandName = value; } + } + + + private string _commandArgument; + + /// <summary> + /// + /// </summary> + public string CommandArgument + { + get { return _commandArgument; } + set { _commandArgument = value; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="node">ڵ</param> + /// <param name="commandName"></param> + /// <param name="commandArgument"></param> + public TreeCommandEventArgs(TreeNode node, string commandName, string commandArgument) + { + _node = node; + _nodeID = node.NodeID; + _commandName = commandName; + _commandArgument = commandArgument; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeExpandEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeExpandEventArgs.cs new file mode 100644 index 0000000..663896e --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeExpandEventArgs.cs @@ -0,0 +1,76 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeExpandEventArgs.cs + * CreatedOn: 2008-07-22 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ڵչ¼ + /// </summary> + public class TreeExpandEventArgs : EventArgs + { + private TreeNode _node; + + /// <summary> + /// ʵ + /// </summary> + public TreeNode Node + { + get { return _node; } + set { _node = value; } + } + + + private string _nodeID; + + /// <summary> + /// ڵID + /// </summary> + public string NodeID + { + get { return _nodeID; } + set { _nodeID = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="node">ڵ</param> + public TreeExpandEventArgs(TreeNode node) + { + _node = node; + _nodeID = node.NodeID; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeNodeEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeNodeEventArgs.cs new file mode 100644 index 0000000..a428f54 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreeNodeEventArgs.cs @@ -0,0 +1,101 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeNodeEventArgs.cs + * CreatedOn: 2014-03-28 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Xml; + + +namespace FineUI +{ + /// <summary> + /// ڵչ¼ + /// </summary> + public class TreeNodeEventArgs : EventArgs + { + private TreeNode _node; + + /// <summary> + /// ʵ + /// </summary> + public TreeNode Node + { + get { return _node; } + set { _node = value; } + } + + + private string _nodeID; + + /// <summary> + /// ڵID + /// </summary> + public string NodeID + { + get { return _nodeID; } + set { _nodeID = value; } + } + + private XmlNode _xmlNode; + + /// <summary> + /// ڵԴ + /// </summary> + public XmlNode XmlNode + { + get { return _xmlNode; } + set { _xmlNode = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="node">ڵ</param> + public TreeNodeEventArgs(TreeNode node) + { + _node = node; + _nodeID = node.NodeID; + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="node">ڵ</param> + /// <param name="xmlNode">ڵԴ</param> + public TreeNodeEventArgs(TreeNode node, XmlNode xmlNode) + { + _node = node; + _nodeID = node.NodeID; + _xmlNode = xmlNode; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreePreNodeEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreePreNodeEventArgs.cs new file mode 100644 index 0000000..ce834fc --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/EventArgs/TreePreNodeEventArgs.cs @@ -0,0 +1,77 @@ + +#region Comment + +/* + * Project FineUIPro + * + * FileName: TreePreNodeEventArgs.cs + * CreatedOn: 2014-09-13 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Xml; + + +namespace FineUI +{ + /// <summary> + /// ڵԤ¼ + /// </summary> + public class TreePreNodeEventArgs : EventArgs + { + private bool _cancelled = false; + + /// <summary> + /// Ƿȡӱڵ + /// </summary> + public bool Cancelled + { + get { return _cancelled; } + set { _cancelled = value; } + } + + + + private XmlNode _xmlNode; + + /// <summary> + /// ڵԴ + /// </summary> + public XmlNode XmlNode + { + get { return _xmlNode; } + set { _xmlNode = value; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="xmlNode">ڵԴ</param> + public TreePreNodeEventArgs(XmlNode xmlNode) + { + _xmlNode = xmlNode; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/Tree.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/Tree.cs new file mode 100644 index 0000000..e84d94b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/Tree.cs @@ -0,0 +1,2626 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Tree.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using System.Web.UI.HtmlControls; +using System.Data; +using System.Xml; + +namespace FineUI +{ + /// <summary> + /// 树控件 + /// </summary> + [Designer("FineUI.Design.TreeDesigner, FineUI.Design")] + [ToolboxData("<{0}:Tree Title=\"Tree\" AutoScroll=\"true\" runat=\"server\"></{0}:Tree>")] + [ToolboxBitmap(typeof(Tree), "toolbox.Tree.bmp")] + [Description("树控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Tree : CollapsablePanel, IPostBackDataHandler, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Tree() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("F_Nodes", "SelectedNodeIDArray"); + + //AddGzippedAjaxProperties("F_Nodes"); + } + + //internal int NodeIDIncrement = 0; + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Container)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Container; + } + } + + #endregion + + #region Properties + + + /// <summary> + /// 单击切换节点的折叠展开状态 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("单击切换节点的折叠展开状态")] + public bool EnableSingleClickExpand + { + get + { + object obj = FState["EnableSingleClickExpand"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableSingleClickExpand"] = value; + } + } + + /// <summary> + /// 启用箭头 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用箭头")] + public bool EnableArrows + { + get + { + object obj = FState["EnableArrows"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableArrows"] = value; + } + } + + /// <summary> + /// 启用节点之间连线 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用节点之间连线")] + public bool EnableLines + { + get + { + object obj = FState["EnableLines"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableLines"] = value; + } + } + + /// <summary> + /// 启用动画 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用动画")] + public bool EnableAnimate + { + get + { + object obj = FState["EnableAnimate"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableAnimate"] = value; + } + } + + /// <summary> + /// 每次只能展开一个 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("每次只能展开一个")] + public bool EnableSingleExpand + { + get + { + object obj = FState["EnableSingleExpand"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableSingleExpand"] = value; + } + } + + + + + /// <summary> + /// 启用图标 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用图标")] + public bool EnableIcons + { + get + { + object obj = FState["EnableIcons"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableIcons"] = value; + } + } + + /// <summary> + /// 自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性(默认:true) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("自动标识没有子节点的节点为叶子节点,而不必为每个设置设置 Leaf 属性")] + public bool AutoLeafIdentification + { + get + { + object obj = FState["AutoLeafIdentification"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["AutoLeafIdentification"] = value; + } + } + + + /// <summary> + /// 启用多行选择 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用多行选择")] + public bool EnableMultiSelect + { + get + { + object obj = FState["EnableMultiSelect"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableMultiSelect"] = value; + } + } + + /// <summary> + /// 启用树中的文字选择 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用树中的文字选择")] + public bool EnableTextSelection + { + get + { + object obj = FState["EnableTextSelection"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableTextSelection"] = value; + } + } + + + #endregion + + #region DataSource + + private object _dataSource; + + /// <summary> + /// 数据源 + /// </summary> + [DefaultValue(null)] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + #endregion + + #region Nodes + + private TreeNodeCollection _nodes; + + /// <summary> + /// 树节点集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Description("树节点集合")] + public virtual TreeNodeCollection Nodes + { + get + { + if (_nodes == null) + { + // 如果不加上 DesignMode 的判断,则在设计时出现如下错误 + // 无法从TreeInstance属性的字符串表示形式创建FineUI.Tree类型的对象 + if (DesignMode) + { + _nodes = new TreeNodeCollection(null, null); + } + else + { + _nodes = new TreeNodeCollection(this, null); + } + } + return _nodes; + } + } + #endregion + + #region SelectedNodeIDArray + + /// <summary> + /// 选中的树节点 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public TreeNode SelectedNode + { + get + { + return FindNode(SelectedNodeID); + } + } + + /// <summary> + /// [AJAX属性]选中的树节点ID + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]选中的行节点ID")] + public string SelectedNodeID + { + get + { + if (SelectedNodeIDArray.Length > 0) + { + return SelectedNodeIDArray[0]; + } + else + { + return String.Empty; + } + } + set + { + SelectedNodeIDArray = new string[] { value }; + } + } + + /// <summary> + /// [AJAX属性]选中的树节点ID列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中的行节点ID列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] SelectedNodeIDArray + { + get + { + object obj = FState["SelectedNodeIDArray"]; + return obj == null ? new string[] { } : (string[])obj; + } + set + { + // 排序主要是为了拿两次的值做比较 + FState["SelectedNodeIDArray"] = GetSortedArray(value).ToArray(); + } + } + + private List<string> GetSortedArray(string[] value) + { + List<string> list = new List<string>(); + if (value != null) + { + list.AddRange(value); + list.Sort(); + } + return list; + } + + #endregion + + #region Mappings + + private XmlAttributeMappingCollection _mappings; + + /// <summary> + /// 树控件属性与数据源节点的映射关系 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Description("树控件属性与数据源节点的映射关系")] + public virtual XmlAttributeMappingCollection Mappings + { + get + { + if (_mappings == null) + { + _mappings = new XmlAttributeMappingCollection(); + } + return _mappings; + } + } + #endregion + + #region HiddenFieldID + + /// <summary> + /// 选中行 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedNodeIDArrayHiddenFieldID + { + get + { + return String.Format("{0}_SelectedNodeIDArray", ClientID); + } + } + + /// <summary> + /// 展开的节点列表 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string ExpandedNodesHiddenFieldID + { + get + { + return String.Format("{0}_ExpandedNodes", ClientID); + } + } + + /// <summary> + /// 选中的节点列表 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string CheckedNodesHiddenFieldID + { + get + { + return String.Format("{0}_CheckedNodes", ClientID); + } + } + + + #endregion + + #region F_Nodes + + /// <summary> + /// 树节点集合的 JSON 表示(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JArray F_Nodes + { + get + { + return GetNodesJArray(Nodes); + } + set + { + // 从请求中恢复 Nodes 属性,这个 set 方法在 OnInit 中被调用 + Nodes.Clear(); + FromNodesJArray(value, Nodes); + } + } + + #region FromNodesJArray GetNodesJArray + + private void FromNodesJArray(JArray ja, TreeNodeCollection nodes) + { + foreach (JArray ja2 in ja) + { + TreeNode treeNode = new TreeNode(); + nodes.Add(treeNode); + + // 0 - Text + // 1 - Leaf + // 2 - NodeID + // 3 - Enabled + // 4 - EnableCheckBox + // 5 - Checked + // 6 - Expanded + // 7 - NavigateUrl + // 8 - Target + // 9 - href + // 10 - Icon + // 11 - IconUrl + // 12 - iconUrl - 这个是客户端用来生成图标的 + // 13 - ToolTip + // 14 - OnClientClick + // 15 - EnableClickEvent + // 16 - CommandName + // 17 - CommandArgument + + // 18 - EnableCheckEvent + // 19 - EnableExpandEvent + // 20 - EnableCollapseEvent + + // 21 - Nodes + treeNode.Text = ja2[0].Value<string>(); //ja2.getString(0); + treeNode.Leaf = ja2[1].Value<int>() == 1 ? true : false; + treeNode.NodeID = ja2[2].Value<string>(); ; + treeNode.Enabled = ja2[3].Value<int>() == 1 ? true : false; + treeNode.EnableCheckBox = ja2[4].Value<int>() == 1 ? true : false; + treeNode.Checked = ja2[5].Value<int>() == 1 ? true : false; + treeNode.Expanded = ja2[6].Value<int>() == 1 ? true : false; + treeNode.NavigateUrl = ja2[7].Value<string>(); + treeNode.Target = ja2[8].Value<string>(); + string iconName = ja2[10].Value<string>(); + if (String.IsNullOrEmpty(iconName)) + { + iconName = StringUtil.EnumToName(Icon.None); + } + treeNode.Icon = (Icon)StringUtil.EnumFromName(typeof(Icon), iconName); + treeNode.IconUrl = ja2[11].Value<string>(); + treeNode.ToolTip = ja2[13].Value<string>(); + + treeNode.OnClientClick = ja2[14].Value<string>(); + treeNode.EnableClickEvent = ja2[15].Value<int>() == 1 ? true : false; + treeNode.CommandName = ja2[16].Value<string>(); + treeNode.CommandArgument = ja2[17].Value<string>(); + + + treeNode.EnableCheckEvent = ja2[18].Value<int>() == 1 ? true : false; + + treeNode.EnableExpandEvent = ja2[19].Value<int>() == 1 ? true : false; + treeNode.EnableCollapseEvent = ja2[20].Value<int>() == 1 ? true : false; + + treeNode.CssClass = ja2[21].Value<string>(); + + JArray childNodes = ja2[22].Value<JArray>(); + if (childNodes != null && childNodes.Count > 0) + { + FromNodesJArray(childNodes, treeNode.Nodes); + } + } + } + + private JArray GetNodesJArray(TreeNodeCollection nodes) + { + JArray ja = new JArray(); + foreach (TreeNode node in nodes) + { + JArray ja2 = new JArray(); + + // 0 - Text + // 1 - Leaf + // 2 - NodeID + // 3 - Enabled + // 4 - EnableCheckBox + // 5 - Checked + // 6 - Expanded + // 7 - NavigateUrl + // 8 - Target + // 9 - href + // 10 - Icon + // 11 - IconUrl + // 12 - iconUrl - 这个是客户端用来生成图标的 + // 13 - ToolTip + // 14 - OnClientClick + // 15 - EnableClickEvent + // 16 - CommandName + // 17 - CommandArgument + + // 18 - EnableCheckEvent + // 19 - EnableExpandEvent + // 20 - EnableCollapseEvent + + // 21 - CssClass + + // 22 - Nodes + ja2.Add(node.Text); + ja2.Add(node.Leaf ? 1 : 0); + ja2.Add(node.NodeID); + ja2.Add(node.Enabled ? 1 : 0); + ja2.Add(node.EnableCheckBox ? 1 : 0); + ja2.Add(node.Checked ? 1 : 0); + ja2.Add(node.Expanded ? 1 : 0); + + ja2.Add(node.NavigateUrl); + ja2.Add(node.Target); + ja2.Add(ResolveUrl(node.NavigateUrl)); + + ja2.Add(node.Icon == Icon.None ? "" : StringUtil.EnumToName(node.Icon)); + ja2.Add(String.IsNullOrEmpty(node.IconUrl) ? "" : node.IconUrl); + ja2.Add(IconHelper.GetResolvedIconUrl(node.Icon, node.IconUrl)); + + ja2.Add(String.IsNullOrEmpty(node.ToolTip) ? "" : node.ToolTip); + + ja2.Add(node.OnClientClick); + ja2.Add(node.EnableClickEvent ? 1 : 0); + ja2.Add(node.CommandName); + ja2.Add(node.CommandArgument); + + + ja2.Add(node.EnableCheckEvent ? 1 : 0); + + ja2.Add(node.EnableExpandEvent ? 1 : 0); + ja2.Add(node.EnableCollapseEvent ? 1 : 0); + + ja2.Add(node.CssClass); + + if (node.Nodes != null && node.Nodes.Count > 0) + { + ja2.Add(GetNodesJArray(node.Nodes)); + } + else + { + ja2.Add(new JArray()); + } + + ja.Add(ja2); + + #region old code - JObject + + //JObject jo = new JObject(); + + //jo.Add("Text", node.Text); + //jo.Add("Leaf", node.Leaf); + //jo.Add("NodeID", node.NodeID); + //jo.Add("Enabled", node.Enabled); + //jo.Add("EnableCheckBox", node.EnableCheckBox); + //jo.Add("Checked", node.Checked); + //jo.Add("Expanded", node.Expanded); + + //jo.Add("NavigateUrl", node.NavigateUrl); + //jo.Add("Target", node.Target); + //jo.Add("href", ResolveUrl(node.NavigateUrl)); + + //jo.Add("Icon", StringUtil.EnumToName(node.Icon)); + //jo.Add("IconUrl", node.IconUrl); + //jo.Add("iconUrl", GetResolvedIconUrl(node.Icon, IconUrl)); + + //jo.Add("ToolTip", node.ToolTip); + + //jo.Add("SingleClickExpand", node.SingleClickExpand); + + //jo.Add("OnClientClick", node.OnClientClick); + //jo.Add("EnablePostBack", node.EnablePostBack); + + //jo.Add("AutoPostBack", node.AutoPostBack); + //jo.Add("CommandName", node.CommandName); + //jo.Add("CommandArgument", node.CommandArgument); + + //if (node.Nodes != null && node.Nodes.Count > 0) + //{ + // jo.Add("Nodes", GetNodesJArray(node.Nodes)); + //} + + //ja.Add(jo); + + #endregion + + #region old code + //#region options + + //jo.Add("text", node.Text); + //jo.Add("leaf", node.Leaf); + //jo.Add("id", node.NodeID); + //if (!node.Enabled) + //{ + // jo.Add("disabled", true); + //} + //if (node.EnableCheckBox) + //{ + // jo.Add("checked", node.Checked); + //} + //// Leaf doesn't has expanded property. + //if (!node.Leaf) + //{ + // jo.Add("expanded", node.Expanded); + //} + + //#endregion + + //#region href + + //if (!String.IsNullOrEmpty(node.NavigateUrl)) + //{ + // jo.Add("href", ResolveUrl(node.NavigateUrl)); + + // if (!String.IsNullOrEmpty(node.Target)) + // { + // jo.Add("hrefTarget", node.Target); + // } + //} + + //#endregion + + //#region IconUrl + + //if (!String.IsNullOrEmpty(node.IconUrl)) + //{ + // jo.Add("icon", ResolveUrl(node.IconUrl)); + + // #region old code + // // 添加CSS样式,这种方法添加的图片位置靠上 + // // string className = AddStartupCSS(String.Format("{0}-button-icon-image", ClientID), + // // GetBackgroundStyleCss(ResolveUrl(IconUrl))); + + // //OB.AddProperty(OptionName.IconCls, className); + // #endregion + //} + + //#endregion + + //#region qtip + + //if (!String.IsNullOrEmpty(node.ToolTip)) + //{ + // jo.Add("qtip", node.ToolTip); + //} + + //#endregion + + //#region SingleClickExpand + + //if (node.SingleClickExpand) + //{ + // jo.Add("singleClickExpand", true); + //} + + //#endregion + + //#region old code + + ////JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + + ////#region old code + + //////// 展开时判断是否需要到后台取数据 + ////////listenersBuilder.AddProperty("beforeappend", String.Format("function(node,deep,anim){{\r\nif(!node.loaded){{alert(node.id);\r\n}}}}"), true); + + //////// 折叠/展开 + ////////listenersBuilder.AddProperty(OptionName.Expand, String.Format("function(node){{F.util.addValueToHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); + ////////listenersBuilder.AddProperty(OptionName.Collapse, String.Format("function(node){{F.util.removeValueFromHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); + //////listenersBuilder.AddProperty("expand", Render_NodeExpandScriptID, true); + //////listenersBuilder.AddProperty("collapse", Render_NodeCollapseScriptID, true); + + + ////#endregion + + ////#region Click Event + + ////// 如果禁用此节点,则不响应点击事件(不可选中) + ////// Added by sanshi.ustc#gmail.com 2009-8-24 + ////if (!node.Enabled) + ////{ + //// listenersBuilder.AddProperty("beforeclick", "function(){return false;}", true); + ////} + + ////string clickScript = node.OnClientClick; + ////if (!String.IsNullOrEmpty(clickScript) && !clickScript.EndsWith(";")) + ////{ + //// clickScript += ";"; + ////} + ////if (node.EnablePostBack) + ////{ + //// string paramStr = String.Format("Command${0}${1}${2}", node.NodeID, node.CommandName.Replace("'", "\""), node.CommandArgument.Replace("'", "\"")); + //// clickScript += GetPostBackEventReference(paramStr); + ////} + ////if (!String.IsNullOrEmpty(clickScript)) + ////{ + //// listenersBuilder.AddProperty("click", JsHelper.GetFunction(clickScript, "node"), true); + ////} + + ////#endregion + + ////#region CheckBox - AutoPostback + + ////// CheckBox选中 + ////if (node.EnableCheckBox) + ////{ + //// string checkchangeScript = String.Empty; + + //// // 自动回发到服务器 + //// checkchangeScript += String.Format("var args='Check${0}$'+checked;", node.NodeID); + //// checkchangeScript += GetPostBackEventReference("#CHECK#").Replace("'#CHECK#'", "args"); + + //// listenersBuilder.AddProperty("checkchange", JsHelper.GetFunction(checkchangeScript, "node", "checked"), true); + + //// #region old code + //// //if (!node.AutoPostBack) + //// //{ + //// // // 改变CheckBox,不需要自动回发,则将checkchange指向预定义的函数,这有助于减少代码量 + //// // //listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{if(checked){{F.util.addValueToHiddenField('{0}',node.id);}}else{{F.util.removeValueFromHiddenField('{0}',node.id);}}}}", CheckedNodesHiddenFieldID), true); + //// // listenersBuilder.AddProperty("checkchange", Render_NodeCheckChangeScriptID, true); + //// //} + //// //else + //// //{ + //// // string checkchangeScript = String.Empty; + + //// // // 改变页面中隐藏字段的值 + //// // checkchangeScript += String.Format("{0}.apply(window, [node, checked]);", Render_NodeCheckChangeScriptID); + + //// // // 自动回发到服务器 + //// // checkchangeScript += String.Format("var args='Check${0}$'+checked;", node.NodeID); + //// // checkchangeScript += GetPostBackEventReference("#CHECK#").Replace("'#CHECK#'", "args"); + + //// // listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{{0}}}", checkchangeScript), true); + //// //} + //// #endregion + ////} + + ////#endregion + + ////jo.Add("listeners", listenersBuilder); + + //#endregion + #endregion + } + + return ja; + } + + #endregion + + #endregion + + #region OnPreRender + + #region Render_StoreID + + private string Render_StoreID + { + get + { + return String.Format("{0}_store", XID); + } + } + + #region oldcode + + //private string Render_NodesID + //{ + // get + // { + // return String.Format("{0}_nodes", XID); + // } + //} + + + //private string Render_RootId + //{ + // get + // { + // return String.Format("{0}_root", ClientJavascriptID); + // } + //} + + //private string Render_SelectModelID + //{ + // get + // { + // return String.Format("{0}_select_model", XID); + // } + //} + + //private string Render_NodeExpandScriptID + //{ + // get + // { + // return String.Format("{0}_node_expand", XID); + // } + //} + + //private string Render_NodeCollapseScriptID + //{ + // get + // { + // return String.Format("{0}_node_collapse", XID); + // } + //} + + //private string Render_NodeClickScriptID + //{ + // get + // { + // return String.Format("{0}_node_click", XID); + // } + //} + + //private string Render_NodeCheckChangeScriptID + //{ + // get + // { + // return String.Format("{0}_node_checkchange", XID); + // } + //} + #endregion + + #endregion + + #region OnPreRender + + /// <summary> + /// 初始化控件 + /// </summary> + protected override void OnInitControl() + { + base.OnInitControl(); + + // 修复Tree的节点,这里可能会修改树节点的属性,从而影响 F_Nodes 的计算结果 + // 在这个地方调用是安全的: + // -> 页面第一次加载时,运行到这里 ASPX 上面的标签已经初始化完毕 + // -> 页面回发时(包括正常回发或者AJAX回发),此时请求表单中 F_STATE 已经恢复完毕 + FixTreeNodes(); + } + + /// <summary> + /// 渲染 HTML 之前调用 + /// </summary> + protected override void OnBothPreRender() + { + base.OnBothPreRender(); + + // Nodes 属性有可能在页面加载后被用户修改,比如绑定数据,所以在输出之前应该调用此函数 + FixTreeNodes(); + } + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + bool reloaded = false; + if (PropertyModified("F_Nodes")) + { + sb.AppendFormat("{0}.f_loadData();", XID); + reloaded = true; + } + + if (reloaded) + { + // 如果重新加载了数据,则要重新设置选中项 + sb.AppendFormat("{0}.f_selectNodes();", XID); + } + else + { + if (PropertyModified("SelectedNodeIDArray")) + { + sb.AppendFormat("{0}.f_selectNodes();", XID); + } + } + + AddAjaxScript(sb); + } + + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + // 确保 F_Nodes 在页面第一次加载时都存在于 F_STATE 中,因为客户端需要这个数据来渲染树控件 + // 并且这个代码要放在 base.OnFirstPreRender(); 之前,因为在那里面会生成 F_STATE + FState.AddModifiedProperty("F_Nodes"); + + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("tree"); + + #region viewConfig + + JsObjectBuilder viewBuilder = new JsObjectBuilder(); + + if (EnableTextSelection) + { + viewBuilder.AddProperty("enableTextSelection", true); + } + + if (viewBuilder.Count > 0) + { + OB.AddProperty("viewConfig", viewBuilder); + } + + #endregion + + #region options + + OB.AddProperty("useArrows", EnableArrows); + OB.AddProperty("lines", EnableLines); + + OB.AddProperty("animate", EnableAnimate); + + OB.AddProperty("singleExpand", EnableSingleExpand); + + + if (!EnableIcons) + { + OB.AddProperty("bodyCls", "x-tree-noicon"); + } + + + // 这个为了在客户端生成 PostBack 脚本,比如 __doPostBack('RegionPanel1$TreePanel1','') + OB.AddProperty("name", UniqueID); + + #endregion + + #region oldcode + + //string hiddenFieldsScript = String.Empty; + + //// 选中的行 + //hiddenFieldsScript += GetSetHiddenFieldValueScript(SelectedNodeHiddenFieldID, SelectedNode == null ? "" : SelectedNode.NodeID); + + //// 展开的行 + //hiddenFieldsScript += GetSetHiddenFieldValueScript(ExpandedNodesHiddenFieldID, StringUtil.GetStringFromStringArray(GetExpandedNodeIDs())); + + //// 选中的行 + //hiddenFieldsScript += GetSetHiddenFieldValueScript(CheckedNodesHiddenFieldID, StringUtil.GetStringFromStringArray(GetCheckedNodeIDs())); + + + #endregion + + #region Loader + + string loaderScript = String.Empty; + + JsObjectBuilder loaderBuilder = new JsObjectBuilder(); + + + JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + + string paramStr = String.Format("LazyLoad${0}", "#ID#"); + string postBackScript = GetPostBackEventReference(paramStr); + postBackScript = postBackScript.Replace("#ID#'", "'+op.node.id"); + listenersBuilder.AddProperty("beforeload", String.Format("function(store,op){{if(op.action==='read'&&op.node.id!=='root'){{{0}}}return false;}}", postBackScript), true); + + //listenersBuilder.AddProperty(OptionName.Scope, "box", true); + loaderBuilder.AddProperty("listeners", listenersBuilder); + // 必须添加dataUrl,才会引发beforeload事件 + //loaderBuilder.AddProperty("dataUrl", "about:blank"); + //loaderBuilder.AddProperty("preloadChildren", true); + //loaderBuilder.AddProperty("clearOnLoad", false); + + loaderScript = String.Format("var {0}=F.create('Ext.data.TreeStore',{1});", Render_StoreID, loaderBuilder); + + OB.AddProperty("store", Render_StoreID, true); + #endregion + + #region Listeners + + string beforeclickScript = "if(node.disabled){return false;}"; + //OB.Listeners.AddProperty("beforeitemclick", JsHelper.GetFunction(beforeclickScript, "view", "node", "item", "index"), true); + AddListener("beforeitemclick", beforeclickScript, "view", "node", "item", "index"); + + + string singleclickexpandScript = ""; + if (EnableSingleClickExpand) + { + //singleclickexpandScript = "if(!node.isLeaf()){if(node.isExpanded()){node.collapse();}else{node.expand();}}"; + singleclickexpandScript = "if(node.isExpandable()&&!node.isLeaf()){if(node.isExpanded()){this.collapseNode(node);}else{this.expandNode(node);}}"; + } + + string itemclickScript = "var args='Command$'+node.getId()+'$'+node.data.f_commandname+'$'+node.data.f_commandargument;"; + itemclickScript += GetPostBackEventReference("#Click#").Replace("'#Click#'", "args"); + itemclickScript = String.Format("if(this.rendered&&node.data.f_enableclickevent){{{0}}}", itemclickScript); + itemclickScript = "if(this.rendered&&node.data.f_clientclick){if(new Function(node.data.f_clientclick)()===false){return;}}" + itemclickScript; + //itemclickScript = "if(node.data.f_clientclick){eval(node.data.f_clientclick);}" + itemclickScript; // new Function(node.data.f_clientclick)(); + //OB.Listeners.AddProperty("itemclick", JsHelper.GetFunction(singleclickexpandScript + itemclickScript, "view", "node", "item", "index"), true); + AddListener("itemclick", singleclickexpandScript + itemclickScript, "view", "node", "item", "index"); + + + + string checkchangeScript = "var args='Check$'+node.getId()+'$'+checked;"; + checkchangeScript += GetPostBackEventReference("#CheckChange#").Replace("'#CheckChange#'", "args"); + checkchangeScript = String.Format("if(this.rendered&&node.data.f_enablecheckevent){{{0}}}", checkchangeScript); + //OB.Listeners.AddProperty("checkchange", JsHelper.GetFunction(checkchangeScript, "node", "checked"), true); + AddListener("checkchange", checkchangeScript, "node", "checked"); + + + string expandScript = "var args='Expand$'+node.getId();"; + expandScript += GetPostBackEventReference("#Expand#").Replace("'#Expand#'", "args"); + expandScript = String.Format("if(this.rendered&&node.data.f_enableexpandevent){{{0}}}", expandScript); + //OB.Listeners.AddProperty("itemexpand", JsHelper.GetFunction(expandScript, "node"), true); + AddListener("itemexpand", expandScript, "node"); + + + string collapseScript = "var args='Collapse$'+node.getId();"; + collapseScript += GetPostBackEventReference("#Collapse#").Replace("'#Collapse#'", "args"); + collapseScript = String.Format("if(this.rendered&&node.data.f_enablecollapseevent){{{0}}}", collapseScript); + //OB.Listeners.AddProperty("itemcollapse", JsHelper.GetFunction(collapseScript, "node"), true); + AddListener("itemcollapse", collapseScript, "node"); + + #endregion + + #region selectModel + + string selectModelScript = String.Empty; + if (EnableMultiSelect) + { + selectModelScript = "F.create('Ext.selection.TreeModel',{mode:'MULTI'})"; + } + else + { + selectModelScript = "F.create('Ext.selection.TreeModel',{mode:'SINGLE'})"; + } + OB.AddProperty("selModel", selectModelScript, true); + + #endregion + + #region old code + + // nodes + //string nodesScript = Render_NodesId + "=[{'text':'Audi','id':100,'leaf':false,'cls':'folder','children':[{'text':'A3','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]},{'text':'TT','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]}]},{'text':'Cadillac','id':300,'leaf':false,'cls':'folder','children':[{'text':'CTS','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]},{'text':'CTS-V','id':1000,'leaf':false,'cls':'folder','children':[{'text':'FuelEconomy','id':'100000','leaf':true,'cls':'file'},{'text':'Invoice','id':'100001','leaf':true,'cls':'file'},{'text':'MSRP','id':'100002','leaf':true,'cls':'file'},{'text':'Options','id':'100003','leaf':true,'cls':'file'},{'text':'Specifications','id':'100004','leaf':true,'cls':'file'}]}]}];"; + //string nodesJsArray = GetNodesJsArray2(Nodes).ToString(); + //string nodesScript = String.Format("{0}={1};", Render_NodesID, nodesJsArray); + + #endregion + + #region Root + + //JsObjectBuilder rootBuilder = new JsObjectBuilder(); + ////rootBuilder.AddProperty(OptionName.Id, "root"); + ////rootBuilder.AddProperty(OptionName.Text, "root"); + ////rootBuilder.AddProperty("loaded", false); + //rootBuilder.AddProperty(OptionName.Children, Render_NodesId, true); + + //string rootNodeScript = String.Format("var {0}=new Ext.tree.AsyncTreeNode({1});", Render_RootId, rootBuilder.ToString()); + //rootNodeScript += "\r\n"; + + + //OB.AddProperty("root", "new Ext.tree.AsyncTreeNode()", true); + OB.AddProperty("rootVisible", false); + + #endregion + + #region renderScript + + //string renderScript = String.Empty; + ////renderScript += "cmp.f_loadData();"; + //if (SelectedNodeIDArray.Length > 0) + //{ + // renderScript += "var model=cmp.getSelectionModel();"; + // foreach (string nodeId in SelectedNodeIDArray) + // { + // renderScript += String.Format("model.select(cmp.getNodeById('{0}'),null,true);", nodeId); + // } + //} + + ////renderScript = "function(cmp){window.setTimeout(function(){ cmp.f_loadData(); },1000);}"; + + //OB.Listeners.AddProperty("render", JsHelper.GetFunction("cmp.f_loadData();", "cmp"), true); + AddListener("render", "cmp.f_loadData();", "cmp"); + + + //OB.Listeners.AddProperty("viewready", JsHelper.GetFunction("cmp.f_selectNodes();", "cmp"), true); + AddListener("viewready", "cmp.f_selectNodes();", "cmp"); + + #endregion + + #region AddStartupScript + //// 展开,折叠,点击,选中CheckBox事件处理函数, + //// 因为这些函数会被几乎每个节点使用,所以提取出公共的方法来 + //scripts.AppendFormat("{0}=function(node){{F.util.addValueToHiddenField('{1}',node.id);}};", Render_NodeExpandScriptID, ExpandedNodesHiddenFieldID); + //scripts.AppendFormat("{0}=function(node){{F.util.removeValueFromHiddenField('{1}',node.id);}};", Render_NodeCollapseScriptID, ExpandedNodesHiddenFieldID); + //scripts.AppendFormat("{0}=function(node,checked){{if(checked){{F.util.addValueToHiddenField('{1}',node.id);}}else{{F.util.removeValueFromHiddenField('{1}',node.id);}}}};", Render_NodeCheckChangeScriptID, CheckedNodesHiddenFieldID); + //scripts.AppendFormat("{0}=function(node){{Ext.get('{1}').dom.value=node.id;}};", Render_NodeClickScriptID, SelectedNodeHiddenFieldID); + + //scripts.AppendLine(hiddenFieldsScript); + + //OB.AddProperty("store", "F.create('Ext.data.TreeStore')", true); + + + //StringBuilder sb = new StringBuilder(); + + //scripts.AppendLine(loaderScript); + string startupScript = String.Format("var {0}=F.create('Ext.tree.Panel',{1});", XID, OB); + + AddStartupScript(loaderScript + startupScript); + + #endregion + } + + #endregion + + #region old code + + //private void ResolveTreeSelectModel(ref string selectModelScript) + //{ + // JsObjectBuilder selectOptionBuilder = new JsObjectBuilder(); + + // //// 选中行,不选中行 + // //JsObjectBuilder selectListenersBuilder = new JsObjectBuilder(); + // //selectListenersBuilder.AddProperty("selectionchange", String.Format("function(sm,node){{Ext.get('{0}').dom.value=node.id;}}", SelectedNodeHiddenFieldID), true); + // //selectListenersBuilder.AddProperty(OptionName.Scope, "box", true); + + // //selectOptionBuilder.AddProperty("listeners", selectListenersBuilder); + + // if (EnableMultiSelect) + // { + // selectModelScript = String.Format("var {0}=new Ext.tree.MultiSelectionModel({1});", Render_SelectModelID, selectOptionBuilder); + // } + // else + // { + // selectModelScript = String.Format("var {0}=new Ext.tree.DefaultSelectionModel({1});", Render_SelectModelID, selectOptionBuilder); + // } + + //} + + #endregion + + #region old code + + //internal JsArrayBuilder GetNodesJsArray() + //{ + // return GetNodesJsArray(Nodes); + //} + + /* + internal JsArrayBuilder GetNodesJsArray(TreeNodeCollection nodes, bool includeListeners) + { + JsArrayBuilder nodesBuilder = new JsArrayBuilder(); + foreach (TreeNode node in nodes) + { + JsObjectBuilder nodeBuilder = new JsObjectBuilder(); + + #region options + + nodeBuilder.AddProperty("text", node.Text); + nodeBuilder.AddProperty("leaf", node.Leaf); + if (!String.IsNullOrEmpty(node.NodeID)) + { + nodeBuilder.AddProperty("id", node.NodeID); + } + nodeBuilder.AddProperty("disabled", !node.Enabled); + if (node.EnableCheckBox) + { + nodeBuilder.AddProperty("checked", node.Checked); + } + + // Leaf doesn't has expanded property. + if (!node.Leaf) + { + nodeBuilder.AddProperty("expanded", node.Expanded); + } + + #endregion + + #region href + + if (!String.IsNullOrEmpty(node.NavigateUrl)) + { + nodeBuilder.AddProperty("href", ResolveUrl(node.NavigateUrl)); + + if (!String.IsNullOrEmpty(node.Target)) + { + nodeBuilder.AddProperty("hrefTarget", node.Target); + } + } + + #endregion + + #region IconUrl + + if (!String.IsNullOrEmpty(node.IconUrl)) + { + nodeBuilder.AddProperty("icon", ResolveUrl(node.IconUrl)); + + #region old code + // 添加CSS样式,这种方法添加的图片位置靠上 + // string className = AddStartupCSS(String.Format("{0}-button-icon-image", ClientID), + // GetBackgroundStyleCss(ResolveUrl(IconUrl))); + + //OB.AddProperty(OptionName.IconCls, className); + #endregion + } + + #endregion + + #region qtip + + if (!String.IsNullOrEmpty(node.ToolTip)) + { + nodeBuilder.AddProperty("qtip", node.ToolTip); + } + + #endregion + + #region Listeners + + if (includeListeners) + { + JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + + #region old code + + //// 展开时判断是否需要到后台取数据 + ////listenersBuilder.AddProperty("beforeappend", String.Format("function(node,deep,anim){{\r\nif(!node.loaded){{alert(node.id);\r\n}}}}"), true); + + //// 折叠/展开 + ////listenersBuilder.AddProperty(OptionName.Expand, String.Format("function(node){{F.util.addValueToHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); + ////listenersBuilder.AddProperty(OptionName.Collapse, String.Format("function(node){{F.util.removeValueFromHiddenField('{0}',node.id);}}", ExpandedNodesHiddenFieldID), true); + //listenersBuilder.AddProperty("expand", Render_NodeExpandScriptID, true); + //listenersBuilder.AddProperty("collapse", Render_NodeCollapseScriptID, true); + + + #endregion + + #region 点击 + + // 如果禁用此节点,则不响应点击事件(不可选中) + // Added by sanshi.ustc#gmail.com 2009-8-24 + if (!node.Enabled) + { + //clientScript += "e.stopEvent();"; + listenersBuilder.AddProperty("beforeclick", "function(){return false;}", true); + } + + + if (String.IsNullOrEmpty(node.OnClientClick) && !node.EnablePostBack) + { + // 这段代码主要是为了减少代码体积,避免为每个节点添加重复的代码 + listenersBuilder.AddProperty("click", Render_NodeClickScriptID, true); + } + else + { + // 点击的脚本 + string clientScript = String.Empty; + + // 用户自定义脚本 + string clientClickScript = node.OnClientClick; + if (!String.IsNullOrEmpty(clientClickScript) && !clientClickScript.EndsWith(";")) + { + clientClickScript += ";"; + } + clientScript += clientClickScript; + + + // 选中此项 + //clientScript += String.Format("Ext.get('{0}').dom.value=node.id;", SelectedNodeHiddenFieldID); + clientScript += String.Format("{0}.apply(window, [node]);", Render_NodeClickScriptID); + + // 回发脚本 + if (node.EnablePostBack) + { + string paramStr = String.Format("Command${0}${1}${2}", node.NodeID, node.CommandName.Replace("'", "\""), node.CommandArgument.Replace("'", "\"")); + clientScript += GetPostBackEventReference(paramStr); + } + + + listenersBuilder.AddProperty("click", String.Format("function(node,e){{{0}}}", clientScript), true); + + } + + #endregion + + #region CheckBox - AutoPostback + + // CheckBox选中 + if (node.EnableCheckBox) + { + if (!node.AutoPostBack) + { + // 改变CheckBox,不需要自动回发,则将checkchange指向预定义的函数,这有助于减少代码量 + //listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{if(checked){{F.util.addValueToHiddenField('{0}',node.id);}}else{{F.util.removeValueFromHiddenField('{0}',node.id);}}}}", CheckedNodesHiddenFieldID), true); + listenersBuilder.AddProperty("checkchange", Render_NodeCheckChangeScriptID, true); + } + else + { + string checkchangeScript = String.Empty; + + // 改变页面中隐藏字段的值 + checkchangeScript += String.Format("{0}.apply(window, [node, checked]);", Render_NodeCheckChangeScriptID); + + // 自动回发到服务器 + checkchangeScript += String.Format("var args='Check${0}$'+checked;", node.NodeID); + checkchangeScript += GetPostBackEventReference("#CHECK#").Replace("'#CHECK#'", "args"); + + listenersBuilder.AddProperty("checkchange", String.Format("function(node,checked){{{0}}}", checkchangeScript), true); + } + } + + #endregion + + nodeBuilder.AddProperty("listeners", listenersBuilder); + } + + #endregion + + #region children + + if (node.Nodes != null && node.Nodes.Count > 0) + { + nodeBuilder.AddProperty("children", GetNodesJsArray(node.Nodes, includeListeners)); + } + + #endregion + + #region SingleClickExpand + + if (node.SingleClickExpand) + { + nodeBuilder.AddProperty("singleClickExpand", true); + } + + #endregion + + nodesBuilder.AddProperty(nodeBuilder); + } + + return nodesBuilder; + } + + */ + #endregion + + #endregion + + #region DataBind + + /// <summary> + /// 绑定数据源 + /// </summary> + /// <seealso cref="DataSource" /> + public override void DataBind() + { + // 重新绑定数据前清空选中的值 + SelectedNodeIDArray = null; + + // 清空所有节点 + Nodes.Clear(); + + if (_dataSource != null) + { + if (DataSource is DataSet) + { + DataSet ds = DataSource as DataSet; + + DataBindToXml(ds.GetXml()); + } + else if (DataSource is XmlDataSource) + { + XmlDataSource xds = DataSource as XmlDataSource; + XmlDocument xdoc = xds.GetXmlDocument(); + + DataBindToXml(xdoc.OuterXml); + } + else if (DataSource is XmlDocument) + { + XmlDocument xdoc = DataSource as XmlDocument; + + DataBindToXml(xdoc.OuterXml); + } + //else if (this.DataSource is IHierarchicalDataSource) + //{ + // IHierarchicalDataSource oDS = (IHierarchicalDataSource)(this.DataSource); + + // this.LoadFromHierarchy(oDS.GetHierarchicalView("").Select(), null); + //} + else + { + throw new Exception("不支持的数据源类型:" + _dataSource.GetType().ToString()); + } + } + + base.DataBind(); + } + + #endregion + + #region internal methods + + #region FixTreeNodes + + /// <summary> + /// 如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 + /// 同时处理 AutoLeafIdentification 属性 + /// </summary> + internal void FixTreeNodes() + { + FixTreeNodes(Nodes); + } + + private void FixTreeNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (!node.Leaf) + { + if (node.Nodes.Count == 0) + { + if (node.Expanded) + { + node.Expanded = false; + } + // If this node has no child and it's not a leaf node + // And AutoLeafIdentification is enabled, then make this node a leaf node. + if (AutoLeafIdentification) + { + node.Leaf = true; + } + } + + if (node.Nodes.Count > 0) + { + FixTreeNodes(node.Nodes); + } + + } + } + } + + #endregion + + #region DataBindToXml + + private void DataBindToXml(string xml) + { + XmlDocument xdoc = new XmlDocument(); + xdoc.LoadXml(xml); + + DataBindToXml(null, xdoc.DocumentElement.ChildNodes); + } + + //private void DataBindToXml(XmlDocument xdoc) + //{ + // XmlNodeList nodes = xdoc.DocumentElement.ChildNodes; + + // foreach (XmlNode node in nodes) + // { + // if (node.NodeType == XmlNodeType.Element) + // { + // TreeNode treeNode = new TreeNode(); + // Nodes.Add(treeNode); + + // LoadXmlNode(treeNode, node); + + + // } + // } + //} + + private void DataBindToXml(TreeNode treeNode, XmlNodeList nodes) + { + foreach (XmlNode node in nodes) + { + // Only process Xml elements (ignore comments, etc) + if (node.NodeType == XmlNodeType.Element) + { + TreePreNodeEventArgs preArgs = new TreePreNodeEventArgs(node); + + OnPreNodeDataBound(preArgs); + + // 事件处理函数要求取消添加本节点 + if (!preArgs.Cancelled) + { + TreeNode childNode = new TreeNode(); + if (treeNode == null) + { + Nodes.Add(childNode); + } + else + { + treeNode.Nodes.Add(childNode); + } + + childNode.ReadXmlAttributes(node.Attributes, this); + + OnNodeDataBound(new TreeNodeEventArgs(childNode, node)); + + + DataBindToXml(childNode, node.ChildNodes); + } + } + } + } + + //private void LoadXmlNode(TreeNode treeNode, XmlNode xmlNode) + //{ + // treeNode.ReadXmlAttributes(xmlNode.Attributes, this); + + // OnNodeDataBound(new TreeNodeEventArgs(treeNode, xmlNode)); + + // foreach (XmlNode node in xmlNode.ChildNodes) + // { + // // Only process Xml elements (ignore comments, etc) + // if (node.NodeType == XmlNodeType.Element) + // { + // TreePreNodeEventArgs preArgs = new TreePreNodeEventArgs(node); + + // OnPreNodeDataBound(preArgs); + + // // 事件处理函数要求取消添加本节点 + // if (!preArgs.Cancelled) + // { + // TreeNode childNode = new TreeNode(); + // treeNode.Nodes.Add(childNode); + + // LoadXmlNode(childNode, node); + // } + // } + // } + + //} + + #endregion + + #region GetXmlAttributeMappingFrom + + internal string GetXmlAttributeMappingFrom(string toValue) + { + if (Mappings.Count > 0) + { + for (int i = 0; i < Mappings.Count; i++) + { + XmlAttributeMapping mapping = Mappings[i]; + + if (mapping.To == toValue) + { + return mapping.From; + } + } + } + + return toValue; + } + + internal string GetXmlAttributeMappingTo(string fromValue) + { + if (Mappings.Count > 0) + { + for (int i = 0; i < Mappings.Count; i++) + { + XmlAttributeMapping mapping = Mappings[i]; + + if (mapping.From == fromValue) + { + return mapping.To; + } + } + } + + return fromValue; + } + + #endregion + + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + base.LoadPostData(postDataKey, postCollection); + + // 选中的行 + string[] selectedNodeIDArray = StringUtil.GetStringListFromString(postCollection[SelectedNodeIDArrayHiddenFieldID], true).ToArray(); + if (!StringUtil.CompareStringArray(SelectedNodeIDArray, selectedNodeIDArray)) + { + SelectedNodeIDArray = selectedNodeIDArray; + FState.BackupPostDataProperty("SelectedNodeIDArray"); + } + + + // Expanded Nodes + string expandedNodesPostValue = postCollection[ExpandedNodesHiddenFieldID]; + List<string> expandedNodeListPostValue = StringUtil.GetStringListFromString(expandedNodesPostValue, true); + // 1. Collapse some nodes that have been expanded. + TreeNode[] originalExpandedNodes = GetExpandedNodes(); + foreach (TreeNode node in originalExpandedNodes) + { + if (!expandedNodeListPostValue.Contains(node.NodeID)) + { + node.Expanded = false; + } + } + // 2. Expand the post nodes. + foreach (string nodeID in expandedNodeListPostValue) + { + FindNode(nodeID).Expanded = true; + } + + + // Checked Nodes + string checkedNodesPostValue = postCollection[CheckedNodesHiddenFieldID]; + List<string> checkedNodeListPostValue = StringUtil.GetStringListFromString(checkedNodesPostValue, true); + // 1. Uncheck some nodes that have been checked. + TreeNode[] originalCheckedNodes = GetCheckedNodes(); + foreach (TreeNode node in originalCheckedNodes) + { + if (!checkedNodeListPostValue.Contains(node.NodeID)) + { + node.Checked = false; + } + } + // 2. Check the post nodes. + foreach (string nodeID in checkedNodeListPostValue) + { + FindNode(nodeID).Checked = true; + } + + FState.BackupPostDataProperty("F_Nodes"); + + + return false; + } + + //public override void RaisePostDataChangedEvent() + //{ + // //OnCollapsedChanged(EventArgs.Empty); + //} + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument.StartsWith("Command$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 4) + { + OnNodeCommand(new TreeCommandEventArgs(FindNode(commandArgs[1]), commandArgs[2], commandArgs[3])); + } + } + else if (eventArgument.StartsWith("LazyLoad$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnNodeLazyLoad(new TreeNodeEventArgs(FindNode(commandArgs[1]))); + } + } + else if (eventArgument.StartsWith("Expand$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnNodeExpand(new TreeNodeEventArgs(FindNode(commandArgs[1]))); + } + } + else if (eventArgument.StartsWith("Collapse$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + OnNodeCollapse(new TreeNodeEventArgs(FindNode(commandArgs[1]))); + } + } + else if (eventArgument.StartsWith("Check$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 3) + { + OnNodeCheck(new TreeCheckEventArgs(FindNode(commandArgs[1]), Convert.ToBoolean(commandArgs[2]))); + } + } + + } + + #endregion + + #region OnNodeDataBound + + private static readonly object _nodeDataBoundHandlerKey = new object(); + + /// <summary> + /// 节点绑定后事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点绑定后事件")] + public event EventHandler<TreeNodeEventArgs> NodeDataBound + { + add + { + Events.AddHandler(_nodeDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发节点绑定后事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeDataBound(TreeNodeEventArgs e) + { + EventHandler<TreeNodeEventArgs> handler = Events[_nodeDataBoundHandlerKey] as EventHandler<TreeNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnPreNodeDataBound + + private static readonly object _preNodeDataBoundHandlerKey = new object(); + + /// <summary> + /// 节点预绑定事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点预绑定事件")] + public event EventHandler<TreePreNodeEventArgs> PreNodeDataBound + { + add + { + Events.AddHandler(_preNodeDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_preNodeDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发节点预绑定事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPreNodeDataBound(TreePreNodeEventArgs e) + { + EventHandler<TreePreNodeEventArgs> handler = Events[_preNodeDataBoundHandlerKey] as EventHandler<TreePreNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeCheck + + private static readonly object _nodeCheckHandlerKey = new object(); + + /// <summary> + /// 节点选中事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点选中事件")] + public event EventHandler<TreeCheckEventArgs> NodeCheck + { + add + { + Events.AddHandler(_nodeCheckHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeCheckHandlerKey, value); + } + } + + /// <summary> + /// 触发节点选中事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeCheck(TreeCheckEventArgs e) + { + EventHandler<TreeCheckEventArgs> handler = Events[_nodeCheckHandlerKey] as EventHandler<TreeCheckEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeCommand + + private static readonly object _nodeCommandHandlerKey = new object(); + + /// <summary> + /// 节点点击事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点点击事件")] + public event EventHandler<TreeCommandEventArgs> NodeCommand + { + add + { + Events.AddHandler(_nodeCommandHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeCommandHandlerKey, value); + } + } + + /// <summary> + /// 触发节点点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeCommand(TreeCommandEventArgs e) + { + EventHandler<TreeCommandEventArgs> handler = Events[_nodeCommandHandlerKey] as EventHandler<TreeCommandEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeExpand + + private static readonly object _nodeExpandHandlerKey = new object(); + + /// <summary> + /// 节点展开事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点展开事件")] + public event EventHandler<TreeNodeEventArgs> NodeExpand + { + add + { + Events.AddHandler(_nodeExpandHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeExpandHandlerKey, value); + } + } + + /// <summary> + /// 触发节点展开事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeExpand(TreeNodeEventArgs e) + { + EventHandler<TreeNodeEventArgs> handler = Events[_nodeExpandHandlerKey] as EventHandler<TreeNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeCollapse + + private static readonly object _nodeCollapseHandlerKey = new object(); + + /// <summary> + /// 节点展开事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点展开事件")] + public event EventHandler<TreeNodeEventArgs> NodeCollapse + { + add + { + Events.AddHandler(_nodeCollapseHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeCollapseHandlerKey, value); + } + } + + /// <summary> + /// 触发节点展开事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeCollapse(TreeNodeEventArgs e) + { + EventHandler<TreeNodeEventArgs> handler = Events[_nodeCollapseHandlerKey] as EventHandler<TreeNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnNodeLazyLoad + + private static readonly object _nodeLazyLoadHandlerKey = new object(); + + /// <summary> + /// 节点延迟加载事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("节点延迟加载事件")] + public event EventHandler<TreeNodeEventArgs> NodeLazyLoad + { + add + { + Events.AddHandler(_nodeLazyLoadHandlerKey, value); + } + remove + { + Events.RemoveHandler(_nodeLazyLoadHandlerKey, value); + } + } + + /// <summary> + /// 触发节点延迟加载事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnNodeLazyLoad(TreeNodeEventArgs e) + { + EventHandler<TreeNodeEventArgs> handler = Events[_nodeLazyLoadHandlerKey] as EventHandler<TreeNodeEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region Public Methods + + #region GetExpandedNodes + + /// <summary> + /// 获取所有展开节点的ID数组 + /// </summary> + /// <returns>节点的ID数组</returns> + public string[] GetExpandedNodeIDs() + { + return GetExpandedNodeIDs(Nodes); + } + + /// <summary> + /// 获取指定节点集合中所有展开节点的ID数组 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + /// <returns>节点的ID数组</returns> + public string[] GetExpandedNodeIDs(TreeNodeCollection nodes) + { + List<string> expandedNodeIDs = new List<string>(); + TreeNode[] expandedNodes = GetExpandedNodes(nodes); + foreach (TreeNode node in expandedNodes) + { + expandedNodeIDs.Add(node.NodeID); + } + return expandedNodeIDs.ToArray(); + } + + /// <summary> + /// 获取所有展开节点的数组 + /// </summary> + /// <returns>节点的数组</returns> + public TreeNode[] GetExpandedNodes() + { + return GetExpandedNodes(Nodes); + } + + /// <summary> + /// 获取指定节点集合中所有展开节点的数组 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + /// <returns>节点的数组</returns> + public TreeNode[] GetExpandedNodes(TreeNodeCollection nodes) + { + List<TreeNode> returnNodes = new List<TreeNode>(); + ResolveExpandedNodes(returnNodes, nodes); + return returnNodes.ToArray(); + } + + private void ResolveExpandedNodes(List<TreeNode> returnNodes, TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (!node.Leaf && node.Expanded) + { + returnNodes.Add(node); + } + + if (node.Nodes != null && node.Nodes.Count > 0) + { + ResolveExpandedNodes(returnNodes, node.Nodes); + } + } + } + + #endregion + + #region CollapseAllNodes/ExpandAllNodes + + /// <summary> + /// 折叠所有节点 + /// </summary> + public void CollapseAllNodes() + { + CollapseAllNodes(Nodes); + } + + /// <summary> + /// 折叠指定节点集合中的所有节点 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + public void CollapseAllNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (!node.Leaf) + { + node.Expanded = false; + + if (node.Nodes != null && node.Nodes.Count > 0) + { + CollapseAllNodes(node.Nodes); + } + } + } + } + + /// <summary> + /// 展开所有节点 + /// </summary> + public void ExpandAllNodes() + { + ExpandAllNodes(Nodes); + } + + /// <summary> + /// 展开指定节点集合中的所有节点 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + public void ExpandAllNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (!node.Leaf) + { + node.Expanded = true; + + if (node.Nodes != null && node.Nodes.Count > 0) + { + ExpandAllNodes(node.Nodes); + } + } + } + } + + #endregion + + #region GetCheckedNodes + + /// <summary> + /// 获取选中节点的ID数组 + /// </summary> + /// <returns>节点的ID数组</returns> + public string[] GetCheckedNodeIDs() + { + return GetCheckedNodeIDs(Nodes); + } + + /// <summary> + /// 获取指定节点集合中选中节点的ID数组 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + /// <returns>节点的ID数组</returns> + public string[] GetCheckedNodeIDs(TreeNodeCollection nodes) + { + List<string> checkedNodeIDs = new List<string>(); + TreeNode[] checkedNodes = GetCheckedNodes(nodes); + foreach (TreeNode node in checkedNodes) + { + checkedNodeIDs.Add(node.NodeID); + } + return checkedNodeIDs.ToArray(); + } + + /// <summary> + /// 获取选中节点的数组 + /// </summary> + /// <returns>节点的数组</returns> + public TreeNode[] GetCheckedNodes() + { + return GetCheckedNodes(Nodes); + } + + /// <summary> + /// 获取指定节点集合中选中节点的数组 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + /// <returns>节点的数组</returns> + public TreeNode[] GetCheckedNodes(TreeNodeCollection nodes) + { + List<TreeNode> rtList = new List<TreeNode>(); + ResolveCheckedNodes(rtList, nodes); + return rtList.ToArray(); + } + + + private void ResolveCheckedNodes(List<TreeNode> rtList, TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (node.EnableCheckBox && node.Checked) + { + rtList.Add(node); + } + + if (node.Nodes != null && node.Nodes.Count > 0) + { + ResolveCheckedNodes(rtList, node.Nodes); + } + } + } + + #endregion + + #region CheckAllNodes UncheckAllNodes + + /// <summary> + /// 选中所有节点的复选框 + /// </summary> + public void CheckAllNodes() + { + CheckAllNodes(Nodes); + } + + /// <summary> + /// 选中指定节点的复选框 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + public void CheckAllNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (node.EnableCheckBox) + { + node.Checked = true; + } + + if (!node.Leaf && node.Nodes != null && node.Nodes.Count > 0) + { + CheckAllNodes(node.Nodes); + } + + } + } + + /// <summary> + /// 反选所有节点的复选框 + /// </summary> + public void UncheckAllNodes() + { + UncheckAllNodes(Nodes); + } + + /// <summary> + /// 反选指定节点的复选框 + /// </summary> + /// <param name="nodes">指定的节点集合</param> + public void UncheckAllNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (node.EnableCheckBox) + { + node.Checked = false; + } + + if (!node.Leaf && node.Nodes != null && node.Nodes.Count > 0) + { + UncheckAllNodes(node.Nodes); + } + } + } + + #endregion + + #region FindNode + + /// <summary> + /// 查找树节点 + /// </summary> + /// <param name="nodeId">节点ID</param> + /// <returns>树节点</returns> + public TreeNode FindNode(string nodeId) + { + return FindNode(nodeId, Nodes); + } + + /// <summary> + /// 在指定的节点集合中查找树节点 + /// </summary> + /// <param name="nodeId">节点ID</param> + /// <param name="nodes">指定的节点集合</param> + /// <returns>树节点</returns> + public TreeNode FindNode(string nodeId, TreeNodeCollection nodes) + { + if (nodes.Count == 0) + { + return null; + } + + foreach (TreeNode node in nodes) + { + if (node.NodeID == nodeId) + { + return node; + } + + if (node.Nodes.Count > 0) + { + TreeNode childNode = FindNode(nodeId, node.Nodes); + + if (childNode != null) + { + return childNode; + } + } + } + + return null; + } + + #endregion + + #region GetExpandAllNodesReference GetCollapseAllNodesReference + + /// <summary> + /// 获取展开全部节点的的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetExpandAllNodesReference() + { + return String.Format("{0}.expandAll();", ScriptID); + } + + /// <summary> + /// 获取折叠全部节点的的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetCollapseAllNodesReference() + { + return String.Format("{0}.collapseAll();", ScriptID); + } + + #endregion + + #region oldcode + + //public void ClearNodes() + //{ + // CheckedNodeIDArray = null; + // SelectedNodeID = null; + // ExpandedNodeIDArray = null; + // Nodes.Clear(); + //} + + //public TreeNode AddNode() + //{ + // TreeNode node = new TreeNode(); + // Nodes.Add(node); + + // return node; + //} + + #endregion + + #endregion + + #region oldcode + + //[Description("Ajax回发时强制更新此控件全部内容")] + //internal override bool AjaxForceCompleteUpdate + //{ + // get + // { + // return true; + // } + //} + + #endregion + + #region oldcode + + //private int _nextNodeIndex = 0; + + ///// <summary> + ///// 获取下一个节点的ID,为那些没有设置NodeId的节点自定设置NodeId + ///// </summary> + ///// <returns></returns> + //internal string GetNextNodeId() + //{ + // return String.Format("{0}_n{1}", ClientJavascriptID, _nextNodeIndex++); + //} + + #endregion + + #region oldcode + + //protected override object SaveViewState() + //{ + // object[] states = new object[] { + // base.SaveViewState(), + // ((IStateManager)Nodes).SaveViewState(), + // ((IStateManager)Mappings).SaveViewState() + // }; + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Nodes).LoadViewState(states[1]); + + // ((IStateManager)Mappings).LoadViewState(states[2]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Nodes).TrackViewState(); + + // ((IStateManager)Mappings).TrackViewState(); + //} + + #endregion + + #region oldcode + + ///// <summary> + ///// 展开的行 + ///// </summary> + //[DefaultValue(null)] + //[Description("展开的行")] + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public string[] ExpandedNodeIDArray + //{ + // get + // { + // //// We don't need to save this state in ViewState, because TreeNode has it's state persistance. + // //object obj = BoxState["ExpandedNodeIDArray"]; + + // //if (obj == null) + // //{ + // // obj = BoxState["ExpandedNodeIDArray"] = GetExpandedNodeIDArray(); + // //} + + // //return (string[])obj; + // return GetExpandedNodeIDArray(); + // } + // set + // { + // if (value != null) + // { + // List<string> strList = new List<string>(value); + + // // 折叠所有节点,只展开value中的节点 + // CollapseAllNodes(); + // foreach (string nodeId in strList) + // { + // FindNode(nodeId).Expanded = true; + // } + + // BoxState["ExpandedNodeIDArray"] = strList.ToArray(); + // } + // else + // { + // BoxState["ExpandedNodeIDArray"] = new string[0] { }; + // } + // } + //} + + ///// <summary> + ///// 选中的行 + ///// </summary> + //[DefaultValue(null)] + //[Description("选中的行")] + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public string[] CheckedNodeIDArray + //{ + // get + // { + // object obj = BoxState["CheckedNodeIDArray"]; + + // if (obj == null) + // { + // obj = BoxState["CheckedNodeIDArray"] = GetCheckedNodeIDArray(); + // } + + // return (string[])obj; + // } + // set + // { + // if (value != null) + // { + // List<string> strList = new List<string>(value); + + // // 不选中所有节点,只选中value中的节点 + // UncheckAllNodes(); + // foreach (string nodeId in strList) + // { + // TreeNode node = FindNode(nodeId); + // if (node.EnableCheckBox) + // { + // node.Checked = true; + // } + // } + + // BoxState["CheckedNodeIDArray"] = strList.ToArray(); + // } + // else + // { + // BoxState["CheckedNodeIDArray"] = new string[0] { }; + // } + // } + //} + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNode.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNode.cs new file mode 100644 index 0000000..7d61c1c --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNode.cs @@ -0,0 +1,761 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeNode.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Web.UI.Design; +using System.Drawing.Design; +using System.Xml; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// ڵ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true, DefaultProperty = "Nodes")] + [PersistChildren(false)] + public class TreeNode + { + #region TreeInstance + + private Tree _tree; + + /// <summary> + /// ʵ + /// </summary> + public Tree TreeInstance + { + get + { + return _tree; + } + set + { + _tree = value; + } + } + + private TreeNode _parentNode; + + /// <summary> + /// ڵ + /// </summary> + public TreeNode ParentNode + { + get + { + return _parentNode; + } + set + { + _parentNode = value; + } + } + + + #endregion + + #region Nodes + + private TreeNodeCollection _nodes; + + /// <summary> + /// ڵ㼯 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerDefaultProperty)] + public TreeNodeCollection Nodes + { + get + { + if (_nodes == null) + { + // TreeInstance == null жϣʱ´ + // ޷ ParentNode Եַʾʽ FineUI.TreeNode FineUI.TreeNode ͵Ķ + if (TreeInstance == null) + { + _nodes = new TreeNodeCollection(null, null); + } + else + { + // ʱTreeInstanceΪnullASPXNodesڵʱ + // ʱTreeInstanceΪnull̵ֶͨΣӸڵ㣬Ȼӽڵ + _nodes = new TreeNodeCollection(TreeInstance, this); + } + } + return _nodes; + } + } + + #endregion + + #region EnableExpandEvent + + private bool _enableExpandEvent = false; + /// <summary> + /// չڵǷط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("չڵǷط")] + public bool EnableExpandEvent + { + get + { + return _enableExpandEvent; + } + set + { + _enableExpandEvent = value; + } + } + + private bool _enableCollapseEvent = false; + /// <summary> + /// ۵ڵǷط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("۵ڵǷط")] + public bool EnableCollapseEvent + { + get + { + return _enableCollapseEvent; + } + set + { + _enableCollapseEvent = value; + } + } + + #endregion + + #region EnableClickEvent|OnClientClick + + private bool _enablePostBack = false; + /// <summary> + /// ڵǷط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ڵǷط")] + public bool EnableClickEvent + { + get + { + return _enablePostBack; + } + set + { + _enablePostBack = value; + } + } + + private string _onClientClick = String.Empty; + /// <summary> + /// ťʱҪִеĿͻ˽ű + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ťʱҪִеĿͻ˽ű")] + public string OnClientClick + { + get + { + return _onClientClick; + } + set + { + _onClientClick = value; + } + } + + #endregion + + #region CommandName|CommandArgument + + private string _commandName = String.Empty; + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandName + { + get + { + return _commandName; + } + set + { + _commandName = value; + } + } + + private string _commandArgument = String.Empty; + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandArgument + { + get + { + return _commandArgument; + } + set + { + _commandArgument = value; + } + } + + + #endregion + + #region EnableCheckBox|Checked|EnableCheckEvent + + private bool _checked = false; + /// <summary> + /// Ƿѡ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿѡ")] + public bool Checked + { + get + { + return _checked; + } + set + { + _checked = value; + } + } + + private bool _enableCheckBox = false; + /// <summary> + /// Ƿøѡ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿøѡ")] + public bool EnableCheckBox + { + get + { + return _enableCheckBox; + } + set + { + _enableCheckBox = value; + } + } + + private bool _enableCheckEvent = false; + + /// <summary> + /// ı临ѡ״̬ǷԶط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ı临ѡ״̬ǷԶط")] + public bool EnableCheckEvent + { + get + { + return _enableCheckEvent; + } + set + { + _enableCheckEvent = value; + } + } + + + #endregion + + #region Properties + + private string _cssClass = String.Empty; + /// <summary> + /// ڵʽ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ڵʽ")] + public string CssClass + { + get + { + return _cssClass; + } + set + { + _cssClass = value; + } + } + + + + private string _text = String.Empty; + /// <summary> + /// ı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ı")] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + private string _nodeID = String.Empty; + /// <summary> + /// ڵID + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ڵID")] + public string NodeID + { + get + { + if (String.IsNullOrEmpty(_nodeID)) + { + //_nodeID = String.Format("f_{0}", TreeInstance.NodeIDIncrement++); // ClientJavascriptIDManager.Instance.GetNextJavascriptID(); + _nodeID = TreeNodeIDManager.Instance.GetNextTreeNodeID(); + } + return _nodeID; + + #region old code + + //object obj = ViewState["NodeID"]; + //if (obj == null) + //{ + // // GUIDķʽ̫ռViewState + // //obj = ViewState["NodeID"] = Guid.NewGuid().ToString(); + // //obj = ViewState["NodeID"] = String.Format("{0}_n{1}", TreeInstance.ClientJavascriptID, _nextNodeIndex++); + + // obj = ViewState["NodeID"] = ClientJavascriptIDManager.Instance.GetNextJavascriptID(); + //} + //return (string)obj; + + #endregion + } + set + { + _nodeID = value; + } + } + + private bool _leaf = false; + /// <summary> + /// ǷҶӽڵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ǷҶӽڵ")] + public bool Leaf + { + get + { + return _leaf; + } + set + { + _leaf = value; + } + } + + private bool _enabled = true; + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + + private bool _expanded = false; + /// <summary> + /// Ƿչ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿչ")] + public bool Expanded + { + get + { + return _expanded; + } + set + { + _expanded = value; + } + } + + private string _target = String.Empty; + /// <summary> + /// Ŀ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("Ŀ")] + public string Target + { + get + { + return _target; + } + set + { + _target = value; + } + } + + + private string _navigateUrl = String.Empty; + /// <summary> + /// ӵַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӵַ")] + public string NavigateUrl + { + get + { + return _navigateUrl; + } + set + { + _navigateUrl = value; + } + } + + + //private string _iconUrl = String.Empty; + ///// <summary> + ///// ͼַ + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("ͼַ")] + //[Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + //public string IconUrl + //{ + // get + // { + // if (String.IsNullOrEmpty(_iconUrl)) + // { + // if (Icon != Icon.None) + // { + // _iconUrl = IconHelper.GetIconUrl(Icon); + // } + // } + // return _iconUrl; + // } + // set + // { + // _iconUrl = value; + // } + //} + + private string _iconUrl = String.Empty; + /// <summary> + /// ͼַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼַ")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + return _iconUrl; + } + set + { + _iconUrl = value; + } + } + + + private Icon _icon = Icon.None; + /// <summary> + /// Ԥͼ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("Ԥͼ")] + public virtual Icon Icon + { + get + { + return _icon; + } + set + { + _icon = value; + } + } + + private string _toolTip = String.Empty; + /// <summary> + /// ʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾı")] + public string ToolTip + { + get + { + return _toolTip; + } + set + { + _toolTip = value; + } + } + + //private bool _singleClickExpand = false; + ///// <summary> + ///// лڵ۵չ״̬ + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("лڵ۵չ״̬")] + //public bool SingleClickExpand + //{ + // get + // { + // return _singleClickExpand; + // } + // set + // { + // _singleClickExpand = value; + // } + //} + + + #endregion + + #region private DataBindRow + + ///// <summary> + ///// еֵ + ///// </summary> + //public void DataBindRow() + //{ + // #region old code + // //// ûгʼValuesʼ + // //if (Values == null) + // //{ + // // GridColumnCollection columns = _grid.Columns; + + // // // ÿеֵ + // // Values = new object[columns.Count]; + // // ExtraValues = new object[columns.Count]; + // // for (int i = 0, count = columns.Count; i < count; i++) + // // { + // // Values[i] = columns[i].GetColumnValue(this); + // // } + + // // // DataKeysֵ + // // if (_grid.DataKeyNames != null) + // // { + // // string[] keyNames = _grid.DataKeyNames; + // // DataKeys = new object[keyNames.Length]; + // // for (int i = 0, count = keyNames.Length; i < count; i++) + // // { + // // DataKeys[i] = GetPropertyValue(keyNames[i]); + // // } + // // } + + // // //// CheckBoxFieldҪ⴦ + // // //for (int i = 0, count = columns.Count; i < count; i++) + // // //{ + // // // CheckBoxField cbField = columns[i] as CheckBoxField; + // // // if (cbField != null) + // // // { + // // // cbField.IniValues(); + // // // } + // // //} + // //} + // #endregion + //} + + #endregion + + #region GetPropertyValue + + ///// <summary> + ///// ȡԵֵ + ///// </summary> + ///// <param name="rowObj"></param> + ///// <param name="propertyName"></param> + ///// <returns></returns> + //public object GetPropertyValue(string propertyName) + //{ + // //return ObjectUtil.GetPropertyValue(_dataItem, propertyName); + //} + + + #endregion + + #region old code + + //internal TreeNode AddNode() + //{ + // TreeNode node = new TreeNode(); + // Nodes.Add(node); + + // return node; + //} + + #endregion + + #region ReadXmlAttributes + + internal void ReadXmlAttributes(XmlAttributeCollection attributes, Tree tree) + { + foreach (XmlAttribute attribute in attributes) + { + string name = attribute.Name; + + if (tree != null && tree.Mappings.Count > 0) + { + name = tree.GetXmlAttributeMappingTo(name); + } + + SetPropertyValue(name, attribute.Value); + } + } + + /// <summary> + /// Եֵ + /// </summary> + /// <param name="name"></param> + /// <param name="value"></param> + private void SetPropertyValue(string name, string value) + { + PropertyInfo pInfo = GetType().GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + if (pInfo != null) + { + object objValue = null; + + if (pInfo.PropertyType == typeof(System.String)) + { + objValue = value; + } + else if (pInfo.PropertyType == typeof(System.Boolean)) + { + objValue = Convert.ToBoolean(value); + } + else if (pInfo.PropertyType == typeof(System.Int32)) + { + objValue = Convert.ToInt32(value); + } + else if (pInfo.PropertyType == typeof(Icon)) + { + objValue = (Icon)Enum.Parse(typeof(Icon), value, true); + } + + pInfo.SetValue(this, objValue, null); + } + } + + #endregion + + #region oldcode + + //public override object SaveViewState() + //{ + // object[] states = new object[] { + // base.SaveViewState(), + // ((IStateManager)Nodes).SaveViewState() + // }; + + // return states; + //} + + //public override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Nodes).LoadViewState(states[1]); + // } + //} + + //public override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Nodes).TrackViewState(); + //} + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNodeCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNodeCollection.cs new file mode 100644 index 0000000..72bbbd4 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/TreeNode/TreeNodeCollection.cs @@ -0,0 +1,111 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: TreeNodeCollection.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.Data; +using System.Collections.ObjectModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ڵؼ + /// </summary> + public class TreeNodeCollection : Collection<TreeNode> + { + private Tree _treeInstance; + private TreeNode _parentNode; + + /// <summary> + /// 캯 + /// </summary> + /// <param name="tree">ʵ</param> + /// <param name="parentNode">ڵ</param> + public TreeNodeCollection(Tree tree, TreeNode parentNode) + { + _treeInstance = tree; + _parentNode = parentNode; + } + + + // ע1: + // + // TreeNodeCollection nodes = new TreeNodeCollection(); + // TreeNode node = new TreeNode(); + // עʱnodeûйtree1κϢ֮ںtree1.Nodes.Addʱ֪ǰʵ + // nodes.Add(node); + // tree1.Nodes.Add(nodes); + + // ע2: + // Ľڵ㶨壨ASPXжģ + // -China + // -Zhumadian + // -Suiping + // -Xiping + // ע InsertItem һεSuipingڵʱеģ + // Ҳ˵Suipingʱ֪ǰʵֻChinatree1.Nodesʱ֪ʵ + // Ҫ _treeInstance ΪʱҲӸڵʱݹеӽڵ㣬ʵ + + /// <summary> + /// ڵ + /// </summary> + /// <param name="index">λ</param> + /// <param name="item">ڵʵ</param> + protected override void InsertItem(int index, TreeNode item) + { + if (_treeInstance != null) + { + ResolveTreeNode(item); + } + + item.ParentNode = _parentNode; + + base.InsertItem(index, item); + } + + + /// <summary> + /// ÿڵTreeʵ + /// </summary> + /// <param name="node"></param> + private void ResolveTreeNode(TreeNode node) + { + node.TreeInstance = _treeInstance; + if (node.Nodes.Count > 0) + { + foreach (TreeNode subNode in node.Nodes) + { + ResolveTreeNode(subNode); + } + } + } + + } + +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMapping.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMapping.cs new file mode 100644 index 0000000..2532703 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMapping.cs @@ -0,0 +1,95 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: XmlAttributeMapping.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Web.UI.Design; +using System.Drawing.Design; +using System.Xml; + + +namespace FineUI +{ + /// <summary> + /// ڵӳ + /// </summary> + [ToolboxItem(false)] + public class XmlAttributeMapping + { + + #region Properties + + private string _from = String.Empty; + + /// <summary> + /// ӳԴ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӳԴ")] + public string From + { + get + { + return _from; + } + set + { + _from = value; + } + } + + private string _to = String.Empty; + + + /// <summary> + /// ӳĿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӳĿ")] + public string To + { + get + { + return _to; + } + set + { + _to = value; + } + } + + + + #endregion + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMappingCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMappingCollection.cs new file mode 100644 index 0000000..71d9454 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Tree/XmlAttributeMapping/XmlAttributeMappingCollection.cs @@ -0,0 +1,45 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: XmlAttributeMappingCollection.cs + * CreatedOn: 2008-07-21 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.Data; +using System.Collections.ObjectModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ڵӳ伯 + /// </summary> + public class XmlAttributeMappingCollection : Collection<XmlAttributeMapping> + { + + } + +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Window/EventArgs/WindowCloseEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Window/EventArgs/WindowCloseEventArgs.cs new file mode 100644 index 0000000..96fa3c2 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Window/EventArgs/WindowCloseEventArgs.cs @@ -0,0 +1,65 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: WindowCloseEventArgs.cs + * CreatedOn: 2008-06-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ر¼ + /// </summary> + public class WindowCloseEventArgs : EventArgs + { + + private string _closeArgument; + + /// <summary> + /// رղ + /// </summary> + public string CloseArgument + { + get { return _closeArgument; } + set { _closeArgument = value; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="closeArgument">رղ</param> + public WindowCloseEventArgs(string closeArgument) + { + _closeArgument = closeArgument; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Window/Window.cs b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Window/Window.cs new file mode 100644 index 0000000..a2618d4 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.CollapsablePanel.Window/Window.cs @@ -0,0 +1,1920 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Window.cs + * CreatedOn: 2008-05-20 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * ->Window有很多特殊的地方: + 1.不受页面中嵌套层次的限制 + 2.ClientJavascriptID和ID一样(这个不好,容易混淆多个层次中的Window,废除) + 3.不使用ClientJavascriptID(也即是不压缩js对象的名称)(这个不好,容易混淆多个层次中的Window,废除) + 4.想到一个办法,通过IFrame的url向子页面传递所在的窗口的信息(比如窗口的客户端名称) + 5.综合2,3点,现在ClientJavascriptID==ClientID,同时ClientID经过特殊处理,保证在多个页面唯一性。 + * + * + * ->想让Ext-Window不受嵌套层次的限制(总在最外层),好办 + * 只需在创建Window对象之前,使用Javascript向form中添加一个DIV用来放置Window对象(而不是使用RenderImmediately的方法实现) + * 30372245@qq.com 2009-02-25 + * + * ->当前的Ext-Window可能要在父页面弹出,也就是要添加到父页面,为了放置名称的冲突,需要随机一个GUID,以便向父页面添加Ext-Window时使用 + * 30372245@qq.com 2009-02-25 + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; +using System.ComponentModel.Design; + +namespace FineUI +{ + // Window控件区别于其他容器控件的地方:RenderImmediately=true,也就是说Window不会渲染为其它控件的子控件,尽管Window可以放在其它控件内 + /// <summary> + /// 窗体控件 + /// </summary> + [Designer("FineUI.Design.WindowDesigner, FineUI.Design")] + [ToolboxData("<{0}:Window IsModal=\"true\" Width=\"500px\" Height=\"350px\" Title=\"Window\" BodyPadding=\"5px\" runat=\"server\"></{0}:Window>")] + [ToolboxBitmap(typeof(Window), "toolbox.Window.bmp")] + [Description("窗体控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Window : CollapsablePanel, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Window() + { + ServerAjaxProperties.Remove("Hidden"); + ClientAjaxProperties.Add("Hidden"); + + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region private properties + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("是否将窗体标题限制在可视区域")] + //[Browsable(false)] + //private bool ConstrainHeader + //{ + // get + // { + // object obj = BoxState["ConstrainHeader"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // BoxState["ConstrainHeader"] = value; + // } + //} + + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否将窗体限制在可视区域")] + //[Browsable(false)] + //private bool Constrain + //{ + // get + // { + // object obj = BoxState["Constrain"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["Constrain"] = value; + // } + //} + + ///// <summary> + ///// 是否内容区域为透明色 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否内容区域为透明色")] + //[Browsable(false)] + //private bool Plain + //{ + // get + // { + // object obj = BoxState["Plain"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // BoxState["Plain"] = value; + // } + //} + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowHeader + { + get + { + return base.ShowHeader; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowBorder + { + get + { + return base.ShowBorder; + } + } + + #endregion + + #region GUID & IFrameName + + ///// <summary> + ///// 这是Window非常特殊的地方 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("控件的客户端ID")] + //internal override string ClientJavascriptID + //{ + // get + // { + // return ClientID; + // } + //} + + ///// <summary> + ///// 为了放置不同页面的Window的ClientID发生冲突,加上GUID + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("控件的客户端ID")] + //public override string ClientID + //{ + // get + // { + // object obj = BoxState["ClientID"]; + // if (obj == null) + // { + // obj = BoxState["ClientID"] = String.Format("{0}_{1}", base.ClientID, System.Guid.NewGuid().ToString("N")); + // } + + // return (string)obj; + // } + //} + + /// <summary> + /// 为了放置不同页面的Window的ClientID发生冲突,加上GUID + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("GUID")] + internal string GUID + { + get + { + object obj = FState["GUID"]; + if (obj == null) + { + obj = FState["GUID"] = String.Format("{0}_{1}", XID, System.Guid.NewGuid().ToString("N")); + } + + return (string)obj; + } + } + + /// <summary> + /// [只读]Window的IFrameName必须是唯一的,在所有页面中是唯一的 + /// 所以不要手工定义Window的IFrameName + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return GUID; + } + } + + #endregion + + #region Properties + + + /// <summary> + /// 窗口的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(WindowPosition.Center)] + [Description("窗口的位置")] + public WindowPosition WindowPosition + { + get + { + object obj = FState["WindowPosition"]; + return obj == null ? WindowPosition.Center : (WindowPosition)obj; + } + set + { + FState["WindowPosition"] = value; + } + } + + + ///// <summary> + ///// 是否弹出窗体 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("是否弹出窗体")] + //[Obsolete("请使用Hidden属性来标记是否弹出窗口")] + //public bool Popup + //{ + // get + // { + // return !Hidden; + // } + // set + // { + // Hidden = !value; + // } + //} + + + ///// <summary> + ///// 是否最大化 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否最大化")] + //public bool Maximized + //{ + // get + // { + // object obj = FState["Maximized"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Maximized"] = value; + // } + //} + + + /// <summary> + /// 左上角位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("左上角位置")] + public Unit Top + { + get + { + object obj = FState["Top"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["Top"] = value; + } + } + + + /// <summary> + /// 左上角位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("左上角位置")] + public Unit Left + { + get + { + object obj = FState["Left"]; + return obj == null ? Unit.Empty : (Unit)obj; + } + set + { + FState["Left"] = value; + } + } + + + /// <summary> + /// 是否可以关闭 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以关闭")] + public bool EnableClose + { + get + { + object obj = FState["EnableClose"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableClose"] = value; + } + } + + + /// <summary> + /// 是否可以移动 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否可以移动")] + public bool EnableDrag + { + get + { + object obj = FState["EnableDrag"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableDrag"] = value; + } + } + + + /// <summary> + /// 是否可以最大化 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以最大化")] + public bool EnableMaximize + { + get + { + object obj = FState["EnableMaximize"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableMaximize"] = value; + } + } + + + /// <summary> + /// 是否可以最小化 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以最小化")] + public bool EnableMinimize + { + get + { + object obj = FState["EnableMinimize"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableMinimize"] = value; + } + } + + + /// <summary> + /// 最小高度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "100")] + [Description("最小高度")] + public new Unit MinHeight + { + get + { + object obj = FState["MinHeight"]; + return obj == null ? (Unit)100 : (Unit)obj; + } + set + { + FState["MinHeight"] = value; + } + } + + + /// <summary> + /// 最小宽度 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "200")] + [Description("最小宽度")] + public new Unit MinWidth + { + get + { + object obj = FState["MinWidth"]; + return obj == null ? (Unit)200 : (Unit)obj; + } + set + { + FState["MinWidth"] = value; + } + } + + /// <summary> + /// 是否模式窗口 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否模式窗口")] + public bool IsModal + { + get + { + object obj = FState["IsModal"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["IsModal"] = value; + } + } + + /// <summary> + /// 是否可以改变窗口大小 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以改变窗口大小")] + public bool EnableResize + { + get + { + object obj = FState["EnableResize"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableResize"] = value; + } + } + + + /// <summary> + /// 点击关闭按钮时需要执行的客户端脚本 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("点击关闭按钮时需要执行的客户端脚本")] + public string OnClientCloseButtonClick + { + get + { + object obj = FState["OnClientCloseButtonClick"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["OnClientCloseButtonClick"] = value; + } + } + + + ///// <summary> + ///// 关闭窗体之前弹出确认窗体内IFrame中表单改变的对话框 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("关闭窗体之前弹出确认窗体内IFrame中表单改变的对话框")] + //public bool EnableConfirmOnClose + //{ + // get + // { + // object obj = FState["EnableConfirmOnClose"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableConfirmOnClose"] = value; + // } + //} + + /// <summary> + /// 关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(CloseAction.Hide)] + [Description("关闭窗体的动作(点击关闭按钮或者按 ESC 键都会执行此动作)")] + public CloseAction CloseAction + { + get + { + object obj = FState["CloseAction"]; + return obj == null ? CloseAction.Hide : (CloseAction)obj; + } + set + { + FState["CloseAction"] = value; + } + } + + + ///// <summary> + ///// 弹出窗口的目标位置,支持_self,_parent + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("_self")] + //[Description("弹出窗口的目标位置,支持_self,_parent")] + //public string Target + //{ + // get + // { + // object obj = BoxState["Target"]; + // return obj == null ? "_self" : (string)obj; + // } + // set + // { + // BoxState["Target"] = value; + // } + //} + + /// <summary> + /// 弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("弹出窗口的目标位置(只有在EnableIFrame=true的情况下有效)")] + public Target Target + { + get + { + object obj = FState["Target"]; + return obj == null ? Target.Self : (Target)obj; + } + set + { + FState["Target"] = value; + } + } + + ///// <summary> + ///// 内容区域颜色是否和边框颜色相同,默认为true + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("内容区域颜色是否和边框颜色相同,默认为true")] + //public bool Plain + //{ + // get + // { + // object obj = FState["Plain"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["Plain"] = value; + // } + //} + + #region old code + + //private CloseAction CloseAction_Default = CloseAction.None; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(CloseAction.None)] + //[Description("关闭窗体的动作")] + //public CloseAction CloseAction + //{ + // get + // { + // object obj = BoxState["CloseAction"]; + // return obj == null ? CloseAction_Default : (CloseAction)obj; + // } + // set + // { + // BoxState["CloseAction"] = value; + // } + //} + + + //private string ClosePostBackArgument_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("关闭窗体引起回发的参数")] + //public string ClosePostBackArgument + //{ + // get + // { + // object obj = BoxState["ClosePostBackArgument"]; + // return obj == null ? ClosePostBackArgument_Default : (string)obj; + // } + // set + // { + // BoxState["ClosePostBackArgument"] = value; + // } + //} + + //private string DefaultButtonID_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("缺省按钮ID")] + //public string DefaultButtonID + //{ + // get + // { + // object obj = BoxState["DefaultButtonID"]; + // return obj == null ? DefaultButtonID_Default : (string)obj; + // } + // set + // { + // BoxState["DefaultButtonID"] = value; + // } + //} + + + + ///// <summary> + ///// 在父窗口中显示(根据Target属性判断) + ///// </summary> + //internal bool ShowInParent + //{ + // get + // { + // if (!String.IsNullOrEmpty(Target) && Target.ToLower() == "_parent") + // { + // return true; + // } + // return false; + // } + //} + #endregion + + #endregion + + #region Constrain/ConstrainHeader + + // 目前,没法加这两个属性,因为Window是渲染到<form>标签中的一个DIV中的,而这个DIV如果是全屏显示的话会遮盖住后面的元素。 + ///// <summary> + ///// 强制整个窗体始终位于页面的可视区域内 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("强制整个窗体始终位于页面的可视区域内")] + //public bool Constrain + //{ + // get + // { + // object obj = FState["Constrain"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["Constrain"] = value; + // } + //} + + ///// <summary> + ///// 强制窗体的标题栏始终位于页面的可视区域内 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("强制窗体的标题栏始终位于页面的可视区域内")] + //public bool ConstrainHeader + //{ + // get + // { + // object obj = FState["ConstrainHeader"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["ConstrainHeader"] = value; + // } + //} + + #endregion + + #region RenderBeginTag/RenderEndTag + + /// <summary> + /// 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderBeginTag(HtmlTextWriter writer) + { + //base.RenderBeginTag(writer); + + //writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // PopUpHiddenFieldID, Popup.ToString().ToLower())); + + //writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // TitleHiddenFieldID, Title.ToString())); + + //// 如果启用IFrame + //if (EnableIFrame) + //{ + // writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // IFrameUrlHiddenFieldID, IFrameUrl.ToString())); + //} + } + + /// <summary> + /// 不向页面输出任何HTML代码,通过Javascript代码添加DIV标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderEndTag(HtmlTextWriter writer) + { + //base.RenderEndTag(writer); + } + + #endregion + + #region OnPreRender + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("是否隐藏窗体")] + private string HiddenHiddenFieldID + { + get + { + return String.Format("{0}_Hidden", ClientID); + } + } + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("window"); + + #region old code + + ////string windowObj = "window"; + //bool showInParent = false; + + //if (!String.IsNullOrEmpty(Target) && Target.ToLower() == "_parent") + //{ + // //windowObj = "parent.window"; + // showInParent = true; + //} + + + //// 以后IFrame中的高度自动处理,不会涉及这块的内容 + //// 因为Window渲染时,如果设置高度600px,则实际生成的高度有601px,所以这里减一 + //if (Height != Unit.Empty) + //{ + // OB.RemoveProperty(OptionName.Height); + // OB.AddProperty(OptionName.Height, Height.Value - 1); + //} + + #endregion + + #region 验证EnableIFrame和Target是否冲突 + + if (!EnableIFrame && Target != Target.Self) + { + Target = Target.Self; + } + + #endregion + + #region Properties + + OB.AddProperty("closeAction", "hide"); + + //if (EnableClose != EnableClose_Default) OB.AddProperty(OptionName.Closable, EnableClose); + //OB.AddProperty(OptionName.Constrain, Constrain); + //OB.AddProperty(OptionName.ConstrainHeader, ConstrainHeader); + //OB.AddProperty("plain", Plain); + + OB.AddProperty("draggable", EnableDrag); + + OB.AddProperty("minimizable", EnableMinimize); + OB.AddProperty("minHeight", MinHeight.Value); + OB.AddProperty("minWidth", MinWidth.Value); + + OB.AddProperty("resizable", EnableResize); + + //OB.AddProperty("maximized", Maximized); + + + // 由于renderTo不是Ext.getBody,所以modal不能正常工作 + OB.AddProperty("modal", IsModal); + + + // 在 F.util.init 中定义 + OB.AddProperty("manager", "F.window_default_group", true); + + + // 此Window显示的位置 + //OB.AddProperty("box_property_show_in_parent", ShowInParent); + OB.AddProperty("f_property_target", TargetHelper.GetName(Target)); + OB.AddProperty("f_property_guid", GUID); + OB.AddProperty("f_property_left", Left != Unit.Empty ? Convert.ToInt32(Left.Value).ToString() : ""); + OB.AddProperty("f_property_top", Top != Unit.Empty ? Convert.ToInt32(Top.Value).ToString() : ""); + OB.AddProperty("f_property_position", WindowPosition == WindowPosition.GoldenSection ? "true" : "false", true); + + if (!EnableAjax) + { + OB.AddProperty("f_property_enable_ajax", false); + } + + //if (Constrain) + //{ + // OB.AddProperty("constrain", true); + //} + + //if (ConstrainHeader) + //{ + // OB.AddProperty("constrainHeader", true); + //} + + + + // 这个为了在客户端生成 PostBack 脚本,比如 __doPostBack('ctl00$ContentPlaceHolder1$Toolbar1$testwindow','') + OB.AddProperty("name", UniqueID); + + #endregion + + #region IconUrl + + if (!String.IsNullOrEmpty(IconUrl)) + { + // 重新对PanelBase中的IconUrl进行定义 + // 因为Window控件可能会在父页面打开,所以在页面中添加CSS的方式是不行的。 + // Modified by sanshi.ustc@gamil.com at 2009-8-1 + + // 首先删除已经添加的CSS样式 + RemoveStartupCSS(String.Format("f-{0}-panelbase-icon", XID)); + + string className = String.Format("f-{0}-window-icon", GUID); + + var addCSSPrefix = String.Empty; + if (Target == Target.Parent) + { + addCSSPrefix = "parent."; + } + else if (Target == Target.Top) + { + addCSSPrefix = "top."; + } + string addCSSScript = String.Format("{0}F.addCSS('{1}','{2}');", addCSSPrefix, className, StyleUtil.GetNoRepeatBackgroundStyle("." + className, ResolveUrl(IconUrl))); + + + // 这里不需要extWindow渲染之前才添加CSS样式,只需要在页面加载完毕后就能添加此CSS样式 + //OB.Listeners.AddProperty("beforerender", String.Format("function(){{{0}}}", addCSSScript), true); + AddStartupAbsoluteScript(addCSSScript); + + + OB.AddProperty("iconCls", className); + + //AddStartupScript(this, "F.util.addCSS('xxxxxxxxxxxxxxxx','');"); + //AddStartupScript(this, "Ext.DomHelper.append(Ext.fly(document.getElementsByTagName('head')[0]),{tag: 'style',type: 'text/css'});"); + //AddStartupScript(this, "Ext.DomHelper.append(document.getElementsByTagName('head')[0], '<style type=\"text/css\"></style>');"); + } + + + #endregion + + #region boxHideScript + + #region old code + + ////string hideFunctionId = String.Format("{0}_hide", ClientJavascriptID); + + //// 1.正常关闭 + //StringBuilder boxHideSB = new StringBuilder(); + + //boxHideSB.Append("var panel=null;"); + //if (ShowInParent) + //{ + // boxHideSB.Append("var panel=this.box_parent_window;"); + //} + //else + //{ + // boxHideSB.Append("var panel=this;"); + //} + + + + + //boxHideSB.AppendFormat("Ext.get('{0}').dom.value='false';", PopUpHiddenFieldID); + //// 清空iframe的src,好像不起作用 + //if (EnableIFrame) + //{ + // //boxHideSB.AppendFormat("{0}.setSrc('#');", IFrameID); + // //boxHideSB.AppendFormat("Ext.get('{0}').dom.innerHTML='';", ChildrenContentID); + // //boxHideSB.AppendFormat("panel.body.dom.innerHTML='';"); + // //boxHideSB.AppendFormat("panel.box_property_iframe_loaded=false;"); + // boxHideSB.AppendFormat("panel.body.first().dom.src='about:blank';");//alert(panel.body.first().dom.src); + // //boxHideSB.AppendFormat("panel.box_property_iframe_url='about:blank';"); + + //} + + //boxHideSB.AppendFormat("panel.hide();"); + + //// 以后可能还要做,回收垃圾 + ////if (ShowInParent) + ////{ + //// boxHideSB.AppendFormat("parent.window.Ext.get('{0}').remove();", ClientJavascriptID); + //// boxHideSB.Append("this.box_parent_window=null;"); + ////} + + //// 1.正常关闭 + //OB.AddProperty("box_hide", JsHelper.GetFunctionWrapper(boxHideSB.ToString()), true); + + #endregion + + /* + * 隐藏窗体的JS代码在 extender.js 中定义 + * + string hideFunctionScript = String.Format("function(){{F.wnd.hide(this, '{0}', {1}, '{2}', '{3}');}}", + TargetHelper.GetName(Target), + EnableIFrame.ToString().ToLower(), + HiddenHiddenFieldID, + GUID); + OB.AddProperty("box_hide", hideFunctionScript, true); + + + OB.AddProperty("box_hide_refresh", JsHelper.GetFunction("this.box_hide();window.location.reload();"), true); + + OB.AddProperty("box_hide_postback", String.Format("function(argument){{this.box_hide();{0}}}", GetPostBackEventReference("$ARG$").Replace("'$ARG$'", "argument")), true); + */ + + #endregion + + #region boxShowScript + + #region old code + + //X.c1 = new Ext.Window({ + //renderTo: "__Window2_wrapper", id: "Window2", + //width: 650, height: 450, bodyStyle: "", + //border: true, box_property_iframe: true, box_property_iframe_url: "", + //box_property_iframe_name: "c1_iframe", box_property_iframe_loaded: false, + //animCollapse: false, collapsible: false, collapsed: false, + //title: " 弹出的窗口 2", closeAction: "hide", plain: false, modal: true, + //draggable: true, maximizable: false, minimizable: false, minHeight: 100, + //minWidth: 200, resizable: false, manager: X.window_default_group, + //box_hide: function() { + // var panel = null; var panel = this.box_parent_window; + // Ext.get('__c1_popup').dom.value = 'false'; + // panel.body.first().dom.src = 'about:blank'; + // panel.hide(); + //}, + //box_hide_refresh: function() { + // this.box_hide(); + // window.location = window.location; + //}, + //box_hide_postback: function(argument) { + // this.box_hide(); + // __doPostBack('Window2', argument); + //}, + //box_show: function(iframeUrl, windowTitle) { + // var panel = null; + // if (!this.box_parent_window) { + // if (!parent.window.Ext.get('__Window2_wrapper')) { + // Ext.DomHelper.append(parent.window.document.forms[0], '<div id="__Window2_wrapper" style="display:inline;"></div>'); + // } else { + // parent.window.Ext.get('__Window2_wrapper').dom.innerHTML = ''; + // } + // this.box_parent_window = new parent.window.Ext.Window(this.cloneConfig({ + // manager: parent.window.X.window_default_group, + // id: "c1", + // box_hide: null, box_hide_refresh: null, + // box_hide_postback: null, box_show: null, + // box_property_frame_element_name: window.frameElement.name + // })); + // } + // var panel = this.box_parent_window; + // if (iframeUrl != '') { + // box_resolveIFrameElement(panel, iframeUrl); + // } + // if (windowTitle != '') { + // panel.setTitle(windowTitle); + // } + // var bodySize = parent.window.Ext.getBody().getSize(); + // var windowSize = panel.getSize(); + // var leftTop = box_calculateGoldenPosition(bodySize, windowSize); + // panel.setPosition(leftTop.left, leftTop.top); + // Ext.get('__c1_popup').dom.value = 'true'; + // panel.show(); + //}, + //closable: false, + //tools: [{ id: "close", + // qtip: "关闭此窗口", + // handler: function(event, toolEl, panel) { + // box_getIFrameWindowObject(X.c1.box_parent_window).X.box_pageStateChanged(); + // } }] + //}); + + /////////////////////////////////////////////////////////// + + //StringBuilder boxShowSB = new StringBuilder(); + //boxShowSB.Append("var panel=null;"); + //if (ShowInParent) + //{ + // boxShowSB.Append("if(!this.box_parent_window){"); + + // boxShowSB.AppendFormat("if(!parent.window.Ext.get('{0}')){{Ext.DomHelper.append(parent.window.document.forms[0],'<div id=\"{0}\" style=\"display:inline;\"></div>');}}else{{parent.window.Ext.get('{0}').dom.innerHTML='';}}", WrapperID); + // //// 添加Manager + // //OB.AddProperty(OptionName.Manager, String.Format("{1}", ResourceManager.WINDOW_DEFAULT_GROUP_ID), true); + + // JsObjectBuilder configBuilder = new JsObjectBuilder(); + // configBuilder.AddProperty("manager", "parent.window." + ResourceManager.WINDOW_DEFAULT_GROUP_ID, true); + // // 注意:一定要传递参数进来,否则的话ext会自动生成id + // // An id property can be passed on this object, otherwise one will be generated to avoid duplicates. + // configBuilder.AddProperty("id", ClientJavascriptID); + // configBuilder.AddProperty("box_hide", "null", true); + // configBuilder.AddProperty("box_hide_refresh", "null", true); + // configBuilder.AddProperty("box_hide_postback", "null", true); + // configBuilder.AddProperty("box_show", "null", true); + // //configBuilder.AddProperty("draggable", true); + + // // 需要设置本Window所在页面的iframe的名称 + // configBuilder.AddProperty("box_property_frame_element_name", "window.frameElement.name", true); + + // //configBuilder.AddProperty("box_property_frame_element_name", "window.frameElement.name", true); + + + // boxShowSB.AppendFormat("this.box_parent_window=new parent.window.Ext.Window(this.cloneConfig({0}));", configBuilder); + + // boxShowSB.Append("}"); + + // boxShowSB.AppendFormat("var panel=this.box_parent_window;"); + //} + //else + //{ + // boxShowSB.Append("var panel=this;"); + //} + + + //// 将IFrameUrl的设置放在显示弹出窗口值 + //boxShowSB.Append("if(iframeUrl!=''){"); // alert(new Date()-time11); + ////boxShowSB.Append("\r\n"); + ////boxShowSB.AppendFormat("{0}.setSrc(iframeUrl);", IFrameID); + ////boxShowSB.AppendFormat("{0}.box_property_iframe_url=iframeUrl;", ClientJavascriptID); + //boxShowSB.AppendFormat("box_resolveIFrameElement(panel,iframeUrl);"); + ////boxShowSB.AppendFormat("Ext.get('{0}').dom.value=iframeUrl;", IFrameUrlHiddenFieldID); + ////boxShowSB.Append("\r\n"); + //boxShowSB.Append("}"); + + + //boxShowSB.Append("if(windowTitle!=''){"); + //boxShowSB.AppendFormat("panel.setTitle(windowTitle);"); + ////boxShowSB.AppendFormat("Ext.get('{0}').dom.value=windowTitle;", TitleHiddenFieldID); + //boxShowSB.Append("}"); + + //// 如果定义了左上角的位置 + //if (Top != Unit.Empty && Left != Unit.Empty) + //{ + // // 设置了Top/Left + // boxShowSB.AppendFormat("panel.setPosition({0},{1});", Left.Value, Top.Value); + //} + //else + //{ + // // 如果没有定义左上角的位置 + // if (WindowPosition == WindowPositionType.GoldenSection) + // { + // // 1.使用黄金分割点 + // // TOP: Vertical = (screen.height - (screen.height/1.618)) - (pop-up_height/2) + // // Left: Horizontal = (screen.width - pop-up_width)/2 + // if (ShowInParent) + // { + // boxShowSB.Append("var bodySize=parent.window.Ext.getBody().getSize();"); + // } + // else + // { + // boxShowSB.Append("var bodySize=Ext.getBody().getSize();"); + // } + // boxShowSB.Append("var windowSize=panel.getSize();"); + // // 计算黄金分割点 + // boxShowSB.Append("var leftTop=box_calculateGoldenPosition(bodySize,windowSize);"); + // boxShowSB.Append("panel.setPosition(leftTop.left,leftTop.top);"); + // } + // else + // { + // // 2.中间位置 + // boxShowSB.AppendFormat("panel.alignTo(Ext.getBody(), \"c-c\");"); + // } + //} + //boxShowSB.AppendFormat("Ext.get('{0}').dom.value='true';", PopUpHiddenFieldID); + //boxShowSB.AppendFormat("panel.show();"); //alert(new Date()-time11) + ////boxShowSB.Append("var time_2=new Date();if(time_1){alert(time_2-time_1);}"); + + + //string boxShowFunction = String.Format("function(iframeUrl,windowTitle){{{0}}}", boxShowSB.ToString()); + ////string boxShowScript = String.Format("{0}_show={1};", ClientJavascriptID, boxShowFunction); + //OB.AddProperty("box_show", boxShowFunction, true); + + #endregion + + /* + string showFunctionScript = String.Format("function(iframeUrl, windowTitle){{F.wnd.show(this, iframeUrl, windowTitle, '{0}', '{1}', {2}, '{3}');}}", + Left != Unit.Empty ? Convert.ToInt32(Left.Value).ToString() : "", + Top != Unit.Empty ? Convert.ToInt32(Top.Value).ToString() : "", + WindowPosition == WindowPosition.GoldenSection ? "true" : "false", + HiddenHiddenFieldID); + OB.AddProperty("f_show", showFunctionScript, true); + */ + + #endregion + + #region tools + + #region old code + + //string closeButtonClickScript = String.Empty; + + //closeButtonClickScript += "\r\n"; + + //if (EnableClose) + //{ + // #region old code + + // //string closeScript = String.Empty; + // //if (CloseAction == CloseAction.None) + // //{ + // // closeScript = String.Format("(this.{0}_hide).createDelegate(this)", ClientJavascriptID); + // //} + // //else if (CloseAction == CloseAction.PostBack) + // //{ + // // closeScript = String.Format("(this.{0}_hide_postback).createDelegate(this,['{1}'])", ClientJavascriptID, ClosePostBackArgument); + // //} + // //else if (CloseAction == CloseAction.Refresh) + // //{ + // // closeScript = String.Format("(this.{0}_hide_refresh).createDelegate(this)", ClientJavascriptID); + // //} + + + // //string closeButtonClickScript = String.Format("{0}.tools.close.on('click',{1},this);", ClientJavascriptID, closeScript); + // //AddAbsoluteStartupScript( closeButtonClickScript); + + // #endregion + + // string closeButtonScript = OnClientCloseButtonClick; + // if (String.IsNullOrEmpty(closeButtonScript)) + // { + // closeButtonScript = GetCloseReference(); + // } + // closeButtonScript = String.Format("function(e){{{0}}}", closeButtonScript); + + // // 要先取消 close 注册的事件 + // closeButtonClickScript += String.Format("{0}.tools.close.removeAllListeners();X.{0}.tools.close.on('click',{1},box);", ClientJavascriptID, closeButtonScript); + // //AddAbsoluteStartupScript( closeButtonClickScript); + //} + #endregion + + //JsArrayBuilder toolsBuilder = new JsArrayBuilder(); + + if (EnableMaximize) + { + OB.AddProperty("maximizable", true); + + // 这个事件可以处理两种情况,一是点击最大化按钮,二是双击Window标题栏最大化 + //OB.Listeners.AddProperty("maximize", "function(win){F.wnd.fixMaximize(win);}", true); + AddListener("maximize", "F.wnd.fixMaximize(win);", "win"); + + //OB.Listeners.AddProperty("resize", "function(win,width,height){console.log(width + ' - ' +height);}", true); + //JsObjectBuilder maxObj = new JsObjectBuilder(); + //maxObj.AddProperty("type", "maximize"); + //maxObj.AddProperty("handler", String.Format("function(event,toolEl,win){{{0}}}", "win.maximize();"), true); + //toolsBuilder.AddProperty(maxObj); + + //JsObjectBuilder minObj = new JsObjectBuilder(); + //minObj.AddProperty("type", "restore"); + //minObj.AddProperty("hidden", true); + //minObj.AddProperty("handler", String.Format("function(event,toolEl,win){{{0}}}", "win.restore();"), true); + //toolsBuilder.AddProperty(minObj); + + + //// This is a bug of Extjs. + //// If the window is not render to window.body, the maximize button works abnormal. + //OB.Listeners.AddProperty("maximize", "function(window){var bodySize=Ext.getBody().getViewSize();window.setSize(bodySize.width,bodySize.height);}", true); + } + else + { + OB.AddProperty("maximizable", false); + } + + + + if (EnableClose) + { + string closeScript = String.Empty; + + OB.AddProperty("closable", true); + + if (!String.IsNullOrEmpty(OnClientCloseButtonClick)) + { + closeScript = OnClientCloseButtonClick; + } + else + { + //if (EnableConfirmOnClose) + //{ + // switch (CloseAction) + // { + // case CloseAction.Hide: + // closeScript = GetConfirmHideReference(); + // break; + // case CloseAction.HideRefresh: + // closeScript = GetConfirmHideRefreshReference(); + // break; + // case CloseAction.HidePostBack: + // closeScript = GetConfirmHidePostBackReference(); + // break; + // } + //} + //else + //{ + switch (CloseAction) + { + case CloseAction.Hide: + closeScript = GetHideReference(); + break; + case CloseAction.HideRefresh: + closeScript = GetHideRefreshReference(); + break; + case CloseAction.HidePostBack: + closeScript = GetHidePostBackReference(); + break; + } + //} + } + + //JsObjectBuilder closeObj = new JsObjectBuilder(); + //closeObj.AddProperty("type", "close"); + //closeObj.AddProperty("qtip", "F.wnd.closeButtonTooltip", true); + //if (!String.IsNullOrEmpty(closeScript)) + //{ + // // ESC 按键和右上角的关闭按钮使用相同的事件处理函数 + // string closeFunction = JsHelper.GetFunction(closeScript); + // closeObj.AddProperty("handler", closeFunction, true); + // OB.AddProperty("onEsc", closeFunction, true); + + // // TODO:这样会死循环 + // //OB.Listeners.AddProperty("beforehide", JsHelper.GetFunction(closeScript + "return false;"), true); + //} + + //toolsBuilder.AddProperty(closeObj); + + + //// ESC 按键和右上角的关闭按钮使用相同的事件处理函数 + //string closeFN = XID + "_close"; + //closeScript = String.Format("var {0}={1};", closeFN, JsHelper.GetFunction(closeScript + "return false;")); + + //// 用户按ESC键关闭窗口 + //OB.AddProperty("onEsc", closeFN, true); + //// 用户点击右上角关闭按钮关闭窗口 + //OB.Listeners.AddProperty("beforeclose", closeFN, true); + + + // 【点击右上角关闭按钮】和【用户按ESC键】都会调用 beforeclose 事件处理函数,return false; 表示自行处理关闭事件 + AddListener("beforeclose", closeScript + "return false;"); + } + else + { + OB.AddProperty("closable", false); + } + + #endregion + + #region Show Window + + string showWindowScript = String.Empty; + + // 我们不依赖于extjs的hidden配置属性,而是手工调用 + OB.RemoveProperty("hidden"); + + // 如果页面第一次加载或者非原生回发,需要显示窗体 + if (!Hidden) + { + showWindowScript = GetShowReference().Replace(ScriptID + ".", XID + "."); + //AddStartupAbsoluteScript(GetShowReference()); + } + + + #endregion + + #region HiddenFields + + // + // 有一个原则:只要是能在客户端改变的属性,均要在回发时保持状态,否则会出现莫名奇妙的问题 + // + string hiddenFieldsScript = String.Empty; + + hiddenFieldsScript += GetSetHiddenFieldValueScript(HiddenHiddenFieldID, Hidden.ToString().ToLower()); + //hiddenFieldsScript += "\r\n"; + + //hiddenFieldsScript += GetAddHiddenFieldScript(TitleHiddenFieldID, Title.ToString()); + + //// 如果启用IFrame + //if (EnableIFrame) + //{ + // hiddenFieldsScript += GetAddHiddenFieldScript(IFrameUrlHiddenFieldID, IFrameUrl.ToString()); + //} + #endregion + + #region AddStartupScript + + // 无论把 Window 控件放在哪里(母版页,或者用户控件中都行),因为下面会输出 Window 在页面上的节点,所以一定要输出 renderTo + OB.AddProperty("renderTo", WrapperID); + + + // 创建Window对象 + string jsContent = String.Format("var {0}=F.create('Ext.window.Window',{1});", XID, OB.ToString()); + + // 通过Javascript的方式向页面添加Window的DIV包裹容器 + string addWrapperScript = String.Format("F.util.appendFormNode('{0}');", String.Format("<div class=\"f-window-wrapper\" id=\"{0}\"></div>", WrapperID)); + //addWrapperScript += "\r\n"; + + // 添加隐藏表单字段的脚本和创建Window对象的脚本 + jsContent = addWrapperScript + hiddenFieldsScript + jsContent + showWindowScript; + AddStartupScript(jsContent); + + #endregion + + } + + /// <summary> + /// 获取 Hidden 属性改变的 JavaScript 脚本 + /// Window 控件需要特殊处理,而不是像其他客户端组件一样调用 f_setVisible 函数 + /// </summary> + protected override string GetHiddenPropertyChangedScript() + { + if (PropertyModified("Hidden")) + { + return Hidden ? GetHideReference() : GetShowReference(); + + } + return String.Empty; + } + + #region old code + + ///// <summary> + ///// 隐藏窗体,并且执行窗体关闭动作 + ///// </summary> + ///// <returns></returns> + //private string GetHideFunctionId() + //{ + // if (CloseAction == CloseAction.Refresh) + // { + // return String.Format("{0}_hide_refresh", ClientJavascriptID); + // } + // else if (CloseAction == CloseAction.PostBack) + // { + // return String.Format("{0}_hide_postback", ClientJavascriptID); + // } + // else + // { + // return String.Format("{0}_hide", ClientJavascriptID); + // } + //} + + #endregion + + #endregion + + #region GetSaveStateReference + + /// <summary> + /// 保存服务器控件的ClientID + /// 可以调用ActiveWindow.GetWriteBackValueReference在子页面向这些服务器控件写入值 + /// </summary> + public string GetSaveStateReference(params string[] values) + { + string valuesJS = JsHelper.EnquoteStringArray(values); + + return String.Format("{0}.f_property_save_state_control_client_ids={1};", ScriptID, valuesJS); + } + + ///// <summary> + ///// 保存值到Window对象中 + ///// </summary> + //public string GetSaveValueReference(bool value) + //{ + // return String.Format("{0}.box_bool_value='{1}';", ClientJavascriptID, value.ToString().ToLower()); + //} + + #endregion + + #region GetIFramePostBackEventReference + /// <summary> + /// 获取窗体内IFrame回发页面的客户端脚本(比如:__doPostBack('','eventArgument');) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <returns>客户端脚本</returns> + public string GetIFramePostBackEventReference(string eventArgument) + { + return String.Format("F.wnd.getIFrameWindowObject({0}).__doPostBack('',{1});", ScriptID, JsHelper.Enquote(eventArgument)); + } + + /// <summary> + /// 获取窗体内IFrame回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <returns>客户端脚本</returns> + public string GetIFrameCustomEventReference(string eventArgument) + { + return GetIFrameCustomEventReference(eventArgument, false); + } + + /// <summary> + /// 获取窗体内IFrame回发的客户端脚本(触发PageManager的CustomEvent事件) + /// </summary> + /// <param name="eventArgument">事件参数</param> + /// <param name="validateForms">是否在回发前验证表单(在PageManager上进行表单配置)</param> + /// <returns>客户端脚本</returns> + public string GetIFrameCustomEventReference(string eventArgument, bool validateForms) + { + return String.Format("F.wnd.getIFrameWindowObject({0}).F.f_customEvent({1}, {2});", ScriptID, JsHelper.Enquote(eventArgument), validateForms.ToString().ToLower()); + } + #endregion + + #region GetShowReference + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetShowReference() + { + string iframeUrl = String.Empty; + if (EnableIFrame) + { + iframeUrl = IFrameUrl; + } + + return GetShowReference(iframeUrl, String.Empty); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="iframeUrl">IFrame地址</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(string iframeUrl) + { + return GetShowReference(iframeUrl, String.Empty); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="iframeUrl">IFrame地址</param> + /// <param name="windowTitle">窗体标题</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(string iframeUrl, string windowTitle) + { + return GetShowReference(iframeUrl, windowTitle, Unit.Empty, Unit.Empty); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="width">窗体宽度</param> + /// <param name="height">窗体高度</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(Unit width, Unit height) + { + string iframeUrl = String.Empty; + if (EnableIFrame) + { + iframeUrl = IFrameUrl; + } + + return GetShowReference(iframeUrl, String.Empty, width, height); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="windowTitle">窗体标题</param> + /// <param name="width">窗体宽度</param> + /// <param name="height">窗体高度</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(string windowTitle, Unit width, Unit height) + { + string iframeUrl = String.Empty; + if (EnableIFrame) + { + iframeUrl = IFrameUrl; + } + + return GetShowReference(iframeUrl, windowTitle, width, height); + } + + /// <summary> + /// 获取显示窗体的客户端脚本 + /// </summary> + /// <param name="iframeUrl">IFrame地址</param> + /// <param name="windowTitle">窗体标题</param> + /// <param name="width">窗体宽度</param> + /// <param name="height">窗体高度</param> + /// <returns>客户端脚本</returns> + public string GetShowReference(string iframeUrl, string windowTitle, Unit width, Unit height) + { + if (!String.IsNullOrEmpty(iframeUrl)) + { + iframeUrl = ResolveIFrameUrl(iframeUrl); + } + + iframeUrl = JsHelper.EnquoteWithScriptTag(iframeUrl); + windowTitle = JsHelper.Enquote(windowTitle); + + if (width != Unit.Empty && height != Unit.Empty) + { + return String.Format("{0}.f_show({1},{2},{3},{4});", ScriptID, + iframeUrl, + windowTitle, + width.Value, + height.Value); + } + else + { + return String.Format("{0}.f_show({1},{2});", ScriptID, + iframeUrl, + windowTitle); + } + } + + /// <summary> + /// 获取最大化窗体尺寸的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetMaximizeReference() + { + return String.Format("{0}.f_maximize();", ScriptID); + } + + /// <summary> + /// 获取恢复窗体尺寸的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetRestoreReference() + { + return String.Format("{0}.f_restore();", ScriptID); + } + + /// <summary> + /// 获取最小化窗体尺寸的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetMinimizeReference() + { + return String.Format("{0}.f_minimize();", ScriptID); + } + + + #endregion + + #region GetHideReference GetHideRefreshReference GetHidePostBackReference + + /// <summary> + /// 获取关闭当前激活Window的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHideReference() + { + return String.Format("{0}.f_hide();", ScriptID); + } + + /// <summary> + /// 获取关闭当前激活Window然后刷新页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHideRefreshReference() + { + return String.Format("{0}.f_hide_refresh();", ScriptID); + } + + /// <summary> + /// 获取关闭当前激活Window然后回发页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHidePostBackReference() + { + return String.Format("{0}.f_hide_postback();", ScriptID); + } + + /// <summary> + /// 获取关闭当前激活Window然后回发页面的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHidePostBackReference(string argument) + { + //return String.Format("{0}.box_hide_postback('{1}');", ScriptID, argument.Replace("'", "\"")); + return String.Format("{0}.f_hide_postback({1});", ScriptID, JsHelper.Enquote(argument)); + } + + /// <summary> + /// 获取关闭当前激活Window然后执行脚本的客户端脚本 + /// </summary> + /// <param name="argument">执行的脚本</param> + /// <returns>客户端脚本</returns> + public string GetHideExecuteScriptReference(string argument) + { + return String.Format("{0}.f_hide_executescript({1});", ScriptID, JsHelper.Enquote(argument)); + } + + #endregion + + #region oldcode + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHideReference() + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0}, function(){{{1}}});", + // ScriptID, + // GetHideReference()); + //} + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后刷新父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHideRefreshReference() + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0}, function(){{{1}}});", + // ScriptID, + // GetHideRefreshReference()); + //} + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHidePostBackReference() + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0}, function(){{{1}}});", + // ScriptID, + // GetHidePostBackReference()); + //} + + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后回发父页面的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHidePostBackReference(string argument) + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0},function(){{{1}}});", + // ScriptID, + // GetHidePostBackReference(argument)); + //} + + + ///// <summary> + ///// 获取先确认IFrame的页面中表单改变,然后关闭弹出窗口,然后执行脚本的客户端脚本 + ///// </summary> + ///// <param name="argument">回发参数</param> + ///// <returns>客户端脚本</returns> + //public string GetConfirmHideExecuteScriptReference(string argument) + //{ + // return String.Format("F.wnd.iframeModifiedConfirm({0},function(){{{1}}});", + // ScriptID, + // GetHideExecuteScriptReference(argument)); + //} + + + #region oldcode + //public string GetConfirmFormModifiedCloseRefreshReference() + //{ + // return String.Format("F.wnd.extWindowIFrameFormModifiedConfirm({0}, {1}, '{2}');", + // String.Format("{0}", ClientJavascriptID), + // ShowInParent.ToString().ToLower(), + // GUID); + //} + + + + ///// <summary> + ///// + ///// </summary> + ///// <returns></returns> + //public string GetIFramePageStateChangedReference() + //{ + // string panel = String.Format("{0}", ClientJavascriptID); + // if (ShowInParent) + // { + // panel = String.Format("parent.X.{0}", GUID); + // } + // return String.Format("F.wnd.getIFrameWindowObject({0}).F.util.isPageStateChanged()", panel); + //} + + //public string GetIFramePageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript) + //{ + // return GetIFramePageStateChangedConfirmReference(confirmTitle, confirmMsg, okScript, cancelScript, okScript); + //} + + ///// <summary> + ///// 页面状态已经变化的提示信息 + ///// </summary> + ///// <param name="alertMsg"></param> + ///// <returns></returns> + //public string GetIFramePageStateChangedConfirmReference(string confirmTitle, string confirmMsg, string okScript, string cancelScript, string notChangeScript) + //{ + // string confirmScript = Confirm.GetShowReference(confirmMsg, confirmTitle, MessageBoxIcon.Warning, okScript, cancelScript, String.Format("{0}.getWindow()", IFrameID)); + // return String.Format("if({0}){{{1}}}else{{{2}}}", GetIFramePageStateChangedReference(), confirmScript, notChangeScript); + //} + #endregion + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + base.LoadPostData(postDataKey, postCollection); + + bool postHidden = Convert.ToBoolean(postCollection[HiddenHiddenFieldID]); + if (Hidden != postHidden) + { + Hidden = postHidden; + FState.BackupPostDataProperty("Hidden"); + } + + return false; + } + + ///// <summary> + ///// 触发回发数据改变事件 + ///// </summary> + //public override void RaisePostDataChangedEvent() + //{ + // base.RaisePostDataChangedEvent(); + + //} + + #endregion + + #region IPostBackEventHandler Members + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + if (eventArgument.StartsWith("Close$")) + { + OnClose(new WindowCloseEventArgs(eventArgument.Substring("Close$".Length))); + } + } + + #endregion + + #region OnClose + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("窗体关闭事件(需要设置EnableClose=true和CloseAction=HidePostBack)")] + public event EventHandler<WindowCloseEventArgs> Close + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发窗体关闭事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnClose(WindowCloseEventArgs e) + { + EventHandler<WindowCloseEventArgs> handler = Events[_handlerKey] as EventHandler<WindowCloseEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/Editor/GridColumnEditorCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/Editor/GridColumnEditorCollection.cs new file mode 100644 index 0000000..951320b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/Editor/GridColumnEditorCollection.cs @@ -0,0 +1,50 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: FieldCollection.cs + * CreatedOn: 2013-05-01 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; +using System.Collections; + +namespace FineUI +{ + /// <summary> + /// 控件集合 + /// </summary> + public class GridColumnEditorCollection : BaseCollection<Field> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public GridColumnEditorCollection(GridColumn parent) + : base(parent) + { + + } + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/Editor/ModifiedCell.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/Editor/ModifiedCell.cs new file mode 100644 index 0000000..714185c --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/Editor/ModifiedCell.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + public class ModifiedCell + { + private int rowIndex; + + public int RowIndex + { + get { return rowIndex; } + set { rowIndex = value; } + } + + + private int columnIndex; + + public int ColumnIndex + { + get { return columnIndex; } + set { columnIndex = value; } + } + + private string columnID; + + public string ColumnID + { + get { return columnID; } + set { columnID = value; } + } + + + private string cellValue; + + public string CellValue + { + get { return cellValue; } + set { cellValue = value; } + } + + + private string oldCellValue; + + public string OldCellValue + { + get { return oldCellValue; } + set { oldCellValue = value; } + } + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridAfterEditEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridAfterEditEventArgs.cs new file mode 100644 index 0000000..c02405b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridAfterEditEventArgs.cs @@ -0,0 +1,102 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridAfterEditEventArgs.cs + * CreatedOn: 2013-07-28 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// е¼ + /// </summary> + public class GridAfterEditEventArgs : EventArgs + { + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + } + + + private int _columnIndex; + + /// <summary> + /// + /// </summary> + public int ColumnIndex + { + get { return _columnIndex; } + } + + private string _columnID; + + /// <summary> + /// ID + /// </summary> + public string ColumnID + { + get { return _columnID; } + } + + private string _rowID; + + /// <summary> + /// ID + /// </summary> + public string RowID + { + get { return _rowID; } + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="rowIndex"></param> + /// <param name="rowID">ID</param> + /// <param name="columnIndex"></param> + /// <param name="columnID">ID</param> + public GridAfterEditEventArgs(int rowIndex, string rowID, int columnIndex, string columnID) + { + _rowIndex = rowIndex; + _rowID = rowID; + + _columnIndex = columnIndex; + _columnID = columnID; + + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridCommandEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridCommandEventArgs.cs new file mode 100644 index 0000000..392b4a8 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridCommandEventArgs.cs @@ -0,0 +1,131 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridCommandEventArgs.cs + * CreatedOn: 2008-06-23 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ¼ + /// </summary> + public class GridCommandEventArgs : EventArgs + { + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + } + + private string _rowID; + + /// <summary> + /// ID + /// </summary> + public string RowID + { + get { return _rowID; } + } + + + + private int _columnIndex; + + /// <summary> + /// + /// </summary> + public int ColumnIndex + { + get { return _columnIndex; } + } + + + + private string _columnID; + + /// <summary> + /// ID + /// </summary> + public string ColumnID + { + get { return _columnID; } + } + + + + private string _commandName; + + /// <summary> + /// + /// </summary> + public string CommandName + { + get { return _commandName; } + } + + + private string _commandArgument; + + /// <summary> + /// + /// </summary> + public string CommandArgument + { + get { return _commandArgument; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="rowIndex"></param> + /// <param name="rowID">ID</param> + /// <param name="columnIndex"></param> + /// <param name="columnID">ID</param> + /// <param name="commandName"></param> + /// <param name="commandArgument"></param> + public GridCommandEventArgs(int rowIndex, string rowID, int columnIndex, string columnID, string commandName, string commandArgument) + { + _rowIndex = rowIndex; + _rowID = rowID; + _columnIndex = columnIndex; + _columnID = columnID; + _commandName = commandName; + _commandArgument = commandArgument; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPageEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPageEventArgs.cs new file mode 100644 index 0000000..4dd2c0d --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPageEventArgs.cs @@ -0,0 +1,86 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridPageEventArgs.cs + * CreatedOn: 2008-06-25 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ҳ¼ + /// </summary> + public class GridPageEventArgs : EventArgs + { + + private int _newPageIndex; + + /// <summary> + /// ҳ + /// </summary> + public int NewPageIndex + { + get { return _newPageIndex; } + } + + private int _oldPageIndex; + + /// <summary> + /// ҳ + /// </summary> + public int OldPageIndex + { + get { return _oldPageIndex; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="newPageIndex">ҳ</param> + public GridPageEventArgs(int newPageIndex) + { + _newPageIndex = newPageIndex; + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="newPageIndex">ҳ</param> + /// <param name="oldPageIndex">ҳ</param> + public GridPageEventArgs(int newPageIndex, int oldPageIndex) + { + _newPageIndex = newPageIndex; + _oldPageIndex = oldPageIndex; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPreRowEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPreRowEventArgs.cs new file mode 100644 index 0000000..d8851ec --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridPreRowEventArgs.cs @@ -0,0 +1,88 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridPreRowEventArgs.cs + * CreatedOn: 2008-06-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// Ԥ¼ + /// </summary> + public class GridPreRowEventArgs : EventArgs + { + private bool _cancelled = false; + + /// <summary> + /// Ƿȡӱڵ + /// </summary> + public bool Cancelled + { + get { return _cancelled; } + set { _cancelled = value; } + } + + + private object _dataItem; + + /// <summary> + /// ԴԴΪDataTableDataItemΪDataRowView + /// </summary> + public object DataItem + { + get { return _dataItem; } + } + + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="dataItem">Դ</param> + /// <param name="rowIndex"></param> + public GridPreRowEventArgs(object dataItem, int rowIndex) + { + _dataItem = dataItem; + _rowIndex = rowIndex; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowClickEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowClickEventArgs.cs new file mode 100644 index 0000000..bb934db --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowClickEventArgs.cs @@ -0,0 +1,76 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridRowClickEventArgs.cs + * CreatedOn: 2008-06-25 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// е¼ + /// </summary> + public class GridRowClickEventArgs : EventArgs + { + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + } + + private string _rowID; + + /// <summary> + /// ID + /// </summary> + public string RowID + { + get { return _rowID; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="rowIndex"></param> + /// <param name="rowID">ID</param> + public GridRowClickEventArgs(int rowIndex, string rowID) + { + _rowIndex = rowIndex; + _rowID = rowID; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowEventArgs.cs new file mode 100644 index 0000000..8d64b99 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowEventArgs.cs @@ -0,0 +1,98 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridRowEventArgs.cs + * CreatedOn: 2008-06-23 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// а¼ + /// </summary> + public class GridRowEventArgs : EventArgs + { + + private GridRow _row; + + /// <summary> + /// ǰ + /// </summary> + public GridRow Row + { + get { return _row; } + } + + /// <summary> + /// иеֵȾHTMLƬΣ + /// </summary> + public object[] Values + { + get { return _row.Values; } + } + + + /// <summary> + /// Դ + /// </summary> + public object DataItem + { + get { return _row.DataItem; } + } + + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _row.RowIndex; } + } + + /// <summary> + /// ID + /// </summary> + public string RowID + { + get { return _row.RowID; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="row"></param> + public GridRowEventArgs(GridRow row) + { + _row = row; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowSelectEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowSelectEventArgs.cs new file mode 100644 index 0000000..d9557cf --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridRowSelectEventArgs.cs @@ -0,0 +1,77 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridRowSelectEventArgs.cs + * CreatedOn: 2013-02-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// ѡ¼ + /// </summary> + public class GridRowSelectEventArgs : EventArgs + { + + private int _rowIndex; + + /// <summary> + /// + /// </summary> + public int RowIndex + { + get { return _rowIndex; } + //set { _rowIndex = value; } + } + + private string _rowID; + + /// <summary> + /// ID + /// </summary> + public string RowID + { + get { return _rowID; } + } + + + /// <summary> + /// 캯 + /// </summary> + /// <param name="rowIndex"></param> + /// <param name="rowID">ID</param> + public GridRowSelectEventArgs(int rowIndex, string rowID) + { + _rowIndex = rowIndex; + _rowID = rowID; + } + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridSortEventArgs.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridSortEventArgs.cs new file mode 100644 index 0000000..db818c9 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/EventArgs/GridSortEventArgs.cs @@ -0,0 +1,96 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: GridSortEventArgs.cs + * CreatedOn: 2008-05-28 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace FineUI +{ + /// <summary> + /// 表格排序事件参数 + /// </summary> + public class GridSortEventArgs : EventArgs + { + private string _sortField; + + /// <summary> + /// 排序字段 + /// </summary> + public string SortField + { + get { return _sortField; } + } + + + private string _sortDirection; + + /// <summary> + /// 排序方向 + /// </summary> + public string SortDirection + { + get { return _sortDirection; } + } + + private int _columnIndex; + + /// <summary> + /// 列索引 + /// </summary> + public int ColumnIndex + { + get { return _columnIndex; } + } + + + private string _columnID; + + /// <summary> + /// 列ID + /// </summary> + public string ColumnID + { + get { return _columnID; } + } + + + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="sortField">排序字段</param> + /// <param name="sortDirection">排序方向</param> + /// <param name="columnIndex">列索引</param> + /// <param name="columnID">列</param> + public GridSortEventArgs(string sortField, string sortDirection, int columnIndex, string columnID) + { + _sortField = sortField; + _sortDirection = sortDirection; + _columnIndex = columnIndex; + _columnID = columnID; + } + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/Grid.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/Grid.cs new file mode 100644 index 0000000..bbc4a2f --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/Grid.cs @@ -0,0 +1,6066 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Grid.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using System.Web.UI.HtmlControls; +using System.Data; +using System.Collections; +using System.Collections.Specialized; +using System.ComponentModel.Design; +using System.Collections.ObjectModel; + +namespace FineUI +{ + /// <summary> + /// 表格控件 + /// </summary> + [Designer("FineUI.Design.GridDesigner, FineUI.Design")] + [ToolboxData("<{0}:Grid Title=\"Grid\" runat=\"server\"><Columns></Columns></{0}:Grid>")] + [ToolboxBitmap(typeof(Grid), "toolbox.Grid.bmp")] + [Description("表格控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Grid : CollapsablePanel, IPostBackDataHandler, IPostBackEventHandler + { + #region static readonly + + /// <summary> + /// 模板列占位符前缀 + /// </summary> + public static readonly string TEMPLATE_PLACEHOLDER_PREFIX = "#@TPL@#"; + + #endregion + + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Grid() + { + // FineUI v4.2.4将 PageIndex、SortField、SortDirection 三个属性改为ClientAjaxProperties,后台不需要手工设置 + // 严格的说,PageIndex、SortField、SortDirection这三个属性不可能在客户端被改变,而是向服务器发出改变的请求,然后服务器处理。 + // 因为这些属性的改变不会影响客户端的UI,必须服务器端发出UI改变的指令才行,所以它们算是服务器端属性。 + AddServerAjaxProperties("PageSize", "RecordCount", "SummaryData", "SummaryHidden"); + AddClientAjaxProperties("PageIndex", "SortField", "SortDirection", "F_Rows", "HiddenColumns", "SelectedRowIDArray", "SelectedCell", "ExpandAllRowExpanders"); + + //AddGzippedAjaxProperties("F_Rows"); + } + + // AJAX回发时注册展开或者折叠行扩展列的脚本 + private bool _registerScriptRowExpanders = false; + + // AJAX回发回发时调用了 DataBind 函数 + private bool _databindInFineUIAjaxPostBack = false; + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Container)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Container; + } + } + + #endregion + + #region AllowCellEditing + + /// <summary> + /// 行数据标识字段名 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("行数据标识字段名")] + public string DataIDField + { + get + { + object obj = FState["DataIDField"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["DataIDField"] = value; + } + } + + + /// <summary> + /// 允许单元格编辑 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("允许单元格编辑")] + public bool AllowCellEditing + { + get + { + object obj = FState["AllowCellEditing"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AllowCellEditing"] = value; + } + } + + + /// <summary> + /// 编辑单元格时点击单元格的次数(默认为2次) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(2)] + [Description("编辑单元格时点击单元格的次数(默认为2次)")] + public int ClicksToEdit + { + get + { + object obj = FState["ClicksToEdit"]; + return obj == null ? 2 : (int)obj; + } + set + { + FState["ClicksToEdit"] = value; + } + } + + /// <summary> + /// 允许列锁定 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("允许列锁定")] + public bool AllowColumnLocking + { + get + { + object obj = FState["AllowColumnLocking"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AllowColumnLocking"] = value; + } + } + + #endregion + + #region AllowPaging/IsDatabasePaging/PageSize/PageCount/PageIndex/RecordCount + + + /// <summary> + /// 允许服务器端分页 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("允许服务器端分页")] + public bool AllowPaging + { + get + { + object obj = FState["AllowPaging"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AllowPaging"] = value; + } + } + + /// <summary> + /// 是否数据库分页 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否数据库分页")] + public bool IsDatabasePaging + { + get + { + object obj = FState["IsDatabasePaging"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["IsDatabasePaging"] = value; + } + } + + + /////// <summary> + /////// 服务器端分页后清空选中的行 + /////// </summary> + ////[Category(CategoryName.OPTIONS)] + ////[DefaultValue(false)] + ////[Description("服务器端分页后清空选中的行")] + //[Obsolete("已废除,请使用ClearSelectionsBeforePaging属性")] + //public bool ClearSelectedRowsAfterPaging + //{ + // get + // { + // object obj = FState["ClearSelectedRowsAfterPaging"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["ClearSelectedRowsAfterPaging"] = value; + // } + //} + + + /// <summary> + /// 排序前清空选中项 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("排序前清空选中项")] + public bool ClearSelectionsBeforePaging + { + get + { + object obj = FState["ClearSelectionsBeforePaging"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ClearSelectionsBeforePaging"] = value; + } + } + + ///// <summary> + ///// 数据绑定前清空选中项 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("数据绑定前清空选中项")] + //public bool ClearSelectionsBeforeBinding + //{ + // get + // { + // object obj = FState["ClearSelectionsBeforeBinding"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["ClearSelectionsBeforeBinding"] = value; + // } + //} + + /// <summary> + /// 每页显示项数 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(20)] + [Description("每页显示项数")] + public int PageSize + { + get + { + object obj = FState["PageSize"]; + return obj == null ? 20 : (int)obj; + } + set + { + FState["PageSize"] = value; + } + } + + + /// <summary> + /// [AJAX属性]当前显示页索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("[AJAX属性]当前显示页索引")] + public int PageIndex + { + get + { + //object obj = FState["PageIndex"]; + //int pageIndex = (obj == null) ? 0 : (int)obj; + + //int resolvedPageIndex = pageIndex; + //if (resolvedPageIndex < 0) + //{ + // resolvedPageIndex = 0; + //} + //else if (resolvedPageIndex > PageCount - 1) + //{ + // resolvedPageIndex = PageCount - 1; + //} + + //if (resolvedPageIndex != pageIndex) + //{ + // // 如果PageIndex越界,则重新设置PageIndex + // PageIndex = resolvedPageIndex; + //} + + //return resolvedPageIndex; + + object obj = FState["PageIndex"]; + int pageIndex = (obj == null) ? 0 : (int)obj; + + int resolvedPageIndex = pageIndex; + + // 只有定义了RecordCount之后,才检查是否越界(PageIndex - PageCount) + if (RecordCount > 0) + { + if (resolvedPageIndex > PageCount - 1) + { + resolvedPageIndex = PageCount - 1; + } + } + + // 每次都需要做不能为负数的检查 + if (resolvedPageIndex < 0) + { + resolvedPageIndex = 0; + } + + // 如果PageIndex越界,则重新设置PageIndex + if (resolvedPageIndex != pageIndex) + { + PageIndex = resolvedPageIndex; + } + + return resolvedPageIndex; + } + set + { + FState["PageIndex"] = value; + } + } + + + /// <summary> + /// [AJAX属性]总页数 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int PageCount + { + get + { + int pageCount = RecordCount / PageSize; + if (RecordCount % PageSize != 0) + { + pageCount += 1; + } + return pageCount; + } + } + + + /// <summary> + /// [AJAX属性]记录的总个数 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int RecordCount + { + get + { + object obj = FState["RecordCount"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["RecordCount"] = value; + } + } + + #endregion + + #region AllowSorting/SortDirection/SortField + + /// <summary> + /// 允许服务器端排序 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("允许服务器端排序")] + public bool AllowSorting + { + get + { + object obj = FState["AllowSorting"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AllowSorting"] = value; + } + } + + + /// <summary> + /// 排序方向("ASC", "DESC") + /// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Category(CategoryName.OPTIONS)] + [DefaultValue("ASC")] + [Description("排序方向(ASC、DESC)")] + public string SortDirection + { + get + { + object obj = FState["SortDirection"]; + return obj == null ? "ASC" : (string)obj; + } + set + { + FState["SortDirection"] = value; + } + } + + + + + /// <summary> + /// 当前排序字段(只读) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]当前排序字段")] + public string SortField + { + get + { + object obj = FState["SortField"]; + return obj == null ? "" : (string)obj; + + //object obj = FState["SortField"]; + //if (obj == null) + //{ + // if (SortColumnIndex >= 0 && SortColumnIndex < AllColumns.Count) + // { + // obj = AllColumns[SortColumnIndex].SortField; + // } + // else + // { + // obj = String.Empty; + // } + //} + //return (string)obj; + } + set + { + FState["SortField"] = value; + } + } + + + ///// <summary> + ///// [AJAX属性]当前按照第几列排序(从零算起) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(-1)] + //[Description("[AJAX属性]当前按照第几列排序(从零算起)")] + //[Obsolete("此属性已废除,请使用SortField属性")] + //public int SortColumnIndex + //{ + // get + // { + // if (DesignMode) + // { + // return -1; + // } + // else + // { + // object obj = FState["SortColumnIndex"]; + // if (obj == null) + // { + // if (!String.IsNullOrEmpty(SortColumn)) + // { + // return FindColumn(SortColumn).ColumnIndex; + // } + // else + // { + // return -1; + // } + // } + // else + // { + // return (int)obj; + // } + // } + // } + // set + // { + // FState["SortColumnIndex"] = value; + // } + //} + + ///// <summary> + ///// [AJAX属性]排序列(ColumnID) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("[AJAX属性]排序列(ColumnID)")] + //[Obsolete("此属性已废除,请使用SortField属性")] + //public string SortColumn + //{ + // get + // { + // object obj = FState["SortColumn"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["SortColumn"] = value; + // } + //} + + #endregion + + #region EnableSummary + + /// <summary> + /// 启用合计行 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用合计行")] + public bool EnableSummary + { + get + { + object obj = FState["EnableSummary"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableSummary"] = value; + } + } + + /// <summary> + /// [AJAX属性]合计行数据 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JObject SummaryData + { + get + { + object obj = FState["SummaryData"]; + return obj == null ? null : (JObject)obj; + } + set + { + FState["SummaryData"] = value; + } + } + + /// <summary> + /// 合计行的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(SummaryPosition.Flow)] + [Description("合计行的位置")] + public SummaryPosition SummaryPosition + { + get + { + object obj = FState["SummaryPosition"]; + return obj == null ? SummaryPosition.Flow : (SummaryPosition)obj; + } + set + { + FState["SummaryPosition"] = value; + } + } + + ///// <summary> + ///// 是否隐藏合计行 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否隐藏合计行")] + //public bool SummaryHidden + //{ + // get + // { + // object obj = FState["SummaryHidden"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["SummaryHidden"] = value; + // } + //} + + #endregion + + #region Properties + + /// <summary> + /// 多选时保持当前已选中行 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("多选时保持当前已选中行")] + public bool KeepCurrentSelection + { + get + { + object obj = FState["KeepCurrentSelection"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["KeepCurrentSelection"] = value; + } + } + + /// <summary> + /// 数据为空时显示在内容区域的文本,可以是HTML标签 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("数据为空时显示在内容区域的文本,可以是HTML标签")] + public string EmptyText + { + get + { + object obj = FState["EmptyText"]; + return obj == null ? String.Empty : (string)obj; + } + set + { + FState["EmptyText"] = value; + } + } + + + /// <summary> + /// 行中文字的垂直排列位置(默认为Middle) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(VerticalAlign.Middle)] + [Description("行中文字的垂直排列位置(默认为Middle)")] + public VerticalAlign RowVerticalAlign + { + get + { + object obj = FState["RowVerticalAlign"]; + return obj == null ? VerticalAlign.Middle : (VerticalAlign)obj; + } + set + { + FState["RowVerticalAlign"] = value; + } + } + + + ///// <summary> + ///// 序号列的宽度(默认为23px) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(typeof(Unit), "")] + //[Description("序号列的宽度(默认为23px)")] + //public Unit RowNumberWidth + //{ + // get + // { + // object obj = FState["RowNumberWidth"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["RowNumberWidth"] = value; + // } + //} + + + /// <summary> + /// 是否延迟渲染 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否延迟渲染")] + public bool EnableDelayRender + { + get + { + object obj = FState["EnableDelayRender"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableDelayRender"] = value; + } + } + + + /// <summary> + /// 展开所有的行扩展列 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("展开所有的行扩展列")] + public bool ExpandAllRowExpanders + { + get + { + object obj = FState["ExpandAllRowExpanders"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ExpandAllRowExpanders"] = value; + } + } + + + /// <summary> + /// 启用表格中的文字选择 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用表格中的文字选择")] + public bool EnableTextSelection + { + get + { + object obj = FState["EnableTextSelection"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableTextSelection"] = value; + } + } + + + #region old code + + //private bool EnableClientPaging_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用客户端分页")] + //public bool EnableClientPaging + //{ + // get + // { + // object obj = BoxState["EnableClientPaging"]; + // return obj == null ? EnableClientPaging_Default : (bool)obj; + // } + // set + // { + // BoxState["EnableClientPaging"] = value; + // } + //} + + + //private bool EnableClientSort_Default = false; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用客户端排序")] + //public bool EnableClientSort + //{ + // get + // { + // object obj = BoxState["EnableClientSort"]; + // return obj == null ? EnableClientSort_Default : (bool)obj; + // } + // set + // { + // BoxState["EnableClientSort"] = value; + // } + //} + + + //private string AutoExpandColumnID_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("自动扩展的列ID")] + //public string AutoExpandColumnID + //{ + // get + // { + // object obj = BoxState["AutoExpandColumnID"]; + // return obj == null ? AutoExpandColumnID_Default : (string)obj; + // } + // set + // { + // BoxState["AutoExpandColumnID"] = value; + // } + //} + + #endregion + + ///// <summary> + ///// 启用行序号列 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("启用行序号列")] + //public bool EnableRowNumber + //{ + // get + // { + // object obj = FState["EnableRowNumber"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableRowNumber"] = value; + // } + //} + + + ///// <summary> + ///// 行序号列是否支持分页(默认为false,也即是每页都从1开始) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("行序号列是否支持分页(默认为false,也即是每页都从1开始)")] + //public bool EnableRowNumberPaging + //{ + // get + // { + // object obj = FState["EnableRowNumberPaging"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableRowNumberPaging"] = value; + // } + //} + + /// <summary> + /// 显示表格表头 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("显示表格表头")] + public bool ShowGridHeader + { + get + { + object obj = FState["ShowGridHeader"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowGridHeader"] = value; + } + } + + /// <summary> + /// 显示分页工具条右侧的分页信息 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("显示分页工具条右侧的分页信息")] + public bool ShowPagingMessage + { + get + { + object obj = FState["ShowPagingMessage"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["ShowPagingMessage"] = value; + } + } + + /// <summary> + /// 启用表头菜单 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用表头菜单")] + public bool EnableHeaderMenu + { + get + { + object obj = FState["EnableHeaderMenu"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableHeaderMenu"] = value; + } + } + + ///// <summary> + ///// 启用标题栏菜单中的隐藏列功能(默认为true,仅在EnableHeaderMenu=true时有效) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("启用标题栏菜单中的隐藏列功能(默认为true,仅在EnableHeaderMenu=true时有效)")] + //public bool EnableColumnHide + //{ + // get + // { + // object obj = FState["EnableColumnHide"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["EnableColumnHide"] = value; + // } + //} + + /// <summary> + /// 是否启用列宽度调整 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("是否启用列宽度调整")] + public bool EnableColumnResize + { + get + { + object obj = FState["EnableColumnResize"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableColumnResize"] = value; + } + } + + + ///// <summary> + ///// 是否启用列移动 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用列移动")] + //public bool EnableColumnMove + //{ + // get + // { + // object obj = FState["EnableColumnMove"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableColumnMove"] = value; + // } + //} + + + /// <summary> + /// 启用表格列分隔线(默认为false) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用表格列分隔线(默认为false)")] + public bool EnableColumnLines + { + get + { + object obj = FState["EnableColumnLines"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableColumnLines"] = value; + } + } + + + /// <summary> + /// 启用表格行分隔线(默认为true) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用表格行分隔线(默认为true)")] + public bool EnableRowLines + { + get + { + object obj = FState["EnableRowLines"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableRowLines"] = value; + } + } + + + /// <summary> + /// 启用交替行显示不同的颜色 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用交替行显示不同的颜色")] + public bool EnableAlternateRowColor + { + get + { + object obj = FState["EnableAlternateRowStyle"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableAlternateRowStyle"] = value; + } + } + + /// <summary> + /// 启用鼠标移动到行的颜色 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用鼠标移动到行的颜色")] + public bool EnableMouseOverColor + { + get + { + object obj = FState["EnableMouseOverColor"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableMouseOverColor"] = value; + } + } + + #endregion + + #region EnableRowClickEvent/EnableRowClickEvent + + ///// <summary> + ///// 点击行是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("点击行是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableRowClickEvent属性")] + //public bool AutoPostBack + //{ + // get + // { + // return EnableRowClickEvent; + // } + // set + // { + // EnableRowClickEvent = value; + // } + //} + + ///// <summary> + ///// 选中行是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("选中行是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableRowSelectEvent属性")] + //public bool EnableRowSelect + //{ + // get + // { + // return EnableRowSelectEvent; + // } + // set + // { + // EnableRowSelectEvent = value; + // } + //} + + ///// <summary> + ///// 双击行是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("双击行是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableRowDoubleClickEvent属性")] + //public bool EnableRowDoubleClick + //{ + // get + // { + // return EnableRowDoubleClickEvent; + // } + // set + // { + // EnableRowDoubleClickEvent = value; + // } + //} + + + ///// <summary> + ///// 点击行是否自动回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("点击行是否自动回发")] + //[Obsolete("此属性已废除,请使用EnableRowClickEvent属性")] + //public bool EnableRowClick + //{ + // get + // { + // return EnableRowClickEvent; + // } + // set + // { + // EnableRowClickEvent = value; + // } + //} + + + + /// <summary> + /// 选中行是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("选中行是否自动回发")] + public bool EnableRowSelectEvent + { + get + { + object obj = FState["EnableRowSelectEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableRowSelectEvent"] = value; + } + } + + /// <summary> + /// 取消选中行是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("取消选中行是否自动回发")] + public bool EnableRowDeselectEvent + { + get + { + object obj = FState["EnableRowDeselectEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableRowDeselectEvent"] = value; + } + } + + + /// <summary> + /// 点击行是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("点击行是否自动回发")] + public bool EnableRowClickEvent + { + get + { + object obj = FState["EnableRowClickEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableRowClickEvent"] = value; + } + } + + + /// <summary> + /// 双击行是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("双击行是否自动回发")] + public bool EnableRowDoubleClickEvent + { + get + { + object obj = FState["EnableRowDoubleClickEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableRowDoubleClickEvent"] = value; + } + } + + /// <summary> + /// 结束编辑是否自动回发(需要启用AllowCellEditing) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("结束编辑是否自动回发(需要启用AllowCellEditing)")] + public bool EnableAfterEditEvent + { + get + { + object obj = FState["EnableAfterEditEvent"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableAfterEditEvent"] = value; + } + } + + #endregion + + #region ForceFitAllTime/AutoExpandColumn + + ///// <summary> + ///// 列的最小宽度 + ///// </summary> + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(typeof(Unit), "")] + //[Description("列的最小宽度")] + //public Unit MinColumnWidth + //{ + // get + // { + // object obj = FState["MinColumnWidth"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["MinColumnWidth"] = value; + // } + //} + + /// <summary> + /// 自动扩展宽度以填充剩余空间的列(ColumnID) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("自动扩展宽度以填充剩余空间的列(ColumnID)")] + public string AutoExpandColumn + { + get + { + object obj = FState["AutoExpandColumn"]; + return obj == null ? "" : (string)obj; + } + set + { + FState["AutoExpandColumn"] = value; + } + } + + ///// <summary> + ///// 自动扩展列的最大宽度 + ///// </summary> + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(typeof(Unit), "")] + //[Description("自动扩展列的最大宽度")] + //public Unit AutoExpandColumnMax + //{ + // get + // { + // object obj = FState["AutoExpandColumnMax"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["AutoExpandColumnMax"] = value; + // } + //} + + ///// <summary> + ///// 自动扩展列的最小宽度 + ///// </summary> + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(typeof(Unit), "")] + //[Description("自动扩展列的最小宽度")] + //public Unit AutoExpandColumnMin + //{ + // get + // { + // object obj = FState["AutoExpandColumnMin"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["AutoExpandColumnMin"] = value; + // } + //} + + ///// <summary> + ///// 成比例改变表格各列的宽度,以防止出现水平滚动条(仅在第一次加载表格时有效) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("成比例改变表格各列的宽度,以防止出现水平滚动条(仅在第一次加载表格时有效)")] + //public bool ForceFitFirstTime + //{ + // get + // { + // object obj = FState["ForceFitFirstTime"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["ForceFitFirstTime"] = value; + // } + //} + + /// <summary> + /// 成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效)")] + public bool ForceFit + { + get + { + object obj = FState["ForceFit"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["ForceFit"] = value; + } + } + + ///// <summary> + ///// 垂直滚动条的宽度(不设置则自动计算宽度,0则消除右侧预留的滚动条宽度) + ///// </summary> + //[Category(CategoryName.LAYOUT)] + //[DefaultValue(typeof(Unit), "")] + //[Description("垂直滚动条的宽度(不设置则自动计算宽度,0则消除右侧预留的滚动条宽度)")] + //public Unit VerticalScrollWidth + //{ + // get + // { + // object obj = FState["VerticalScrollWidth"]; + // return obj == null ? Unit.Empty : (Unit)obj; + // } + // set + // { + // FState["VerticalScrollWidth"] = value; + // } + //} + + #endregion + + #region old code + + //private GridRowExpander _rowExpander; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerProperty)] + //public GridRowExpander RowExpander + //{ + // get + // { + // if (_rowExpander == null) + // { + // _rowExpander = new GridRowExpander(); + // } + // return _rowExpander; + // } + //} + + + #endregion + + #region EnableCheckBoxSelect/EnableMultiSelect/SelectedRowIndexArray + + /// <summary> + /// 启用多选框 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("启用多选框")] + public bool EnableCheckBoxSelect + { + get + { + object obj = FState["EnableCheckBoxSelect"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableCheckBoxSelect"] = value; + } + } + + /// <summary> + /// 只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("只能通过多选框选中行(仅在启用EnableCheckBoxSelect属性时有效)")] + public bool CheckBoxSelectOnly + { + get + { + object obj = FState["CheckBoxSelectOnly"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["CheckBoxSelectOnly"] = value; + } + } + + + /// <summary> + /// 启用多行选择 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("启用多行选择")] + public bool EnableMultiSelect + { + get + { + object obj = FState["EnableMultiSelect"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableMultiSelect"] = value; + } + } + + + /// <summary> + /// [AJAX属性]选中的单元格([行ID,列ID]) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string[] SelectedCell + { + get + { + object obj = FState["SelectedCell"]; + return obj == null ? null : (string[])obj; + } + set + { + if (value == null || value.Length != 2) + { + FState["SelectedCell"] = null; + } + else + { + FState["SelectedCell"] = value; + } + } + } + + + /* + /// <summary> + /// [AJAX属性]选中行的索引(列表中的第一项) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int SelectedRowIndex + { + get + { + if (SelectedRowIndexArray.Length > 0) + { + return SelectedRowIndexArray[0]; + } + else + { + return -1; + } + } + set + { + SelectedRowIndexArray = new int[] { value }; + } + } + + + /// <summary> + /// [AJAX属性]选中行的索引列表 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int[] SelectedRowIndexArray + { + get + { + object obj = FState["SelectedRowIndexArray"]; + return obj == null ? new int[] { } : (int[])obj; + } + set + { + FState["SelectedRowIndexArray"] = GetSortedArray(value).ToArray(); + } + } + + private List<int> GetSortedArray(int[] value) + { + List<int> list = new List<int>(); + if (value != null) + { + list.AddRange(value); + list.Sort(); + } + return list; + } + * */ + + ///// <summary> + ///// Whether this property changed. + ///// </summary> + ///// <param name="newValue"></param> + ///// <returns></returns> + //private bool SelectedRowIndexArrayChanged(int[] newValue) + //{ + // if (newValue == null) + // { + // newValue = new int[] { }; + // } + // if (newValue.Length > 0) + // { + // // Make sure this list order ASC [1, 2, 6, 8] + // List<int> intList = new List<int>(newValue); + // intList.Sort(); + // newValue = intList.ToArray(); + // } + + // return new JArray(SelectedRowIndexArray).ToString() != new JArray(newValue).ToString(); + //} + + ///// <summary> + ///// [AJAX属性]隐藏的列 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public int[] HiddenColumnIndexArray + //{ + // get + // { + // List<int> hiddens = new List<int>(); + // if (AllColumns.Count > 0) + // { + // int prefix = GetPrefixColumnNumber(); + // for (int i = 0; i < AllColumns.Count; i++) + // { + // if (AllColumns[i].Hidden) + // { + // hiddens.Add(i + prefix); + // } + // } + // } + // return hiddens.ToArray(); + // } + // set + // { + // List<int> hiddens = GetSortedArray(value); + // int prefix = GetPrefixColumnNumber(); + // for (int i = 0; i < AllColumns.Count; i++) + // { + // if (hiddens.Contains(i + prefix)) + // { + // AllColumns[i].Hidden = true; + // } + // else + // { + // AllColumns[i].Hidden = false; + // } + // } + // } + //} + + /// <summary> + /// [AJAX属性]隐藏的列名称列表(逗号分隔) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string[] HiddenColumns + { + get + { + List<string> hiddens = new List<string>(); + if (AllColumns.Count > 0) + { + for (int i = 0; i < AllColumns.Count; i++) + { + GridColumn column = AllColumns[i]; + if (column.Hidden) + { + hiddens.Add(column.ColumnID); + } + } + } + return hiddens.ToArray(); + } + set + { + List<string> hiddens = new List<string>(value); + for (int i = 0; i < AllColumns.Count; i++) + { + GridColumn column = AllColumns[i]; + if (hiddens.Contains(column.ColumnID)) + { + column.Hidden = true; + } + else + { + column.Hidden = false; + } + } + } + } + + #endregion + + #region SelectedRowIDArray + + + /// <summary> + /// [AJAX属性]选中行的索引(选中行在当前分页中的索引值) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int SelectedRowIndex + { + get + { + if (SelectedRowIndexArray.Length > 0) + { + return SelectedRowIndexArray[0]; + } + else + { + return -1; + } + } + set + { + SelectedRowIndexArray = new int[] { value }; + } + } + + + /// <summary> + /// [AJAX属性]选中行的索引列表(选中行在当前分页中的索引值) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int[] SelectedRowIndexArray + { + get + { + if (SelectedRowIDArray == null || SelectedRowIDArray.Length == 0) + { + return new int[] { }; + } + + // 如果是内存分页,当前是第2页,每页5条数据,则这个值是 startRowIndex == 5 + int startRowIndex = GetStartRowIndex(); + int endRowIndex = GetEndRowIndex(); + + List<string> selectedRowIds = new List<string>(SelectedRowIDArray); + List<int> selectedRowIndexs = new List<int>(); + for (int i = startRowIndex; i <= endRowIndex; i++) + { + GridRow row = Rows[i]; + if (selectedRowIds.Contains(row.RowID)) + { + selectedRowIndexs.Add(row.RowIndex - startRowIndex); + } + } + + return selectedRowIndexs.ToArray(); + } + set + { + if (value == null || value.Length == 0) + { + SelectedRowIDArray = new string[0]; + return; + } + + // 如果是内存分页,当前是第2页,每页5条数据,则这个值是 startRowIndex == 5 + int startRowIndex = GetStartRowIndex(); + int endRowIndex = GetEndRowIndex(); + + List<string> selectedRowIds = new List<string>(); + List<int> selectedRowIndexs = new List<int>(value); + for (int i = startRowIndex; i <= endRowIndex; i++) + { + GridRow row = Rows[i]; + if (selectedRowIndexs.Contains(row.RowIndex - startRowIndex)) + { + selectedRowIds.Add(row.RowID); + } + } + + SelectedRowIDArray = selectedRowIds.ToArray(); + } + } + + /// <summary> + /// 选中的行 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public GridRow SelectedRow + { + get + { + return FindRow(SelectedRowID); + } + } + + /// <summary> + /// [AJAX属性]选中的行ID + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("[AJAX属性]选中的行ID")] + public string SelectedRowID + { + get + { + if (SelectedRowIDArray != null && SelectedRowIDArray.Length > 0) + { + return SelectedRowIDArray[0]; + } + else + { + return String.Empty; + } + } + set + { + SelectedRowIDArray = new string[] { value }; + } + } + + /// <summary> + /// [AJAX属性]选中的行ID列表 + /// </summary> + [Category(CategoryName.OPTIONS)] + [Description("[AJAX属性]选中的行节点ID列表")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] SelectedRowIDArray + { + get + { + object obj = FState["SelectedRowIDArray"]; + return obj == null ? new string[0] : (string[])obj; + } + set + { + FState["SelectedRowIDArray"] = value; + } + } + + #endregion + + #region DataSource/DataKeyNames/DataKeys + + private object _dataSource = null; + + /// <summary> + /// 数据源 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public object DataSource + { + set + { + _dataSource = value; + } + get + { + return _dataSource; + } + } + + + /// <summary> + /// 行关键字段 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("行关键字段")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] DataKeyNames + { + get + { + object obj = FState["DataKeyNames"]; + return obj == null ? null : (string[])obj; + } + set + { + FState["DataKeyNames"] = value; + } + } + + + private List<object[]> _dataKeys = null; + + /// <summary> + /// 行关键字段的值 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public List<object[]> DataKeys + { + get + { + if (_dataKeys == null) + { + _dataKeys = new List<object[]>(); + + for (int i = 0, count = _rows.Count; i < count; i++) + { + _dataKeys.Add(_rows[i].DataKeys); + } + } + else + { + for (int i = _dataKeys.Count, count = _rows.Count; i < count; i++) + { + _dataKeys.Add(_rows[i].DataKeys); + } + + } + + return _dataKeys; + } + } + + + #endregion + + #region GroupColumns/Columns/Rows + + private ControlBaseCollection _pageItems; + + /// <summary> + /// 分页工具条项集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(ControlBaseItemsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual ControlBaseCollection PageItems + { + get + { + if (_pageItems == null) + { + _pageItems = new ControlBaseCollection(this); + } + return _pageItems; + } + } + + + + //private GridGroupColumnCollection _groupColumns; + + ///// <summary> + ///// 分组列数据 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerProperty)] + //[Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + //public virtual GridGroupColumnCollection GroupColumns + //{ + // get + // { + // if (_groupColumns == null) + // { + // _groupColumns = new GridGroupColumnCollection(this); + // } + // return _groupColumns; + // } + //} + + //private GridColumnCollection _allColumnsInternal; + ///// <summary> + ///// 全部的列 + ///// </summary> + //internal virtual GridColumnCollection AllColumnsInternal + //{ + // get + // { + // if (_allColumnsInternal == null) + // { + // _allColumnsInternal = new GridColumnCollection(this); + // } + // return _allColumnsInternal; + // } + //} + + internal Collection<GridColumn> _allColumns; + + /// <summary> + /// 全部的列 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public virtual Collection<GridColumn> AllColumns + { + get + { + if (_allColumns == null) + { + ResolveAllColumns(); + } + + return _allColumns; + } + } + + private void ResolveAllColumns() + { + _allColumns = new Collection<GridColumn>(); + + foreach (GridColumn column in Columns) + { + _allColumns.Add(column); + if (column is GroupField) + { + ResolveAllColumns(column as GroupField); + } + } + } + + private void ResolveAllColumns(GroupField column) + { + foreach (GridColumn subColumn in column.Columns) + { + _allColumns.Add(subColumn); + if (subColumn is GroupField) + { + ResolveAllColumns(subColumn as GroupField); + } + } + } + + + private GridColumnCollection _columns; + + /// <summary> + /// 列数据 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridColumnCollection Columns + { + get + { + if (_columns == null) + { + _columns = new GridColumnCollection(this); + + // Columns改变后,要更新AllColumns + _columns.ItemsChange += _columns_ItemsChange; + } + return _columns; + } + } + + private void _columns_ItemsChange() + { + _allColumns = null; + } + + + private GridRowCollection _rows; + + /// <summary> + /// 行数据 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public virtual GridRowCollection Rows + { + get + { + if (_rows == null) + { + _rows = new GridRowCollection(); + } + return _rows; + } + } + #endregion + + #region F_Rows + + // 如果当前是回发请求,则这两个值需要从回发参数中读取 + // 1. 页面回发过程不会改变Values和DataKeys的类型 + // 2. 重新绑定数据时,清空这两个值 + private bool? _renderValuesAsJArray = null; + private bool? _renderDataKeysAsJArray = null; + + /// <summary> + /// 保存的行数据(内部使用) + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public JArray F_Rows + { + get + { + //JObject jo = new JObject(); + + //JArray valuesJA = new JArray(); + //JArray datakeysJA = new JArray(); + //JArray statesJA = new JArray(); + //foreach (GridRow row in Rows) + //{ + // valuesJA.Add(new JArray(row.Values)); + // datakeysJA.Add(new JArray(row.DataKeys)); + // statesJA.Add(new JArray(row.ToShortStates())); + //} + //jo.Add("Values", valuesJA); + //jo.Add("DataKeys", datakeysJA); + //jo.Add("States", statesJA); + + //return jo; + + + + JArray ja = new JArray(); + foreach (GridRow row in Rows) + { + JObject jo = new JObject(); + + //jo.Add("f0", new JArray(row.Values)); + //jo.Add("f1", new JArray(row.DataKeys)); + + // +修正DataKeyNames值如果是小数(比如9.80),则页面回发时会出现F_STATE验证出错的问题(Fire-8910)。 + AddClientSuitableFormatValues(ref _renderValuesAsJArray, jo, "f0", row.Values); + AddClientSuitableFormatValues(ref _renderDataKeysAsJArray, jo, "f1", row.DataKeys); + + + if (row.HasStates()) + { + jo.Add("f2", new JArray(row.States)); + } + + + jo.Add("f6", new JValue(row.RowID)); + + + //if (!String.IsNullOrEmpty(DataTextField)) + //{ + // jo.Add("f7", new JValue(row.RowText)); + //} + + ja.Add(jo); + } + + return ja; + } + set + { + //// 注意,此时不能清空 SelectedRowIndexArray + //// 现在只是从FState中恢复数据,如果清空 SelectedRowIndexArray ,可能会导致 SelectedRowIndexArray 状态不对 + //ClearRows(); + + //JArray valuesArray = value.Value<JArray>("Values"); // value.getJArray("Values"); + //JArray dataKeysArray = value.Value<JArray>("DataKeys"); //value.getJArray("DataKeys"); + //JArray statesArray = value.Value<JArray>("States"); //value.getJArray("States"); + //for (int i = 0, length = valuesArray.Count; i < length; i++) + //{ + // GridRow row = new GridRow(this, null, i); + + // // row.Values + // row.Values = JSONUtil.ObjectArrayFromJArray(valuesArray[i].Value<JArray>()); // .getJArray(i)); + + // // row.DataKeys + // row.DataKeys = JSONUtil.ObjectArrayFromJArray(dataKeysArray[i].Value<JArray>()); //.getJArray(i)); + + // // row.States + // row.FromShortStates(JSONUtil.ObjectArrayFromJArray(statesArray[i].Value<JArray>())); + + // Rows.Add(row); + // //Controls.Add(row); + + // //row.InitTemplateContainers(); + //} + + // 注意,此时不能清空 SelectedRowIndexArray + // 现在只是从FState中恢复数据,如果清空 SelectedRowIndexArray ,可能会导致 SelectedRowIndexArray 状态不对c + ClearRows(); + + JArray frows = value; + for (int i = 0, length = frows.Count; i < length; i++) + { + JObject rowValue = frows[i] as JObject; + + GridRow row = new GridRow(this, null, i); + + //// row.Values + //row.Values = JSONUtil.ObjectArrayFromJArray(rowValue["f0"] as JArray); + //// row.DataKeys + //row.DataKeys = JSONUtil.ObjectArrayFromJArray(rowValue["f1"] as JArray); + + //// row.Values + //row.Values = JSONUtil.ObjectArrayFromJArray(JArray.Parse(rowValue["f0"].ToString())); + //// row.DataKeys + //row.DataKeys = JSONUtil.ObjectArrayFromJArray(JArray.Parse(rowValue["f1"].ToString())); + + // row.Values + object rowf0 = rowValue["f0"]; + if (rowf0 is JArray) + { + row.Values = JSONUtil.ObjectArrayFromJArray(rowf0 as JArray); + _renderValuesAsJArray = true; + } + else + { + row.Values = JSONUtil.ObjectArrayFromJArray(JArray.Parse(rowf0.ToString())); + _renderValuesAsJArray = false; + } + + // row.DataKeys + object rowf1 = rowValue["f1"]; + if (rowf1 is JArray) + { + row.DataKeys = JSONUtil.ObjectArrayFromJArray(rowf1 as JArray); + _renderDataKeysAsJArray = true; + } + else + { + row.DataKeys = JSONUtil.ObjectArrayFromJArray(JArray.Parse(rowf1.ToString())); + _renderDataKeysAsJArray = false; + } + + + // row.States + row.RecoverStates(JSONUtil.ObjectArrayFromJArray(rowValue["f2"] as JArray)); + + + var dataID = rowValue["f6"]; + if (dataID != null) + { + row.RowID = dataID.Value<string>(); + } + + //var dataText = rowValue["f7"]; + //if (dataText != null) + //{ + // row.RowText = dataText.Value<string>(); + //} + + + Rows.Add(row); + } + + } + } + + // 获取适用于客户端的值 + private void AddClientSuitableFormatValues(ref bool? renderAsJArray, JObject jo, string name, object[] values) + { + if (renderAsJArray == null) + { + // 修正DataKeyNames值是小数(比如9.80),则页面回发时会出现F_STATE验证出错的问题(Fire-8910)。 + // 是否渲染为JArray(如果任意一个值为数字,则渲染为字符串) + renderAsJArray = true; + // values(row.DataKeys)可能为空! + if (values != null) + { + foreach (object value in values) + { + if (value is float + || value is double + || value is decimal + || value is long + || value is ulong) + { + renderAsJArray = false; + break; + } + } + } + } + + if (renderAsJArray.Value) + { + jo.Add(name, new JArray(values)); + } + else + { + string valuestr = String.Empty; + if (values == null || values.Length == 0) + { + valuestr = "[]"; + } + else + { + valuestr = new JArray(values).ToString(Newtonsoft.Json.Formatting.None); + } + + jo.Add(name, valuestr); + } + } + + #endregion + + #region oldcode + + //protected override void LoadFState(JObject state, string property) + //{ + // base.LoadFState(state, property); + + // if (property == "F_Rows") + // { + // XRowsFromJSON(state.getJObject(property)); + // } + //} + + //protected override void OnInit(EventArgs e) + //{ + // base.OnInit(e); + + // // Init Columns property. + // int columnIndex = 0; + // foreach (GridColumn column in Columns) + // { + // column.Grid = this; + // column.ColumnIndex = columnIndex; + // columnIndex++; + // } + + // SaveXProperty("F_Rows", XRowsToJSON().ToString()); + // //SaveXProperty("SelectedRowIndexArray", new JArray(SelectedRowIndexArray).ToString()); + //} + + //protected override void OnBothPreRender() + //{ + // base.OnBothPreRender(); + + // // Rows has been changed in server-side code after onInit. + // if (XPropertyModified("F_Rows", XRowsToJSON().ToString())) + // { + // FState.AddModifiedProperty("F_Rows"); + // } + + // // Make sure SelectedRowIndexArray property exist in F_STATE during page's first load. + // if (!Page.IsPostBack) + // { + // FState.AddModifiedProperty("SelectedRowIndexArray"); + // } + + // //if (XPropertyModified("SelectedRowIndexArray", new JArray(SelectedRowIndexArray).ToString())) + // //{ + // // FState.AddModifiedProperties("SelectedRowIndexArray"); + // //} + // //else + // //{ + // // FState.RemoveModifiedProperties("SelectedRowIndexArray"); + // //} + //} + + //protected override void SaveFState(JObject state, string property) + //{ + // if (property == "F_Rows") + // { + // state.put(property, XRowsToJSON()); + // } + //} + + //private JObject XRowsToJSON() + //{ + // JObject jo = new JObject(); + + // JArray valuesJA = new JArray(); + // JArray datakeysJA = new JArray(); + // foreach (GridRow row in Rows) + // { + // valuesja.Add(new JArray(row.Values)); + // datakeysja.Add(new JArray(row.DataKeys)); + // } + // jo.Add("Values", valuesJA); + // jo.Add("DataKeys", datakeysJA); + + // return jo; + //} + + //private void XRowsFromJSON(JObject jo) + //{ + // JArray valuesArray = jo.getJArray("Values"); + // JArray dataKeysArray = jo.getJArray("DataKeys"); + // for (int i = 0, length = valuesArray.Count; i < length; i++) + // { + // GridRow row = new GridRow(); + + // // row.Values + // row.Values = JSONUtil.StringArrayFromJArray(valuesArray.getJArray(i)); + + // // row.DataKeys + // row.DataKeys = JSONUtil.ObjectArrayFromJArray(dataKeysArray.getJArray(i)); + + // Rows.Add(row); + // } + //} + + #endregion + + #region SelectedRowsHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedCellHiddenFieldID + { + get + { + return String.Format("{0}_SelectedCell", ClientID); + } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SelectedRowsHiddenFieldID + { + get + { + return String.Format("{0}_SelectedRows", ClientID); + } + } + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //private string SelectedRowIndexArrayHiddenFieldID + //{ + // get + // { + // return String.Format("{0}_SelectedRowIndexArray", ClientID); + // } + //} + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string HiddenColumnsHiddenFieldID + { + get + { + return String.Format("{0}_HiddenColumns", ClientID); + } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string StatesHiddenFieldID + { + get + { + return String.Format("{0}_States", ClientID); + } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string ModifiedDataHiddenFieldID + { + get + { + return String.Format("{0}_ModifiedData", ClientID); + } + } + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //private string NewAddedRowsHiddenFieldID + //{ + // get + // { + // return String.Format("{0}_NewAddedRows", ClientID); + // } + //} + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string DeletedRowsHiddenFieldID + { + get + { + return String.Format("{0}_DeletedRows", ClientID); + } + } + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string PageIndexHiddenFieldID + { + get + { + return String.Format("{0}_PageIndex", ClientID); + } + } + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SortFieldHiddenFieldID + { + get + { + return String.Format("{0}_SortField", ClientID); + } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string SortDirectionHiddenFieldID + { + get + { + return String.Format("{0}_SortDirection", ClientID); + } + } + + ///// <summary> + ///// 实际绑定到页面上的值 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //internal int[] NeedPersistStateColumnIndexArray + //{ + // get + // { + // object obj = FState["NeedPersistStateColumnIndexArray"]; + // return obj == null ? null : (int[])obj; + // } + // set + // { + // FState["NeedPersistStateColumnIndexArray"] = value; + // } + //} + + //private string GetNeedPersistStateColumnIndexID(int columnIndex) + //{ + // return String.Format("{0}_columnIndex{1}", ClientID, columnIndex); + //} + + + #region old code + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("客户端分页时,开始行的序号")] + //private string EnableClientPagingStartRowIndexID + //{ + // get + // { + // return String.Format("{0}_startRowIndex", ClientID); + // } + //} + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("客户端分页时,开始行的序号")] + //internal int EnableClientPagingStartRowIndex + //{ + // get + // { + // object obj = BoxState["EnableClientPagingStartRowIndex"]; + // return obj == null ? 0 : (int)obj; + // } + // set + // { + // BoxState["EnableClientPagingStartRowIndex"] = value; + // } + //} + #endregion + + #endregion + + #region OnFirstPreRender/OnAjaxPreRender + + #region Render_IDS + + private string Render_SelectModelID + { + get + { + return String.Format("{0}_selModel", XID); + } + } + + private string Render_GridStoreID + { + get + { + return String.Format("{0}_store", XID); + } + } + + private string Render_GridFieldsID + { + get + { + return String.Format("{0}_fields", XID); + } + } + + private string Render_GridColumnsID + { + get + { + return String.Format("{0}_columns", XID); + } + } + + //private string Render_GridRowExpanderID + //{ + // get + // { + // return String.Format("{0}_expander", XID); + // } + //} + + private string Render_GridGroupColumnID + { + get + { + return String.Format("{0}_groupcolumn", XID); + } + } + + internal string Render_PagingID + { + get + { + return String.Format("{0}_paging", XID); + } + } + + //// FineUIAjax回发时,列是否发生变化 + //private bool _FineUIAjaxColumnsChanged = false; + + #endregion + + #region OnAjaxPreRender OnFirstPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + + //bool needUpdateSortIcon = false; + + bool dataReloaded = false; + if (AllowPaging) + { + // 不论这三个属性是在客户端还是在服务器端被改变,都需要执行grid.getBottomToolbar().load函数 + // 如果不是数据库分页,则F_Rows不会变化,但是必须执行x_loadData + if (PropertyModified("PageIndex", "PageSize", "RecordCount")) + { + sb.AppendFormat("{0}.f_getPaging().f_update({1});", XID, GetPagingBuilder()); + //sb.AppendFormat("{0}.f_loadData();", XID); + + //needUpdateSortIcon = true; + + dataReloaded = true; + } + } + + if (PropertyModified("F_Rows")) + { + dataReloaded = true; + + ////if (ClientPropertyModifiedInServer("F_Rows")) + //if (!dataReloaded) + //{ + // sb.AppendFormat("{0}.f_loadData();", XID); + + // //needUpdateSortIcon = true; + + // dataReloaded = true; + //} + + //// 如果F_Rows改变了,则每行的模版列内容应该也要变化 + //PageManager.Instance.AddAjaxGridClientID(ClientID); + } + + // 如果需要更新 模板列,则简单的重新加载表格即可 + if (_needReloadData) + { + dataReloaded = true; + } + + // 本次AJAX请求重新加载的表格 + if (dataReloaded) + { + sb.AppendFormat("{0}.f_loadData();", XID); + + PageManager.Instance.AddAjaxGridReloadedClientID(ClientID); + } + else + { + // 如果不重新加载客户端数据,但是调用了 DataBind 函数,则提交更改 + if (AllowCellEditing && _databindInFineUIAjaxPostBack) + { + CommitChanges(); + } + } + + + //bool selectRowsScriptRegistered = false; + //if (AllowCellEditing) + //{ + // if (PropertyModified("SelectedCell")) + // { + // sb.AppendFormat("{0}.f_selectCell();", XID); + // } + //} + //else + //{ + // if (PropertyModified("SelectedRowIndexArray")) + // { + // sb.AppendFormat("{0}.f_selectRows();", XID); + // selectRowsScriptRegistered = true; + // } + //} + + + if (PropertyModified("HiddenColumns")) + { + sb.AppendFormat("{0}.f_updateColumnsHiddenStatus();", XID); + } + + + // 如果 SelectedCell 属性改变 或者 数据重新加载了 + if (PropertyModified("SelectedCell") || dataReloaded) + { + sb.AppendFormat("{0}.f_selectCell();", XID); + } + + // 如果 SelectedRowIndexArray 属性改变 或者 数据重新加载了 + if (PropertyModified("SelectedRowIDArray") || dataReloaded) + { + sb.AppendFormat("{0}.f_selectRows();", XID); + } + + // 如果 ExpandAllRowExpanders 属性改变 或者 数据重新加载了 或者 在后台手工操作了展开折叠属性 + if (PropertyModified("ExpandAllRowExpanders") || dataReloaded || _registerScriptRowExpanders) + { + RegisterRowExpanderScript(sb); + } + + //bool rowExpandersScriptRegistered = false; + //if (PropertyModified("ExpandAllRowExpanders") || _registerScriptRowExpanders) + //{ + // if (ExpandAllRowExpanders) + // { + // sb.AppendFormat("{0}.f_expandAllRows();", XID); + // } + // else + // { + // sb.AppendFormat("{0}.f_collapseAllRows();", XID); + // } + // rowExpandersScriptRegistered = true; + //} + + //// 如果数据重新加载了,即每行的数据都更新了 + //if (dataReloaded) + //{ + // if (!rowExpandersScriptRegistered) + // { + // // 数据重新加载了,如果没有注册行扩展列的脚本,需要注册展开所有行扩展列的脚本 + // if (ExpandAllRowExpanders) + // { + // sb.AppendFormat("{0}.f_expandAllRows();", XID); + // } + // else + // { + // sb.AppendFormat("{0}.f_collapseAllRows();", XID); + // } + // } + + + // if (!AllowCellEditing) + // { + // // 数据重新加载了,如果没有注册选中行的脚本,需要注册重新选中行的脚本 + // if (!selectRowsScriptRegistered) + // { + // sb.AppendFormat("{0}.f_selectRows();", XID); + // } + // } + + //} + + AddAjaxScript(sb); + } + + private void RegisterRowExpanderScript(StringBuilder sb) + { + GridColumn rowExpanderColumn = GetRowExpanderColumn(); + if (rowExpanderColumn != null) + { + if (ExpandAllRowExpanders) + { + sb.AppendFormat("{0}.f_expandAllRows();", XID); + } + else + { + sb.AppendFormat("{0}.f_collapseAllRows();", XID); + } + } + } + + /// <summary> + /// 获取行扩展列 + /// </summary> + /// <returns></returns> + internal GridColumn GetRowExpanderColumn() + { + GridColumn expanderColumn = null; + foreach (GridColumn column in Columns) + { + if (column is TemplateField && (column as TemplateField).RenderAsRowExpander) + { + expanderColumn = column; + break; + } + } + return expanderColumn; + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + // 确保 F_Rows 在页面第一次加载时都存在于f_state中 + FState.AddModifiedProperty("F_Rows"); + if (EnableSummary) + { + FState.AddModifiedProperty("SummaryData"); + } + if (SelectedRowIDArray.Length > 0) + { + FState.AddModifiedProperty("SelectedRowIDArray"); + } + + // 不需要手工添加 SelectedRowIndexArray 属性,是因为只能通过代码设置此属性 + // 只要通过代码设置了 SelectedRowIndexArray 属性,则一定会存在于 F_States + + + base.OnFirstPreRender(); + + + // 修正 extjs v6.0 引入的问题 + if (!ShowHeader && !ShowGridHeader && ShowBorder) + { + OB.AddProperty("bodyCls", "x-panel-default-outer-border-trbl"); + } + + + //ResourceManager.Instance.AddJavaScriptComponent("grid"); + JsArrayBuilder pluginBuilder = new JsArrayBuilder(); + + #region selectModel/gridStore/gridColumn + + #region old code + //string dataScript = "var grid_data=[['My_Item1The id of a column in this grid that should expand to fill unused space. This id can not be 0.','1','2008'],['My_Item2','2','2007']];"; + //string storeScript = "var grid_store = new Ext.data.SimpleStore({fields:[{name:'name1'},{name:'value'},{name:'year'}]});\r\ngrid_store.loadData(grid_data);"; + //string storeScript = "var grid_store = new Ext.data.SimpleStore({fields:['name1','value1','year1'],data:[['My_Item1The id of a column in this grid that should expand to fill unused space. This id can not be 0.','1','2008'],['My_Item2','2','2007']]});"; + //OB.AddProperty(OptionName.Columns, "[{id:'name2', header: 'Price', sortable: true},{header: 'Price2', sortable: true},{header: 'Price3', sortable: true}]", true); + + #endregion + + string gridSelectModelScript = GetGridSelectModel(); + OB.AddProperty("selModel", Render_SelectModelID, true); + + + string gridColumnsScript = GetGridColumnScript(pluginBuilder); + OB.AddProperty("columns", Render_GridColumnsID, true); + + string gridStoreScript = GetGridStore(); + OB.AddProperty("store", Render_GridStoreID, true); + + OB.AddProperty("f_fields", Render_GridFieldsID, true); + //Console.WriteLine(RowExpander.DataFields); + + #endregion + + #region Width + + //if (MinColumnWidth != Unit.Empty) + //{ + // OB.AddProperty("minColumnWidth", MinColumnWidth.Value); + //} + + //string autoExpandColumnID = AutoExpandColumn; // GetAutoExpandColumnID(); + //if (String.IsNullOrEmpty(autoExpandColumnID)) + //{ + // autoExpandColumnID = GetAutoExpandColumnID(); + //} + + //if (!String.IsNullOrEmpty(autoExpandColumnID)) + //{ + // OB.AddProperty("autoExpandColumn", autoExpandColumnID); + + // if (AutoExpandColumnMax != Unit.Empty) + // { + // OB.AddProperty("autoExpandMax", AutoExpandColumnMax.Value); + // } + + // if (AutoExpandColumnMin != Unit.Empty) + // { + // OB.AddProperty("autoExpandMin", AutoExpandColumnMin.Value); + // } + //} + + + + #endregion + + #region viewConfig + + JsObjectBuilder viewBuilder = new JsObjectBuilder(); + if (!String.IsNullOrEmpty(EmptyText)) + { + viewBuilder.AddProperty("deferEmptyText", false); + viewBuilder.AddProperty("emptyText", EmptyText); + } + + if (!EnableAlternateRowColor) + { + viewBuilder.AddProperty("stripeRows", false); + } + + if (EnableTextSelection) + { + viewBuilder.AddProperty("enableTextSelection", true); + } + + viewBuilder.AddProperty("getRowClass", JsHelper.GetFunction("return 'f-grid-row';"), true); + //viewBuilder.AddProperty("selectedItemCls", "x-grid-row-selected f-grid-row-selected"); + + if (viewBuilder.Count > 0) + { + OB.AddProperty("viewConfig", viewBuilder); + } + + + #endregion + + #region Properties + + if (!String.IsNullOrEmpty(DataIDField)) + { + OB.AddProperty("f_idField", DataIDField); + } + + + + if (EnableColumnLines) + { + OB.AddProperty("columnLines", true); + } + + if (!EnableRowLines) + { + OB.AddProperty("rowLines", false); + } + + + + if (ForceFit) + { + OB.AddProperty("forceFit", true); + } + + //OB.AddProperty("enableHdMenu", EnableHeaderMenu); + + //if (EnableHeaderMenu) + //{ + // // 启用标题栏菜单,但是不启用标题栏菜单中的隐藏列功能 + // if (!EnableColumnHide) + // { + // OB.AddProperty("enableColumnHide", false); + // } + //} + + + + if (!ShowGridHeader) + { + OB.AddProperty("hideHeaders", true); + } + + if (!EnableMouseOverColor) + { + OB.AddProperty("trackMouseOver", false); + } + + // 延迟渲染 + if (!EnableDelayRender) + { + OB.AddProperty("deferRowRender", false); + } + + + + #endregion + + #region EnableRowClickEvent + + if (EnableRowClickEvent) + { + string validateScript = "var args='RowClick$'+record.getId();"; + validateScript += GetPostBackEventReference("#RowClick#").Replace("'#RowClick#'", "args"); + + //string rowClickScript = JsHelper.GetFunction(validateScript, "grid", "record", "item", "index"); // String.Format("function(grid,rowIndex,e){{{0}}}", validateScript); + + //OB.Listeners.AddProperty("itemclick", rowClickScript, true); + AddListener("itemclick", validateScript, "grid", "record", "item", "index"); + } + + if (EnableRowDoubleClickEvent) + { + string validateScript = "var args='RowDoubleClick$'+record.getId();"; + validateScript += GetPostBackEventReference("#RowDoubleClick#").Replace("'#RowDoubleClick#'", "args"); + + //string rowClickScript = JsHelper.GetFunction(validateScript, "grid", "record", "item", "index"); //String.Format("function(grid,rowIndex,e){{{0}}}", validateScript); + + //OB.Listeners.AddProperty("itemdblclick", rowClickScript, true); + AddListener("itemdblclick", validateScript, "grid", "record", "item", "index"); + } + + #endregion + + #region AllowPaging + + string pagingScript = String.Empty; + + if (AllowPaging) + { + OptionBuilder pagingBuilder = GetPagingBuilder(); + + if (!ShowPagingMessage) + { + pagingBuilder.AddProperty("displayInfo", false); + } + else + { + pagingBuilder.AddProperty("displayInfo", true); + } + + pagingBuilder.AddProperty("store", Render_GridStoreID, true); + //// Hide refresh button, we don't implement this logic now. + //pagingBuilder.Listeners.AddProperty("beforerender", JsHelper.GetFunction("this.f_hideRefresh();"), true); + + string postbackScript = String.Empty; + postbackScript = GetPostBackEventReference("#PLACEHOLDER#"); + string loadPageScriptVars = "var oldPageIndex=bar.f_pageIndex;var newPageIndex=pageNum-1;bar.f_update({f_pageIndex:newPageIndex});"; + if (ClearSelectionsBeforePaging) + { + loadPageScriptVars += "this.ownerCt.f_clearSelections();"; + } + string loadPageScript = JsHelper.GetFunction(loadPageScriptVars + postbackScript.Replace("'#PLACEHOLDER#'", "'Page$'+newPageIndex+'$'+oldPageIndex") + "return false;", "bar", "pageNum"); + + pagingBuilder.Listeners.AddProperty("beforechange", loadPageScript, true); + + + if (PageItems.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (ControlBase item in PageItems) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + } + + pagingBuilder.AddProperty("items", ab.ToString(), true); + } + + //pagingBuilder.AddProperty("xtype", "simplepagingtoolbar"); + pagingBuilder.AddProperty("dock", "bottom"); + + pagingScript = String.Format("var {0}=F.create('Ext.ux.SimplePagingToolbar',{1});", Render_PagingID, pagingBuilder); + + //pagingScript = String.Format("var {0}={1};", Render_PagingID, pagingBuilder); + + OB.AddProperty("f_paging", true); + } + + #endregion + + #region remove fx + + OB.AddProperty("draggable", false); + //OB.AddProperty("enableColumnMove", false); + OB.AddProperty("enableDragDrop", false); + + if (!EnableColumnResize) + { + OB.AddProperty("enableColumnResize", false); + } + + #endregion + + #region AllowSorting + + if (AllowSorting) + { + OB.AddProperty("f_sorting", true); + } + + //// 如果启用服务器端排序,则需要注册headerclick事件处理 + //if (AllowSorting) + //{ + // string headerClickScript = "if(!cmp.getColumnModel().config[columnIndex].sortable){return false;}"; + // headerClickScript += "var args='Sort$'+columnIndex;"; + // headerClickScript += GetPostBackEventReference("#SORT#").Replace("'#SORT#'", "args"); + + // // 告诉 store 本次排序已经处理了,不要重复处理了 + // headerClickScript += "cmp.getStore().headerclickprocessed=true;"; + + // //string headerClickScript = String.Format("function(grid,columnIndex){{{0}}}", validateScript); + // OB.Listeners.AddProperty("headerclick", JsHelper.GetFunction(headerClickScript, "cmp", "columnIndex"), true); + //} + + #endregion + + #region EnableSummary + + JsArrayBuilder features = new JsArrayBuilder(); + + if (EnableSummary) + { + JsObjectBuilder summaryFeature = new JsObjectBuilder(); + summaryFeature.AddProperty("ftype", "summary"); + summaryFeature.AddProperty("id", "summary"); + + if (SummaryPosition != SummaryPosition.Flow) + { + summaryFeature.AddProperty("dock", SummaryPositionHelper.GetName(SummaryPosition)); + } + + //if (SummaryHidden) + //{ + // summaryFeature.AddProperty("showSummaryRow", false); + //} + + features.AddProperty(summaryFeature); + } + + + if (features.Count > 0) + { + OB.AddProperty("features", features); + } + + #endregion + + #region Listeners - afterrender + + StringBuilder viewreadySB = new StringBuilder(); + + // Note: this.f_state['F_Rows']['Values'] will always rendered to the client side. + //viewreadySB.Append("cmp.f_updateTpls();"); + + if (AllowSorting) + { + viewreadySB.AppendFormat("cmp.f_initSortHeaders();"); + } + + if (!AllowCellEditing) + { + viewreadySB.Append("cmp.f_selectRows();"); + } + + + //if (EnableTextSelection) + //{ + // cls += " x-grid-selectable"; + + // viewreadySB.Append("cmp.f_enableTextSelection();"); + //} + + // 展开所有的行扩展列 + if (ExpandAllRowExpanders) + { + viewreadySB.Append("cmp.f_expandAllRows();"); + } + + if (AllowColumnLocking) + { + // 必须延时调用 doLayout,否则显示不正常 + viewreadySB.Append("cmp.doLayout();"); + } + + string viewreadyScript = viewreadySB.ToString(); + + if (!String.IsNullOrEmpty(viewreadyScript)) + { + viewreadyScript = "window.setTimeout(function(){" + viewreadyScript + "},200);"; + + // viewready在enableLocking时不会触发,只好改成afterrender + //OB.Listeners.AddProperty("afterrender", JsHelper.GetFunction(viewreadyScript, "cmp"), true); + AddListener("afterrender", viewreadyScript, "cmp"); + } + + #endregion + + #region cls + + string cls = CssClass; + + if (RowVerticalAlign != VerticalAlign.Middle) + { + cls += String.Format(" f-grid-row-align-{0}", VerticalAlignName.GetName(RowVerticalAlign)); + } + + //if (AllowCellEditing) + //{ + // cls += " f-grid-cellediting"; + //} + + cls = cls.Trim(); + if (!String.IsNullOrEmpty(cls)) + { + OB.AddProperty("cls", cls); + } + + #endregion + + #region Listeners - render + + StringBuilder renderSB = new StringBuilder(); + + // 加载表格数据 + renderSB.Append("cmp.f_loadData();"); + + //// 隐藏列 + //if (HiddenColumnIndexArray != null && HiddenColumnIndexArray.Length > 0) + //{ + // renderSB.Append("cmp.f_updateColumnsHiddenStatus();"); + //} + + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderSB.ToString(), "cmp"), true); + AddListener("render", renderSB.ToString(), "cmp"); + + #endregion + + #region AllowCellEditing + + string cellEditScript = String.Empty; + + if (AllowCellEditing) + { + string pluginId = String.Format("{0}_cellEditing", XID); + + JsObjectBuilder cellEditBuilder = new JsObjectBuilder(); + cellEditBuilder.AddProperty("pluginId", pluginId); + cellEditBuilder.AddProperty("clicksToEdit", ClicksToEdit); + + cellEditScript = String.Format("var {0}=F.create('Ext.grid.plugin.CellEditing',{1});", pluginId, cellEditBuilder); + + pluginBuilder.AddProperty(pluginId, true); + + if (EnableAfterEditEvent) + { + string validateScript = "var args='AfterEdit$'+e.record.getId()+'$'+e.column.id;"; + validateScript += GetPostBackEventReference("#AfterEdit#").Replace("'#AfterEdit#'", "args"); + + //string rowClickScript = String.Format("function(editor,e){{{0}}}", validateScript); + //OB.Listeners.AddProperty("edit", rowClickScript, true); + AddListener("edit", validateScript, "editor", "e"); + } + + OB.AddProperty("f_cellEditing", pluginId, true); + } + + + if (AllowColumnLocking) + { + OB.AddProperty("enableLocking", true); + } + else + { + OB.AddProperty("enableLocking", false); + } + + #endregion + + #region pluginBuilder + + if (pluginBuilder.Count > 0) + { + OB.AddProperty("plugins", pluginBuilder.ToString(), true); + } + + #endregion + + StringBuilder sb = new StringBuilder(); + sb.Append(gridSelectModelScript + gridStoreScript + pagingScript + gridColumnsScript + cellEditScript); + sb.AppendFormat("var {0}=F.create('Ext.grid.Panel',{1});", XID, OB); + + AddStartupScript(sb.ToString()); + + #region old code + + ////List<string> totalModifiedProperties = FState.GetTotalModifiedProperties(); + ////if (SelectedRowIndexArray.Length > 0) + ////{ + //// string selectScript = String.Empty; + //// if (totalModifiedProperties.Contains("SelectedRowIndexArray")) + //// { + //// selectScript = String.Format("{0}.f_selectRows();", XID); + //// } + //// else + //// { + //// selectScript = String.Format("{0}.selectRows({1});", Render_SelectModelID, new JArray(SelectedRowIndexArray)); + //// } + //// sb.Append(JsHelper.GetDeferScript(selectScript, 200)); + ////} + + //// Make sure SelectedRowIndexArray property exist in F_STATE during page's first load. + //sb.Append(JsHelper.GetDeferScript(String.Format("{0}.f_selectRows();", XID), 200)); + + #endregion + } + + + private string GetSortColummID() + { + string columnID = String.Empty; + + // 这个判断一定要加上,因为序号列的 SortField 也为空! + if (!String.IsNullOrEmpty(SortField)) + { + foreach (GridColumn column in AllColumns) + { + if (column.SortField == SortField) + { + columnID = column.ColumnID; + break; + } + } + } + + return columnID; + } + + private OptionBuilder GetPagingBuilder() + { + OptionBuilder pagingBuilder = new OptionBuilder(); + pagingBuilder.AddProperty("f_pageSize", PageSize); + pagingBuilder.AddProperty("f_pageIndex", PageIndex); + pagingBuilder.AddProperty("f_recordCount", RecordCount); + pagingBuilder.AddProperty("f_pageCount", PageCount); + + int startRowIndex, endRowIndex; + ResolveStartEndRowIndex(out startRowIndex, out endRowIndex); + if (IsDatabasePaging) + { + pagingBuilder.AddProperty("f_databasePaging", true); + } + else + { + pagingBuilder.AddProperty("f_startRowIndex", startRowIndex); + pagingBuilder.AddProperty("f_endRowIndex", endRowIndex); + } + + return pagingBuilder; + } + + #endregion + + #region GetGridColumnScript + + //private string GetAutoExpandColumnID() + //{ + // string result = String.Empty; + + // int columnIndex = 0; + // foreach (GridColumn column in AllColumns) + // { + // if (column.ExpandUnusedSpace) + // { + // result = column.ColumnID; + // break; + // } + + // columnIndex++; + // } + + // return result; + //} + + + private string GetGridColumnScript(JsArrayBuilder pluginBuilder) + { + string selectModelID = Render_SelectModelID; + + // columns + JsArrayBuilder columnsBuilder = new JsArrayBuilder(); + + //// 如果启用行序号,则放在第一列 + //if (EnableRowNumber) + //{ + // JsObjectBuilder rowNumberBuilder = new JsObjectBuilder(); + // if (RowNumberWidth != Unit.Empty) + // { + // rowNumberBuilder.AddProperty("width", RowNumberWidth.Value); + // } + // if (AllowPaging) + // { + // rowNumberBuilder.AddProperty("f_paging", Render_PagingID, true); + // } + // if (EnableRowNumberPaging) + // { + // rowNumberBuilder.AddProperty("f_paging_enabled", EnableRowNumberPaging); + // } + + // columnsBuilder.AddProperty(String.Format("F.create('Ext.grid.column.RowNumberer',{0})", rowNumberBuilder.ToString()), true); + + //} + + //// 如果启用CheckBox,则放在第二列 + //// 如果启用单元格编辑,则EnableCheckBoxSelect属性失效 + //if (EnableCheckBoxSelect && !AllowCellEditing) + //{ + // columnsBuilder.AddProperty(selectModelID, true); + //} + + + //string groupColumnScript = GetGroupColumnScript(); + + string expanderXID = String.Empty; + foreach (GridColumn column in Columns) + { + if (column is TemplateField && (column as TemplateField).RenderAsRowExpander) + { + expanderXID = column.XID; + } + else + { + columnsBuilder.AddProperty(column.XID, true); + } + } + + // 为Grid添加plugin属性 + //JsArrayBuilder pluginBuilder = new JsArrayBuilder(); + + if (!String.IsNullOrEmpty(expanderXID)) + { + pluginBuilder.AddProperty(expanderXID, true); + } + + //if (!String.IsNullOrEmpty(groupColumnScript)) + //{ + // pluginBuilder.AddProperty(Render_GridGroupColumnID, true); + //} + + + + //JsObjectBuilder defaultsBuilder = new JsObjectBuilder(); + //// 这是Extjs默认的客户端排序 + ////defaultsBuilder.AddProperty("sortable", false); + ////defaultsBuilder.AddProperty("menuDisabled", true); + //defaultsBuilder.AddProperty("width", 100); + + //string columnModelScript = String.Format("var {0}=new Ext.grid.ColumnModel({{columns:{1},defaults:{2}}});", gridColumnID, columnsBuilder, defaultsBuilder); + string columnsScript = String.Format("var {0}={1};", Render_GridColumnsID, columnsBuilder); + + return columnsScript; + } + + #endregion + + #region GetGroupColumnScript/ResolveGroupColumns + + //private string GetGroupColumnScript() + //{ + // if (Columns.Count > 0) + // { + // return String.Empty; + // } + + // List<List<GridGroupColumn>> resolvedGroups = new List<List<GridGroupColumn>>(); + // ResolveGroupColumns(GroupColumns, 0, resolvedGroups); + + // JsArrayBuilder groupHeaderBuilder = new JsArrayBuilder(); + + // foreach (List<GridGroupColumn> groups in resolvedGroups) + // { + // JsArrayBuilder groupsBuilder = new JsArrayBuilder(); + // foreach (GridGroupColumn group in groups) + // { + // JsObjectBuilder groupBuilder = new JsObjectBuilder(); + // groupBuilder.AddProperty("header", group.HeaderText); + // if (group.TextAlign != TextAlign.Left) + // { + // groupBuilder.AddProperty("align", TextAlignName.GetName(group.TextAlign)); + // } + + // int groupColumnCount = 0; + // ResolveColumnCount(group, ref groupColumnCount); + // groupBuilder.AddProperty("colspan", groupColumnCount); + + // groupsBuilder.AddProperty(groupBuilder); + // } + + // groupHeaderBuilder.AddProperty(groupsBuilder); + // } + + // return String.Format("var {0}=new Ext.ux.grid.ColumnHeaderGroup({{rows:{1}}});", Render_GridGroupColumnID, groupHeaderBuilder.ToString()); + + //} + + //// 递归获得每个分组头中包含的列数 + //private void ResolveColumnCount(GridGroupColumn group, ref int columnCount) + //{ + // if (group.Columns.Count > 0) + // { + // columnCount += group.Columns.Count; + // } + // else if (group.GroupColumns.Count > 0) + // { + // foreach (GridGroupColumn subGroup in group.GroupColumns) + // { + // ResolveColumnCount(subGroup, ref columnCount); + // } + // } + //} + + //// 将表头的树状分组转换为数组形式 + //private void ResolveGroupColumns(GridGroupColumnCollection groups, int level, List<List<GridGroupColumn>> resolvedGroups) + //{ + // foreach (GridGroupColumn group in groups) + // { + // if (resolvedGroups.Count <= level) + // { + // resolvedGroups.Add(new List<GridGroupColumn>()); + // } + // resolvedGroups[level].Add(group); + + // if (group.GroupColumns.Count > 0) + // { + // ResolveGroupColumns(group.GroupColumns, ++level, resolvedGroups); + // level--; + // } + // } + //} + + #endregion + + #region GetGridSelectModel + + private string GetGridSelectModel() + { + //JsObjectBuilder selectOB = new JsObjectBuilder(); + OptionBuilder selectOB = new OptionBuilder(); + + if (AllowCellEditing) + { + return String.Format("var {0}=F.create('Ext.selection.CellModel',{1});", Render_SelectModelID, selectOB); + } + else + { + //selectOB.AddProperty("singleSelect", !EnableMultiSelect); + + if (EnableMultiSelect) + { + if (KeepCurrentSelection) + { + selectOB.AddProperty("mode", "SIMPLE"); + } + else + { + selectOB.AddProperty("mode", "MULTI"); + } + } + else + { + selectOB.AddProperty("mode", "SINGLE"); + } + + + if (EnableCheckBoxSelect && CheckBoxSelectOnly) + { + selectOB.AddProperty("checkOnly", true); + } + + //selectOB.AddProperty("listeners", "{beforerowselect:function(){return false;}}", true); + + if (EnableRowSelectEvent) + { + string validateScript = "var args='RowSelect$'+record.getId();"; + validateScript += GetPostBackEventReference("#RowSelect#").Replace("'#RowSelect#'", "args"); + + string rowSelectScript = JsHelper.GetFunction(validateScript, "model", "record", "index"); //String.Format("function(model,rowIndex){{{0}}}", validateScript); + + selectOB.Listeners.AddProperty("select", rowSelectScript, true); + } + if (EnableRowDeselectEvent) + { + string validateScript = "var args='RowDeselect$'+record.getId();"; + validateScript += GetPostBackEventReference("#RowDeselect#").Replace("'#RowDeselect#'", "args"); + + string rowSelectScript = JsHelper.GetFunction(validateScript, "model", "record", "index"); //String.Format("function(model,rowIndex){{{0}}}", validateScript); + + selectOB.Listeners.AddProperty("deselect", rowSelectScript, true); + } + + if (EnableCheckBoxSelect) + { + return String.Format("var {0}=F.create('Ext.selection.CheckboxModel',{1});", Render_SelectModelID, selectOB); + } + else + { + return String.Format("var {0}=F.create('Ext.selection.RowModel',{1});", Render_SelectModelID, selectOB); + } + } + } + #endregion + + #region GetGridStore + + private string GetGridStore() + { + OptionBuilder storeBuilder = new OptionBuilder(); + + // store - fields + JsArrayBuilder fieldsBuidler = new JsArrayBuilder(); + foreach (GridColumn column in AllColumns) + { + JsObjectBuilder fieldBuilder = new JsObjectBuilder(); + fieldBuilder.AddProperty("name", column.ColumnID); + + if (AllowCellEditing) + { + RenderBaseField field = column as RenderBaseField; + if (field != null) + { + if (field is RenderField) + { + RenderField renderFiled = field as RenderField; + if (renderFiled.FieldType != FieldType.Auto) + { + fieldBuilder.AddProperty("type", FieldTypeName.GetName(renderFiled.FieldType)); + // 日期类型的,必须要设置这个 dateFormat 属性 + if (renderFiled.FieldType == FieldType.Date) + { + fieldBuilder.AddProperty("dateFormat", DateUtil.ConvertToClientDateFormat(renderFiled.RendererArgument)); + } + } + } + else if (field is RenderCheckField) + { + fieldBuilder.AddProperty("type", "boolean"); + } + } + } + fieldsBuidler.AddProperty(fieldBuilder); + } + + // 增加 idProperty + //JsObjectBuilder idFieldBuilder = new JsObjectBuilder(); + //idFieldBuilder.AddProperty("name", "__id"); + fieldsBuidler.AddProperty("__id"); + + string fieldsScript = String.Format("var {0}={1};", Render_GridFieldsID, fieldsBuidler); + + + // 自定义Model + JsObjectBuilder modelOB = new JsObjectBuilder(); + modelOB.AddProperty("extend", "Ext.data.Model"); + modelOB.AddProperty("idProperty", "__id"); + modelOB.AddProperty("fields", Render_GridFieldsID, true); + storeBuilder.AddProperty("model", String.Format("Ext.define(null,{0})", modelOB), true); + + //storeBuilder.AddProperty("fields", Render_GridFieldsID, true); + + storeBuilder.AddProperty("remoteSort", true); + + // 设置初始排序列 + if (AllowSorting) + { + string sortColumnID = GetSortColummID(); + if (!String.IsNullOrEmpty(sortColumnID)) + { + JsObjectBuilder sorterBuilder = new JsObjectBuilder(); + sorterBuilder.AddProperty("property", GetSortColummID()); + sorterBuilder.AddProperty("direction", SortDirection.ToString()); + storeBuilder.AddProperty("sorters", sorterBuilder); + } + } + + + string postbackScript = GetPostBackEventReference("#SORT#").Replace("'#SORT#'", "'Sort$'+sorter.getProperty()+'$'+sorter.getDirection()"); + postbackScript = "var sorter=operation.getSorters()[0];if(sorter){" + postbackScript + "}return false;"; + + storeBuilder.Listeners.AddProperty("beforeload", JsHelper.GetFunction(postbackScript, "store", "operation"), true); + + return fieldsScript + String.Format("var {0}=F.create('Ext.data.ArrayStore',{1});", Render_GridStoreID, storeBuilder.ToString()); + + #region old code + + //storeBuilder.AddProperty("remoteSort", true); + //storeBuilder.AddProperty("proxy", String.Format("new Ext.ux.AspNetProxy('{0}')", ClientID), true); + + //storeBuilder.AddProperty("autoLoad", "{params:{start:0,limit:" + PageSize + "}}", true); + //storeBuilder.AddProperty("data", GetDatas()); + + //if (AllowSorting) + //{ + // // Default sort info + // if (SortColumnIndex >= 0 && SortColumnIndex < Columns.Count) + // { + // JsObjectBuilder sortInfoBuilder = new JsObjectBuilder(); + // sortInfoBuilder.AddProperty("field", Columns[SortColumnIndex].ColumnID); + // sortInfoBuilder.AddProperty("direction", SortDirection); + + // storeBuilder.AddProperty("sortInfo", sortInfoBuilder); + // } + //} + + + //return String.Format("var {0}=new Ext.data.ArrayStore({1});", Render_GridStoreID, storeBuilder.ToString()); + + + //#region store - data + ////string dataArrayString = GetDataArrayString(startEndRowIndex[0], startEndRowIndex[1]); + + + + //int[] startEndRowIndex = GetStartEndRowIndex(); + //// 计算完要渲染到前台的数据的条数,就要检查当前选中的项是不是有越界的 + //ResolveSelectedRowIndexArray(startEndRowIndex[1] - startEndRowIndex[0]); + + //#endregion + #endregion + + #region old code + + //JsArrayBuilder rowIndexBuilder = new JsArrayBuilder(); + + //if (SelectedRowIndexArray != null && SelectedRowIndexArray.Length > 0) + //{ + // foreach (int rowIndex in SelectedRowIndexArray) + // { + // rowIndexBuilder.AddProperty(rowIndex); + // } + //} + //string selectRowScript = String.Format("{0}.selectRows({1});", Render_SelectModelID, rowIndexBuilder); + //// 选中哪些行,这个必须要defer(100),否则选不中,晕(10ms就不行) + //selectRowScript = String.Format("(function(){{{0}}}).defer(100);", selectRowScript); + + //storeBuilder.AddProperty("listeners", String.Format("{{load:{0}}}", String.Format("function(){{{0}}}", selectRowScript)), true); + + #endregion + + #region old code + + // TODO + //string selectedRowIndexArrayString = StringUtil.GetStringFromIntArray(SelectedRowIndexArray); + //// FineUIAjax回发并且Columns发生变化,需要重新 + //if (_FineUIAjaxColumnsChanged) + //{ + // string reconfigScript = String.Empty; + // reconfigScript += gridStoreScript; + // reconfigScript += String.Format("{0}.reconfigure({1},{2});", XID, Render_GridStoreID, Render_GridColumnModelID); + // reconfigScript += String.Format("{0}.load();", Render_GridStoreID); + // // 重新加载数据后要更新input选中哪些项(因为可能选中项也会变化) + // reconfigScript += GetSetHiddenFieldValueScript(SelectedRowIndexArrayHiddenFieldID, selectedRowIndexArrayString); + + // AddAjaxPropertyChangedScript(reconfigScript); + //} + //else + //{ + // bool reloadData = false; + // string updateSelectRowScript = selectRowScript + GetSetHiddenFieldValueScript(SelectedRowIndexArrayHiddenFieldID, selectedRowIndexArrayString); + // if (AjaxPropertyChanged("DataArrayString", dataArrayString)) + // { + // string reloadDataScript = String.Format("{0}.loadData({1});", Render_GridStoreID, dataArrayString); + // // 虽然有可能“不需要修改隐藏字段的值,因为SelectedRowIndexArray其实并没有变化,只是重新加载数据(reloadData)导致选中项丢失了” + // // 但是我们还是修改了input的值,这没有什么影响 + // reloadDataScript += updateSelectRowScript; + + // AddAjaxPropertyChangedScript(reloadDataScript); + + // reloadData = true; + // } + + // // 不管SelectedRowIndexArray==null或者是不为空,都要做这一步 + // // 在Ajax回发中,selectedRowIndexArrayString改变了,并且没有重新加载数据 + // if (AjaxPropertyChanged("SelectedRowIndexArrayString", selectedRowIndexArrayString) && !reloadData) + // { + // AddAjaxPropertyChangedScript(updateSelectRowScript); + // } + + //} + #endregion + + #region old code + + //gridStoreScript += "\r\n"; + //if (EnableClientPaging) + //{ + + // // 进行分页时,改变隐藏input的值,以在回发时保持状态 + // // 同时注意:客户端分页时,清空选中的值 + // JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + // listenersBuilder.AddProperty(OptionName.Load, String.Format("function(store,records,options){{Ext.get('{0}').dom.value=options.params.start;Ext.get('{1}').dom.value='';}}", EnableClientPagingStartRowIndexID, SelectedRowsHiddenFieldID), true); + // storeBuilder.AddProperty("listeners", listenersBuilder); + //} + + // 每次都是加载全部 + //loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:0,limit:" + (endRowIndex - startRowIndex + 1) + "}}"); + + + //// load store + ////string loadStoreScript = String.Empty; + //if (EnableClientPaging) + //{ + // loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:" + EnableClientPagingStartRowIndex + ",limit:" + PageSize + "}}"); + //} + //else + //{ + // loadStoreScript = String.Format("{0}.load({1});", gridStoreId, "{params:{start:0,limit:" + Rows.Count + "}}"); + //} + + //gridStoreScript += loadStoreScript; + #endregion + } + + #region old code + + //private string GetDataArrayString(int startRowIndex, int endRowIndex) + //{ + // // store - data + // JsArrayBuilder dataBuidler = new JsArrayBuilder(); + + // for (int i = startRowIndex; i <= endRowIndex; i++) + // { + // // 当前行 + // GridRow row = Rows[i]; + + // JsArrayBuilder cellBuilder = new JsArrayBuilder(); + // foreach (object obj in row.Values) + // { + // cellBuilder.AddProperty(obj.ToString()); + // } + // dataBuidler.AddProperty(cellBuilder); + // } + + // // 二维数组 + // return dataBuidler.ToString(); + //} + + #endregion + + /// <summary> + /// 当前分页的开始行和结束行 + /// </summary> + /// <returns></returns> + internal void ResolveStartEndRowIndex(out int startRowIndex, out int endRowIndex) + { + startRowIndex = GetStartRowIndex(); + endRowIndex = GetEndRowIndex(); + } + + + /// <summary> + /// 获取当前分页的起始行序号(不分页或者数据库分页时,返回零) + /// </summary> + /// <returns></returns> + public int GetStartRowIndex() + { + int startRowIndex = 0; + + // 如果是内存分页 + if (AllowPaging && !IsDatabasePaging) + { + startRowIndex = PageSize * PageIndex; + } + + return startRowIndex; + } + + /// <summary> + /// 获取当前分页的结束行序号 + /// </summary> + /// <returns></returns> + public int GetEndRowIndex() + { + int endRowIndex = Rows.Count - 1; + + // 内存分页 + if (AllowPaging && !IsDatabasePaging) + { + endRowIndex = (PageIndex + 1) * PageSize - 1; + endRowIndex = (endRowIndex < RecordCount - 1) ? endRowIndex : RecordCount - 1; + } + + return endRowIndex; + } + + /// <summary> + /// 通过行ID获取行对象 + /// </summary> + /// <param name="rowID">行ID</param> + /// <returns>行对象</returns> + public GridRow FindRow(string rowID) + { + GridRow result = null; + + foreach (GridRow row in Rows) + { + if (rowID == row.RowID) + { + result = row; + break; + } + } + + return result; + } + + + /// <summary> + /// 通过行序号获取行对象 + /// </summary> + /// <param name="rowIndex">行序号</param> + /// <returns>行对象</returns> + public GridRow FindRow(int rowIndex) + { + GridRow row = null; + + int startRowIndex = GetStartRowIndex(); + + int currentRowIndex = rowIndex + startRowIndex; + + if (currentRowIndex >= 0 && currentRowIndex < Rows.Count) + { + row = Rows[currentRowIndex]; + } + + return row; + } + + + + #endregion + + #endregion + + #region RenderBeginTag/RenderEndTag + + /// <summary> + /// 渲染开始标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderBeginTag(HtmlTextWriter writer) + { + base.RenderBeginTag(writer); + + writer.Write(String.Format("<div id=\"{0}_tpls\" class=\"f-grid-tpls f-hidden x-grid-tpls\">", ClientID)); + } + + /// <summary> + /// 渲染结束标签 + /// </summary> + /// <param name="writer">输出流</param> + protected override void RenderEndTag(HtmlTextWriter writer) + { + writer.Write("</div>"); + + base.RenderEndTag(writer); + } + + #endregion + + #region UpdateTemplateFields + + + // 在本次回发时,是否需要重新加载数据 + private bool _needReloadData = false; + + + /// <summary> + /// 当在客户端修改了模板列中的值,调用此函数来告诉表格控件需要更新这些值; + /// 如果对表格重新进行了数据绑定,则不需要调用此函数,因为重新绑定后会更新表格的全部内容 + /// </summary> + public void UpdateTemplateFields() + { + _needReloadData = true; + //PageManager.Instance.AddAjaxGridClientID(ClientID); + } + + #endregion + + #region DataBind + + // 当前表格是否调用了 DataBind() 函数 + private bool _dataBinded = false; + + internal Dictionary<string, GridColumn> cellEditingDataKeyNameField = new Dictionary<string, GridColumn>(); + + /// <summary> + /// 绑定到数据源 + /// </summary> + public override void DataBind() + { + //base.DataBind(); + + // 调用了本函数 + _dataBinded = true; + + // 重新绑定数据后,GetMergedData要重新计算了,并且清空已更改数据记录 + _mergedData = null; + + _renderValuesAsJArray = null; + _renderDataKeysAsJArray = null; + + // 如果重新绑定数据,则每行的模版列内容有可能发生变化,就需要更新 + // 因为目前,没有判断模板列是否改变的机制,所以只要可能导致模板列的动作都要更新模板列 + //PageManager.Instance.AddAjaxGridClientID(ClientID); + _needReloadData = true; + + + // 如果重新绑定数据,则取消之前的编辑状态提示 + if (IsFineUIAjaxPostBack && AllowCellEditing) + { + _databindInFineUIAjaxPostBack = true; + } + + + // 如果允许单元格编辑,记录 DataKeyNames 对应的列序号,可能需要用列定义的FieldType + if (AllowCellEditing) + { + cellEditingDataKeyNameField.Clear(); + + if (DataKeyNames != null) + { + List<string> dataKeyNames = new List<string>(DataKeyNames); + foreach (GridColumn field in AllColumns) + { + if (field is RenderBaseField) + { + string dataField = (field as RenderBaseField).DataField; + if (dataKeyNames.Contains(dataField)) + { + if (!cellEditingDataKeyNameField.ContainsKey(dataField)) + { + cellEditingDataKeyNameField.Add(dataField, field); + } + } + } + } + } + } + + // 数据绑定之前要先清空 _dataKeys + _dataKeys = null; + + //if (ClearSelectionsBeforeBinding) + //{ + // 重新绑定数据前清空选中的值 + SelectedRowIndexArray = null; + SelectedCell = null; + //} + + + // 数据绑定之前要先清空现有的数据 + ClearRows(); + + int recordCount = 0; + + if (_dataSource != null) + { + if (_dataSource is IDataReader) + { + DataTable dataTable = new DataTable(); + dataTable.Load(_dataSource as IDataReader); + + recordCount = DataBindToDataTable(dataTable); + } + else if (_dataSource is DataView || _dataSource is DataSet || _dataSource is DataTable) + { + DataTable dataTable = null; + + if (_dataSource is DataView) + { + dataTable = ((DataView)_dataSource).ToTable(); + } + else if (_dataSource is DataSet) + { + dataTable = ((DataSet)_dataSource).Tables[0]; + } + else + { + dataTable = ((DataTable)_dataSource); + } + + recordCount = DataBindToDataTable(dataTable); + } + else if (_dataSource is IEnumerable) + { + recordCount = DataBindToEnumerable((IEnumerable)_dataSource); + } + else + { + throw new Exception("DataSource doesn't support data type: " + _dataSource.GetType().ToString()); + } + } + + AfterDataBind(recordCount); + } + + + private int DataBindToDataTable(DataTable dataTable) + { + BeforeDataBind(); + + int rowIndex = 0, count = dataTable.DefaultView.Count; + for (; rowIndex < count; rowIndex++) + { + DataBindRow(rowIndex, dataTable.DefaultView[rowIndex]); + } + + return rowIndex; + } + + private int DataBindToEnumerable(IEnumerable list) + { + BeforeDataBind(); + + int rowIndex = 0; + + foreach (object rowObj in list) + { + DataBindRow(rowIndex, rowObj); + + rowIndex++; + } + + return rowIndex; + } + + private void DataBindRow(int rowIndex, object rowObj) + { + GridPreRowEventArgs preArgs = new GridPreRowEventArgs(rowObj, rowIndex); + OnPreRowDataBound(preArgs); + + // 事件处理函数要求取消添加本节点 + if (!preArgs.Cancelled) + { + + GridRow row = new GridRow(this, rowObj, rowIndex); + Rows.Add(row); + //Controls.Add(row); + row.InitTemplateContainers(); + + //row.DataBindRow(); + row.DataBindRow(); + + OnRowDataBound(new GridRowEventArgs(row)); + } + } + + private void BeforeDataBind() + { + OnPreDataBound(EventArgs.Empty); + } + + #region AfterDataBind + + private void AfterDataBind(int recordCount) + { + if (!IsDatabasePaging) + { + // 如果不是数据库分页,则每次DataBind都要更新RecordCount的值 + // 数据库分页的话,RecordCount需要用户显式的赋值 + RecordCount = recordCount; + } + + + // 在所有行都绑定结束后,需要检查模拟树显示的列,并重新计算当前列的内容(在列内容前加上树分隔符) + // 1.查找需要模拟树显示的列 + BaseField simulateTreeColumn = null; + foreach (GridColumn gridColumn in AllColumns) + { + BaseField column = gridColumn as BaseField; + if (column != null && !String.IsNullOrEmpty(column.DataSimulateTreeLevelField)) + { + simulateTreeColumn = column; + break; + } + } + + // 2.如果找到这样的列 + if (simulateTreeColumn != null) + { + List<SimulateTreeNode> silumateTree = new List<SimulateTreeNode>(); + + // 存在需要模拟树显示的列 + for (int rowIndex = 0, rowCount = Rows.Count; rowIndex < rowCount; rowIndex++) + { + GridRow row = Rows[rowIndex]; + int level = 0; + object treeLevelObj = row.GetPropertyValue(simulateTreeColumn.DataSimulateTreeLevelField); + if (treeLevelObj != null && treeLevelObj != DBNull.Value) + { + level = Convert.ToInt32(treeLevelObj); + } + + object content = row.Values[simulateTreeColumn.ColumnIndex]; + + SimulateTreeNode node = new SimulateTreeNode(); + node.Text = content.ToString(); + node.Level = level; + node.HasLittleBrother = false; + node.ParentNode = null; + silumateTree.Add(node); + } + + // 计算树 + SimulateTreeHeper treeHelper = new SimulateTreeHeper(); + treeHelper.ResolveSimulateTree(silumateTree, true); + + // 赋值 + for (int rowIndex = 0, rowCount = Rows.Count; rowIndex < rowCount; rowIndex++) + { + Rows[rowIndex].Values[simulateTreeColumn.ColumnIndex] = silumateTree[rowIndex].Text; + } + } + + } + #endregion + + + #region ClearRows + + /// <summary> + /// 清空Rows,同时清除所有子控件中的GridRow控件 + /// </summary> + private void ClearRows() + { + // 清空现有的行 + Rows.Clear(); + + // Grid.Controls 下面包含全部列控件(列控件里面又包含Editor)和全部模板列控件 + // 注意:Editor控件是属于列控件的,而模板列中的控件是输入每一行的模板列控件的! + + // 会重新创建这些控件,所以要先删除之前存在的GridRowControl + for (int i = Controls.Count - 1; i >= 0; i--) + { + if (Controls[i] is GridTemplateContainer) + { + Controls.RemoveAt(i); + } + } + } + + #endregion + + #endregion + + #region GetModifiedCells + + private JArray _mergedData; + + /// <summary> + /// 获取合并后的表格数据(不包含已经删除的行数据)(仅在启用单元格编辑时有效) + /// </summary> + /// <returns>合并后的表格数据</returns> + public JArray GetMergedData() + { + // 不允许单元格编辑,则返回null + if (!AllowCellEditing) + { + return null; + } + + + // 已经计算过了 + if (_mergedData != null) + { + return _mergedData; + } + + + _mergedData = new JArray(); + + // 当前处理的原始索引 + int currentOriginalIndex = GetStartRowIndex(); + + // 没有调用 DataBind 函数,并且前台改变的数据不为空 + if (!_dataBinded && _modifiedData != null) + { + foreach (JObject modifiedItem in _modifiedData) + { + // 修改的数据在新集合中的行索引 + int rowIndex = modifiedItem.Value<int>("index"); // modifiedItem[0].ToObject<int>(); + // 修改的数据在原始集合中的行索引,如果是新增行则小于0 + int originalRowIndex = modifiedItem.Value<int>("originalIndex"); //modifiedItem[1].ToObject<int>(); + string status = modifiedItem.Value<string>("status"); + + + if (status == "newadded") + { + // 新增的行 + _mergedData.Add(modifiedItem.DeepClone()); + } + else + { + // 中间一些原始数据没有变化,这里要添加进来 + if (originalRowIndex > currentOriginalIndex) + { + AddUnchangedData(_mergedData, currentOriginalIndex, originalRowIndex); + } + + + // 删除的行,原始数据行被删除了 + if (status == "deleted") + { + // nothing + } + else + { + // 修改的行 + var currentModifiedItem = modifiedItem.DeepClone(); + JObject currentModifiedValues = currentModifiedItem.Value<JObject>("values"); + var originalValues = Rows[originalRowIndex].Values; + + foreach (GridColumn column in AllColumns) + { + if (column is RenderBaseField) + { + RenderBaseField field = column as RenderBaseField; + if (currentModifiedValues.Property(field.ColumnID) == null) + { + currentModifiedValues.Add(field.ColumnID, JToken.FromObject(originalValues[field.ColumnIndex])); + } + } + } + _mergedData.Add(currentModifiedItem); + } + + + // 原始索引向下移动一位 + currentOriginalIndex = originalRowIndex + 1; + } + } + } + + if (currentOriginalIndex < Rows.Count) + { + AddUnchangedData(_mergedData, currentOriginalIndex, Rows.Count); + } + + return _mergedData; + } + + private void AddUnchangedData(JArray mergedData, int currentOriginalIndex, int originalRowIndex) + { + for (int i = currentOriginalIndex; i < originalRowIndex; i++) + { + // 未改变的行 + var iModifiedItem = new JObject(); + JObject iModifiedValues = new JObject(); + var iRow = Rows[i]; + var iOriginalValues = iRow.Values; + + foreach (GridColumn column in AllColumns) + { + if (column is RenderBaseField) + { + RenderBaseField field = column as RenderBaseField; + iModifiedValues.Add(field.ColumnID, JToken.FromObject(iOriginalValues[field.ColumnIndex])); + } + } + iModifiedItem.Add("values", iModifiedValues); + iModifiedItem.Add("status", "unchanged"); + iModifiedItem.Add("originalIndex", i); + iModifiedItem.Add("index", mergedData.Count); + iModifiedItem.Add("id", iRow.RowID); + mergedData.Add(iModifiedItem); + } + } + + + private JArray _modifiedData = new JArray(); + + /// <summary> + /// 获取用户修改的数据(仅在启用单元格编辑时有效) + /// </summary> + /// <returns></returns> + public JArray GetModifiedData() + { + return _modifiedData; + } + + + //private List<ModifiedCell> _modifiedCells = new List<ModifiedCell>(); + + ///// <summary> + ///// 获取用户修改的单元格,包含新增的数据 + ///// </summary> + ///// <returns></returns> + //internal List<ModifiedCell> GetModifiedCells() + //{ + // return _modifiedCells; + //} + + + private List<int> _deletedList; + + /// <summary> + /// 获取删除的行索引列表(仅在启用单元格编辑时有效) + /// </summary> + /// <returns></returns> + public List<int> GetDeletedList() + { + return _deletedList; + } + + + private List<Dictionary<string, object>> _newAddedList; + + /// <summary> + /// 获取新增的行数据(仅在启用单元格编辑时有效) + /// </summary> + /// <returns></returns> + public List<Dictionary<string, object>> GetNewAddedList() + { + return _newAddedList; + } + + + private Dictionary<int, Dictionary<string, object>> _modifiedDict; + + /// <summary> + /// 获取用户修改的行数据(仅在启用单元格编辑时有效) + /// </summary> + /// <returns></returns> + public Dictionary<int, Dictionary<string, object>> GetModifiedDict() + { + return _modifiedDict; + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + // 由于没有数据改变事件,所以无需处理这里的返回值 + base.LoadPostData(postDataKey, postCollection); + + // 分页 + if (AllowPaging) + { + string pageIndexPostValue = postCollection[PageIndexHiddenFieldID]; + if (!String.IsNullOrEmpty(pageIndexPostValue)) + { + int pageIndexPostValueInt = Convert.ToInt32(pageIndexPostValue); + if (PageIndex != pageIndexPostValueInt) + { + PageIndex = pageIndexPostValueInt; + FState.BackupPostDataProperty("PageIndex"); + + // 如果是内存分页,则需要重新加载表格数据(数据库分页的话,需要手工绑定数据,所以不需要此设置) + if (!IsDatabasePaging) + { + _needReloadData = true; + } + } + } + } + + // 排序 + if (AllowSorting) + { + string sortFieldPostValue = postCollection[SortFieldHiddenFieldID]; + string sortDirectionPostValue = postCollection[SortDirectionHiddenFieldID]; + + if (!String.IsNullOrEmpty(sortFieldPostValue)) + { + // FineUIPro的客户端中,field和columnId是一样的,因此在客户端并不知道 SortField 的值 + GridColumn column = FindColumn(sortFieldPostValue); + if (column != null) + { + // 当前列的排序字段和排序方向 + string sortField = column.SortField; + + if (SortField != sortField) + { + SortField = sortField; + FState.BackupPostDataProperty("SortField"); + } + + if (SortDirection != sortDirectionPostValue) + { + SortDirection = sortDirectionPostValue; + FState.BackupPostDataProperty("SortDirection"); + } + } + } + } + + + + string paramHiddenColumns = postCollection[HiddenColumnsHiddenFieldID]; + List<string> hiddenColumnsList = new List<string>(); + if (!String.IsNullOrEmpty(paramHiddenColumns)) + { + hiddenColumnsList = StringUtil.GetStringListFromString(paramHiddenColumns, true); + } + string[] hiddenColumns = hiddenColumnsList.ToArray(); + if (!StringUtil.CompareStringArray(HiddenColumns, hiddenColumns)) + { + HiddenColumns = hiddenColumns; + FState.BackupPostDataProperty("HiddenColumns"); + } + + + // 列状态(目前只有CheckBoxField用到) + String statesStr = postCollection[StatesHiddenFieldID]; + if (!String.IsNullOrEmpty(statesStr)) + { + JArray states = JArray.Parse(statesStr); + if (states.Count > 0) + { + int startRowIndex, endRowIndex; + ResolveStartEndRowIndex(out startRowIndex, out endRowIndex); + for (int i = startRowIndex; i <= endRowIndex; i++) + { + int index = i - startRowIndex; + + Rows[i].FromShortStates(states[index].ToObject<List<object>>().ToArray()); + } + FState.BackupPostDataProperty("F_Rows"); + } + } + + + // 启用单元格编辑 + if (AllowCellEditing) + { + //// 删除的行索引列表 + //string paramDeletedRows = postCollection[DeletedRowsHiddenFieldID]; + //_deletedList = new List<int>(); + //if (!String.IsNullOrEmpty(paramDeletedRows)) + //{ + // _deletedList = StringUtil.GetIntListFromString(paramDeletedRows, true); + //} + + //// 新增的行索引列表 + //string paramNewAddedRows = postCollection[NewAddedRowsHiddenFieldID]; + //List<int> newAddedRows = new List<int>(); + //if (!String.IsNullOrEmpty(paramNewAddedRows)) + //{ + // newAddedRows = StringUtil.GetIntListFromString(paramNewAddedRows, true); + //} + + List<string> dataKeyNames = null; + if (DataKeyNames != null) + { + dataKeyNames = new List<string>(DataKeyNames); + } + + // 修改的单元格 + _deletedList = new List<int>(); + _modifiedDict = new Dictionary<int, Dictionary<string, object>>(); + _newAddedList = new List<Dictionary<string, object>>(); + _modifiedData = new JArray(); + String editorDataStr = postCollection[ModifiedDataHiddenFieldID]; + if (!String.IsNullOrEmpty(editorDataStr)) + { + _modifiedData = JArray.Parse(editorDataStr); + + foreach (JObject modifiedItem in _modifiedData) + { + // 修改的数据在新集合中的行索引 + int rowIndex = modifiedItem.Value<int>("index"); // modifiedItem[0].ToObject<int>(); + // 修改的数据在原始集合中的行索引,如果是新增行则小于0 + int originalRowIndex = modifiedItem.Value<int>("originalIndex"); //modifiedItem[1].ToObject<int>(); + string status = modifiedItem.Value<string>("status"); + + if (status == "deleted") + { + // 删除的行 + _deletedList.Add(originalRowIndex); + continue; + } + + + // 获取本行(Record)中所有修改的记录(Field),并保存到字典中(rowModifiedDic) + Dictionary<string, object> rowModifiedDic = new Dictionary<string, object>(); + + JObject rowModifiedData = modifiedItem.Value<JObject>("values"); //modifiedItem[2].ToObject<JObject>(); + foreach (JProperty propertyObj in rowModifiedData.Properties()) + { + string columnID = propertyObj.Name; + object cellValue = rowModifiedData.Value<JValue>(columnID).Value; + // 启用单元格编辑,所以这里的列一定是RenderBaseField + GridColumn column = FindColumn(columnID); + int columnIndex = column.ColumnIndex; + + if (column is RenderField) + { + RenderField renderColumn = column as RenderField; + + // 数字类型的列,如果值为 空字符串,则更新为 null + if (renderColumn.FieldType == FieldType.Int || + renderColumn.FieldType == FieldType.Float || + renderColumn.FieldType == FieldType.Double) + { + if (cellValue.Equals(String.Empty)) + { + cellValue = DBNull.Value; + } + } + } + + rowModifiedDic.Add(columnID, cellValue); + + // v6.0.0 - 回发时不会改变行的Values和DataKeys属性,如果数据变化需要重新绑定 + //// 更新Values和DataKeys - 虽然本次回发可能不保存单元格的值,但是通过到服务器端也没什么错 + //// 注意:删除行和新增行都无法同步到Values和DataKeys,必须重新DataBind才行 + //// 如果本行已经存在,还需要更新行的Values属性 + //if (status == "modified") + //{ + // // 更新行的Values + // Rows[originalRowIndex].Values[columnIndex] = cellValue; + + // // 更新行的DataKeys + // if (dataKeyNames != null) + // { + // RenderBaseField renderField = column as RenderBaseField; + // if (renderField != null) + // { + // int dataKeyIndex = dataKeyNames.IndexOf(renderField.DataField); + // if (dataKeyIndex >= 0) + // { + // Rows[originalRowIndex].DataKeys[dataKeyIndex] = cellValue; + // } + // } + // } + //} + + + } + + if (status == "modified") + { + // 已经存在的行 + _modifiedDict.Add(originalRowIndex, rowModifiedDic); + } + else + { + // 新增行 + _newAddedList.Add(rowModifiedDic); + } + } + + + //修改行、删除行、者新增行,都不会修改Values和DataKeys,所以无需备份F_Rows。需要重新绑定表格数据 + //FState.BackupPostDataProperty("F_Rows"); + /* + foreach (JArray modifiedItem in _modifiedData) + { + // 修改的数据在新集合中的行索引 + int rowIndex = modifiedItem[0].ToObject<int>(); + // 修改的数据在原始集合中的行索引,如果是新增行则为-1 + int originalRowIndex = modifiedItem[1].ToObject<int>(); + + + // 获取本行(Record)中所有修改的记录(Field),并保存到字典中(rowModifiedDic) + Dictionary<string, object> rowModifiedDic = new Dictionary<string, object>(); + JObject rowModifiedData = modifiedItem[2].ToObject<JObject>(); + foreach (JProperty propertyObj in rowModifiedData.Properties()) + { + string columnID = propertyObj.Name; + object cellValue = rowModifiedData.Value<JValue>(columnID).Value; + GridColumn column = FindColumn(columnID); + int columnIndex = column.ColumnIndex; + + //string newCellValue = cellValue.ToString(); + + rowModifiedDic.Add(columnID, cellValue); + + // 如果本行不是新增的,还需要更新行的Values属性 + if (originalRowIndex >= 0) + { + // 更新行的Values + Rows[originalRowIndex].Values[columnIndex] = cellValue; + + // 更新行的DataKeys + if (dataKeyNames != null) + { + RenderBaseField renderField = column as RenderBaseField; + if (renderField != null) + { + int dataKeyIndex = dataKeyNames.IndexOf(renderField.DataField); + if (dataKeyIndex >= 0) + { + Rows[originalRowIndex].DataKeys[dataKeyIndex] = cellValue; + } + } + } + } + } + + if (originalRowIndex >= 0) + { + // 已经存在的行 + _modifiedDict.Add(originalRowIndex, rowModifiedDic); + } + else + { + // 新增行 + _newAddedList.Add(rowModifiedDic); + } + + } + + FState.BackupPostDataProperty("F_Rows"); + */ + } + + + //// 选中的单元格(数组中元素的顺序是固定的,不能排序) + //int[] selectedCell = StringUtil.GetIntListFromString(postCollection[SelectedCellHiddenFieldID], false).ToArray(); + //if (!StringUtil.CompareIntArray(SelectedCell, selectedCell)) + //{ + // SelectedCell = selectedCell; + // FState.BackupPostDataProperty("SelectedCell"); + //} + + // 客户端传入的是 [rowid, columnid] + string[] selectedCell = null; + string selectedCellPostValue = postCollection[SelectedCellHiddenFieldID]; + if (!String.IsNullOrEmpty(selectedCellPostValue)) + { + selectedCell = JSONUtil.StringArrayFromJArray(JArray.Parse(selectedCellPostValue)); + } + // 比较时要保持顺序 + if (!StringUtil.CompareStringArray(SelectedCell, selectedCell, true)) + { + SelectedCell = selectedCell; + FState.BackupPostDataProperty("SelectedCell"); + } + + } + else + { + + // 选中的行 + //int[] selectedRowIndexArray = StringUtil.GetIntListFromString(postCollection[SelectedRowIndexArrayHiddenFieldID], true).ToArray(); + //if (!StringUtil.CompareIntArray(SelectedRowIndexArray, selectedRowIndexArray)) + //{ + // SelectedRowIndexArray = selectedRowIndexArray; + // FState.BackupPostDataProperty("SelectedRowIndexArray"); + //} + + string[] selectedRows = null; + string selectedRowsPostValue = postCollection[SelectedRowsHiddenFieldID]; + if (!String.IsNullOrEmpty(selectedRowsPostValue)) + { + selectedRows = JSONUtil.StringArrayFromJArray(JArray.Parse(selectedRowsPostValue)); + } + if (!StringUtil.CompareStringArray(SelectedRowIDArray, selectedRows)) + { + SelectedRowIDArray = selectedRows; + FState.BackupPostDataProperty("SelectedRowIDArray"); + } + + } + + + + return false; + } + + + + //public override void RaisePostDataChangedEvent() + //{ + // //OnCollapsedChanged(EventArgs.Empty); + //} + + #endregion + + #region CommitChanges/RejectChanges/ClearSelections/AddNewRecord + + /// <summary> + /// 接受用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) + /// </summary> + public void CommitChanges() + { + PageContext.RegisterStartupScript(GetCommitChangesReference()); + } + + /// <summary> + /// 获取接受用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) + /// </summary> + /// <returns>客户端脚本</returns> + public string GetCommitChangesReference() + { + return String.Format("{0}.f_commitChanges();", ScriptID); + } + + + /// <summary> + /// 拒绝用户编辑单元格(同时消除编辑单元格左上方的红色提示图标) + /// </summary> + public void RejectChanges() + { + PageContext.RegisterStartupScript(GetRejectChangesReference()); + } + + /// <summary> + /// 获取拒绝用户编辑单元格的客户端脚本(同时消除编辑单元格左上方的红色提示图标) + /// </summary> + public string GetRejectChangesReference() + { + return String.Format("{0}.getStore().rejectChanges();", ScriptID); + } + + + /// <summary> + /// 清空表格选中项 + /// </summary> + public void ClearSelections() + { + PageContext.RegisterStartupScript(GetClearSelectionsReference()); + } + + /// <summary> + /// 获取清空表格选中项的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetClearSelectionsReference() + { + return String.Format("{0}.f_clearSelections();", ScriptID); + } + + /// <summary> + /// 添加一条新纪录 + /// </summary> + /// <param name="defaultObject">缺省值</param> + public void AddNewRecord(JObject defaultObject) + { + PageContext.RegisterStartupScript(GetAddNewRecordReference(defaultObject)); + } + + /// <summary> + /// 添加一条新纪录 + /// </summary> + /// <param name="defaultObject">缺省值</param> + /// <param name="appendToEnd">是否添加到末尾</param> + public void AddNewRecord(JObject defaultObject, bool appendToEnd) + { + PageContext.RegisterStartupScript(GetAddNewRecordReference(defaultObject, appendToEnd)); + } + + + /// <summary> + /// 添加一条新纪录 + /// </summary> + /// <param name="defaultObject">缺省值</param> + /// <param name="appendToEnd">是否添加到末尾</param> + /// <param name="editColumnID">添加后使某列处于编辑状态</param> + public void AddNewRecord(JObject defaultObject, bool appendToEnd, string editColumnID) + { + PageContext.RegisterStartupScript(GetAddNewRecordReference(defaultObject, appendToEnd, editColumnID)); + } + + + /// <summary> + /// 获取添加一条新纪录的客户端脚本 + /// </summary> + /// <param name="defaultObject">缺省值</param> + /// <returns>客户端脚本</returns> + public string GetAddNewRecordReference(JObject defaultObject) + { + return GetAddNewRecordReference(defaultObject, false); + } + + + /// <summary> + /// 获取添加一条新纪录的客户端脚本 + /// </summary> + /// <param name="defaultObject">缺省值</param> + /// <param name="appendToEnd">是否添加到末尾</param> + /// <returns>客户端脚本</returns> + public string GetAddNewRecordReference(JObject defaultObject, bool appendToEnd) + { + return GetAddNewRecordReference(defaultObject, appendToEnd, null); + } + + + /// <summary> + /// 获取添加一条新纪录的客户端脚本 + /// </summary> + /// <param name="defaultObject">缺省值</param> + /// <param name="appendToEnd">是否添加到末尾</param> + /// <param name="editColumnID">添加后使某列处于编辑状态</param> + /// <returns>客户端脚本</returns> + public string GetAddNewRecordReference(JObject defaultObject, bool appendToEnd, string editColumnID) + { + string objstr = defaultObject.ToString(Formatting.None); + string appendstr = appendToEnd.ToString().ToLower(); + + if (String.IsNullOrEmpty(editColumnID)) + { + return String.Format("{0}.f_addNewRecord({1},{2});", ScriptID, objstr, appendstr); + } + else + { + return String.Format("{0}.f_addNewRecord({1},{2},{3});", ScriptID, objstr, appendstr, JsHelper.Enquote(editColumnID)); + } + } + + ///// <summary> + ///// 获取添加一条新纪录的客户端脚本 + ///// </summary> + ///// <param name="defaultObject">缺省值</param> + ///// <param name="appendToEnd">是否添加到末尾</param> + ///// <returns>客户端脚本</returns> + //public string GetAddNewRecordReference(JObject defaultObject, bool appendToEnd) + //{ + // return String.Format("{0}.f_addNewRecord({1},{2});", ScriptID, defaultObject.ToString(Formatting.None), appendToEnd.ToString().ToLower()); + //} + + + ///// <summary> + ///// 删除选中行(或者单元格) + ///// </summary> + //public void DeleteSelected() + //{ + // PageContext.RegisterStartupScript(GetDeleteSelectedReference()); + //} + + ///// <summary> + ///// 获取删除选中行(或者单元格)的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //public string GetDeleteSelectedReference() + //{ + // return String.Format("{0}.f_deleteSelected();", ScriptID); + //} + + + /// <summary> + /// 删除选中行(或者单元格) + /// </summary> + [Obsolete("请使用DeleteSelectedRows")] + public void DeleteSelected() + { + PageContext.RegisterStartupScript(GetDeleteSelectedRowsReference()); + } + + + /// <summary> + /// 获取删除选中行(或者单元格)的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + [Obsolete("请使用GetDeleteSelectedRowsReference")] + public string GetDeleteSelectedReference() + { + return GetDeleteSelectedRowsReference(); + } + + + /// <summary> + /// 删除选中行(或者单元格) + /// </summary> + public void DeleteSelectedRows() + { + PageContext.RegisterStartupScript(GetDeleteSelectedRowsReference()); + } + + /// <summary> + /// 获取删除选中行(或者单元格)的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetDeleteSelectedRowsReference() + { + return String.Format("{0}.f_deleteSelectedRows();", ScriptID); + } + + + #endregion + + #region GetHasSelectionReference GetSelectCountReference + + + + /// <summary> + /// 获取表格是否有选中项的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHasSelectionReference() + { + return String.Format("{0}.getSelectionModel().hasSelection()", ScriptID); + } + + ///// <summary> + ///// 获取表格选中项数的客户端脚本 + ///// </summary> + ///// <returns>客户端脚本</returns> + //[Obsolete("此方法已废除,请使用GetSelectedCountReference方法")] + //public string GetSelectCountReference() + //{ + // return GetSelectedCountReference(); + //} + + /// <summary> + /// 获取表格选中项数的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetSelectedCountReference() + { + return String.Format("{0}.f_getSelectedCount()", ScriptID); + } + + /// <summary> + /// 获取表格选中单元格的客户端脚本(仅用于AllowCellEditing模式) + /// </summary> + /// <returns>客户端脚本</returns> + public string GetSelectedCellReference() + { + return String.Format("{0}.f_getSelectedCell()", ScriptID); + } + + + + #endregion + + #region GetNoSelectionAlertReference GetNoSelectionAlertInParentReference + + /// <summary> + /// 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertReference(string message) + { + return GetNoSelectionAlertReference(message, String.Empty, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertReference(string message, string title) + { + return GetNoSelectionAlertReference(message, title, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在本窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertReference(string message, string title, MessageBoxIcon icon) + { + return String.Format("if(!{0}){{{1}return false;}}", GetHasSelectionReference(), Alert.GetShowReference(message, title, icon)); + } + + + /// <summary> + /// 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInParentReference(string message) + { + return GetNoSelectionAlertInParentReference(message, String.Empty, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInParentReference(string message, string title) + { + return GetNoSelectionAlertInParentReference(message, title, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在父级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInParentReference(string message, string title, MessageBoxIcon icon) + { + return String.Format("if(!{0}){{{1}return false;}}", GetHasSelectionReference(), Alert.GetShowInParentReference(message, title, icon)); + } + + /// <summary> + /// 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInTopReference(string message) + { + return GetNoSelectionAlertInTopReference(message, String.Empty, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInTopReference(string message, string title) + { + return GetNoSelectionAlertInTopReference(message, title, Alert.DefaultMessageBoxIcon); + } + + /// <summary> + /// 获取表格没有任何选中项时在顶级窗口弹出提示对话框的客户端脚本 + /// </summary> + /// <param name="message">对话框消息</param> + /// <param name="title">对话框标题</param> + /// <param name="icon">对话框图标</param> + /// <returns>客户端脚本</returns> + public string GetNoSelectionAlertInTopReference(string message, string title, MessageBoxIcon icon) + { + return String.Format("if(!{0}){{{1}return false;}}", GetHasSelectionReference(), Alert.GetShowInTopReference(message, title, icon)); + } + #endregion + + #region FindColumn/SelectAllRows + + /// <summary> + /// 通过列ID获取列实例 + /// </summary> + /// <param name="columnID">列ID</param> + /// <returns>列实例</returns> + public GridColumn FindColumn(string columnID) + { + foreach (GridColumn column in AllColumns) + { + if (column.ColumnID == columnID) + { + return column; + } + } + + return null; + } + + /// <summary> + /// 通过列索引获取列实例 + /// </summary> + /// <param name="columnIndex">列索引</param> + /// <returns>列实例</returns> + public GridColumn FindColumn(int columnIndex) + { + return AllColumns[columnIndex]; + } + + + /// <summary> + /// 选中所有行(设置SelectedRowIndexArray属性) + /// </summary> + public void SelectAllRows() + { + /* + List<int> rowIndexs = new List<int>(); + for (int i = 0; i < Rows.Count; i++) + { + rowIndexs.Add(i); + } + SelectedRowIndexArray = rowIndexs.ToArray(); + */ + + PageContext.RegisterStartupScript(String.Format("{0}.f_selectAllRows();", ScriptID)); + } + + /// <summary> + /// 展开全部的行扩展列 + /// </summary> + public void ExpandRowExpanders() + { + _registerScriptRowExpanders = true; + + ExpandAllRowExpanders = true; + //PageContext.RegisterStartupScript(String.Format("{0}.f_expandAllRows();", ScriptID)); + } + + /// <summary> + /// 折叠全部的行扩展列 + /// </summary> + public void CollapseRowExpanders() + { + _registerScriptRowExpanders = true; + + ExpandAllRowExpanders = false; + //PageContext.RegisterStartupScript(String.Format("{0}.f_collapseAllRows();", ScriptID)); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public override void RaisePostBackEvent(string eventArgument) + { + base.RaisePostBackEvent(eventArgument); + + //if (eventArgument.StartsWith("Sort$")) + //{ + // string[] sortArgs = eventArgument.Split('$'); + // if (sortArgs.Length == 3) + // { + // // 格式为 "Sort$Grid1_ctl03$ASC" + // string sortDir = sortArgs[2]; + // string columnId = sortArgs[1]; + + // int columnIndex = 0; + // foreach (GridColumn column in AllColumns) + // { + // if (column.ColumnID == columnId) + // { + // break; + // } + // columnIndex++; + // } + + // // 当前列的排序字段和排序方向 + // string sortField = AllColumns[columnIndex].SortField; + // string sortDirection = sortDir.ToUpper() == "ASC" ? "ASC" : "DESC"; + + // SortDirection = sortDirection; + // SortField = sortField; + + // OnSort(new GridSortEventArgs(sortField, sortDirection, columnIndex)); + // } + + //} + if (eventArgument.StartsWith("Sort$")) + { + string[] sortArgs = eventArgument.Split('$'); + + if (sortArgs.Length == 3) + { + // 格式为 "Sort$Grid1_ctl03$ASC" + string sortDirection = sortArgs[2]; + string columnID = sortArgs[1]; + + GridColumn column = FindColumn(columnID); + if (column != null) + { + // 当前列的排序字段和排序方向 + string sortField = column.SortField; + + SortDirection = sortDirection; + SortField = sortField; + + OnSort(new GridSortEventArgs(sortField, sortDirection, column.ColumnIndex, columnID)); + } + } + + } + //else if (eventArgument.StartsWith("Command$")) + //{ + // string[] commandArgs = eventArgument.Split('$'); + // if (commandArgs.Length == 5) + // { + // OnRowCommand(new GridCommandEventArgs(Convert.ToInt32(commandArgs[1]), Convert.ToInt32(commandArgs[2]), commandArgs[3], commandArgs[4])); + // } + //} + else if (eventArgument.StartsWith("Command$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 5) + { + string rowID = commandArgs[1]; + GridRow row = FindRow(rowID); + + int rowIndex = -1; // -1 表示新增行 + if (row != null) + { + rowIndex = row.RowIndex; // -GetStartRowIndex(); + } + + string columnID = commandArgs[2]; + GridColumn column = FindColumn(columnID); + + OnRowCommand(new GridCommandEventArgs(rowIndex, rowID, column.ColumnIndex, columnID, commandArgs[3], commandArgs[4])); + + } + } + else if (eventArgument.StartsWith("Page$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 3) + { + int newPageIndex = Convert.ToInt32(commandArgs[1]); + int oldPageIndex = Convert.ToInt32(commandArgs[2]); + + OnPageIndexChange(new GridPageEventArgs(newPageIndex, oldPageIndex)); + + //if (ClearSelectedRowsAfterPaging) + //{ + // // 分页后清空选中的值 + // // 因为内存分页时不会重新绑定数据(数据库分页才会重新绑定数据,所以数据库分页时自然会清空选中的行) + // // 所以需要一个设置,在分页结束后自动清空选中的行 + // SelectedRowIndexArray = null; + // SelectedCell = null; + //} + + } + } + //else if (eventArgument.StartsWith("RowClick$")) + //{ + // string[] commandArgs = eventArgument.Split('$'); + // if (commandArgs.Length == 2) + // { + // int rowIndex = Convert.ToInt32(commandArgs[1]); + + // // 内存分页 + // if (AllowPaging && !IsDatabasePaging) + // { + // rowIndex += PageSize * PageIndex; + // } + + // OnRowClick(new GridRowClickEventArgs(rowIndex)); + // } + //} + //else if (eventArgument.StartsWith("RowDoubleClick$")) + //{ + // string[] commandArgs = eventArgument.Split('$'); + // if (commandArgs.Length == 2) + // { + // int rowIndex = Convert.ToInt32(commandArgs[1]); + + // // 内存分页 + // if (AllowPaging && !IsDatabasePaging) + // { + // rowIndex += PageSize * PageIndex; + // } + + // OnRowDoubleClick(new GridRowClickEventArgs(rowIndex)); + // } + //} + else if (eventArgument.StartsWith("RowClick$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + string rowID = commandArgs[1]; + GridRow row = FindRow(rowID); + int rowIndex = -1; // -1 表示新增行 + if (row != null) + { + rowIndex = row.RowIndex; // -GetStartRowIndex(); + } + + OnRowClick(new GridRowClickEventArgs(rowIndex, rowID)); + + } + } + else if (eventArgument.StartsWith("RowDoubleClick$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + string rowID = commandArgs[1]; + GridRow row = FindRow(rowID); + int rowIndex = -1; // -1 表示新增行 + if (row != null) + { + rowIndex = row.RowIndex; // -GetStartRowIndex(); + } + + OnRowDoubleClick(new GridRowClickEventArgs(rowIndex, rowID)); + + } + } + else if (eventArgument.StartsWith("RowSelect$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + string rowID = commandArgs[1]; + GridRow row = FindRow(rowID); + int rowIndex = -1; // -1 表示新增行 + if (row != null) + { + rowIndex = row.RowIndex; // -GetStartRowIndex(); + } + + OnRowSelect(new GridRowSelectEventArgs(rowIndex, rowID)); + } + } + else if (eventArgument.StartsWith("RowDeselect$")) + { + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 2) + { + string rowID = commandArgs[1]; + GridRow row = FindRow(rowID); + int rowIndex = -1; // -1 表示新增行 + if (row != null) + { + rowIndex = row.RowIndex; // -GetStartRowIndex(); + } + + OnRowDeselect(new GridRowSelectEventArgs(rowIndex, rowID)); + } + } + else if (eventArgument.StartsWith("AfterEdit$")) + { + //string[] commandArgs = eventArgument.Split('$'); + //if (commandArgs.Length == 3) + //{ + // int rowIndex = Convert.ToInt32(commandArgs[1]); + + // // 内存分页 + // if (AllowPaging && !IsDatabasePaging) + // { + // rowIndex += PageSize * PageIndex; + // } + + // OnAfterEdit(new GridAfterEditEventArgs(rowIndex, commandArgs[2].ToString())); + //} + string[] commandArgs = eventArgument.Split('$'); + if (commandArgs.Length == 3) + { + string rowID = commandArgs[1]; + GridRow row = FindRow(rowID); + int rowIndex = -1; // -1 表示新增行 + if (row != null) + { + rowIndex = row.RowIndex; // -GetStartRowIndex(); + } + + string columnID = commandArgs[2]; + GridColumn column = FindColumn(columnID); + + OnAfterEdit(new GridAfterEditEventArgs(rowIndex, rowID, column.ColumnIndex, columnID)); + } + } + } + + /// <summary> + /// 获取Columns前面的列(比如索引列,选择框列) + /// </summary> + /// <returns></returns> + private int GetPrefixColumnNumber() + { + int prefix = 0; + //if (EnableRowNumber) + //{ + // prefix++; + //} + + //if (EnableCheckBoxSelect && !AllowCellEditing) + //{ + // prefix++; + //} + return prefix; + } + + #endregion + + #region OnSort + + private static readonly object _sortHandlerKey = new object(); + + /// <summary> + /// 排序事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("排序事件")] + public event EventHandler<GridSortEventArgs> Sort + { + add + { + Events.AddHandler(_sortHandlerKey, value); + } + remove + { + Events.RemoveHandler(_sortHandlerKey, value); + } + } + + /// <summary> + /// 触发排序事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnSort(GridSortEventArgs e) + { + EventHandler<GridSortEventArgs> handler = Events[_sortHandlerKey] as EventHandler<GridSortEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnPreDataBound + + private static readonly object _preDataBoundHandlerKey = new object(); + + /// <summary> + /// 绑定前事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("绑定前事件")] + public event EventHandler<EventArgs> PreDataBound + { + add + { + Events.AddHandler(_preDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_preDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发绑定前事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPreDataBound(EventArgs e) + { + EventHandler<EventArgs> handler = Events[_preDataBoundHandlerKey] as EventHandler<EventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnPreRowDataBound + + private static readonly object _preRowDataBoundHandlerKey = new object(); + + /// <summary> + /// 行绑定前事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行绑定前事件")] + public event EventHandler<GridPreRowEventArgs> PreRowDataBound + { + add + { + Events.AddHandler(_preRowDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_preRowDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发行绑定前事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPreRowDataBound(GridPreRowEventArgs e) + { + EventHandler<GridPreRowEventArgs> handler = Events[_preRowDataBoundHandlerKey] as EventHandler<GridPreRowEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowDataBound + + private static readonly object _rowDataBoundHandlerKey = new object(); + + /// <summary> + /// 行绑定后事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行绑定后事件")] + public event EventHandler<GridRowEventArgs> RowDataBound + { + add + { + Events.AddHandler(_rowDataBoundHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowDataBoundHandlerKey, value); + } + } + + /// <summary> + /// 触发行绑定后事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowDataBound(GridRowEventArgs e) + { + EventHandler<GridRowEventArgs> handler = Events[_rowDataBoundHandlerKey] as EventHandler<GridRowEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowCommand + + private static readonly object _rowCommandHandlerKey = new object(); + + /// <summary> + /// 行内事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行内事件")] + public event EventHandler<GridCommandEventArgs> RowCommand + { + add + { + Events.AddHandler(_rowCommandHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowCommandHandlerKey, value); + } + } + + /// <summary> + /// 触发行内事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowCommand(GridCommandEventArgs e) + { + EventHandler<GridCommandEventArgs> handler = Events[_rowCommandHandlerKey] as EventHandler<GridCommandEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnPageIndexChange + + private static readonly object _pageIndexChangeHandlerKey = new object(); + + /// <summary> + /// 页索引改变事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("页索引改变事件")] + public event EventHandler<GridPageEventArgs> PageIndexChange + { + add + { + Events.AddHandler(_pageIndexChangeHandlerKey, value); + } + remove + { + Events.RemoveHandler(_pageIndexChangeHandlerKey, value); + } + } + + /// <summary> + /// 触发页索引改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnPageIndexChange(GridPageEventArgs e) + { + EventHandler<GridPageEventArgs> handler = Events[_pageIndexChangeHandlerKey] as EventHandler<GridPageEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowClick + + private static readonly object _rowClickHandlerKey = new object(); + + /// <summary> + /// 行点击事件(需要启用EnableRowClick) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行点击事件(需要启用EnableRowClick)")] + public event EventHandler<GridRowClickEventArgs> RowClick + { + add + { + Events.AddHandler(_rowClickHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowClickHandlerKey, value); + } + } + + /// <summary> + /// 触发行点击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowClick(GridRowClickEventArgs e) + { + EventHandler<GridRowClickEventArgs> handler = Events[_rowClickHandlerKey] as EventHandler<GridRowClickEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowDoubleClick + + private static readonly object _rowDoubleClickHandlerKey = new object(); + + /// <summary> + /// 行双击事件(需要启用EnableRowDoubleClick) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行双击事件(需要启用EnableRowDoubleClick)")] + public event EventHandler<GridRowClickEventArgs> RowDoubleClick + { + add + { + Events.AddHandler(_rowDoubleClickHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowDoubleClickHandlerKey, value); + } + } + + /// <summary> + /// 触发行双击事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowDoubleClick(GridRowClickEventArgs e) + { + EventHandler<GridRowClickEventArgs> handler = Events[_rowDoubleClickHandlerKey] as EventHandler<GridRowClickEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowSelect + + private static readonly object _rowSelectHandlerKey = new object(); + + /// <summary> + /// 行选中事件(需要启用EnableRowSelect) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行选中事件(需要启用EnableRowSelect)")] + public event EventHandler<GridRowSelectEventArgs> RowSelect + { + add + { + Events.AddHandler(_rowSelectHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowSelectHandlerKey, value); + } + } + + /// <summary> + /// 触发行选中事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowSelect(GridRowSelectEventArgs e) + { + EventHandler<GridRowSelectEventArgs> handler = Events[_rowSelectHandlerKey] as EventHandler<GridRowSelectEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnRowDeselect + + private static readonly object _rowDeselectHandlerKey = new object(); + + /// <summary> + /// 行取消选中事件(需要启用EnableRowDeselect) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("行取消选中事件(需要启用EnableRowDeselect)")] + public event EventHandler<GridRowSelectEventArgs> RowDeselect + { + add + { + Events.AddHandler(_rowDeselectHandlerKey, value); + } + remove + { + Events.RemoveHandler(_rowDeselectHandlerKey, value); + } + } + + /// <summary> + /// 触发行取消选中事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnRowDeselect(GridRowSelectEventArgs e) + { + EventHandler<GridRowSelectEventArgs> handler = Events[_rowDeselectHandlerKey] as EventHandler<GridRowSelectEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region OnAfterEdit + + private static readonly object _afterEditHandlerKey = new object(); + + /// <summary> + /// 结束编辑事件(需要启用EnableAfterEditEvent) + /// </summary> + [Category(CategoryName.ACTION)] + [Description("结束编辑事件(需要启用EnableAfterEditEvent)")] + public event EventHandler<GridAfterEditEventArgs> AfterEdit + { + add + { + Events.AddHandler(_afterEditHandlerKey, value); + } + remove + { + Events.RemoveHandler(_afterEditHandlerKey, value); + } + } + + /// <summary> + /// 触发结束编辑事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnAfterEdit(GridAfterEditEventArgs e) + { + EventHandler<GridAfterEditEventArgs> handler = Events[_afterEditHandlerKey] as EventHandler<GridAfterEditEventArgs>; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region LoadControlState/SaveControlState + + // LoadControlState 处于 Page_Init 之后,控件的 LoadPostData 之前 + // 1. Page_Init 之后,才能保证动态添加的 Columns 存在 + // 2. LoadPostData 之前,才能保证模板列中的输入控件得到用户输入的值 + /// <summary> + /// 装载控件状态 + /// </summary> + /// <param name="savedState"></param> + protected override void LoadControlState(object savedState) + { + base.LoadControlState(((Pair)savedState).First); + + // 页面回发时,重新初始化每行中的模板列控件 + if (Page.IsPostBack) + { + foreach (GridRow row in Rows) + { + row.InitTemplateContainers(); + } + } + } + + // 必须添加值之后,才会在回发时走到 LoadViewState + // 使用ControlState而不是ViewState还有一个好处是,ControlState不可被用户关闭 + /// <summary> + /// 保存控件状态 + /// </summary> + /// <returns></returns> + protected override object SaveControlState() + { + return new Pair(base.SaveControlState(), ""); + + } + + /// <summary> + /// 初始化 + /// </summary> + /// <param name="e"></param> + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + Page.RegisterRequiresControlState(this); + } + + + + #endregion + + #region old code + + //protected override void OnPreLoad(object sender, EventArgs e) + //{ + // base.OnPreLoad(sender, e); + + // SaveAjaxProperty("GridColumnScript", GetGridColumnScript()); + // if (AllowSorting) + // { + // SaveAjaxProperty("SortIconScript", GetSortIconScript()); + // } + + // if (AllowPaging) + // { + // JsObjectBuilder pagingBuilder; + // SaveAjaxProperty("TempPagingString", GetTempPagingString(out pagingBuilder)); + // } + + // int startRowIndex; + // int endRowIndex; + // SaveAjaxProperty("DataArrayString", GetDataArrayString(out startRowIndex, out endRowIndex)); + + // SelectedRowIndexArray = ResolveSelectedRowIndexArray(SelectedRowIndexArray, endRowIndex - startRowIndex); + // SaveAjaxProperty("SelectedRowIndexArrayString", StringUtil.GetStringFromIntArray(SelectedRowIndexArray)); + + //} + + #endregion + + #region old code + + //protected override object SaveViewState() + //{ + // object[] states = new object[] { base.SaveViewState(), + // ((IStateManager)Columns).SaveViewState(), + // ((IStateManager)Rows).SaveViewState(), + // //((IStateManager)Toolbar).SaveViewState() + // }; + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Columns).LoadViewState(states[1]); + + // ((IStateManager)Rows).LoadViewState(states[2]); + + // //((IStateManager)Toolbar).LoadViewState(states[3]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Columns).TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + + // //((IStateManager)Toolbar).TrackViewState(); + //} + + #endregion + + #region old code + + //public override void RenderBeginTag(HtmlTextWriter writer) + //{ + // base.RenderBeginTag(writer); + + // //// 当前选中的哪些行的数据 + // //writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // // SelectedRowsHiddenFieldID, GetSelectedRowIndexArrayHTML())); + + // ////// 如果启用客户端排序,需要在回发时记录当前所在的第几页 + // ////if (EnableClientPaging) + // ////{ + // //// writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // //// EnableClientPagingStartRowIndexID, EnableClientPagingStartRowIndex)); + // ////} + + // //// 有这些列需要保存状态 + // //if (NeedPersistStateColumnIndexArray != null && NeedPersistStateColumnIndexArray.Length > 0) + // //{ + // // foreach (int columnIndex in NeedPersistStateColumnIndexArray) + // // { + // // writer.Write(String.Format("<input type=\"hidden\" value=\"{1}\" id=\"{0}\" name=\"{0}\"/>", + // // GetNeedPersistStateColumnIndexID(columnIndex), Columns[columnIndex].SaveColumnState())); + // // } + // //} + //} + + + + //public override void RenderEndTag(HtmlTextWriter writer) + //{ + // base.RenderEndTag(writer); + //} + + #endregion + + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/BaseField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/BaseField.cs new file mode 100644 index 0000000..4085043 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/BaseField.cs @@ -0,0 +1,210 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: BaseField.cs + * CreatedOn: 2013-05-05 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// лࣩࣨ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public abstract class BaseField : GridColumn + { + #region Properties + + private string _dataSimulateTreeLevelField = String.Empty; + + /// <summary> + /// ģʾʱIJֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ģʾʱIJֶ")] + public string DataSimulateTreeLevelField + { + get + { + return _dataSimulateTreeLevelField; + } + set + { + _dataSimulateTreeLevelField = value; + } + } + + + #endregion + + #region DataTooltipField/DataTooltipFormatString + + private string _tooltip = String.Empty; + + /// <summary> + /// ʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾı")] + public string ToolTip + { + get + { + return _tooltip; + } + set + { + _tooltip = value; + } + } + + + + private string _dataToolTipField = String.Empty; + + /// <summary> + /// ʾֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾֶ")] + public string DataToolTipField + { + get + { + return _dataToolTipField; + } + set + { + _dataToolTipField = value; + } + } + + private string _dataToolTipFormatString = String.Empty; + + /// <summary> + /// ʾֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾֶθʽַ")] + public string DataToolTipFormatString + { + get + { + return _dataToolTipFormatString; + } + set + { + _dataToolTipFormatString = value; + } + } + + #endregion + + #region GetTooltipString + + /// <summary> + /// ȡʾַ + /// </summary> + /// <param name="row"></param> + /// <returns></returns> + protected string GetTooltipString(GridRow row) + { + string result = null; + + if (!String.IsNullOrEmpty(DataToolTipField)) + { + object value = row.GetPropertyValue(DataToolTipField); + + if (value == null) + { + result = null; + } + else + { + if (!String.IsNullOrEmpty(DataToolTipFormatString)) + { + result = String.Format(DataToolTipFormatString, value); + } + else + { + result = value.ToString(); + } + } + } + else if(!String.IsNullOrEmpty(ToolTip)) + { + result = ToolTip; + } + + return result == null ? "" : String.Format(" data-qtip=\"{0}\" ", result); + } + + #endregion + + #region OnFirstPreRender + + ///// <summary> + ///// Ⱦ HTML ֮ǰãҳһμػͨط + ///// </summary> + //protected override void OnFirstPreRender() + //{ + // base.OnFirstPreRender(); + + // if (this is TemplateField && (this as TemplateField).RenderAsRowExpander) + // { + // // GridColumnѾ + // } + // else + // { + + // string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + // AddStartupScript(jsContent); + // } + + + //} + + #endregion + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/BoundField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/BoundField.cs new file mode 100644 index 0000000..b09d03e --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/BoundField.cs @@ -0,0 +1,264 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: BoundField.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + + +namespace FineUI +{ + /// <summary> + /// ݰ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class BoundField : BaseField + { + #region Properties + + private bool _enabled = true; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + + private string _dataField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataField + { + get + { + return _dataField; + } + set + { + _dataField = value; + } + } + + + private string _dataFormatString = String.Empty; + + /// <summary> + /// ֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶθʽַ")] + public string DataFormatString + { + get + { + return _dataFormatString; + } + set + { + _dataFormatString = value; + } + } + + + private string _nullDisplayText = String.Empty; + + /// <summary> + /// ݿnullֵĬΪַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ݿnullֵĬΪַ")] + public string NullDisplayText + { + get + { + return _nullDisplayText; + } + set + { + _nullDisplayText = value; + } + } + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + //private bool _htmlEncodeFormatString = true; + + ///// <summary> + ///// ǷӦDataFormatString֮HTML루ĬΪtrue + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] + [Obsolete("ѷϳʹHtmlEncode")] + public bool HtmlEncodeFormatString + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + string text = String.Empty; + + if (!String.IsNullOrEmpty(DataField)) + { + object value = row.GetPropertyValue(DataField); + + if (value == null || value == DBNull.Value || (value is String && String.IsNullOrEmpty(value.ToString()))) + { + text = NullDisplayText; + } + else + { + if (!String.IsNullOrEmpty(DataFormatString)) + { + text = String.Format(DataFormatString, value); + } + else + { + text = value.ToString(); + } + + if (HtmlEncode) + { + text = HttpUtility.HtmlEncode(text); + } + } + } + + HtmlNodeBuilder nb = new HtmlNodeBuilder("span"); + + nb.InnerProperty = text; + + if (!Enabled) + { + nb.SetProperty("class", "x-item-disabled"); + nb.SetProperty("disabled", "disabled"); + } + + + string result = nb.ToString(); + + string tooltip = GetTooltipString(row); + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<span".Length, tooltip); + } + + // <span>󶨵</span> + if (result.StartsWith("<span>")) + { + result = result.Substring("<span>".Length, result.Length - "<span></span>".Length); + } + + return result; + } + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/CheckBoxField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/CheckBoxField.cs new file mode 100644 index 0000000..f894131 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/CheckBoxField.cs @@ -0,0 +1,461 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: CheckBoxField.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; +using System.Collections.Generic; + + +namespace FineUI +{ + /// <summary> + /// ѡ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class CheckBoxField : BaseField + { + #region Properties + + private bool _enabled = true; + + /// <summary> + /// ǷãֻRenderAsStaticField=falseʱЧ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ǷãֻRenderAsStaticField=falseʱЧ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + private bool _autoPostBack = false; + + /// <summary> + /// ǷԶطֻRenderAsStaticField=falseʱЧ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ǷԶطֻRenderAsStaticField=falseShowHeaderCheckBox=falseʱЧ")] + public bool AutoPostBack + { + get + { + return _autoPostBack; + } + set + { + _autoPostBack = value; + } + } + + + private string _dataField = ""; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataField + { + get + { + return _dataField; + } + set + { + _dataField = value; + } + } + + + private bool _renderAsStaticField = true; + + /// <summary> + /// ȾΪ̬ͼƬȾΪɱ༭ĸѡ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ȾΪ̬ͼƬȾΪɱ༭ĸѡ")] + public bool RenderAsStaticField + { + get + { + return _renderAsStaticField; + } + set + { + _renderAsStaticField = value; + } + } + + + private bool _showHeaderCheckBox = false; + + + /// <summary> + /// ʾͷѡֻRenderAsStaticField=falseʱЧ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ʾͷѡֻRenderAsStaticField=falseʱЧ")] + public bool ShowHeaderCheckBox + { + get + { + return _showHeaderCheckBox; + } + set + { + _showHeaderCheckBox = value; + } + } + + internal override string InnerCls + { + get + { + return "f-grid-cell-inner-image"; + } + } + + + + + #endregion + + #region EnableAjax + + private object _enableAjax = null; + + /// <summary> + /// ǷAJAX + /// </summary> + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("ǷAJAX")] + public override bool EnableAjax + { + get + { + if (_enableAjax == null) + { + if (DesignMode) + { + return true; + } + else + { + return Grid.EnableAjax; + } + } + return (bool)_enableAjax; + } + set + { + _enableAjax = value; + } + } + + #endregion + + #region CommandName + + private string _commandName = ""; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandName + { + get + { + return _commandName; + } + set + { + _commandName = value; + } + } + + private string _commandArgument = ""; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandArgument + { + get + { + return _commandArgument; + } + set + { + _commandArgument = value; + } + } + + + #endregion + + #region GetHeaderValue/GetColumnValue + + internal override string GetHeaderValue() + { + if (!RenderAsStaticField && ShowHeaderCheckBox) + { + string result = String.Empty; + + //string textAlignClass = String.Empty; + //if (TextAlign != TextAlign.Left) + //{ + // textAlignClass = "align-" + TextAlignName.GetName(TextAlign); + //} + + string onClickScript = "F.toggle(this,'unchecked');"; + //onClickScript += "F.stop();"; + + //string tooltip = String.Empty; + //if (!String.IsNullOrEmpty(HeaderText)) + //{ + // tooltip = String.Format(" ext:qtip=\"{0}\" ", HeaderText); + //} + + result = String.Format("<div class=\"f-grid-checkbox unchecked\" onclick=\"{0}\">{1}</div>", + onClickScript, HeaderText); + + return result; + } + else + { + return base.GetHeaderValue(); + } + } + + + internal override object GetColumnValue(GridRow row) + { + string result = String.Empty; + + bool checkState = Convert.ToBoolean(GetColumnState(row)); + + result = GetColumnValue(row, checkState); + + string tooltip = GetTooltipString(row); + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<img".Length, tooltip); + } + + return result; + } + + /// <summary> + /// ȡõԪ + /// </summary> + /// <param name="row"></param> + /// <param name="checkState"></param> + /// <returns></returns> + private string GetColumnValue(GridRow row, bool checkState) + { + string result = String.Empty; + string emptyImageUrl = Grid.ResolveUrl(ResourceHelper.GetEmptyImageUrl()); + + if (!String.IsNullOrEmpty(DataField)) + { + //string textAlignClass = String.Empty; + //if (TextAlign != TextAlign.Left) + //{ + // textAlignClass = "align-" + TextAlignName.GetName(TextAlign); + //} + + if (RenderAsStaticField) + { + if (checkState) + { + result = String.Format("<img class=\"f-grid-static-checkbox\" src=\"{0}\"/>", emptyImageUrl); + } + else + { + result = String.Format("<img class=\"f-grid-static-checkbox unchecked\" src=\"{0}\"/>", emptyImageUrl); + } + } + else + { + string paramStr = String.Format("Command${0}${1}${2}${3}", row.RowID, ColumnID, CommandName.Replace("'", "\""), CommandArgument.Replace("'", "\"")); + + // ӳִУȷǰѡ״̬Ѿı + string postBackReference = JsHelper.GetDeferScript(Grid.GetPostBackEventReference(paramStr, EnableAjax), 0); + + // string onClickScript = String.Format("{0}_checkbox{1}(event,this,{2});", Grid.XID, ColumnIndex, row.RowIndex); + //string onClickScript = "Ext.get(this).toggleClass('unchecked');"; + string onClickScript = "F.toggle(this,'unchecked');"; + if (!ShowHeaderCheckBox && AutoPostBack) + { + onClickScript += postBackReference; + } + + //onClickScript += "F.stop();"; + + if (checkState) + { + if (Enabled) + { + result = String.Format("<img class=\"f-grid-checkbox\" src=\"{0}\" onclick=\"{1}\"/>", emptyImageUrl, onClickScript); + } + else + { + result = String.Format("<img class=\"f-grid-checkbox disabled\" src=\"{0}\"/>", emptyImageUrl); + } + } + else + { + if (Enabled) + { + result = String.Format("<img class=\"f-grid-checkbox unchecked\" src=\"{0}\" onclick=\"{1}\"/>", emptyImageUrl, onClickScript); + } + else + { + result = String.Format("<img class=\"f-grid-checkbox unchecked disabled\" src=\"{0}\"/>", emptyImageUrl); + } + } + } + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region SaveColumnState/LoadColumnState + + internal override bool PersistState + { + get + { + if (RenderAsStaticField) + { + return false; + } + return true; + } + } + + internal override object GetColumnState(GridRow row) + { + if (row.DataItem == null) + { + return row.States[ColumnIndex]; + } + else + { + return row.GetPropertyValue(DataField); + } + } + + #endregion + + #region GetCheckedState/SetCheckedState + + /// <summary> + /// еĸѡǷѡ״̬ + /// </summary> + /// <param name="rowIndex"></param> + /// <returns>ѡ״̬</returns> + public bool GetCheckedState(int rowIndex) + { + GridRow row = this.Grid.Rows[rowIndex]; + + return Convert.ToBoolean(row.States[ColumnIndex]); + } + + /// <summary> + /// ñиѡѡ״̬ + /// </summary> + /// <param name="rowIndex"></param> + /// <param name="isChecked">Ƿѡ</param> + public void SetCheckedState(int rowIndex, bool isChecked) + { + GridRow row = this.Grid.Rows[rowIndex]; + + row.States[ColumnIndex] = isChecked; + + // ״̬ͬʱҪŸȾHTML + row.UpdateValuesAt(ColumnIndex); + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumn.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumn.cs new file mode 100644 index 0000000..7c35f2b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumn.cs @@ -0,0 +1,745 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridColumn.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// лࣩࣨ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + [DefaultProperty("HeaderText")] + public abstract class GridColumn : ControlBase + { + #region Grid/ColumnIndex + + private Grid _grid; + + /// <summary> + /// + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("")] + public Grid Grid + { + get + { + if (_grid == null) + { + _grid = GetParentGrid(); + } + return _grid; + } + } + + private Grid GetParentGrid() + { + if (Parent is Grid) + { + return (Grid)Parent; + } + else + { + return ResolveParentGrid(Parent as GridColumn); + } + } + + private Grid ResolveParentGrid(GridColumn column) + { + if (column != null) + { + if (column.Parent is Grid) + { + return (Grid)column.Parent; + } + else + { + return ResolveParentGrid(column.Parent as GridColumn); + } + } + else + { + return null; + } + } + + /// <summary> + /// + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("")] + public int ColumnIndex + { + get + { + return Grid.AllColumns.IndexOf(this); + } + } + + #endregion + + #region Properties + + ///// <summary> + ///// ǰеʽ + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public string SortExpression + //{ + // get + // { + // return String.Format("{0} {1}", SortField, SortDirection); + // } + //} + + //public string _sortDirection = "ASC"; + + ///// <summary> + ///// + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public string SortDirection + //{ + // get + // { + // return _sortDirection; + // } + // set + // { + // _sortDirection = value; + // } + //} + + private string _sortField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string SortField + { + get + { + return _sortField; + } + set + { + _sortField = value; + } + } + + + private bool _enableLock = false; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("")] + public bool EnableLock + { + get + { + return _enableLock; + } + set + { + _enableLock = value; + } + } + + + private bool _locked = false; + + /// <summary> + /// Ƿ״̬ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ״̬")] + public bool Locked + { + get + { + return _locked; + } + set + { + _locked = value; + } + } + + + private bool _hidden = false; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ")] + public override bool Hidden + { + get + { + return _hidden; + } + set + { + _hidden = value; + } + } + + + + private string _columnID = String.Empty; + + /// <summary> + /// IDûãΪClientID + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("IDûãΪClientID")] + public string ColumnID + { + get + { + if (String.IsNullOrEmpty(_columnID)) + { + return ClientID; + } + return _columnID; + } + set + { + _columnID = value; + } + } + + + private string _headerText = String.Empty; + /// <summary> + /// ʾ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾ")] + public string HeaderText + { + get + { + return _headerText; + } + set + { + _headerText = value; + } + } + + private string _headerToolTip = String.Empty; + /// <summary> + /// ֵʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֵʾı")] + public string HeaderToolTip + { + get + { + return _headerToolTip; + } + set + { + _headerToolTip = value; + } + } + + private ToolTipType _headerTooltipType = ToolTipType.Qtip; + /// <summary> + /// ֵʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(ToolTipType.Qtip)] + [Description("ֵʾı")] + public ToolTipType HeaderToolTipType + { + get + { + return _headerTooltipType; + } + set + { + _headerTooltipType = value; + } + } + + + private Unit _width = Unit.Empty; + /// <summary> + /// п + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("п")] + public virtual Unit Width + { + get + { + return _width; + } + set + { + _width = value; + } + } + + private Unit _minWidth = Unit.Empty; + /// <summary> + /// Сп + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("Сп")] + public virtual Unit MinWidth + { + get + { + return _minWidth; + } + set + { + _minWidth = value; + } + } + + + private int _boxFlex = 0; + /// <summary> + /// ӿؼijߴ磨ʹHBox֣ + /// </summary> + [Category(CategoryName.LAYOUT)] + [DefaultValue(0)] + [Description("ӿؼijߴ磨ʹHBox֣")] + public int BoxFlex + { + get + { + return _boxFlex; + } + set + { + _boxFlex = value; + } + } + + + private bool _expandUnusedSpace = false; + /// <summary> + /// лչδʹõĿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("лչδʹõĿ")] + public bool ExpandUnusedSpace + { + get + { + return _expandUnusedSpace; + } + set + { + _expandUnusedSpace = value; + } + } + + + /* + private TextAlign _textalign = TextAlign.Left; + + /// <summary> + /// ıλ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TextAlign.Left)] + [Description("ıλ")] + public TextAlign TextAlign + { + get + { + return _textalign; + } + set + { + _textalign = value; + } + } + */ + + private TextAlign _textalign = TextAlign.Undefined; + + /// <summary> + /// ıλ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TextAlign.Undefined)] + [Description("ıλ")] + public TextAlign TextAlign + { + get + { + return _textalign; + } + set + { + _textalign = value; + } + } + + + private bool _enableHeaderMenu = true; + /// <summary> + /// ñͷ˵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ñͷ˵")] + public virtual bool EnableHeaderMenu + { + get + { + return _enableHeaderMenu; + } + set + { + _enableHeaderMenu = value; + } + } + + + private bool _enableColumnHide = true; + /// <summary> + /// й + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("й")] + public virtual bool EnableColumnHide + { + get + { + return _enableColumnHide; + } + set + { + _enableColumnHide = value; + } + } + + + /// <summary> + /// Ԫʽ + /// </summary> + internal virtual string InnerCls + { + get + { + return String.Empty; + } + } + + + #endregion + + #region virtual GetColumnValue/GetColumnState/PersistState + + /// <summary> + /// ȡͷȾHTML + /// </summary> + /// <returns>ȾHTML</returns> + internal virtual string GetHeaderValue() + { + return String.IsNullOrEmpty(HeaderText) ? " " : HeaderText; + } + + /// <summary> + /// ȡȾHTML + /// </summary> + /// <param name="row">ʵ</param> + /// <returns>ȾHTML</returns> + internal virtual object GetColumnValue(GridRow row) + { + return String.Empty; + } + + + /// <summary> + /// ǷҪ״̬ĿǰֻCheckBoxFieldʵ壩 + /// </summary> + internal virtual bool PersistState + { + get + { + return false; + } + } + + /// <summary> + /// ȡе״̬ + /// </summary> + /// <param name="row"></param> + /// <returns></returns> + internal virtual object GetColumnState(GridRow row) + { + return null; + } + + #endregion + + #region OnPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãAJAXط + /// </summary> + protected override void OnAjaxPreRender() + { + // пؼԵĸı + } + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + if (this is TemplateField && (this as TemplateField).RenderAsRowExpander) + { + // չҪ⴦ + } + else + { + //JsObjectBuilder columnBuilder = new JsObjectBuilder(); + + // еĽûᷴӳÿԪϣͷ + OB.RemoveProperty("disabled"); + + if (this is RowNumberField) + { + OB.AddProperty("xtype", "rownumberer"); + } + + OB.AddProperty("text", GetHeaderValue()); + + if (!String.IsNullOrEmpty(HeaderToolTip)) + { + OB.AddProperty("tooltip", HeaderToolTip); + OB.AddProperty("tooltipType", ToolTipTypeName.GetName(HeaderToolTipType)); + } + + if (Hidden) + { + OB.AddProperty("hidden", true); + } + + if (!String.IsNullOrEmpty(InnerCls)) + { + OB.AddProperty("innerCls", InnerCls); + } + + if (Grid.AllowSorting) + { + if (String.IsNullOrEmpty(SortField)) + { + OB.AddProperty("sortable", false); + } + else + { + OB.AddProperty("sortable", true); + } + } + else + { + OB.AddProperty("sortable", false); + } + + + // + if (Grid.AllowColumnLocking) + { + if (EnableLock) + { + OB.AddProperty("lockable", true); + } + else + { + OB.AddProperty("lockable", false); + } + + if (Locked) + { + OB.AddProperty("lockable", true); + OB.AddProperty("locked", true); + } + } + + + if (PersistState) + { + OB.AddProperty("f_persistState", true); + OB.AddProperty("f_persistStateType", "checkbox"); + } + + + + //If not specified, the column's index is used as an index into the Record's data Array. + OB.AddProperty("dataIndex", ColumnID); + OB.AddProperty("id", ColumnID); + + // ʹõColumnIndex + OB.AddProperty("f_columnIndex", ColumnIndex); + + + /* + if (TextAlign != TextAlign.Left) + { + OB.AddProperty("align", TextAlignName.GetName(TextAlign)); + } + */ + + // ĬϿʾʾֻҪ TextAlign + if (TextAlign != TextAlign.Undefined) + { + OB.AddProperty("align", TextAlignName.GetName(TextAlign)); + } + + if (Width != Unit.Empty) + { + OB.AddProperty("width", Width.Value); + } + else if (BoxFlex != 0) + { + OB.AddProperty("flex", BoxFlex); + } + + if (MinWidth != Unit.Empty) + { + OB.AddProperty("minWidth", MinWidth.Value); + } + + if (ExpandUnusedSpace) + { + OB.AddProperty("flex", 1); + } + + if (Grid.EnableHeaderMenu) + { + if (EnableHeaderMenu) + { + OB.AddProperty("menuDisabled", false); + } + else + { + OB.AddProperty("menuDisabled", true); + } + } + else + { + OB.AddProperty("menuDisabled", true); + } + + if (EnableColumnHide) + { + OB.AddProperty("hideable", true); + } + else + { + OB.AddProperty("hideable", false); + } + + + if (Grid.EnableSummary) + { + if (this is RowNumberField) + { + // ûкϼ + } + else + { + OB.AddProperty("summaryRenderer", String.Format("F.util.summaryRenderer('{0}')", Grid.ClientID), true); + } + } + + + + + + + + } + } + + #endregion + + #region AddGridColumnScript + + /// <summary> + /// ӱеȾű + /// </summary> + /// <param name="jsContent"></param> + protected void AddGridColumnScript(string jsContent) + { + AddStartupScript(jsContent); + } + + #endregion + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumnCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumnCollection.cs new file mode 100644 index 0000000..e08b6b6 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GridColumn/GridColumnCollection.cs @@ -0,0 +1,81 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridColumn.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Xml; +using System.Text; +using System.Collections; +using System.ComponentModel; +using System.Collections.ObjectModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// м + /// </summary> + public class GridColumnCollection : BaseCollection<GridColumn> + { + /// <summary> + /// 캯 + /// </summary> + /// <param name="parent">ؼʵ</param> + public GridColumnCollection(ControlBase parent) + : base(parent) + { + + } + + /* + private Grid _grid; + + /// <summary> + /// 캯 + /// </summary> + /// <param name="grid">ʵ</param> + public GridColumnCollection(Grid grid) + { + _grid = grid; + + } + + /// <summary> + /// + /// </summary> + /// <param name="index"></param> + /// <param name="item"></param> + protected override void InsertItem(int index, GridColumn item) + { + item.ColumnIndex = index; + item.Grid = _grid; + + base.InsertItem(index, item); + } + */ + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GroupField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GroupField.cs new file mode 100644 index 0000000..4bb2c31 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/GroupField.cs @@ -0,0 +1,103 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GroupField.cs + * CreatedOn: 2013-10-08 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class GroupField : GridColumn + { + #region Properties + + + private GridColumnCollection _columns; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridColumnCollection Columns + { + get + { + if (_columns == null) + { + _columns = new GridColumnCollection(this); + } + return _columns; + } + } + + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + JsArrayBuilder columnsBuilder = new JsArrayBuilder(); + foreach (GridColumn column in Columns) + { + columnsBuilder.AddProperty(column.XID, true); + } + OB.AddProperty("columns", columnsBuilder); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + } + + #endregion + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/HyperLinkField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/HyperLinkField.cs new file mode 100644 index 0000000..02af5eb --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/HyperLinkField.cs @@ -0,0 +1,473 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: HyperLinkField.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + +using System.Collections.Generic; +using System.Web.UI.WebControls; + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class HyperLinkField : BaseField + { + + #region Properties + + private bool _enabled = true; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + private string _dataTextField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataTextField + { + get + { + return _dataTextField; + } + set + { + _dataTextField = value; + } + } + + private string _dataTextFormatString = String.Empty; + + /// <summary> + /// ֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶθʽַ")] + public string DataTextFormatString + { + get + { + return _dataTextFormatString; + } + set + { + _dataTextFormatString = value; + } + } + + private string[] _dataNavigateUrlFields = null; + + /// <summary> + /// 󶨵ӵֶַб + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("󶨵ӵֶַб")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] DataNavigateUrlFields + { + get + { + return _dataNavigateUrlFields; + } + set + { + _dataNavigateUrlFields = value; + } + } + + //private bool _dataNavigateUrlFieldsEncode = false; + + /// <summary> + /// ÿ󶨵ӵֶַνURL루ԷʹUrlEncodeԣ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ÿ󶨵ӵֶַνURL루ԷʹUrlEncodeԣ")] + public bool DataNavigateUrlFieldsEncode + { + get + { + return _urlEncode; + } + set + { + _urlEncode = value; + } + } + + + private bool _urlEncode = true; + + /// <summary> + /// ÿ󶨵ӵֶַνURL루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ÿ󶨵ӵֶַνURL")] + public bool UrlEncode + { + get + { + return _urlEncode; + } + set + { + _urlEncode = value; + } + } + + + private string _dataNavigateUrlFormatString = String.Empty; + + /// <summary> + /// 󶨵ӵֶַθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("󶨵ӵֶַθʽַ")] + public string DataNavigateUrlFormatString + { + get + { + return _dataNavigateUrlFormatString; + } + set + { + _dataNavigateUrlFormatString = value; + } + } + + private string _target = String.Empty; + + /// <summary> + /// 򿪳ӵĿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("򿪳ӵĿ")] + public string Target + { + get + { + return _target; + } + set + { + _target = value; + } + } + + + private string _navigateUrl = String.Empty; + + /// <summary> + /// ӵַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӵַ")] + public string NavigateUrl + { + get + { + return _navigateUrl; + } + set + { + _navigateUrl = value; + } + } + + private string _text = String.Empty; + + /// <summary> + /// ı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ı")] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + //private bool _htmlEncodeFormatString = true; + + ///// <summary> + ///// ǷӦDataFormatString֮HTML루ĬΪtrue + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] + //public bool HtmlEncodeFormatString + //{ + // get + // { + // return _htmlEncodeFormatString; + // } + // set + // { + // _htmlEncodeFormatString = value; + // } + //} + [Obsolete("ѷϳʹHtmlEncode")] + public bool HtmlEncodeFormatString + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + HtmlNodeBuilder nb = new HtmlNodeBuilder("a"); + + #region DataTextField + + if (!String.IsNullOrEmpty(DataTextField)) + { + object value = row.GetPropertyValue(DataTextField); + + string text = String.Empty; + if (value != null) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + text = String.Format(DataTextFormatString, value); + } + else + { + text = value.ToString(); + } + + if (HtmlEncode) + { + text = HttpUtility.HtmlEncode(text); + } + } + + nb.InnerProperty = text; + } + else + { + nb.InnerProperty = Text; + } + + #endregion + + if (Enabled) + { + #region DataNavigateUrlFields + + string hrefOriginal = String.Empty; + + if (DataNavigateUrlFields != null && DataNavigateUrlFields.Length > 0) + { + //string[] fields = DataNavigateUrlFields.Trim().TrimEnd(',').Split(','); + string[] fields = DataNavigateUrlFields; + + List<object> fieldValues = new List<object>(); + foreach (string field in fields) + { + if (!String.IsNullOrEmpty(field)) + { + object fieldObj = row.GetPropertyValue(field); + + string fieldValue = String.Empty; + if (fieldObj != null) + { + fieldValue = fieldObj.ToString(); + if (UrlEncode) + { + fieldValue = HttpUtility.UrlEncode(fieldValue); + } + } + fieldValues.Add(fieldValue); + } + } + + if (!String.IsNullOrEmpty(DataNavigateUrlFormatString)) + { + hrefOriginal = String.Format(DataNavigateUrlFormatString, fieldValues.ToArray()); + } + else + { + if (fieldValues.Count > 0) + { + hrefOriginal = fieldValues[0].ToString(); + } + } + } + else + { + hrefOriginal = NavigateUrl; + } + + nb.SetProperty("href", Grid.ResolveUrl(hrefOriginal)); + + #endregion + + #region Target + + if (!String.IsNullOrEmpty(Target)) + { + nb.SetProperty("target", Target); + } + else + { + nb.SetProperty("target", "_blank"); + } + + #endregion + } + else + { + nb.SetProperty("class", "x-item-disabled"); + nb.SetProperty("disabled", "disabled"); + } + + //string result2 = nb.ToString(); + + //string tooltip = GetTooltipString(row); + //if (!String.IsNullOrEmpty(tooltip)) + //{ + // result2 = result2.ToString().Insert(2, tooltip); + //} + + + //return result2; + + string result = nb.ToString(); + + string tooltip = GetTooltipString(row); + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<a".Length, tooltip); + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/ImageField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/ImageField.cs new file mode 100644 index 0000000..5d70a9b --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/ImageField.cs @@ -0,0 +1,228 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: ImageField.cs + * CreatedOn: 2008-05-28 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Globalization; +using System.Reflection; + + +namespace FineUI +{ + /// <summary> + /// ͼƬ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class ImageField : BaseField + { + #region Properties + + + private string _dataImageUrlField = String.Empty; + + /// <summary> + /// ͼƬֶַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼƬֶַ")] + public string DataImageUrlField + { + get + { + return _dataImageUrlField; + } + set + { + _dataImageUrlField = value; + } + } + + + + private string _dataImageUrlFormatString = String.Empty; + + /// <summary> + /// ͼƬֶַθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼƬֶַθʽַ")] + public string DataImageUrlFormatString + { + get + { + return _dataImageUrlFormatString; + } + set + { + _dataImageUrlFormatString = value; + } + } + + + private Unit _imageWidth = Unit.Empty; + + /// <summary> + /// ͼƬĿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("ͼƬĿ")] + public Unit ImageWidth + { + get + { + return _imageWidth; + } + set + { + _imageWidth = value; + } + } + + private Unit _imageHeight = Unit.Empty; + + /// <summary> + /// ͼƬĸ߶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(typeof(Unit), "")] + [Description("ͼƬĸ߶")] + public Unit ImageHeight + { + get + { + return _imageHeight; + } + set + { + _imageHeight = value; + } + } + + + internal override string InnerCls + { + get + { + return "f-grid-cell-inner-image"; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + string result = String.Empty; + + if (!String.IsNullOrEmpty(DataImageUrlField)) + { + object value = row.GetPropertyValue(DataImageUrlField); + string imageUrl = String.Empty; + + if (value != null) + { + if (!String.IsNullOrEmpty(DataImageUrlFormatString)) + { + imageUrl = String.Format(DataImageUrlFormatString, value); + } + else + { + imageUrl = value.ToString(); + } + } + + string cssStyle = String.Empty; + + if (ImageWidth != Unit.Empty) + { + cssStyle += String.Format("width:{0}px;", ImageWidth.Value); + } + if (ImageHeight != Unit.Empty) + { + cssStyle += String.Format("height:{0}px;", ImageHeight.Value); + } + + if (!String.IsNullOrEmpty(cssStyle)) + { + cssStyle = String.Format(" style=\"{0}\"", cssStyle); + } + + + + result = String.Format("<img src=\"{0}\" class=\"f-grid-imagefield\"{1}/>", + Grid.ResolveUrl(imageUrl), + cssStyle); + } + + string tooltip = GetTooltipString(row); + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert(4, tooltip); + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/LinkButtonField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/LinkButtonField.cs new file mode 100644 index 0000000..87ce81d --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/LinkButtonField.cs @@ -0,0 +1,707 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: LinkButtonField.cs + * CreatedOn: 2008-06-23 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + +using System.Collections.Generic; +using System.Web.UI.WebControls; +using System.Web.UI.Design; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// Ӱť + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class LinkButtonField : BaseField + { + #region override + + internal override string InnerCls + { + get + { + return "f-grid-cell-inner-image"; + } + } + + private bool _enableHeaderMenu = false; + /// <summary> + /// ñͷ˵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ñͷ˵")] + public override bool EnableHeaderMenu + { + get + { + return _enableHeaderMenu; + } + set + { + _enableHeaderMenu = value; + } + } + + + private bool _allowHideColumn = false; + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ")] + public override bool EnableColumnHide + { + get + { + return _allowHideColumn; + } + set + { + _allowHideColumn = value; + } + } + + #endregion + + #region Properties + + + private string _dataTextField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataTextField + { + get + { + return _dataTextField; + } + set + { + _dataTextField = value; + } + } + + + private string _dataTextFormatString = String.Empty; + + /// <summary> + /// ֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶθʽַ")] + public string DataTextFormatString + { + get + { + return _dataTextFormatString; + } + set + { + _dataTextFormatString = value; + } + } + + + private string _text = String.Empty; + + /// <summary> + /// ťı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ťı")] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + //private bool _htmlEncodeFormatString = true; + + ///// <summary> + ///// ǷӦDataFormatString֮HTML루ĬΪtrue + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] + //public bool HtmlEncodeFormatString + //{ + // get + // { + // return _htmlEncodeFormatString; + // } + // set + // { + // _htmlEncodeFormatString = value; + // } + //} + [Obsolete("ѷϳʹHtmlEncode")] + public bool HtmlEncodeFormatString + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + + #endregion + + #region Properties + + + + + private bool _enablePostBack = true; + + /// <summary> + /// ǷԻط + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ǷԻط")] + public bool EnablePostBack + { + get + { + return _enablePostBack; + } + set + { + _enablePostBack = value; + } + } + + private bool _enabled = true; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + private string _onClientClick = String.Empty; + + /// <summary> + /// ťʱҪִеĿͻ˽ű + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ťʱҪִеĿͻ˽ű")] + public string OnClientClick + { + get + { + return _onClientClick; + } + set + { + _onClientClick = value; + } + } + + private string[] _validateForms = null; + + /// <summary> + /// ύ֮ǰҪ֤ıб + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(null)] + [Description("ύ֮ǰҪ֤ıб")] + [TypeConverter(typeof(StringArrayConverter))] + public string[] ValidateForms + { + get + { + return _validateForms; + } + set + { + _validateForms = value; + } + } + + private Target _validateTarget = Target.Self; + + /// <summary> + /// ֤ʧʱʾԻ򵯳λ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("֤ʧʱʾԻ򵯳λ")] + public Target ValidateTarget + { + get + { + return _validateTarget; + } + set + { + _validateTarget = value; + } + } + + private bool _validateMessageBox = true; + + /// <summary> + /// ֤ʧʱǷʾԻ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("֤ʧʱǷʾԻ")] + public bool ValidateMessageBox + { + get + { + return _validateMessageBox; + } + set + { + _validateMessageBox = value; + } + } + + + + private Icon _icon = Icon.None; + + /// <summary> + /// ͼ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("ͼ")] + public Icon Icon + { + get + { + return _icon; + } + set + { + _icon = value; + } + } + + private string _iconUrl = String.Empty; + + /// <summary> + /// ͼַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼַ")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + return _iconUrl; + } + set + { + _iconUrl = value; + } + } + + #endregion + + #region ConfirmText/ConfirmTitle/ConfirmIcon + + private string _confirmTitle = ""; + + /// <summary> + /// ȷ϶Ի + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ȷ϶Ի")] + public string ConfirmTitle + { + get + { + return _confirmTitle; + } + set + { + _confirmTitle = value; + } + } + + private string _confirmText = String.Empty; + + /// <summary> + /// ȷ϶Ի + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ȷ϶Ի")] + public string ConfirmText + { + get + { + return _confirmText; + } + set + { + _confirmText = value; + } + } + + private MessageBoxIcon _confirmIcon = MessageBoxIcon.Warning; + + /// <summary> + /// ȷ϶Իʾͼ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(MessageBoxIcon.Warning)] + [Description("ȷ϶Իʾͼ")] + public MessageBoxIcon ConfirmIcon + { + get + { + return _confirmIcon; + } + set + { + _confirmIcon = value; + } + } + + private Target _confirmTarget = Target.Self; + + /// <summary> + /// ȷ϶Ի򵯳λ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Target.Self)] + [Description("ȷ϶Ի򵯳λ")] + public Target ConfirmTarget + { + get + { + return _confirmTarget; + } + set + { + _confirmTarget = value; + } + } + + #endregion + + #region CommandName/CommandArgument + + private string _commandName = String.Empty; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandName + { + get + { + return _commandName; + } + set + { + _commandName = value; + } + } + + private string _commandArgument = String.Empty; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string CommandArgument + { + get + { + return _commandArgument; + } + set + { + _commandArgument = value; + } + } + + + #endregion + + #region EnableAjax + + private object _enableAjax = null; + + /// <summary> + /// ǷAJAX + /// </summary> + [Category(CategoryName.BASEOPTIONS)] + [DefaultValue(true)] + [Description("ǷAJAX")] + public override bool EnableAjax + { + get + { + if (_enableAjax == null) + { + if (DesignMode) + { + return true; + } + else + { + return Grid.EnableAjax; + } + } + return (bool)_enableAjax; + } + set + { + _enableAjax = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + //string result = String.Empty; + + #region DataTextField + + string text = String.Empty; + + if (!String.IsNullOrEmpty(DataTextField)) + { + object value = row.GetPropertyValue(DataTextField); + + if (value != null) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + text = String.Format(DataTextFormatString, value); + } + else + { + text = value.ToString(); + } + + if (HtmlEncode) + { + text = HttpUtility.HtmlEncode(text); + } + } + } + else + { + text = Text; + } + + #endregion + + HtmlNodeBuilder nb; + + #region Enabled + + nb = new HtmlNodeBuilder("a"); + + if (Enabled) + { + nb.SetProperty("href", "javascript:;"); + + // click + string paramStr = String.Format("Command${0}${1}${2}${3}", row.RowID, ColumnID, CommandName.Replace("'", "\""), CommandArgument.Replace("'", "\"")); + string postBackReference = Grid.GetPostBackEventReference(paramStr, EnableAjax); + + string clientScript = Button.ResolveClientScript(ValidateForms, ValidateTarget, ValidateMessageBox, EnablePostBack, postBackReference, + ConfirmText, ConfirmTitle, ConfirmIcon, ConfirmTarget, OnClientClick, String.Empty); + + //clientScript = JsHelper.GetDeferScript(clientScript, 0) + "F.stopEvent();"; + //clientScript = clientScript + "F.stop();"; + + nb.SetProperty("onclick", clientScript); + + //result = nb.ToString(); + } + else + { + nb.SetProperty("class", "x-item-disabled"); + nb.SetProperty("disabled", "disabled"); + + //nb = new HtmlNodeBuilder("span"); + //nb.SetProperty("class", "gray"); + //nb.InnerProperty = text; + //result = String.Format("<span class=\"gray\">{0}</span>", text); + } + + nb.InnerProperty = text; + + #endregion + + string tooltip = GetTooltipString(row); + + #region Icon IconUrl + + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + nb.InnerProperty = String.Format("<img src=\"{0}\" {1} />", resolvedIconUrl, tooltip) + nb.InnerProperty; + } + + #endregion + + //string result = nb.ToString(); + //#region Tooltip + + //if (!String.IsNullOrEmpty(tooltip)) + //{ + // if (result.StartsWith("<a ")) + // { + // result = result.ToString().Insert(2, tooltip); + // } + // else if (result.StartsWith("<span ")) + // { + // result = result.ToString().Insert(5, tooltip); + // } + //} + + //#endregion + + //return result; + + string result = nb.ToString(); + + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<a".Length, tooltip); + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderBaseField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderBaseField.cs new file mode 100644 index 0000000..d48034d --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderBaseField.cs @@ -0,0 +1,148 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: RenderBaseField.cs + * CreatedOn: 2013-05-18 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// ɱ༭еĻ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public abstract class RenderBaseField : GridColumn + { + #region Properties + + + private string _dataField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataField + { + get + { + return _dataField; + } + set + { + _dataField = value; + } + } + + /// <summary> + /// ñеĵԪ༭ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ñеĵԪ༭")] + public virtual bool EnableColumnEdit + { + get + { + object obj = FState["EnableColumnEdit"]; + return obj == null ? true : (bool)obj; + } + set + { + FState["EnableColumnEdit"] = value; + } + } + + #endregion + + #region OnAjaxPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãAJAXط + /// </summary> + protected override void OnAjaxPreRender() + { + // base.OnAjaxPreRender Hidden Ըıͼ¼ GridColumn У Grid еAJAX HiddenColumns + base.OnAjaxPreRender(); + + + //// пؼӲԵĸı + //StringBuilder sb = new StringBuilder(); + + //if (PropertyModified("EnableColumnEdit")) + //{ + // sb.AppendFormat("{0}.f_setEditable();", XID); + //} + + //AddAjaxScript(sb); + + + + //if (sb.Length > 0) + //{ + // // Ķƣ f_loadData + // ResourceManager.Instance.AddAjaxShortName(Grid.ClientID, Grid.XID); + + // // ResponseFilterҪ f_loadDataΪԸı + // PageManager.Instance.AddAjaxGridColumnChangedGridClientID(Grid.ClientID); + //} + + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + OB.AddProperty("f_editable", EnableColumnEdit); + + } + + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderCheckField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderCheckField.cs new file mode 100644 index 0000000..9619b64 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderCheckField.cs @@ -0,0 +1,120 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: RenderCheckField.cs + * CreatedOn: 2013-05-18 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// ɱ༭ѡ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class RenderCheckField : RenderBaseField + { + #region Properties + + + #endregion + + #region GetColumnValue + + internal override object GetColumnValue(GridRow row) + { + bool isChecked = false; + + if (!String.IsNullOrEmpty(DataField)) + { + object value = row.GetPropertyValue(DataField); + + if (value == null || value == DBNull.Value || (value is String && String.IsNullOrEmpty(value.ToString()))) + { + // + } + else + { + isChecked = Convert.ToBoolean(value); + } + } + + return isChecked; + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + OB.AddProperty("f_columnType", "rendercheckfield"); + + + if (Grid.AllowCellEditing) + { + OB.AddProperty("xtype", "checkcolumn"); + + if (Grid.EnableAfterEditEvent) + { + string rowIdScript = String.Format("var rowId=F('{0}').getStore().getAt(rowIndex).getId();", Grid.ClientID); + string validateScript = "var args='AfterEdit$'+rowId+'$" + ColumnID + "';"; + validateScript += Grid.GetPostBackEventReference("#AfterEdit#").Replace("'#AfterEdit#'", "args"); + + //string checkchangeScript = String.Format("function(checkcolumn,rowIndex,checked){{{0}}}", validateScript); + //OB.Listeners.AddProperty("checkchange", checkchangeScript, true); + AddListener("checkchange", rowIdScript + validateScript, "checkcolumn", "rowIndex", "checked"); + } + } + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + + + #endregion + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderField.cs new file mode 100644 index 0000000..67af9f6 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RenderField/RenderField.cs @@ -0,0 +1,420 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: RenderField.cs + * CreatedOn: 2013-05-05 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; + + +namespace FineUI +{ + /// <summary> + /// ɱ༭ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class RenderField : RenderBaseField + { + #region Editor + + private GridColumnEditorCollection _editor; + + /// <summary> + /// Ԫ༭ؼ + /// </summary> + [Browsable(false)] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [Description("Ԫ༭ؼ")] + [Editor(typeof(GridColumnEditorEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridColumnEditorCollection Editor + { + get + { + if (_editor == null) + { + _editor = new GridColumnEditorCollection(this); + } + return _editor; + } + } + + + #endregion + + #region Properties + + private FieldType _fieldType = FieldType.Auto; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(FieldType.Auto)] + [Description("ֶ")] + public FieldType FieldType + { + get + { + return _fieldType; + } + set + { + _fieldType = value; + } + } + + + private Renderer _renderer = Renderer.None; + + /// <summary> + /// Ⱦ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Renderer.None)] + [Description("Ⱦ")] + public Renderer Renderer + { + get + { + return _renderer; + } + set + { + _renderer = value; + } + } + + private string _rendererArgument = String.Empty; + + /// <summary> + /// ȾIJ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ȾIJ")] + public string RendererArgument + { + get + { + return _rendererArgument; + } + set + { + _rendererArgument = value; + } + } + + + private string _rendererFunction = String.Empty; + + /// <summary> + /// ԶȾJavaScript + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ԶȾJavaScript")] + public string RendererFunction + { + get + { + return _rendererFunction; + } + set + { + _rendererFunction = value; + } + } + + + //private string _dateFormat = String.Empty; + + ///// <summary> + ///// ֶεĸʽַ + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("ֶεĸʽַ")] + //public string DateFormat + //{ + // get + // { + // return _dateFormat; + // } + // set + // { + // _dateFormat = value; + // } + //} + + + private string _nullDisplayText = String.Empty; + + /// <summary> + /// ݿnullֵĬΪַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ݿnullֵĬΪַ")] + public string NullDisplayText + { + get + { + return _nullDisplayText; + } + set + { + _nullDisplayText = value; + } + } + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + /// <summary> + /// ñеĵԪ༭ܣδEditorΪfalse + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ñеĵԪ༭ܣδEditorΪfalse")] + public override bool EnableColumnEdit + { + get + { + if (Editor.Count > 0) + { + object obj = FState["EnableColumnEdit"]; + return obj == null ? true : (bool)obj; + } + else + { + // δ EditorΪfalse + return false; + } + } + set + { + FState["EnableColumnEdit"] = value; + } + } + + #endregion + + #region GetColumnValue + + internal override object GetColumnValue(GridRow row) + { + object result = String.Empty; + + if (!String.IsNullOrEmpty(DataField)) + { + object value = row.GetPropertyValue(DataField); + + if (value == null || value == DBNull.Value || (value is String && String.IsNullOrEmpty(value.ToString()))) + { + result = NullDisplayText; + } + else + { + if (FieldType == FieldType.Boolean) + { + result = Convert.ToBoolean(value); + } + else if (FieldType == FieldType.Int) + { + result = Convert.ToInt32(value); + } + else if (FieldType == FieldType.Float) + { + result = Convert.ToSingle(value); + } + else if (FieldType == FieldType.Double) + { + result = Convert.ToDouble(value); + } + else if (FieldType == FieldType.Date) + { + // http://www.dotnetperls.com/datetime-format + DateTime date = DateTime.Now; + if (value.GetType() == typeof(DateTime)) + { + date = (DateTime)value; + } + else + { + date = DateTime.Parse(value.ToString()); + } + + //// 2009-02-27T12:12:22 + //text = date.ToString("s"); + //int tIndex = text.IndexOf("T"); + //if (tIndex >= 0) + //{ + // text = text.Substring(0, tIndex) + "T00:00:00"; + //} + + result = date.ToString(RendererArgument); + } + else + { + result = value.ToString(); + + if (HtmlEncode) + { + result = HttpUtility.HtmlEncode(result.ToString()); + } + } + } + } + + return result; + } + + #endregion + + #region GetRenderer + + private string GetRenderer() + { + if (!String.IsNullOrEmpty(RendererFunction)) + { + return RendererFunction; + } + + if (Renderer == Renderer.None) + { + return String.Empty; + } + + if (Renderer == Renderer.Date) + { + string argument = "yyyy-MM-dd"; + if (!String.IsNullOrEmpty(RendererArgument)) + { + argument = RendererArgument; + } + return String.Format("F.format.dateRenderer('{0}')", DateUtil.ConvertToClientDateFormat(argument)); + } + else if (Renderer == Renderer.Ellipsis) + { + string argument = "10"; + if (!String.IsNullOrEmpty(RendererArgument)) + { + argument = RendererArgument; + } + return String.Format("F.format.ellipsisRenderer({0})", argument); + } + //else if (Renderer == Renderer.Number) + //{ + // string argument = "0.00"; + // if (!String.IsNullOrEmpty(RendererArgument)) + // { + // argument = RendererArgument; + // } + // return String.Format("F.format.number('{0}')", argument); + //} + else + { + return String.Format("F.format.{0}", RendererName.GetName(Renderer)); + } + + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + OB.AddProperty("f_columnType", "renderfield"); + + + string renderer = GetRenderer(); + if (!String.IsNullOrEmpty(renderer)) + { + OB.AddProperty("renderer", renderer, true); + } + + + if (Grid.AllowCellEditing) + { + if (Editor.Count > 0) + { + OB.AddProperty("editor", Editor[0].XID, true); + } + + //if (FieldType == FieldType.Boolean) + //{ + // OB.AddProperty("xtype", "booleancolumn"); + //} + } + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + + #endregion + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RowNumberField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RowNumberField.cs new file mode 100644 index 0000000..84506f8 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/RowNumberField.cs @@ -0,0 +1,146 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: RowNumberField.cs + * CreatedOn: 2013-09-23 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + + +namespace FineUI +{ + /// <summary> + /// ݰ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class RowNumberField : BaseField + { + #region Properties + + private bool _enableHeaderMenu = false; + /// <summary> + /// ñͷ˵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ñͷ˵")] + public override bool EnableHeaderMenu + { + get + { + return _enableHeaderMenu; + } + set + { + _enableHeaderMenu = value; + } + } + + + private bool _allowHideColumn = false; + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ")] + public override bool EnableColumnHide + { + get + { + return _allowHideColumn; + } + set + { + _allowHideColumn = value; + } + } + + + private bool _enablePagingNumber = false; + /// <summary> + /// Ƿ÷ҳк + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ÷ҳк")] + public bool EnablePagingNumber + { + get + { + return _enablePagingNumber; + } + set + { + _enablePagingNumber = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + return String.Empty; + } + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (EnablePagingNumber) + { + OB.AddProperty("f_paging", true); + OB.AddProperty("f_paging_grid", Grid.ClientID); + } + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/TemplateField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/TemplateField.cs new file mode 100644 index 0000000..afd7003 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/TemplateField.cs @@ -0,0 +1,219 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: TemplateField.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; +using System.Web.UI.HtmlControls; +using System.IO; + + +namespace FineUI +{ + /// <summary> + /// ģ + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class TemplateField : BaseField + { + #region Properties + + private ITemplate _itemTemplate; + + /// <summary> + /// ģ + /// </summary> + [Browsable(false)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [TemplateInstance(TemplateInstance.Single)] + [TemplateContainer(typeof(GridTemplateContainer))] + [Description("ģ")] + public virtual ITemplate ItemTemplate + { + get + { + return _itemTemplate; + } + set + { + _itemTemplate = value; + } + } + + + private bool _renderAsRowExpander = false; + + /// <summary> + /// ǷȾΪչ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ǷȾΪչ")] + public bool RenderAsRowExpander + { + get + { + return _renderAsRowExpander; + } + set + { + _renderAsRowExpander = value; + } + } + + + private bool _expandOnDoubleClick = true; + /// <summary> + /// ˫չ۵չ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("˫չ۵չ")] + public bool ExpandOnDoubleClick + { + get + { + return _expandOnDoubleClick; + } + set + { + _expandOnDoubleClick = value; + } + } + + private bool _expandOnEnter = true; + /// <summary> + /// سչ۵չ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("سչ۵չ")] + public bool ExpandOnEnter + { + get + { + return _expandOnEnter; + } + set + { + _expandOnEnter = value; + } + } + + private bool _expandToSelectRow = false; + /// <summary> + /// ͼչ۵չʱѡ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ͼչ۵չʱѡ")] + public bool ExpandToSelectRow + { + get + { + return _expandToSelectRow; + } + set + { + _expandToSelectRow = value; + } + } + + + #endregion + + #region GetColumnValue + + internal override object GetColumnValue(GridRow row) + { + GridTemplateContainer control = row.TemplateContainers[ColumnIndex]; + + return String.Format("{0}{1}", Grid.TEMPLATE_PLACEHOLDER_PREFIX, control.ID); + } + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + if (this is TemplateField && (this as TemplateField).RenderAsRowExpander) + { + JsObjectBuilder rowExpanderBuilder = new JsObjectBuilder(); + rowExpanderBuilder.AddProperty("rowBodyTpl", String.Format("F.create('Ext.XTemplate','{{{0}}}')", ColumnID), true); + rowExpanderBuilder.AddProperty("pluginId", String.Format("{0}_rowexpander", Grid.ClientID)); + + if (!ExpandOnDoubleClick) + { + rowExpanderBuilder.AddProperty("expandOnDblClick", false); + } + + if (!ExpandOnEnter) + { + rowExpanderBuilder.AddProperty("expandOnEnter", false); + } + + if (ExpandToSelectRow) + { + rowExpanderBuilder.AddProperty("selectRowOnExpand", true); + } + + + string jsContent = String.Format("var {0}=F.create('Ext.grid.plugin.RowExpander',{1});", XID, rowExpanderBuilder); + AddGridColumnScript(jsContent); + + } + else + { + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + } + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/WindowField.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/WindowField.cs new file mode 100644 index 0000000..1c79759 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridColumn/WindowField.cs @@ -0,0 +1,665 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: WindowField.cs + * CreatedOn: 2008-06-03 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Reflection; + +using System.Collections.Generic; +using System.Web.UI.Design; +using System.Drawing.Design; + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + public class WindowField : BaseField + { + #region override + + internal override string InnerCls + { + get + { + return "f-grid-cell-inner-image"; + } + } + + private bool _enableHeaderMenu = false; + /// <summary> + /// ñͷ˵ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("ñͷ˵")] + public override bool EnableHeaderMenu + { + get + { + return _enableHeaderMenu; + } + set + { + _enableHeaderMenu = value; + } + } + + + private bool _allowHideColumn = false; + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("Ƿ")] + public override bool EnableColumnHide + { + get + { + return _allowHideColumn; + } + set + { + _allowHideColumn = value; + } + } + + #endregion + + #region Properties + + private bool _enabled = true; + + /// <summary> + /// Ƿ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("Ƿ")] + public override bool Enabled + { + get + { + return _enabled; + } + set + { + _enabled = value; + } + } + + + private string _windowID = String.Empty; + + /// <summary> + /// ӦĴؼID + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ӦĴؼID")] + public string WindowID + { + get + { + return _windowID; + } + set + { + _windowID = value; + } + } + + private string _dataWindowTitleField = String.Empty; + + /// <summary> + /// Ӧֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("Ӧֶ")] + public string DataWindowTitleField + { + get + { + return _dataWindowTitleField; + } + set + { + _dataWindowTitleField = value; + } + } + + + private string _dataWindowTitleFormatString = String.Empty; + + /// <summary> + /// Ӧֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("Ӧֶθʽַ")] + public string DataWindowTitleFormatString + { + get + { + return _dataWindowTitleFormatString; + } + set + { + _dataWindowTitleFormatString = value; + } + } + + + private string _dataTextField = String.Empty; + + /// <summary> + /// ֶ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶ")] + public string DataTextField + { + get + { + return _dataTextField; + } + set + { + _dataTextField = value; + } + } + + + private string _dataTextFormatString = String.Empty; + + /// <summary> + /// ֶθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ֶθʽַ")] + public string DataTextFormatString + { + get + { + return _dataTextFormatString; + } + set + { + _dataTextFormatString = value; + } + } + + + + private bool _htmlEncode = true; + + /// <summary> + /// ʾ֮ǰHTML루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ʾ֮ǰHTML루ĬΪtrue")] + public bool HtmlEncode + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + //private bool _htmlEncodeFormatString = true; + + ///// <summary> + ///// ǷӦDataFormatString֮HTML루ĬΪtrue + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("ǷӦDataFormatString֮HTML루ĬΪtrue")] + //public bool HtmlEncodeFormatString + //{ + // get + // { + // return _htmlEncodeFormatString; + // } + // set + // { + // _htmlEncodeFormatString = value; + // } + //} + [Obsolete("ѷϳʹHtmlEncode")] + public bool HtmlEncodeFormatString + { + get + { + return _htmlEncode; + } + set + { + _htmlEncode = value; + } + } + + + private string _dataIFrameUrlFields = String.Empty; + + /// <summary> + /// 󶨵IFrameֶַб + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("󶨵IFrameֶַб")] + public string DataIFrameUrlFields + { + get + { + return _dataIFrameUrlFields; + } + set + { + _dataIFrameUrlFields = value; + } + } + + private string _dataIFrameUrlFormatString = String.Empty; + + /// <summary> + /// 󶨵IFrameֶַθʽַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("󶨵IFrameֶַθʽַ")] + public string DataIFrameUrlFormatString + { + get + { + return _dataIFrameUrlFormatString; + } + set + { + _dataIFrameUrlFormatString = value; + } + } + + + private bool _urlEncode = true; + + /// <summary> + /// ÿ󶨵IFrameֶַνURL루ĬΪtrue + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(true)] + [Description("ÿ󶨵IFrameֶַνURL")] + public bool UrlEncode + { + get + { + return _urlEncode; + } + set + { + _urlEncode = value; + } + } + + + + private string _iframeUrl = String.Empty; + + /// <summary> + /// IFrameַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("IFrameַ")] + public string IFrameUrl + { + get + { + return _iframeUrl; + } + set + { + _iframeUrl = value; + } + } + + + private string _text = String.Empty; + + /// <summary> + /// ʾı + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾı")] + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + private string _title = String.Empty; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("")] + public string Title + { + get + { + return _title; + } + set + { + _title = value; + } + } + + private Icon _icon = Icon.None; + + /// <summary> + /// ͼ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Icon.None)] + [Description("ͼ")] + public Icon Icon + { + get + { + return _icon; + } + set + { + _icon = value; + } + } + + private string _iconUrl = String.Empty; + + /// <summary> + /// ͼַ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ͼַ")] + [Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))] + public string IconUrl + { + get + { + return _iconUrl; + } + set + { + _iconUrl = value; + } + } + + #endregion + + #region Methods + + internal override object GetColumnValue(GridRow row) + { + HtmlNodeBuilder nb = new HtmlNodeBuilder("a"); + + #region DataTextField + + if (!String.IsNullOrEmpty(DataTextField)) + { + object value = row.GetPropertyValue(DataTextField); + + //if (!String.IsNullOrEmpty(DataTextFormatString)) + //{ + // nb.InnerProperty = String.Format(DataTextFormatString, value); + //} + //else + //{ + // nb.InnerProperty = value.ToString(); + //} + string text = String.Empty; + if (value != null) + { + if (!String.IsNullOrEmpty(DataTextFormatString)) + { + text = String.Format(DataTextFormatString, value); + } + else + { + text = value.ToString(); + } + + if (HtmlEncode) + { + text = HttpUtility.HtmlEncode(text); + } + } + + nb.InnerProperty = text; + } + else + { + nb.InnerProperty = Text; + } + + #endregion + + if (Enabled) + { + string url = "#"; + + #region DataIFrameUrlFields + + string hrefOriginal = String.Empty; + + if (!String.IsNullOrEmpty(DataIFrameUrlFields)) + { + string[] fields = DataIFrameUrlFields.Trim().TrimEnd(',').Split(','); + + List<object> fieldValues = new List<object>(); + foreach (string field in fields) + { + if (!String.IsNullOrEmpty(field)) + { + //fieldValues.Add(row.GetPropertyValue(field)); + object fieldObj = row.GetPropertyValue(field); + + string fieldValue = String.Empty; + if (fieldObj != null) + { + fieldValue = fieldObj.ToString(); + if (UrlEncode) + { + fieldValue = HttpUtility.UrlEncode(fieldValue); + } + } + fieldValues.Add(fieldValue); + } + } + + + if (!String.IsNullOrEmpty(DataIFrameUrlFormatString)) + { + hrefOriginal = String.Format(DataIFrameUrlFormatString, fieldValues.ToArray()); + } + else + { + if (fieldValues.Count > 0) + { + hrefOriginal = fieldValues[0].ToString(); + } + } + } + else + { + hrefOriginal = IFrameUrl; + } + + url = Grid.ResolveUrl(hrefOriginal); + + #endregion + + string title = String.Empty; + + #region DataTextField + + if (!String.IsNullOrEmpty(DataWindowTitleField)) + { + object value = row.GetPropertyValue(DataWindowTitleField); + + if (value != null) + { + if (!String.IsNullOrEmpty(DataWindowTitleFormatString)) + { + title = String.Format(DataWindowTitleFormatString, value); + } + else + { + title = value.ToString(); + } + } + } + else + { + title = Title; + } + + #endregion + + #region WindowID + + if (!String.IsNullOrEmpty(WindowID)) + { + Window window = ControlUtil.FindControl(Grid.Page, WindowID) as Window; + if (window != null) + { + nb.SetProperty("href", "javascript:;"); + nb.SetProperty("onclick", String.Format("javascript:{0}", window.GetShowReference(url, title))); + //nb.SetProperty("href", String.Format("javascript:X.{0}_show('{1}','{2}');", window.ClientID, url, title.Replace("'", "\""))); + } + } + + #endregion + + } + else + { + nb.SetProperty("class", "x-item-disabled"); + nb.SetProperty("disabled", "disabled"); + } + + string tooltip = GetTooltipString(row); + + #region Icon IconUrl + + string resolvedIconUrl = IconHelper.GetResolvedIconUrl(Icon, IconUrl); + if (!String.IsNullOrEmpty(resolvedIconUrl)) + { + nb.InnerProperty = String.Format("<img src=\"{0}\" {1} />", resolvedIconUrl, tooltip) + nb.InnerProperty; + } + + #endregion + + //string result2 = nb.ToString(); + + //#region Tooltip + + + //if (!String.IsNullOrEmpty(tooltip)) + //{ + // result2 = result2.ToString().Insert(2, tooltip); + //} + + //#endregion + + //return result2; + + string result = nb.ToString(); + + if (!String.IsNullOrEmpty(tooltip)) + { + result = result.ToString().Insert("<a".Length, tooltip); + } + + return result; + } + + + //public override string GetFieldType() + //{ + // return "string"; + //} + + #endregion + + #region OnFirstPreRender + + /// <summary> + /// Ⱦ HTML ֮ǰãҳһμػͨط + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + string jsContent = String.Format("var {0}={1};", XID, OB.ToString()); + AddGridColumnScript(jsContent); + + } + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumn.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumn.cs new file mode 100644 index 0000000..81d527f --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumn.cs @@ -0,0 +1,147 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridGroupColumn.cs + * CreatedOn: 2012-05-29 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Text; +using System.Xml; +using System.Web; +using System.Web.UI; +using System.Globalization; +using System.Data; +using System.Reflection; +using System.Web.UI.WebControls; +using System.ComponentModel.Design; + + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + [ParseChildren(true)] + [PersistChildren(false)] + [DefaultProperty("HeaderText")] + public class GridGroupColumn : ControlBase + { + #region Properties + + + private string _headerText = String.Empty; + + /// <summary> + /// ʾ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue("")] + [Description("ʾ")] + public string HeaderText + { + get + { + return _headerText; + } + set + { + _headerText = value; + } + } + + private TextAlign _textalign = TextAlign.Left; + + /// <summary> + /// ıλ + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TextAlign.Left)] + [Description("ıλ")] + public TextAlign TextAlign + { + get + { + return _textalign; + } + set + { + _textalign = value; + } + } + + + #endregion + + #region Columns/Rows + + private GridGroupColumnCollection _groupColumns; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridGroupColumnCollection GroupColumns + { + get + { + if (_groupColumns == null) + { + _groupColumns = new GridGroupColumnCollection(this); + } + return _groupColumns; + } + } + + + private GridColumnCollection _columns; + + /// <summary> + /// + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))] + public virtual GridColumnCollection Columns + { + get + { + if (_columns == null) + { + _columns = new GridColumnCollection(this); + } + return _columns; + } + } + + #endregion + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumnCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumnCollection.cs new file mode 100644 index 0000000..87d6b74 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridGroupColumn/GridGroupColumnCollection.cs @@ -0,0 +1,104 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridGroupColumnCollection.cs + * CreatedOn: 2012-05-29 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Xml; +using System.Text; +using System.Collections; +using System.ComponentModel; +using System.Collections.ObjectModel; + + +namespace FineUI +{ + /// <summary> + /// м + /// </summary> + public class GridGroupColumnCollection : BaseCollection<GridGroupColumn> + { + /// <summary> + /// 캯 + /// </summary> + /// <param name="parent">ؼʵ</param> + public GridGroupColumnCollection(ControlBase parent) + : base(parent) + { + + } + + /* + private Grid _grid; + + /// <summary> + /// 캯 + /// </summary> + /// <param name="grid">ʵ</param> + public GridGroupColumnCollection(Grid grid) + { + _grid = grid; + } + + protected override void InsertItem(int index, GridGroupColumn item) + { + item.Grid = _grid; + + if (_grid != null) + { + ResolveChildren(item); + } + + base.InsertItem(index, item); + } + + + + /// <summary> + /// ÿӽڵGridʵ + /// </summary> + /// <param name="node"></param> + private void ResolveChildren(GridGroupColumn column) + { + if (column.Columns.Count > 0) + { + foreach (GridColumn subColumn in column.Columns) + { + _grid.AllColumnsInternal.Add(subColumn); + } + } + else if(column.GroupColumns.Count > 0) + { + foreach (GridGroupColumn subColumn in column.GroupColumns) + { + ResolveChildren(subColumn); + } + } + } + + */ + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRow.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRow.cs new file mode 100644 index 0000000..d2ddcd7 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRow.cs @@ -0,0 +1,533 @@ +#region Comment + +/* + * Project FineUI + * + * FileName: GridRow.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Web.UI.WebControls; + +using Newtonsoft.Json.Linq; +using System.Collections.ObjectModel; + +namespace FineUI +{ + /// <summary> + /// + /// </summary> + [ToolboxItem(false)] + public class GridRow // : WebControl + { + #region Constructor + + /// <summary> + /// 캯 + /// </summary> + public GridRow() + { + + } + + /// <summary> + /// 캯 + /// </summary> + /// <param name="grid">ʵ</param> + /// <param name="dataItem">жӦԴڻطʱΪnull</param> + /// <param name="rowIndex"></param> + public GridRow(Grid grid, object dataItem, int rowIndex) + { + _grid = grid; + _dataItem = dataItem; + _rowIndex = rowIndex; + } + + #endregion + + #region Grid/DataItem/RowIndex + + private Grid _grid; + + /// <summary> + /// ʵ + /// </summary> + public Grid Grid + { + get + { + return _grid; + } + } + + private object _dataItem = null; + + /// <summary> + /// жӦԴά״̬ + /// </summary> + public object DataItem + { + get { return _dataItem; } + set { _dataItem = value; } + } + + + private int _rowIndex = 0; + + /// <summary> + /// ڼ + /// </summary> + public int RowIndex + { + get + { + return _rowIndex; + } + set + { + _rowIndex = value; + } + } + + + #endregion + + #region Properties + + private object[] _values = null; + + /// <summary> + /// е״̬Ϣ + /// </summary> + public object[] Values + { + get + { + return _values; + } + set + { + _values = value; + } + } + + private object[] _dataKeys = null; + + /// <summary> + /// DataKeyNamesֶεֵ + /// </summary> + public object[] DataKeys + { + get + { + return _dataKeys; + } + set + { + _dataKeys = value; + } + } + + private string _rowID = String.Empty; + + /// <summary> + /// DataIDFieldֶεֵ + /// </summary> + public string RowID + { + get + { + return _rowID; + } + internal set + { + _rowID = value; + } + } + + private object[] _states = null; + + /// <summary> + /// ǹԣCheckBoxFieldͨGetCheckedState + /// </summary> + internal object[] States + { + get + { + return _states; + } + set + { + _states = value; + } + } + + //private object[] _extraValues = null; + ///// <summary> + ///// ҪֵCheckBoxFieldҪǷѡе״̬ + ///// </summary> + //internal object[] ExtraValues + //{ + // get + // { + // return _extraValues; + // } + // set + // { + // _extraValues = value; + // } + //} + + #endregion + + #region ToShortStates/FromShortStates + + /// <summary> + /// Ƿ״̬б + /// </summary> + /// <returns></returns> + internal bool HasStates() + { + bool defined = false; + + foreach (object state in _states) + { + if (state != null) + { + defined = true; + break; + } + } + + return defined; + } + + + /// <summary> + /// ָǰ״̬б + /// </summary> + /// <param name="states"></param> + internal void RecoverStates(object[] states) + { + if (states == null || states.Length == 0) + { + Collection<GridColumn> columns = _grid.AllColumns; + _states = new object[columns.Count]; + } + else + { + _states = states; + + // Ѿ˵ǰеStatesStatesָӦԪValueCheckBoxFieldGetColumnValueǴStatesȡֵ + int columnIndex = 0; + foreach (object state in _states) + { + if (state != null) + { + UpdateValuesAt(columnIndex); + } + + columnIndex++; + } + } + } + + ///// <summary> + ///// ǰ״̬б + ///// </summary> + ///// <returns></returns> + //internal object[] ToShortStates() + //{ + // List<object> shortStates = new List<object>(); + // Collection<GridColumn> columns = _grid.AllColumns; + // for (int i = 0, count = columns.Count; i < count; i++) + // { + // if (columns[i].PersistState) + // { + // shortStates.Add(States[i]); + // } + // } + // return shortStates.ToArray(); + //} + + /// <summary> + /// ָǰ״̬бͬʱӦValuesֵ + /// </summary> + /// <param name="shortStates"></param> + internal void FromShortStates(object[] shortStates) + { + if (shortStates == null || shortStates.Length == 0) + { + return; + } + + Collection<GridColumn> columns = _grid.AllColumns; + States = new object[columns.Count]; + int shortStateIndex = 0; + for (int i = 0, count = columns.Count; i < count; i++) + { + GridColumn column = columns[i]; + if (column.PersistState) + { + object state = shortStates[shortStateIndex++]; + if (state is JValue) + { + States[i] = (state as JValue).Value; + } + else + { + States[i] = state; + } + + + UpdateValuesAt(i); + } + } + } + + + /// <summary> + /// µǰijеȾHTML + /// </summary> + /// <param name="columnIndex"></param> + internal void UpdateValuesAt(int columnIndex) + { + Values[columnIndex] = _grid.AllColumns[columnIndex].GetColumnValue(this); + } + + #endregion + + #region TemplateContainers + + + private GridTemplateContainer[] _templateContainers = null; + + /// <summary> + /// ģпؼбһ͵Ϊ[GridRowControl, null, null, GridRowControl, null, null, null, null, null] + /// </summary> + public GridTemplateContainer[] TemplateContainers + { + get + { + return _templateContainers; + } + set + { + _templateContainers = value; + } + } + + /// <summary> + /// ģпؼбݰʱԶÿģпؼIDطʱFStateлطģпؼID + /// </summary> + public void InitTemplateContainers() + { + Collection<GridColumn> columns = _grid.AllColumns; + TemplateContainers = new GridTemplateContainer[columns.Count]; + + for (int i = 0, count = columns.Count; i < count; i++) + { + GridColumn column = columns[i]; + if (column is TemplateField) + { + TemplateField field = column as TemplateField; + GridTemplateContainer control = new GridTemplateContainer(DataItem, RowIndex); + + + // ָIDԶ ct123 ΨһID + //control.ID = String.Format("c{0}r{1}", column.ColumnIndex, RowIndex); + + if (DataItem == null) + { + // طʱָFState׶Σݰ󶨽׶ΣValuesжȡģеķIDڵһμʱԶɵģ + string fieldValue = Values[i].ToString(); + if (fieldValue.StartsWith(Grid.TEMPLATE_PLACEHOLDER_PREFIX)) + { + control.ID = fieldValue.Substring(Grid.TEMPLATE_PLACEHOLDER_PREFIX.Length); + } + } + + + + field.ItemTemplate.InstantiateIn(control); + + _grid.Controls.Add(control); + TemplateContainers[column.ColumnIndex] = control; + + + } + + } + } + + #endregion + + #region DataBindRow + + ///// <summary> + ///// ӿؼ + ///// </summary> + //protected override void DataBindChildren() + //{ + // base.DataBindChildren(); + + // DataBindRow(); + //} + + /// <summary> + /// еֵ + /// </summary> + internal void DataBindRow() + { + // DataIDField + if (!String.IsNullOrEmpty(Grid.DataIDField)) + { + RowID = GetPropertyValue(Grid.DataIDField).ToString(); + } + else + { + // δ DataIDFieldԶһ RowId + //RowID = GridRowIDManager.Instance.GetNextGridRowID(); + + // δ DataIDFieldԶһ RowId + // ʹ rowIndex װ RowIdҳطԱȽȶ + RowID = String.Format("frow{0}", RowIndex); + } + + + + + foreach (GridTemplateContainer tplCtrl in TemplateContainers) + { + if (tplCtrl != null) + { + tplCtrl.DataBind(); + } + } + + + Collection<GridColumn> columns = _grid.AllColumns; + + // ÿеֵ + Values = new object[columns.Count]; + States = new object[columns.Count]; + + for (int i = 0, count = columns.Count; i < count; i++) + { + GridColumn column = columns[i]; + Values[i] = column.GetColumnValue(this); + + if (column.PersistState) + { + States[i] = column.GetColumnState(this); + } + } + + // DataKeysֵ + if (_grid.DataKeyNames != null) + { + string[] keyNames = _grid.DataKeyNames; + DataKeys = new object[keyNames.Length]; + for (int j = 0, count = keyNames.Length; j < count; j++) + { + string keyName = keyNames[j]; + + // v6.0.0 - طʱıеValuesDataKeysԣݱ仯Ҫ° + //if (_grid.AllowCellEditing) + //{ + // // Ԫ༭DataKeysֵͳʹжFieldType + // // ȷûڿͻ޸DataKeyNamesжֵͬʱGridLoadPostDataиֵ + // if (_grid.cellEditingDataKeyNameField.ContainsKey(keyName)) + // { + // DataKeys[j] = _grid.cellEditingDataKeyNameField[keyName].GetColumnValue(this); + // } + //} + + //if (DataKeys[j] == null) + //{ + // DataKeys[j] = GetPropertyValue(keyName); + //} + + object fieldValue = GetPropertyValue(keyName); + + DataKeys[j] = fieldValue; + } + } + } + + + internal object GetPropertyValue(string propertyName) + { + return ObjectUtil.GetPropertyValue(DataItem, propertyName); + } + + private string RemoveNewLine(string columnValue) + { + // ɾHTMLе "\r\n " + return Regex.Replace(columnValue, "\r?\n\\s*", ""); + } + + #endregion + + #region FindControl + + /// <summary> + /// ұڵĿؼ + /// </summary> + /// <param name="id"></param> + /// <returns></returns> + public Control FindControl(string id) + { + foreach (GridTemplateContainer control in TemplateContainers) + { + if (control != null) + { + Control found; + if (control.ID == id) + { + found = control; + } + else + { + found = control.FindControl(id); + } + + if (found != null) + { + return found; + } + } + } + + return null; + } + + #endregion + + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowCollection.cs new file mode 100644 index 0000000..02b6d9a --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowCollection.cs @@ -0,0 +1,46 @@ + +#region Comment + +/* + * Project FineUI + * + * FileName: GridRowCollection.cs + * CreatedOn: 2008-05-19 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections; +using System.Data; +using System.Collections.ObjectModel; +using System.Web.UI; + + +namespace FineUI +{ + /// <summary> + /// пؼ + /// </summary> + public class GridRowCollection : Collection<GridRow> + { + + + } + +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowControl.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowControl.cs new file mode 100644 index 0000000..662117e --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridRowControl.cs @@ -0,0 +1,138 @@ +#region Comment + +/* + * Project FineUI + * + * FileName: GridRowControl.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; +using System.IO; +using System.Globalization; + + +namespace FineUI +{ + /// <summary> + /// ΪģеݰʵIDataItemContainerӿ + /// </summary> + [ToolboxItem(false)] + public class GridRowControl : WebControl, IDataItemContainer, INamingContainer + { + /// <summary> + /// 캯 + /// </summary> + /// <param name="dataItem">Դ</param> + /// <param name="rowIndex"></param> + public GridRowControl(object dataItem, int rowIndex) + { + _dataItem = dataItem; + _dataItemIndex = _displayIndex = rowIndex; + + } + + /// <summary> + /// ؼʼ¼ + /// </summary> + /// <param name="e">¼</param> + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!DesignMode) + { + // ȷӿؼѾ + EnsureChildControls(); + + // ؼû IDԶһ磺ct100 + base.EnsureID(); + } + + } + + #region RenderBeginTag + + /// <summary> + /// Ⱦʼǩ + /// </summary> + /// <param name="writer">ASP.NETؼ</param> + public override void RenderBeginTag(HtmlTextWriter writer) + { + //base.RenderBeginTag(writer); + + writer.Write(String.Format("<div class=\"x-grid-tpl\" id=\"{0}\">", ClientID)); + } + + /// <summary> + /// Ⱦǩ + /// </summary> + /// <param name="writer">ASP.NETؼ</param> + public override void RenderEndTag(HtmlTextWriter writer) + { + //base.RenderEndTag(writer); + + writer.Write("</div>"); + } + + #endregion + + #region IDataItemContainer Members + + private object _dataItem; + + /// <summary> + /// ԴIDataItemContainerԱ + /// </summary> + public object DataItem + { + get { return _dataItem; } + } + + private int _dataItemIndex; + + /// <summary> + /// IDataItemContainerԱ + /// </summary> + public int DataItemIndex + { + get { return _dataItemIndex; } + } + + private int _displayIndex; + + /// <summary> + /// ڿؼʾλõIDataItemContainerԱ + /// </summary> + public int DisplayIndex + { + get { return _displayIndex; } + } + + #endregion + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridTemplateContainer.cs b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridTemplateContainer.cs new file mode 100644 index 0000000..ffd28f3 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.Grid/GridRow/GridTemplateContainer.cs @@ -0,0 +1,138 @@ +#region Comment + +/* + * Project FineUI + * + * FileName: GridTemplateContainer.cs + * CreatedOn: 2008-05-27 + * CreatedBy: 30372245@qq.com + * + * + * Description + * -> + * + * History + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Data; +using System.Reflection; +using System.ComponentModel; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Text; +using System.IO; +using System.Globalization; + + +namespace FineUI +{ + /// <summary> + /// ΪģеݰʵIDataItemContainerӿ + /// </summary> + [ToolboxItem(false)] + public class GridTemplateContainer : WebControl, IDataItemContainer, INamingContainer + { + /// <summary> + /// 캯 + /// </summary> + /// <param name="dataItem">Դ</param> + /// <param name="rowIndex"></param> + public GridTemplateContainer(object dataItem, int rowIndex) + { + _dataItem = dataItem; + _dataItemIndex = _displayIndex = rowIndex; + + } + + /// <summary> + /// ؼʼ¼ + /// </summary> + /// <param name="e">¼</param> + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!DesignMode) + { + // ȷӿؼѾ + EnsureChildControls(); + + // ؼû IDԶһ磺ct100 + base.EnsureID(); + } + + } + + #region RenderBeginTag + + /// <summary> + /// Ⱦʼǩ + /// </summary> + /// <param name="writer">ASP.NETؼ</param> + public override void RenderBeginTag(HtmlTextWriter writer) + { + //base.RenderBeginTag(writer); + + writer.Write(String.Format("<div class=\"f-grid-tpl x-grid-tpl\" id=\"{0}\">", ClientID)); + } + + /// <summary> + /// Ⱦǩ + /// </summary> + /// <param name="writer">ASP.NETؼ</param> + public override void RenderEndTag(HtmlTextWriter writer) + { + //base.RenderEndTag(writer); + + writer.Write("</div>"); + } + + #endregion + + #region IDataItemContainer Members + + private object _dataItem; + + /// <summary> + /// ԴIDataItemContainerԱ + /// </summary> + public object DataItem + { + get { return _dataItem; } + } + + private int _dataItemIndex; + + /// <summary> + /// IDataItemContainerԱ + /// </summary> + public int DataItemIndex + { + get { return _dataItemIndex; } + } + + private int _displayIndex; + + /// <summary> + /// ڿؼʾλõIDataItemContainerԱ + /// </summary> + public int DisplayIndex + { + get { return _displayIndex; } + } + + #endregion + + } +} + + + diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/Region/Region.cs b/FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/Region/Region.cs new file mode 100644 index 0000000..78009e9 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/Region/Region.cs @@ -0,0 +1,556 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: RegionCollection.cs + * CreatedOn: 2008-06-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + + +namespace FineUI +{ + /// <summary> + /// 区域控件 + /// </summary> + [Designer("FineUI.Design.RegionDesigner, FineUI.Design")] + [ToolboxData("<{0}:Region Position=\"Center\" runat=\"server\"></{0}:Region>")] + [ToolboxBitmap(typeof(Region), "toolbox.Region.bmp")] + [Description("区域控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Region : CollapsablePanel + { + #region Unsupported Properties + + //[Category(CategoryName.OPTIONS)] + //[Description("布局类型")] + //[Browsable(false)] + //public override LayoutType Layout + //{ + // get + // { + // return LayoutType.Fit; + // } + //} + + + #endregion + + #region Properties + + //private string ContentPlaceHolderId_Default = ""; + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("ContentPlaceHolderId")] + //public string ContentPlaceHolderId + //{ + // get + // { + // object obj = BoxState["ContentPlaceHolderId"]; + // return obj == null ? ContentPlaceHolderId_Default : (string)obj; + // } + // set + // { + // BoxState["ContentPlaceHolderId"] = value; + // } + //} + + /// <summary> + /// 是否可以拖动分隔条 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以拖动分隔条")] + [Obsolete("已废除,请使用RegionSplit属性")] + public bool Split + { + get + { + //object obj = FState["Split"]; + //return obj == null ? false : (bool)obj; + return RegionSplit; + } + set + { + RegionSplit = value; + } + } + + + /// <summary> + /// 位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(Position.Center)] + [Description("位置")] + [Obsolete("已废除,请使用RegionPosition属性")] + public Position Position + { + get + { + //object obj = FState["PositionType"]; + //return obj == null ? Position.Center : (Position)obj; + return RegionPosition; + } + set + { + RegionPosition = value; + } + } + + + ///// <summary> + ///// 是否启用分隔条提示 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用分隔条提示")] + //public bool EnableSplitTip + //{ + // get + // { + // object obj = FState["EnableSplitTip"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableSplitTip"] = value; + // } + //} + + + ///// <summary> + ///// 分隔条提示信息 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("分隔条提示信息")] + //public string SplitTip + //{ + // get + // { + // object obj = FState["SplitTip"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["SplitTip"] = value; + // } + //} + + ///// <summary> + ///// 可折叠区域的分隔条提示信息 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("可折叠区域的分隔条提示信息")] + //public string CollapsibleSplitTip + //{ + // get + // { + // object obj = FState["CollapsibleSplitTip"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["CollapsibleSplitTip"] = value; + // } + //} + + + ///// <summary> + ///// 外边距 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("外边距")] + //[Obsolete("已废除,请使用Margin属性")] + //public string Margins + //{ + // get + // { + // return Margin; + // } + // set + // { + // Margin = value; + // } + //} + + ///// <summary> + ///// 折叠后的边距 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue("")] + //[Description("折叠后的边距")] + //public string CMargins + //{ + // get + // { + // object obj = FState["CMargins"]; + // return obj == null ? "" : (string)obj; + // } + // set + // { + // FState["CMargins"] = value; + // } + //} + + + ///// <summary> + ///// 折叠模式(通过点击工具栏上的按钮还是点击分隔条上的按钮来展开折叠面板) + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(CollapseMode.Default)] + //[Description("折叠模式(通过点击工具栏上的按钮还是点击分隔条上的按钮来展开折叠面板)")] + //public CollapseMode CollapseMode + //{ + // get + // { + // object obj = FState["CollapseMode"]; + // return obj == null ? CollapseMode.Default : (CollapseMode)obj; + // } + // set + // { + // FState["CollapseMode"] = value; + // } + //} + + + #endregion + + #region OnInit + + /// <summary> + /// Tab 控件必须包含在 TabStrip 中 + /// </summary> + /// <param name="e"></param> + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!DesignMode) + { + if (!(Parent is RegionPanel)) + { + throw new Exception("Region control must be included in RegionPanel control."); + } + } + + } + + #endregion + + #region oldcode + + //private ControlBaseCollection _items; + + //[Category(CategoryName.OPTIONS)] + //[NotifyParentProperty(true)] + //[PersistenceMode(PersistenceMode.InnerDefaultProperty)] + //public virtual ControlBaseCollection Items + //{ + // get + // { + // if (_items == null) + // { + // _items = new ControlBaseCollection(this); + + // //if (base.IsTrackingViewState) + // //{ + // // ((IStateManager)_rows).TrackViewState(); + // //} + // } + // return _items; + // } + //} + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + #region Options + + //// 默认Layout + //OB.AddProperty(OptionName.Layout, LayoutTypeName.GetName(Layout)); + + //// 必须设置位置 + //OB.AddProperty("region", PositionHelper.GetName(Position)); + + ////if (!String.IsNullOrEmpty(Margins)) + ////{ + //// OB.AddProperty("margins", Margins); + ////} + + //if (Split) + //{ + // OB.AddProperty("split", true); + //} + + //if (EnableSplitTip) + //{ + // OB.AddProperty("useSplitTips", true); + // if (EnableCollapse) + // { + // if (!String.IsNullOrEmpty(CollapsibleSplitTip)) + // { + // OB.AddProperty("collapsibleSplitTip", CollapsibleSplitTip); + // } + // } + // else + // { + // if (!String.IsNullOrEmpty(SplitTip)) + // { + // OB.AddProperty("splitTip", SplitTip); + // } + // } + //} + + //if (CollapseMode == CollapseMode.Mini) + //{ + // OB.AddProperty("collapseMode", CollapseModeName.GetName(CollapseMode)); + + //} + + //if (!String.IsNullOrEmpty(CMargins)) + //{ + // OB.AddProperty("cmargins", CMargins); + //} + + + #endregion + + #region oldcode + + //if (!String.IsNullOrEmpty(ContentPlaceHolderId)) + //{ + // // 取得ContentPlaceHolder + // Control hoderControl = ControlUtil.FindControl(Page, ContentPlaceHolderId); + + // // Clear Items + // OB.RemoveProperty(OptionName.Items); + + // // 内容页面的控件列表 + // foreach (Control c in hoderControl.Controls) + // { + // ControlBase component = c as ControlBase; + // if (component != null) + // { + // component.RenderImmediately = false; + // component.RefParentControl = this; + + // FineUI.PanelBase panel = component as FineUI.PanelBase; + // if (panel != null) + // { + // panel.AutoHeight = false; + // panel.AutoWidth = false; + // } + // } + // } + + // AddItemsToOB(hoderControl.Controls); + + // #region old code + // //// 这中改变控件层级的做法不对 + // //// 取得 ContentPlaceHolder 下面的所有控件 + // //List<ControlBase> componentList = new List<ControlBase>(); + // //for (int i = 0, count = hoderControl.Controls.Count; i < count; i++) + // //{ + // // ControlBase component = hoderControl.Controls[i] as ControlBase; + // // if (component != null) + // // { + // // componentList.Add(component); + // // } + // //} + + // //// 把这些控件添加到 本控件的子控件 + // //foreach (ControlBase c in componentList) + // //{ + // // c.RenderImmediately = false; + + // // Controls.Add(c); + // //} + + // //// Add Items + // //AddItemsToOB(); + + // #endregion + //} + + #endregion + + #region oldcode + + //if (!String.IsNullOrEmpty(SplitColor)) + //{ + // AddPageFirstLoadAbsoluteScript(String.Format("Ext.get('{0}-xsplit').setStyle('background-color','{1}');", ClientID, SplitColor), 1000); + //} + + //string renderScript = String.Empty; + + //if (!String.IsNullOrEmpty(SplitColor)) + //{ + // renderScript += String.Format("Ext.get('{0}-xsplit').setStyle('background-color','{1}');", ClientID, SplitColor); + //} + + //OB.Listeners.AddProperty("render", "function(component){" + renderScript + "}", true); + + #endregion + + string jsContent = String.Format("var {0}=F.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + + } + + #endregion + + #region old code + + + //#region ChildrenContentID + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("子控件的容器的样式类(Tab用到了)")] + //protected override string ChildrenContentClass + //{ + // get + // { + // return "x-hide-display"; + // } + //} + + //#endregion + + //#region internal RenderChildrenAsContent + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("渲染子控件为容器内容")] + //internal override bool RenderChildrenAsContent + //{ + // get + // { + // return true; + // } + //} + //#endregion + + //#region IStateManager Members + + //bool IStateManager.IsTrackingViewState + //{ + // get { return base.IsTrackingViewState; } + //} + + //void IStateManager.LoadViewState(object state) + //{ + // base.LoadViewState(state); + //} + + //object IStateManager.SaveViewState() + //{ + // return base.SaveViewState(); + //} + + //void IStateManager.TrackViewState() + //{ + // base.TrackViewState(); + //} + + //#endregion + + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/Region/RegionCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/Region/RegionCollection.cs new file mode 100644 index 0000000..445bbd2 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/Region/RegionCollection.cs @@ -0,0 +1,69 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: RegionCollection.cs + * CreatedOn: 2008-06-12 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// Region控件集合 + /// </summary> + public class RegionCollection : BaseCollection<Region> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public RegionCollection(PanelBase parent) + : base(parent) + { + + } + /* + private PanelBase panelBase; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="panelBase">面板实例</param> + public RegionCollection(PanelBase panelBase) + { + this.panelBase = panelBase; + } + + + protected override void InsertItem(int index, Region item) + { + base.InsertItem(index, item); + + item.RenderWrapperNode = false; + panelBase.Controls.AddAt(index, item); + } + */ + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/RegionPanel.cs b/FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/RegionPanel.cs new file mode 100644 index 0000000..7505140 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.RegionPanel/RegionPanel.cs @@ -0,0 +1,256 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: RegionPanel.cs + * CreatedOn: 2008-08-14 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 区域面板控件 + /// </summary> + [Designer("FineUI.Design.RegionPanelDesigner, FineUI.Design")] + [ToolboxData("<{0}:RegionPanel ShowBorder=\"false\" runat=\"server\"><Regions><{0}:Region Split=\"true\" Width=\"200px\" ShowHeader=\"true\" Title=\"Left Region\" Position=\"Left\" runat=\"server\"></{0}:Region><{0}:Region Title=\"Center Region\" Position=\"Center\" ShowHeader=\"true\" runat=\"server\"></{0}:Region></Regions></{0}:RegionPanel>")] + [ToolboxBitmap(typeof(RegionPanel), "toolbox.RegionPanel.bmp")] + [Description("区域面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + public class RegionPanel : PanelBase + { + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Region)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Region; + } + } + + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("设置Wrapper的Display=inline")] + //public override bool WrapperDisplayInline + //{ + // get + // { + // return true; + // } + //} + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool AutoHeight + //{ + // get + // { + // return false; + // } + //} + + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool AutoWidth + //{ + // get + // { + // return false; + // } + //} + + #endregion + + #region Regions + + private RegionCollection _regions; + + /// <summary> + /// 区域集合 + /// </summary> + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + public virtual RegionCollection Regions + { + get + { + if (_regions == null) + { + _regions = new RegionCollection(this); + } + return _regions; + } + } + + #endregion + + #region OnPreRender + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + + + #region Regions + + if (Regions.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (Region item in Regions) + { + if (item.Visible) + { + ab.AddProperty(String.Format("{0}", item.XID), true); + } + } + + OB.AddProperty("items", ab.ToString(), true); + } + + #endregion + + + string jsContent = String.Format("var {0}=F.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + + AddStartupScript(jsContent); + + } + + #endregion + + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/Tab/Tab.cs b/FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/Tab/Tab.cs new file mode 100644 index 0000000..b837fd0 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/Tab/Tab.cs @@ -0,0 +1,475 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: Tab.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + + +namespace FineUI +{ + /// <summary> + /// 选项卡控件 + /// </summary> + [Designer("FineUI.Design.TabDesigner, FineUI.Design")] + [ToolboxData("<{0}:Tab Title=\"Tab\" BodyPadding=\"5px\" runat=\"server\"></{0}:Tab>")] + [ToolboxBitmap(typeof(Tab), "toolbox.Tab.bmp")] + [Description("选项卡控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [DefaultProperty("Title")] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + public class Tab : CollapsablePanel + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public Tab() + { + ServerAjaxProperties.Remove("Hidden"); + ClientAjaxProperties.Add("Hidden"); + + AddServerAjaxProperties(); + AddClientAjaxProperties(); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowHeader + { + get + { + return true; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ShowBorder + { + get + { + return false; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableCollapse + { + get + { + return false; + } + } + + #endregion + + #region Properties + + /// <summary> + /// 是否可以关闭 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否可以关闭")] + public bool EnableClose + { + get + { + object obj = FState["EnableClose"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableClose"] = value; + } + } + + ///// <summary> + ///// 是否自动高度 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否自动高度")] + //public override bool AutoHeight + //{ + // get + // { + // object obj = FState["AutoHeight"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["AutoHeight"] = value; + // } + //} + + ///// <summary> + ///// 是否自动宽度 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否自动宽度")] + //public override bool AutoWidth + //{ + // get + // { + // object obj = FState["AutoWidth"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["AutoWidth"] = value; + // } + //} + + + ///// <summary> + ///// 是否可以回发 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否可以回发")] + //public bool EnablePostBack + //{ + // get + // { + // object obj = FState["EnablePostBack"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnablePostBack"] = value; + // } + //} + + //[Browsable(true)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("延迟加载此选项卡的IFrame")] + //internal bool IFrameDelayLoad + //{ + // get + // { + // object obj = FState["IFrameDelayLoad"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["IFrameDelayLoad"] = value; + // } + //} + + #endregion + + #region OnInit + + /// <summary> + /// Tab 控件必须包含在 TabStrip 中 + /// </summary> + /// <param name="e"></param> + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (!DesignMode) + { + if (!(Parent is TabStrip)) + { + throw new Exception("Tab must be inside TabStrip."); + } + } + } + + #endregion + + #region OnAjaxPreRender/OnFirstPreRender + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("是否隐藏Tab")] + private string HiddenHiddenFieldID + { + get + { + return String.Format("{0}_Hidden", ClientID); + } + } + + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + //if (PropertyModified("Text")) + //{ + // sb.AppendFormat("{0}.setValue({1});", XID, JsHelper.Enquote(Text)); + //} + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + TabStrip tabStrip = Parent as TabStrip; + + if (EnableIFrame) + { + if (tabStrip.ActiveTabIndex >= 0 && + tabStrip.ActiveTabIndex < tabStrip.Tabs.Count && + this == tabStrip.Tabs[tabStrip.ActiveTabIndex]) + { + // 当前是激活选项卡 + } + else + { + // 对于非激活Tab,其中的Iframe需要延迟加载 + OB.RemoveProperty("html"); + OB.RemoveProperty("f_iframe_loaded"); + OB.AddProperty("f_iframe_loaded", false); + } + } + + OB.AddProperty("f_type", "tab"); + + //OB.AddProperty("__box_hidden_field_id", HiddenHiddenFieldID); + + if (EnableClose) + { + OB.AddProperty("closable", true); + } + + //OB.RemoveProperty("hidden"); + //if (Hidden) + //{ + // AddStartupAbsoluteScript(GetHideReference()); + //} + + //OB.Listeners.AddProperty("beforeclose", JsHelper.GetFunction(GetHideReference() + "return false;", "cmp"), true); + + + //string hiddenFieldsScript = String.Empty; + //hiddenFieldsScript += GetSetHiddenFieldValueScript(HiddenHiddenFieldID, Hidden.ToString().ToLower()); + ////hiddenFieldsScript += "\r\n"; + + + string jsContent = String.Format("var {0}=F.create('Ext.panel.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + + } + + /// <summary> + /// 获取 Hidden 属性改变的 JavaScript 脚本 + /// Tab 控件需要特殊处理,而不是像其他客户端组件一样调用 f_setVisible 函数 + /// </summary> + protected override string GetHiddenPropertyChangedScript() + { + if (PropertyModified("Hidden")) + { + return Hidden ? GetHideReference() : GetShowReference(); + + } + return String.Empty; + } + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + base.LoadPostData(postDataKey, postCollection); + + bool postHidden = Convert.ToBoolean(postCollection[HiddenHiddenFieldID]); + if (Hidden != postHidden) + { + Hidden = postHidden; + FState.BackupPostDataProperty("Hidden"); + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public override void RaisePostDataChangedEvent() + { + base.RaisePostDataChangedEvent(); + } + + #endregion + + #region GetShowReference GetHideReference + + /// <summary> + /// 获取显示选项卡的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetShowReference() + { + TabStrip tabStrip = Parent as TabStrip; + if (tabStrip != null) + { + return String.Format("{0}.showTab('{1}');", tabStrip.ScriptID, ClientID); + } + return String.Empty; + } + + /// <summary> + /// 获取隐藏选项卡的客户端脚本 + /// </summary> + /// <returns>客户端脚本</returns> + public string GetHideReference() + { + TabStrip tabStrip = Parent as TabStrip; + if (tabStrip != null) + { + return String.Format("{0}.hideTab('{1}');", tabStrip.ScriptID, ClientID); + } + return String.Empty; + } + + #endregion + + + #region old code + //#region internal RenderChildrenAsContent + + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("渲染子控件为容器内容")] + //internal override bool RenderChildrenAsContent + //{ + // get + // { + // return true; + // } + //} + //#endregion + + //#region IStateManager Members + + //bool IStateManager.IsTrackingViewState + //{ + // get { return base.IsTrackingViewState; } + //} + + //void IStateManager.LoadViewState(object state) + //{ + // base.LoadViewState(state); + //} + + //object IStateManager.SaveViewState() + //{ + // return base.SaveViewState(); + //} + + //void IStateManager.TrackViewState() + //{ + // base.TrackViewState(); + //} + + //#endregion + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[2]; + + // states[0] = base.SaveViewState(); + + // states[1] = ((IStateManager)Rows).SaveViewState(); + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Rows).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Rows).TrackViewState(); + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/Tab/TabCollection.cs b/FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/Tab/TabCollection.cs new file mode 100644 index 0000000..eb472f2 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/Tab/TabCollection.cs @@ -0,0 +1,88 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: TabCollection.cs + * CreatedOn: 2008-05-06 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.Web.UI; + +namespace FineUI +{ + /// <summary> + /// 选项卡集合 + /// </summary> + public class TabCollection : BaseCollection<Tab> + { + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="parent">父控件实例</param> + public TabCollection(TabStrip parent) + : base(parent) + { + + } + /* + private TabStrip _tabStrip; + + /// <summary> + /// 构造函数 + /// </summary> + /// <param name="tabStrip">选项卡面板实例</param> + public TabCollection(TabStrip tabStrip) + { + _tabStrip = tabStrip; + } + + protected override void InsertItem(int index, Tab item) + { + item.RenderWrapperNode = false; + _tabStrip.Controls.AddAt(index, item); + + base.InsertItem(index, item); + } + + protected override void RemoveItem(int index) + { + _tabStrip.Controls.RemoveAt(index); + + base.RemoveItem(index); + } + + protected override void ClearItems() + { + // We should only remove this collection related controls + // Note we must loop from the last element(Count-1) to the first one(0) + for (int i = Count - 1; i >= 0; i--) + { + _tabStrip.Controls.RemoveAt(i); + } + + base.ClearItems(); + } + + */ + } +} diff --git a/FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/TabStrip.cs b/FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/TabStrip.cs new file mode 100644 index 0000000..acc1f40 --- /dev/null +++ b/FineUI_v6/FineUI/WebControls/PanelBase.TabStrip/TabStrip.cs @@ -0,0 +1,831 @@ + +#region Comment + +/* + * Project: FineUI + * + * FileName: TabStrip.cs + * CreatedOn: 2008-04-21 + * CreatedBy: 30372245@qq.com + * + * + * Description: + * -> + * + * History: + * -> + * + * + * + * + */ + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Drawing; +using System.Drawing.Design; +using System.Web.UI.Design.WebControls; + +using Newtonsoft.Json; +using System.Web.UI.HtmlControls; + +namespace FineUI +{ + /// <summary> + /// 选项卡面板控件 + /// </summary> + [Designer("FineUI.Design.TabStripDesigner, FineUI.Design")] + [ToolboxData("<{0}:TabStrip ShowBorder=\"True\" ActiveTabIndex=\"0\" runat=\"server\"><Tabs><{0}:Tab runat=\"server\" Title=\"Tab1\" BodyPadding=\"5px\"></{0}:Tab><{0}:Tab runat=\"server\" Title=\"Tab2\" EnableBackgroundColor=\"true\" BodyPadding=\"5px\"></{0}:Tab></Tabs></{0}:TabStrip>")] + [ToolboxBitmap(typeof(TabStrip), "toolbox.TabStrip.bmp")] + [Description("选项卡面板控件")] + [ParseChildren(true)] + [PersistChildren(false)] + [ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))] + [DefaultEvent("TabIndexChanged")] + public class TabStrip : PanelBase, IPostBackDataHandler, IPostBackEventHandler + { + #region Constructor + + /// <summary> + /// 构造函数 + /// </summary> + public TabStrip() + { + AddServerAjaxProperties(); + AddClientAjaxProperties("ActiveTabIndex"); + } + + #endregion + + #region Unsupported Properties + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ITemplate Content + { + get + { + return base.Content; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override ControlBaseCollection Items + { + get + { + return base.Items; + } + } + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool EnableIFrame + { + get + { + return base.EnableIFrame; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameUrl + { + get + { + return base.IFrameUrl; + } + } + + + /// <summary> + /// 不支持此属性 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string IFrameName + { + get + { + return base.IFrameName; + } + } + + /// <summary> + /// 布局类型 + /// </summary> + [ReadOnly(true)] + [Category(CategoryName.LAYOUT)] + [DefaultValue(Layout.Card)] + [Description("布局类型")] + public override Layout Layout + { + get + { + return Layout.Card; + } + } + + ///// <summary> + ///// 不支持此属性 + ///// </summary> + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //public override bool EnableLightBackgroundColor + //{ + // get + // { + // return false; + // } + //} + + #endregion + + #region Properties + + /// <summary> + /// 切换选项卡时是否自动回发 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("切换选项卡时是否自动回发")] + public bool AutoPostBack + { + get + { + object obj = FState["AutoPostBack"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["AutoPostBack"] = value; + } + } + + ///// <summary> + ///// 显示标题的背景颜色 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(true)] + //[Description("显示标题的背景颜色")] + //public bool EnableTitleBackgroundColor + //{ + // get + // { + // object obj = FState["EnableTitleBackgroundColor"]; + // return obj == null ? true : (bool)obj; + // } + // set + // { + // FState["EnableTitleBackgroundColor"] = value; + // } + //} + + /// <summary> + /// 是否启用右键菜单(可用来关闭当前Tab和所有其他Tab) + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(false)] + [Description("是否启用右键菜单(可用来关闭当前Tab和所有其他Tab)")] + public bool EnableTabCloseMenu + { + get + { + object obj = FState["EnableTabCloseMenu"]; + return obj == null ? false : (bool)obj; + } + set + { + FState["EnableTabCloseMenu"] = value; + } + } + + + ///// <summary> + ///// 选项卡之间空白 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(typeof(Unit), "2")] + //[Description("选项卡之间空白")] + //public Unit TabMargin + //{ + // get + // { + // object obj = BoxState["TabMargin"]; + // return obj == null ? (Unit)2 : (Unit)obj; + // } + // set + // { + // BoxState["TabMargin"] = value; + // } + //} + + + /// <summary> + /// 选项卡显示的位置 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(TabPosition.Top)] + [Description("选项卡显示的位置")] + public TabPosition TabPosition + { + get + { + object obj = FState["TabPosition"]; + return obj == null ? TabPosition.Top : (TabPosition)obj; + } + set + { + FState["TabPosition"] = value; + } + } + + + ///// <summary> + ///// 是否启用延迟加载选项卡 + ///// </summary> + //[Category(CategoryName.OPTIONS)] + //[DefaultValue(false)] + //[Description("是否启用延迟加载选项卡")] + //public bool EnableDeferredRender + //{ + // get + // { + // object obj = FState["EnableDeferredRender"]; + // return obj == null ? false : (bool)obj; + // } + // set + // { + // FState["EnableDeferredRender"] = value; + // } + //} + + + + /// <summary> + /// [AJAX属性]激活选项卡的索引 + /// </summary> + [Category(CategoryName.OPTIONS)] + [DefaultValue(0)] + [Description("[AJAX属性]激活选项卡的索引")] + public int ActiveTabIndex + { + get + { + object obj = FState["ActiveTabIndex"]; + return obj == null ? 0 : (int)obj; + } + set + { + FState["ActiveTabIndex"] = value; + } + } + + /// <summary> + /// 当前激活的选项卡 + /// </summary> + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public Tab ActiveTab + { + get + { + if (ActiveTabIndex >= 0 && ActiveTabIndex < Tabs.Count) + { + return Tabs[ActiveTabIndex]; + } + return null; + } + } + + #endregion + + #region Tabs + + private TabCollection tabs; + + /// <summary> + /// 选项卡集合 + /// </summary> + [Browsable(false)] + [Category(CategoryName.OPTIONS)] + [NotifyParentProperty(true)] + [PersistenceMode(PersistenceMode.InnerProperty)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public virtual TabCollection Tabs + { + get + { + if (tabs == null) + { + tabs = new TabCollection(this); + } + return tabs; + } + } + + #endregion + + #region ActiveTabIndexHiddenFieldID + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + private string ActiveTabIndexHiddenFieldID + { + get + { + return String.Format("{0}_ActiveTabIndex", ClientID); + } + } + + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[Description("需要回发的Tab列表")] + //private string NeedPostBackTabIDS + //{ + // get + // { + // return String.Format("{0}_need_postback_tab_ids", XID); + // } + //} + + #endregion + + #region old code - LoadFState/SaveFState + + //protected override void LoadFState(JObject state, string property) + //{ + // base.LoadFState(state, property); + + // // This property is persisted inside every Tabs. + // //if (property == "X_AutoPostBackTabs") + // //{ + // // AutoPostBackTabsFromJSON(state.getJArray(property)); + // //} + //} + + //protected override void OnInit(EventArgs e) + //{ + // base.OnInit(e); + + // //SaveXProperty("X_AutoPostBackTabs", AutoPostBackTabsToJSON().ToString()); + //} + + //protected override void OnBothPreRender() + //{ + // base.OnBothPreRender(); + + // //// Make sure X_AutoPostBackTabs property exist in F_STATE during page's first load. + // //if (!Page.IsPostBack) + // //{ + // // FState.AddModifiedProperties("X_AutoPostBackTabs"); + // //} + // //else + // //{ + // // // Items has been changed in server-side code after onInit. + // // if (XPropertyModified("X_AutoPostBackTabs", AutoPostBackTabsToJSON().ToString())) + // // { + // // FState.AddModifiedProperties("X_AutoPostBackTabs"); + // // } + // //} + //} + + //protected override void SaveFState(JObject state, string property) + //{ + // //if (property == "X_AutoPostBackTabs") + // //{ + // // state.put(property, AutoPostBackTabsToJSON()); + // //} + //} + + /////// <summary> + /////// These tabs need to auto postback when actived. + /////// </summary> + /////// <returns></returns> + ////private JArray AutoPostBackTabsToJSON() + ////{ + //// JArray ja = new JArray(); + //// for (int i = 0; i < Tabs.Count; i++) + //// { + //// Tab tab = Tabs[i]; + //// if (tab.EnablePostBack) + //// { + //// ja.Add(tab.ClientID); + //// } + //// } + //// return ja; + ////} + + ////private void AutoPostBackTabsFromJSON(JArray ja) + ////{ + //// List<string> autoPostackTabIds = new List<string>(JSONUtil.StringArrayFromJArray(ja)); + //// foreach (Tab tab in Tabs) + //// { + //// if (autoPostackTabIds.Contains(tab.ClientID)) + //// { + //// tab.EnablePostBack = true; + //// } + //// else + //// { + //// tab.EnablePostBack = false; + //// } + //// } + ////} + + #endregion + + #region old code - OnPreLoad + + //protected override void OnPreLoad(object sender, EventArgs e) + //{ + // base.OnPreLoad(sender, e); + + // SaveAjaxProperty("ActiveTabIndex", ActiveTabIndex); + // SaveAjaxProperty("NeedPostBackTabIdsScript", GetNeedPostBackTabIDsScript()); + + //} + + #endregion + + #region OnPreRender + /// <summary> + /// 渲染 HTML 之前调用(AJAX回发) + /// </summary> + protected override void OnAjaxPreRender() + { + base.OnAjaxPreRender(); + + StringBuilder sb = new StringBuilder(); + if (PropertyModified("ActiveTabIndex")) + { + sb.AppendFormat("{0}.f_setActiveTab();", XID); + + } + + AddAjaxScript(sb); + } + + /// <summary> + /// 渲染 HTML 之前调用(页面第一次加载或者普通回发) + /// </summary> + protected override void OnFirstPreRender() + { + base.OnFirstPreRender(); + + //ResourceManager.Instance.AddJavaScriptComponent("tab"); + + //if (EnableTabCloseMenu) + //{ + // ResourceManager.Instance.AddJavaScriptComponent("menu"); + //} + + #region Tabs + + if (Tabs.Count > 0) + { + JsArrayBuilder ab = new JsArrayBuilder(); + foreach (Tab tab in Tabs) + { + if (tab.Visible) + { + ab.AddProperty(String.Format("{0}", tab.XID), true); + } + } + OB.AddProperty("items", ab.ToString(), true); + } + + #endregion + + #region options + + // 删除Layout配置参数 + OB.RemoveProperty("layout"); + + //OB.AddProperty(OptionName.TabMargin, TabMargin.Value); + OB.AddProperty("tabPosition", TabPositionHelper.GetName(TabPosition)); + + + //if (!EnableTitleBackgroundColor) + //{ + // OB.AddProperty("plain", true); + //} + + + + // 全部渲染,否则没有访问的Tab的内容渲染的位置不正确。 + OB.AddProperty("deferredRender", false); + + //OB.AddProperty("bufferResize", true); + + //// 在切换Tab时重新布局Tab的内容 + //OB.AddProperty("layoutOnTabChange", true); + //OB.AddProperty("enableTabScroll", true); + + if (EnableTabCloseMenu) + { + OB.AddProperty("plugins", "F.create('Ext.ux.TabCloseMenu')", true); + } + + ////Note: By default, a tab's close tool destroys the child tab Component and all its descendants. + //// This makes the child tab Component, and all its descendants unusable. + //// To enable re-use of a tab, configure the TabPanel with autoDestroy: false. + //OB.AddProperty("autoDestroy", false); + + #endregion + + #region ActiveTabIndex/IFrameDelayLoad + + OB.AddProperty("activeTab", ActiveTabIndex); + + //for (int i = 0; i < Tabs.Count; i++) + //{ + // Tab tab = Tabs[i]; + // if (tab.EnableIFrame && i != ActiveTabIndex) + // { + // // 拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url + // tab.IFrameDelayLoad = true; + // } + // else + // { + // tab.IFrameDelayLoad = false; + // } + //} + + #endregion + + #region Listeners + + #region old code + + // 如果存在Tabs集合 + //if (Tabs.Count > 0) + //{ + // JsArrayBuilder ab = new JsArrayBuilder(); + // foreach (Tab tab in Tabs) + // { + // ab.AddProperty(String.Format("{0}", tab.ClientID), true); + // } + // OB.AddProperty(OptionName.Items, ab.ToString(), true); + //} + + // listeners + //JsObjectBuilder listenersBuilder = new JsObjectBuilder(); + //listenersBuilder.AddProperty(OptionName.Tabchange, String.Format("function(tabPanel, activeTab){{Ext.get('{0}').dom.value=tabPanel.items.indexOf(activeTab);}}", ActiveTabHiddenField.ClientID), true); + //OBuilder.AddProperty("listeners", listenersBuilder.ToString(), true); + + #endregion + + // 如果要激活的Tab含有IFrame,则需要加载IFrame + // 改变Tab需要回发的脚本 + // Make sure X_AutoPostBackTabs property exist in F_STATE during page's first load. + //string tabchangeScript2 = String.Format("if(tabPanel.f_autoPostBackTabsContains(tab.id)){{{0}}}", GetPostBackEventReference()); + + string tabchangeScript = "F.wnd.updateIFrameNode(tab);"; + string postbackScript = String.Empty; + if (AutoPostBack) + { + tabchangeScript += "if(!tab.f_dynamic_added_tab){" + GetPostBackEventReference("TabIndexChanged") + "}"; + } + + // 如果是动态添加的Tab,不做任何处理(在js/box/extender.js中) + //string tabchangeScript = "F.wnd.updateIFrameNode(tab);if(!tab.f_dynamic_added_tab){" + postbackScript + "}"; + //OB.Listeners.AddProperty("tabchange", JsHelper.GetFunction(tabchangeScript, "tabPanel", "tab"), true); + AddListener("tabchange", tabchangeScript, "tabPanel", "tab"); + + #endregion + + #region old code + + //// 添加隐藏字段 + //string needPostBackTabIDsScript = GetNeedPostBackTabIDsScript(); + //hiddenFieldsScript += needPostBackTabIDsScript; + + //if (AjaxPropertyChanged("NeedPostBackTabIdsScript", needPostBackTabIDsScript)) + //{ + // AddAjaxPropertyChangedScript(needPostBackTabIDsScript); + //} + + + //hiddenFieldsScript += GetSetHiddenFieldValueScript(ActiveTabHiddenFieldID, ActiveTabIndex.ToString().ToLower()); + + #endregion + + #region old code + + //// An bug in IE. + //string renderScript = "if(Ext.isIE){(function(){this.getActiveTab().removeClass('x-hide-display');}).defer(20,this);}"; + + //OB.Listeners.AddProperty("render", JsHelper.GetFunction(renderScript), true); + + #endregion + + string jsContent = String.Format("var {0}=F.create('Ext.tab.Panel',{1});", XID, OB.ToString()); + AddStartupScript(jsContent); + } + + + #endregion + + #region IPostBackDataHandler Members + + /// <summary> + /// 处理回发数据 + /// </summary> + /// <param name="postDataKey">回发数据键</param> + /// <param name="postCollection">回发数据集</param> + /// <returns>回发数据是否改变</returns> + public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) + { + string postValue = postCollection[ActiveTabIndexHiddenFieldID]; + + int postActiveTabIndex = Convert.ToInt32(postValue); + if (ActiveTabIndex != postActiveTabIndex) + { + ActiveTabIndex = postActiveTabIndex; + FState.BackupPostDataProperty("ActiveTabIndex"); + } + + return false; + } + + /// <summary> + /// 触发回发数据改变事件 + /// </summary> + public void RaisePostDataChangedEvent() + { + //OnTabIndexChanged(EventArgs.Empty); + } + + #endregion + + #region IPostBackEventHandler + + /// <summary> + /// 处理回发事件 + /// </summary> + /// <param name="eventArgument">事件参数</param> + public void RaisePostBackEvent(string eventArgument) + { + if (eventArgument == "TabIndexChanged") + { + OnTabIndexChanged(EventArgs.Empty); + } + } + + #endregion + + #region OnTabIndexChanged + + private static readonly object _handlerKey = new object(); + + /// <summary> + /// 选项卡改变事件 + /// </summary> + [Category(CategoryName.ACTION)] + [Description("选项卡改变事件")] + public event EventHandler TabIndexChanged + { + add + { + Events.AddHandler(_handlerKey, value); + } + remove + { + Events.RemoveHandler(_handlerKey, value); + } + } + + /// <summary> + /// 触发选项卡改变事件 + /// </summary> + /// <param name="e">事件参数</param> + protected virtual void OnTabIndexChanged(EventArgs e) + { + EventHandler handler = Events[_handlerKey] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + + #endregion + + #region GetShowReference + + /// <summary> + /// 获取添加选项卡的脚本 + /// </summary> + /// <param name="tabID">选项卡ID</param> + /// <param name="iframeUrl">IFrame地址</param> + /// <param name="tabTitle">选项卡标题</param> + /// <param name="enableClose">是否可以关闭</param> + /// <returns>客户端脚本</returns> + public string GetAddTabReference(string tabID, string iframeUrl, string tabTitle, bool enableClose) + { + return GetAddTabReference(tabID, iframeUrl, tabTitle, String.Empty, enableClose); + } + + /// <summary> + /// 获取添加选项卡的脚本 + /// </summary> + /// <param name="tabID">选项卡ID</param> + /// <param name="iframeUrl">IFrame地址</param> + /// <param name="tabTitle">选项卡标题</param> + /// <param name="iconUrl">选项卡图标</param> + /// <param name="enableClose">是否可以关闭</param> + /// <returns>客户端脚本</returns> + public string GetAddTabReference(string tabID, string iframeUrl, string tabTitle, string iconUrl, bool enableClose) + { + if (!String.IsNullOrEmpty(iframeUrl)) + { + iframeUrl = ResolveIFrameUrl(iframeUrl); + } + + JsObjectBuilder options = new JsObjectBuilder(); + options.AddProperty("id", tabID); + options.AddProperty("url", iframeUrl); + options.AddProperty("title", tabTitle); + options.AddProperty("closable", enableClose); + + string iconScript = String.Empty; + if (!String.IsNullOrEmpty(iconUrl)) + { + string className = String.Format("icon_{0}", System.Guid.NewGuid().ToString("N")); + iconScript = String.Format("F.addCSS('{0}','{1}');", className, StyleUtil.GetNoRepeatBackgroundStyle("." + className, ResolveUrl(iconUrl))); + + options.AddProperty("iconCls", className); + } + + return iconScript + String.Format("{0}.addTab({1});", ScriptID, options); + } + + + /// <summary> + /// 获取移除选项卡的脚本 + /// </summary> + /// <param name="tabID">选项卡ID</param> + /// <returns>客户端脚本</returns> + public string GetRemoveTabReference(string tabID) + { + return String.Format("{0}.removeTab('{1}');", ScriptID, tabID); + } + + #endregion + + #region old code + + //#region SaveViewState/LoadViewState/TrackViewState + + //protected override object SaveViewState() + //{ + // object[] states = new object[] { base.SaveViewState(), ((IStateManager)Tabs).SaveViewState() }; + + // return states; + //} + + //protected override void LoadViewState(object savedState) + //{ + // if (savedState != null) + // { + // object[] states = (object[])savedState; + + // base.LoadViewState(states[0]); + + // ((IStateManager)Tabs).LoadViewState(states[1]); + // } + //} + + //protected override void TrackViewState() + //{ + // base.TrackViewState(); + + // ((IStateManager)Tabs).TrackViewState(); + //} + + //#endregion + + #endregion + } +} diff --git a/FineUI_v6/FineUI/ajax_properties.txt b/FineUI_v6/FineUI/ajax_properties.txt new file mode 100644 index 0000000..69ee589 --- /dev/null +++ b/FineUI_v6/FineUI/ajax_properties.txt @@ -0,0 +1,360 @@ +[{ + "name": "ControlBase", + "ajax": ["Hidden", "Enabled"], + "parent": "", + "public": false +}, +{ + "name": "Component", + "ajax": ["CssClass", "FormItemClass", "CssStyle"], + "parent": "ControlBase", + "public": false +}, +{ + "name": "BoxComponent", + "ajax": [], + "parent": "Component", + "public": false +}, +{ + "name": "Container", + "ajax": [], + "parent": "BoxComponent", + "public": false +}, +{ + "name": "PanelBase", + "ajax": ["IFrameUrl"], + "parent": "Container", + "public": false +}, +{ + "name": "CollapsablePanel", + "ajax": ["Expanded", "Collapsed", "Title"], + "parent": "PanelBase", + "public": false +}, +{ + "name": "Field", + "ajax": ["Readonly"], + "parent": "BoxComponent", + "public": false +}, +{ + "name": "TextField", + "ajax": [], + "parent": "Field", + "public": false +}, +{ + "name": "RealTextField", + "ajax": ["Text"], + "parent": "TextField", + "public": false +}, +{ + "name": "Toolbar", + "ajax": [], + "parent": "BoxComponent", + "public": true +}, +{ + "name": "ToolbarFill", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "ToolbarSeparator", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "ToolbarText", + "ajax": ["Text"], + "parent": "Component", + "public": true +}, +{ + "name": "Button", + "ajax": ["Text", "Icon", "IconUrl", "ToolTip", "OnClientClick", "ConfirmTitle", "ConfirmText", "ConfirmIcon", "ConfirmTarget", "Pressed"], + "parent": "Component", + "public": true +}, +{ + "name": "Calendar", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "Menu", + "ajax": [], + "parent": "Component", + "public": true +}, +{ + "name": "BaseMenuItem", + "ajax": [], + "parent": "Component", + "public": false +}, +{ + "name": "MenuItem", + "ajax": [], + "parent": "BaseMenuItem", + "public": false +}, +{ + "name": "MenuButton", + "ajax": ["ClickScriptFunction"], + "parent": "MenuItem", + "public": true +}, +{ + "name": "MenuHyperLink", + "ajax": [], + "parent": "MenuItem", + "public": true +}, +{ + "name": "MenuSeparator", + "ajax": [], + "parent": "BaseMenuItem", + "public": true +}, +{ + "name": "MenuText", + "ajax": [], + "parent": "MenuItem", + "public": true +}, +{ + "name": "SplitButton", + "ajax": [], + "parent": "Button", + "public": true +}, +{ + "name": "PageLoading", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "PageManager", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "Timer", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "CheckBox", + "ajax": ["Checked"], + "parent": "Field", + "public": true +}, +{ + "name": "CheckBoxList", + "ajax": ["SelectedIndexArray", "SelectedValueArray", "SelectedItemArray"], + "parent": "Field", + "public": true +}, +{ + "name": "HtmlEditor", + "ajax": ["Text"], + "parent": "Field", + "public": true +}, +{ + "name": "Label", + "ajax": ["Text"], + "parent": "Field", + "public": true +}, +{ + "name": "HyperLink", + "ajax": ["Text", "NavigateUrl", "Target", "OnClientClick"], + "parent": "Field", + "public": true +}, +{ + "name": "Image", + "ajax": ["ImageUrl", "ImageWidth", "ImageHeight", "ImageCssClass", "ImageCssStyle", "ImageAlt"], + "parent": "Field", + "public": true +}, +{ + "name": "LinkButton", + "ajax": ["Text", "ConfirmText", "ConfirmTitle", "ConfirmIcon", "ConfirmTarget", "OnClientClick"], + "parent": "Field", + "public": true +}, +{ + "name": "RadioButton", + "ajax": ["Checked"], + "parent": "Field", + "public": true +}, +{ + "name": "RadioButtonList", + "ajax": ["SelectedIndex", "SelectedValue", "SelectedItem"], + "parent": "Field", + "public": true +}, +{ + "name": "DropDownList", + "ajax": ["SelectedIndex", "SelectedValue", "SelectedItem", "DataSource", "Items"], + "parent": "TextField", + "public": true +}, +{ + "name": "DatePicker", + "ajax": ["SelectedDate"], + "parent": "RealTextField", + "public": true +}, +{ + "name": "HiddenField", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "FileUpload", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "NumberBox", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TextArea", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TextBox", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TriggerBox", + "ajax": [], + "parent": "RealTextField", + "public": true +}, +{ + "name": "TwinTriggerBox", + "ajax": ["ShowTrigger1", "ShowTrigger2"], + "parent": "RealTextField", + "public": true +}, +{ + "name": "RegionPanel", + "ajax": [], + "parent": "PanelBase", + "public": true +}, +{ + "name": "Region", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Accordion", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "AccordionPane", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "AccordionLink", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "ContentPanel", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Form", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "FormRow", + "ajax": [], + "parent": "ControlBase", + "public": true +}, +{ + "name": "GroupPanel", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Panel", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "SimpleForm", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Tree", + "ajax": ["Nodes", "SelectedNodeIDArray"], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Window", + "ajax": [], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "Grid", + "ajax": ["PageIndex", "PageSize", "RecordCount", "SortColumnIndex", "SortDirection", "SelectedRowIndexArray", "DataSource"], + "parent": "CollapsablePanel", + "public": true +}, +{ + "name": "TabStrip", + "ajax": ["ActiveTabIndex"], + "parent": "PanelBase", + "public": true +}, +{ + "name": "Tab", + "ajax": [], + "parent": "PanelBase", + "public": true +}] \ No newline at end of file diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/EncodingFoundException.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/EncodingFoundException.cs new file mode 100644 index 0000000..e55a1f1 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/EncodingFoundException.cs @@ -0,0 +1,24 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Text; + +namespace HtmlAgilityPack +{ + internal class EncodingFoundException : Exception + { + private Encoding _encoding; + + internal EncodingFoundException(Encoding encoding) + { + _encoding = encoding; + } + + internal Encoding Encoding + { + get + { + return _encoding; + } + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlAttribute.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlAttribute.cs new file mode 100644 index 0000000..a97fc18 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlAttribute.cs @@ -0,0 +1,182 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML attribute. + /// </summary> + public class HtmlAttribute: IComparable + { + internal int _line = 0; + internal int _lineposition = 0; + internal int _streamposition = 0; + internal int _namestartindex = 0; + internal int _namelength = 0; + internal int _valuestartindex = 0; + internal int _valuelength = 0; + internal HtmlDocument _ownerdocument; // attribute can exists without a node + internal HtmlNode _ownernode; + internal string _name; + internal string _value; + + internal HtmlAttribute(HtmlDocument ownerdocument) + { + _ownerdocument = ownerdocument; + } + + /// <summary> + /// Creates a duplicate of this attribute. + /// </summary> + /// <returns>The cloned attribute.</returns> + public HtmlAttribute Clone() + { + HtmlAttribute att = new HtmlAttribute(_ownerdocument); + att.Name = Name; + att.Value = Value; + return att; + } + + /// <summary> + /// Compares the current instance with another attribute. Comparison is based on attributes' name. + /// </summary> + /// <param name="obj">An attribute to compare with this instance.</param> + /// <returns>A 32-bit signed integer that indicates the relative order of the names comparison.</returns> + public int CompareTo(object obj) + { + HtmlAttribute att = obj as HtmlAttribute; + if (att == null) + { + throw new ArgumentException("obj"); + } + return Name.CompareTo(att.Name); + } + + internal string XmlName + { + get + { + return HtmlDocument.GetXmlName(Name); + } + } + + internal string XmlValue + { + get + { + return Value; + } + } + + /// <summary> + /// Gets the qualified name of the attribute. + /// </summary> + public string Name + { + get + { + if (_name == null) + { + _name = _ownerdocument._text.Substring(_namestartindex, _namelength).ToLower(); + } + return _name; + } + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + _name = value.ToLower(); + if (_ownernode != null) + { + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + } + } + } + + /// <summary> + /// Gets or sets the value of the attribute. + /// </summary> + public string Value + { + get + { + if (_value == null) + { + _value = _ownerdocument._text.Substring(_valuestartindex, _valuelength); + } + return _value; + } + set + { + _value = value; + if (_ownernode != null) + { + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + } + } + } + + /// <summary> + /// Gets the line number of this attribute in the document. + /// </summary> + public int Line + { + get + { + return _line; + } + } + + /// <summary> + /// Gets the column number of this attribute in the document. + /// </summary> + public int LinePosition + { + get + { + return _lineposition; + } + } + + /// <summary> + /// Gets the stream position of this attribute in the document, relative to the start of the document. + /// </summary> + public int StreamPosition + { + get + { + return _streamposition; + } + } + + /// <summary> + /// Gets the HTML node to which this attribute belongs. + /// </summary> + public HtmlNode OwnerNode + { + get + { + return _ownernode; + } + } + + /// <summary> + /// Gets the HTML document to which this attribute belongs. + /// </summary> + public HtmlDocument OwnerDocument + { + get + { + return _ownerdocument; + } + } + + } + + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlAttributeCollection.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlAttributeCollection.cs new file mode 100644 index 0000000..407c869 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlAttributeCollection.cs @@ -0,0 +1,293 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a combined list and collection of HTML nodes. + /// </summary> + public class HtmlAttributeCollection : IEnumerable + { + internal Hashtable _hashitems = new Hashtable(); + private ArrayList _items = new ArrayList(); + private HtmlNode _ownernode; + + internal HtmlAttributeCollection(HtmlNode ownernode) + { + _ownernode = ownernode; + } + + /// <summary> + /// Inserts the specified attribute as the last attribute in the collection. + /// </summary> + /// <param name="newAttribute">The attribute to insert. May not be null.</param> + /// <returns>The appended attribute.</returns> + public HtmlAttribute Append(HtmlAttribute newAttribute) + { + if (newAttribute == null) + { + throw new ArgumentNullException("newAttribute"); + } + + _hashitems[newAttribute.Name] = newAttribute; + newAttribute._ownernode = _ownernode; + _items.Add(newAttribute); + + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + return newAttribute; + } + + /// <summary> + /// Creates and inserts a new attribute as the last attribute in the collection. + /// </summary> + /// <param name="name">The name of the attribute to insert.</param> + /// <returns>The appended attribute.</returns> + public HtmlAttribute Append(string name) + { + HtmlAttribute att = _ownernode._ownerdocument.CreateAttribute(name); + return Append(att); + } + + /// <summary> + /// Creates and inserts a new attribute as the last attribute in the collection. + /// </summary> + /// <param name="name">The name of the attribute to insert.</param> + /// <param name="value">The value of the attribute to insert.</param> + /// <returns>The appended attribute.</returns> + public HtmlAttribute Append(string name, string value) + { + HtmlAttribute att = _ownernode._ownerdocument.CreateAttribute(name, value); + return Append(att); + } + + /// <summary> + /// Inserts the specified attribute as the first node in the collection. + /// </summary> + /// <param name="newAttribute">The attribute to insert. May not be null.</param> + /// <returns>The prepended attribute.</returns> + public HtmlAttribute Prepend(HtmlAttribute newAttribute) + { + if (newAttribute == null) + { + throw new ArgumentNullException("newAttribute"); + } + + _hashitems[newAttribute.Name] = newAttribute; + newAttribute._ownernode = _ownernode; + _items.Insert(0, newAttribute); + + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + return newAttribute; + } + + /// <summary> + /// Removes the attribute at the specified index. + /// </summary> + /// <param name="index">The index of the attribute to remove.</param> + public void RemoveAt(int index) + { + HtmlAttribute att = (HtmlAttribute)_items[index]; + _hashitems.Remove(att.Name); + _items.RemoveAt(index); + + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + } + + /// <summary> + /// Removes a given attribute from the list. + /// </summary> + /// <param name="attribute">The attribute to remove. May not be null.</param> + public void Remove(HtmlAttribute attribute) + { + if (attribute == null) + { + throw new ArgumentNullException("attribute"); + } + int index = GetAttributeIndex(attribute); + if (index == -1) + { + throw new IndexOutOfRangeException(); + } + RemoveAt(index); + } + + /// <summary> + /// Removes an attribute from the list, using its name. If there are more than one attributes with this name, they will all be removed. + /// </summary> + /// <param name="name">The attribute's name. May not be null.</param> + public void Remove(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + string lname = name.ToLower(); + for (int i = 0; i < _items.Count; i++) + { + HtmlAttribute att = (HtmlAttribute)_items[i]; + if (att.Name == lname) + { + RemoveAt(i); + } + } + } + + /// <summary> + /// Remove all attributes in the list. + /// </summary> + public void RemoveAll() + { + _hashitems.Clear(); + _items.Clear(); + + _ownernode._innerchanged = true; + _ownernode._outerchanged = true; + } + + /// <summary> + /// Gets the number of elements actually contained in the list. + /// </summary> + public int Count + { + get + { + return _items.Count; + } + } + + internal int GetAttributeIndex(HtmlAttribute attribute) + { + if (attribute == null) + { + throw new ArgumentNullException("attribute"); + } + for (int i = 0; i < _items.Count; i++) + { + if (((HtmlAttribute)_items[i]) == attribute) + return i; + } + return -1; + } + + internal int GetAttributeIndex(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + string lname = name.ToLower(); + for (int i = 0; i < _items.Count; i++) + { + if (((HtmlAttribute)_items[i]).Name == lname) + return i; + } + return -1; + } + + /// <summary> + /// Gets a given attribute from the list using its name. + /// </summary> + public HtmlAttribute this[string name] + { + get + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + return _hashitems[name.ToLower()] as HtmlAttribute; + } + } + + /// <summary> + /// Gets the attribute at the specified index. + /// </summary> + public HtmlAttribute this[int index] + { + get + { + return _items[index] as HtmlAttribute; + } + } + + internal void Clear() + { + _hashitems.Clear(); + _items.Clear(); + } + + /// <summary> + /// Returns an enumerator that can iterate through the list. + /// </summary> + /// <returns>An IEnumerator for the entire list.</returns> + public HtmlAttributeEnumerator GetEnumerator() + { + return new HtmlAttributeEnumerator(_items); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// <summary> + /// Represents an enumerator that can iterate through the list. + /// </summary> + public class HtmlAttributeEnumerator : IEnumerator + { + int _index; + ArrayList _items; + + internal HtmlAttributeEnumerator(ArrayList items) + { + _items = items; + _index = -1; + } + + /// <summary> + /// Sets the enumerator to its initial position, which is before the first element in the collection. + /// </summary> + public void Reset() + { + _index = -1; + } + + /// <summary> + /// Advances the enumerator to the next element of the collection. + /// </summary> + /// <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> + public bool MoveNext() + { + _index++; + return (_index < _items.Count); + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + public HtmlAttribute Current + { + get + { + return (HtmlAttribute)(_items[_index]); + } + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + object IEnumerator.Current + { + get + { + return (Current); + } + } + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs new file mode 100644 index 0000000..ac171f0 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlCmdLine.cs @@ -0,0 +1,127 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + internal class HtmlCmdLine + { + static internal bool Help; + + static HtmlCmdLine() + { + Help = false; + ParseArgs(); + } + + internal static string GetOption(string name, string def) + { + string p = def; + string[] args = Environment.GetCommandLineArgs(); + for (int i=1;i<args.Length;i++) + { + GetStringArg(args[i], name, ref p); + } + return p; + } + + internal static string GetOption(int index, string def) + { + string p = def; + string[] args = Environment.GetCommandLineArgs(); + int j = 0; + for (int i=1;i<args.Length;i++) + { + if (GetStringArg(args[i], ref p)) + { + if (index==j) + return p; + else + p = def; + j++; + } + } + return p; + } + + internal static bool GetOption(string name, bool def) + { + bool p = def; + string[] args = Environment.GetCommandLineArgs(); + for (int i=1;i<args.Length;i++) + { + GetBoolArg(args[i], name, ref p); + } + return p; + } + + internal static int GetOption(string name, int def) + { + int p = def; + string[] args = Environment.GetCommandLineArgs(); + for (int i=1;i<args.Length;i++) + { + GetIntArg(args[i], name, ref p); + } + return p; + } + + private static void ParseArgs() + { + string[] args = Environment.GetCommandLineArgs(); + for (int i=1;i<args.Length;i++) + { + // help + GetBoolArg(args[i], "?", ref Help); + GetBoolArg(args[i], "h", ref Help); + GetBoolArg(args[i], "help", ref Help); + } + } + + private static bool GetStringArg(string Arg, ref string ArgValue) + { + if (('/'==Arg[0]) || ('-'==Arg[0])) + return false; + ArgValue = Arg; + return true; + } + + private static void GetStringArg(string Arg, string Name, ref string ArgValue) + { + if (Arg.Length<(Name.Length+3)) // -name:x is 3 more than name + return; + if (('/'!=Arg[0]) && ('-'!=Arg[0])) // not a param + return; + if (Arg.Substring(1, Name.Length).ToLower()==Name.ToLower()) + ArgValue = Arg.Substring(Name.Length+2, Arg.Length-Name.Length-2); + } + + private static void GetBoolArg(string Arg, string Name, ref bool ArgValue) + { + if (Arg.Length<(Name.Length+1)) // -name is 1 more than name + return; + if (('/'!=Arg[0]) && ('-'!=Arg[0])) // not a param + return; + if (Arg.Substring(1, Name.Length).ToLower()==Name.ToLower()) + ArgValue = true; + } + + private static void GetIntArg(string Arg, string Name, ref int ArgValue) + { + if (Arg.Length<(Name.Length+3)) // -name:12 is 3 more than name + return; + if (('/'!=Arg[0]) && ('-'!=Arg[0])) // not a param + return; + if (Arg.Substring(1, Name.Length).ToLower()==Name.ToLower()) + { + try + { + ArgValue = Convert.ToInt32(Arg.Substring(Name.Length+2, Arg.Length-Name.Length-2)); + } + catch + { + } + + } + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlCommentNode.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlCommentNode.cs new file mode 100644 index 0000000..0e64de1 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlCommentNode.cs @@ -0,0 +1,73 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML comment. + /// </summary> + public class HtmlCommentNode : HtmlNode + { + private string _comment; + + internal HtmlCommentNode(HtmlDocument ownerdocument, int index) + : + base(HtmlNodeType.Comment, ownerdocument, index) + { + } + + /// <summary> + /// Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. + /// </summary> + public override string InnerHtml + { + get + { + if (_comment == null) + { + return base.InnerHtml; + } + return _comment; + } + set + { + _comment = value; + } + } + + /// <summary> + /// Gets or Sets the object and its content in HTML. + /// </summary> + public override string OuterHtml + { + get + { + if (_comment == null) + { + return base.OuterHtml; + } + return "<!--" + _comment + "-->"; + } + } + + /// <summary> + /// Gets or Sets the comment text of the node. + /// </summary> + public string Comment + { + get + { + if (_comment == null) + { + return base.InnerHtml; + } + return _comment; + } + set + { + _comment = value; + } + } + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlConsoleListener.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlConsoleListener.cs new file mode 100644 index 0000000..ea6c758 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlConsoleListener.cs @@ -0,0 +1,30 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Diagnostics; + +namespace HtmlAgilityPack +{ + internal class HtmlConsoleListener : System.Diagnostics.TraceListener + { + public override void WriteLine(string Message) + { + Write(Message + "\n"); + } + + public override void Write(string Message) + { + Write(Message, ""); + } + + public override void Write(string Message, string Category) + { + Console.Write("T:" + Category + ": " + Message); + } + + public override void WriteLine(string Message, string Category) + { + Write(Message + "\n", Category); + } + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlDocument.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlDocument.cs new file mode 100644 index 0000000..9d7d901 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlDocument.cs @@ -0,0 +1,1936 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; +using System.Text; +using System.Diagnostics; +using System.Collections; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.XPath; + +namespace HtmlAgilityPack +{ + + /// <summary> + /// Represents a complete HTML document. + /// </summary> + public class HtmlDocument: IXPathNavigable + { + internal static readonly string HtmlExceptionRefNotChild = "Reference node must be a child of this node"; + internal static readonly string HtmlExceptionUseIdAttributeFalse = "You need to set UseIdAttribute property to true to enable this feature"; + + internal Hashtable _openednodes; + internal Hashtable _lastnodes = new Hashtable(); + internal Hashtable _nodesid; + private HtmlNode _documentnode; + internal string _text; + private string _remainder; + private int _remainderOffset; + private HtmlNode _currentnode; + private HtmlNode _lastparentnode; + private HtmlAttribute _currentattribute; + private int _index; + private int _line; + private int _lineposition, _maxlineposition; + private int _c; + private bool _fullcomment; + private System.Text.Encoding _streamencoding; + private System.Text.Encoding _declaredencoding; + private ArrayList _parseerrors = new ArrayList(); + private ParseState _state, _oldstate; + private Crc32 _crc32 = null; + private bool _onlyDetectEncoding = false; + + // public props + + /// <summary> + /// Defines if a checksum must be computed for the document while parsing. Default is false. + /// </summary> + public bool OptionComputeChecksum = false; + + /// <summary> + /// Defines if declared encoding must be read from the document. + /// Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. + /// Default is true. + /// </summary> + public bool OptionReadEncoding = true; + + + /// <summary> + /// Defines if non closed nodes will be checked at the end of parsing. Default is true. + /// </summary> + public bool OptionCheckSyntax = true; + + /// <summary> + /// Defines if the 'id' attribute must be specifically used. Default is true. + /// </summary> + public bool OptionUseIdAttribute = true; + + /// <summary> + /// Defines if empty nodes must be written as closed during output. Default is false. + /// </summary> + public bool OptionWriteEmptyNodes = false; + + /// <summary> + /// Defines if output must conform to XML, instead of HTML. + /// </summary> + public bool OptionOutputAsXml = false; + + /// <summary> + /// Defines if name must be output in uppercase. Default is false. + /// </summary> + public bool OptionOutputUpperCase = false; + + /// <summary> + /// Defines if attribute value output must be optimized (not bound with double quotes if it is possible). Default is false. + /// </summary> + public bool OptionOutputOptimizeAttributeValues = false; + + /// <summary> + /// Adds Debugging attributes to node. Default is false. + /// </summary> + public bool OptionAddDebuggingAttributes = false; + + /// <summary> + /// Defines if source text must be extracted while parsing errors. + /// If the document has a lot of errors, or cascading errors, parsing performance can be dramatically affected if set to true. + /// Default is false. + /// </summary> + public bool OptionExtractErrorSourceText = false; // turning this on can dramatically slow performance if a lot of errors are detected + + /// <summary> + /// Defines if closing for non closed nodes must be done at the end or directly in the document. + /// Setting this to true can actually change how browsers render the page. Default is false. + /// </summary> + public bool OptionAutoCloseOnEnd = false; // close errors at the end + + /// <summary> + /// Defines if LI, TR, TH, TD tags must be partially fixed when nesting errors are detected. Default is false. + /// </summary> + public bool OptionFixNestedTags = false; // fix li, tr, th, td tags + + /// <summary> + /// Defines the maximum length of source text or parse errors. Default is 100. + /// </summary> + public int OptionExtractErrorSourceTextMaxLength = 100; + + /// <summary> + /// Defines the default stream encoding to use. Default is System.Text.Encoding.Default. + /// </summary> + public System.Text.Encoding OptionDefaultStreamEncoding = System.Text.Encoding.Default; + + /// <summary> + /// Defines the name of a node that will throw the StopperNodeException when found as an end node. Default is null. + /// </summary> + public string OptionStopperNodeName = null; + + /// <summary> + /// Gets the remaining text. + /// Will always be null if OptionStopperNodeName is null. + /// </summary> + public string Remainder + { + get + { + return _remainder; + } + } + + /// <summary> + /// Gets the offset of Remainder in the original Html text. + /// If OptionStopperNodeName is null, this will return the length of the original Html text. + /// </summary> + public int RemainderOffset + { + get + { + return _remainderOffset; + } + } + + /// <summary> + /// Gets a list of parse errors found in the document. + /// </summary> + public ArrayList ParseErrors + { + get + { + return _parseerrors; + } + } + + /// <summary> + /// Gets the document's stream encoding. + /// </summary> + public System.Text.Encoding StreamEncoding + { + get + { + return _streamencoding; + } + } + + /// <summary> + /// Gets the document's declared encoding. + /// Declared encoding is determined using the meta http-equiv="content-type" content="text/html;charset=XXXXX" html node. + /// </summary> + public System.Text.Encoding DeclaredEncoding + { + get + { + return _declaredencoding; + } + } + + /// <summary> + /// Creates an instance of an HTML document. + /// </summary> + public HtmlDocument() + { + _documentnode = CreateNode(HtmlNodeType.Document, 0); + } + + internal HtmlNode GetXmlDeclaration() + { + if (!_documentnode.HasChildNodes) + { + return null; + } + + foreach(HtmlNode node in _documentnode._childnodes) + { + if (node.Name == "?xml") // it's ok, names are case sensitive + { + return node; + } + } + return null; + } + + /// <summary> + /// Applies HTML encoding to a specified string. + /// </summary> + /// <param name="html">The input string to encode. May not be null.</param> + /// <returns>The encoded string.</returns> + public static string HtmlEncode(string html) + { + if (html == null) + { + throw new ArgumentNullException("html"); + } + // replace & by & but only once! + Regex rx = new Regex("&(?!(amp;)|(lt;)|(gt;)|(quot;))", RegexOptions.IgnoreCase); + return rx.Replace(html, "&").Replace("<", "<").Replace(">", ">").Replace("\"", """); + } + + /// <summary> + /// Detects the encoding of an HTML stream. + /// </summary> + /// <param name="stream">The input stream. May not be null.</param> + /// <returns>The detected encoding.</returns> + public Encoding DetectEncoding(Stream stream) + { + if (stream == null) + { + throw new ArgumentNullException("stream"); + } + return DetectEncoding(new StreamReader(stream)); + } + + /// <summary> + /// Detects the encoding of an HTML file. + /// </summary> + /// <param name="path">Path for the file containing the HTML document to detect. May not be null.</param> + /// <returns>The detected encoding.</returns> + public Encoding DetectEncoding(string path) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + StreamReader sr = new StreamReader(path, OptionDefaultStreamEncoding); + Encoding encoding = DetectEncoding(sr); + sr.Close(); + return encoding; + } + + /// <summary> + /// Detects the encoding of an HTML text. + /// </summary> + /// <param name="html">The input html text. May not be null.</param> + /// <returns>The detected encoding.</returns> + public Encoding DetectEncodingHtml(string html) + { + if (html == null) + { + throw new ArgumentNullException("html"); + } + StringReader sr = new StringReader(html); + Encoding encoding = DetectEncoding(sr); + sr.Close(); + return encoding; + } + + /// <summary> + /// Detects the encoding of an HTML text provided on a TextReader. + /// </summary> + /// <param name="reader">The TextReader used to feed the HTML. May not be null.</param> + /// <returns>The detected encoding.</returns> + public Encoding DetectEncoding(TextReader reader) + { + if (reader == null) + { + throw new ArgumentNullException("reader"); + } + _onlyDetectEncoding = true; + if (OptionCheckSyntax) + { + _openednodes = new Hashtable(); + } + else + { + _openednodes = null; + } + + if (OptionUseIdAttribute) + { + _nodesid = new Hashtable(); + } + else + { + _nodesid = null; + } + + StreamReader sr = reader as StreamReader; + if (sr != null) + { + _streamencoding = sr.CurrentEncoding; + } + else + { + _streamencoding = null; + } + _declaredencoding = null; + + _text = reader.ReadToEnd(); + _documentnode = CreateNode(HtmlNodeType.Document, 0); + + // this is almost a hack, but it allows us not to muck with the original parsing code + try + { + Parse(); + } + catch(EncodingFoundException ex) + { + return ex.Encoding; + } + return null; + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + public void Load(Stream stream) + { + Load(new StreamReader(stream, OptionDefaultStreamEncoding)); + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + public void Load(Stream stream, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(stream, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Load(Stream stream, Encoding encoding) + { + Load(new StreamReader(stream, encoding)); + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks, buffersize)); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + public void Load(string path) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + StreamReader sr = new StreamReader(path, OptionDefaultStreamEncoding); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(string path, bool detectEncodingFromByteOrderMarks) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + StreamReader sr = new StreamReader(path, detectEncodingFromByteOrderMarks); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + public void Load(string path, Encoding encoding) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamReader sr = new StreamReader(path, encoding); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamReader sr = new StreamReader(path, encoding, detectEncodingFromByteOrderMarks); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamReader sr = new StreamReader(path, encoding, detectEncodingFromByteOrderMarks, buffersize); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Loads the HTML document from the specified string. + /// </summary> + /// <param name="html">String containing the HTML document to load. May not be null.</param> + public void LoadHtml(string html) + { + if (html == null) + { + throw new ArgumentNullException("html"); + } + StringReader sr = new StringReader(html); + Load(sr); + sr.Close(); + } + + /// <summary> + /// Detects the encoding of an HTML document from a file first, and then loads the file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + public void DetectEncodingAndLoad(string path) + { + DetectEncodingAndLoad(path, true); + } + + /// <summary> + /// Detects the encoding of an HTML document from a file first, and then loads the file. + /// </summary> + /// <param name="path">The complete file path to be read. May not be null.</param> + /// <param name="detectEncoding">true to detect encoding, false otherwise.</param> + public void DetectEncodingAndLoad(string path, bool detectEncoding) + { + if (path == null) + { + throw new ArgumentNullException("path"); + } + System.Text.Encoding enc; + if (detectEncoding) + { + enc = DetectEncoding(path); + } + else + { + enc = null; + } + + if (enc == null) + { + Load(path); + } + else + { + Load(path, enc); + } + } + + /// <summary> + /// Loads the HTML document from the specified TextReader. + /// </summary> + /// <param name="reader">The TextReader used to feed the HTML data into the document. May not be null.</param> + public void Load(TextReader reader) + { + // all Load methods pass down to this one + if (reader == null) + { + throw new ArgumentNullException("reader"); + } + + _onlyDetectEncoding = false; + + if (OptionCheckSyntax) + { + _openednodes = new Hashtable(); + } + else + { + _openednodes = null; + } + + if (OptionUseIdAttribute) + { + _nodesid = new Hashtable(); + } + else + { + _nodesid = null; + } + + StreamReader sr = reader as StreamReader; + if (sr != null) + { + try + { + // trigger bom read if needed + sr.Peek(); + } + catch + { + // void on purpose + } + _streamencoding = sr.CurrentEncoding; + } + else + { + _streamencoding = null; + } + _declaredencoding = null; + + _text = reader.ReadToEnd(); + _documentnode = CreateNode(HtmlNodeType.Document, 0); + Parse(); + + if (OptionCheckSyntax) + { + foreach(HtmlNode node in _openednodes.Values) + { + if (!node._starttag) // already reported + { + continue; + } + + string html; + if (OptionExtractErrorSourceText) + { + html = node.OuterHtml; + if (html.Length > OptionExtractErrorSourceTextMaxLength) + { + html = html.Substring(0, OptionExtractErrorSourceTextMaxLength); + } + } + else + { + html = string.Empty; + } + AddError( + HtmlParseErrorCode.TagNotClosed, + node._line, node._lineposition, + node._streamposition, html, + "End tag </" + node.Name + "> was not found"); + } + + // we don't need this anymore + _openednodes.Clear(); + } + } + + internal System.Text.Encoding GetOutEncoding() + { + // when unspecified, use the stream encoding first + if (_declaredencoding != null) + { + return _declaredencoding; + } + else + { + if (_streamencoding != null) + { + return _streamencoding; + } + } + return OptionDefaultStreamEncoding; + } + + + /// <summary> + /// Gets the document's output encoding. + /// </summary> + public System.Text.Encoding Encoding + { + get + { + return GetOutEncoding(); + } + } + + /// <summary> + /// Saves the HTML document to the specified stream. + /// </summary> + /// <param name="outStream">The stream to which you want to save.</param> + public void Save(Stream outStream) + { + StreamWriter sw = new StreamWriter(outStream, GetOutEncoding()); + Save(sw); + } + + /// <summary> + /// Saves the HTML document to the specified stream. + /// </summary> + /// <param name="outStream">The stream to which you want to save. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + public void Save(Stream outStream, System.Text.Encoding encoding) + { + if (outStream == null) + { + throw new ArgumentNullException("outStream"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamWriter sw = new StreamWriter(outStream, encoding); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified file. + /// </summary> + /// <param name="filename">The location of the file where you want to save the document.</param> + public void Save(string filename) + { + StreamWriter sw = new StreamWriter(filename, false, GetOutEncoding()); + Save(sw); + sw.Close(); + } + + /// <summary> + /// Saves the mixed document to the specified file. + /// </summary> + /// <param name="filename">The location of the file where you want to save the document. May not be null.</param> + /// <param name="encoding">The character encoding to use. May not be null.</param> + public void Save(string filename, System.Text.Encoding encoding) + { + if (filename == null) + { + throw new ArgumentNullException("filename"); + } + if (encoding == null) + { + throw new ArgumentNullException("encoding"); + } + StreamWriter sw = new StreamWriter(filename, false, encoding); + Save(sw); + sw.Close(); + } + + /// <summary> + /// Saves the HTML document to the specified StreamWriter. + /// </summary> + /// <param name="writer">The StreamWriter to which you want to save.</param> + public void Save(StreamWriter writer) + { + Save((TextWriter)writer); + } + + /// <summary> + /// Saves the HTML document to the specified TextWriter. + /// </summary> + /// <param name="writer">The TextWriter to which you want to save. May not be null.</param> + public void Save(TextWriter writer) + { + if (writer == null) + { + throw new ArgumentNullException("writer"); + } + DocumentNode.WriteTo(writer); + } + + /// <summary> + /// Saves the HTML document to the specified XmlWriter. + /// </summary> + /// <param name="writer">The XmlWriter to which you want to save.</param> + public void Save(XmlWriter writer) + { + DocumentNode.WriteTo(writer); + writer.Flush(); + } + + /// <summary> + /// Creates a new XPathNavigator object for navigating this HTML document. + /// </summary> + /// <returns>An XPathNavigator object. The XPathNavigator is positioned on the root of the document.</returns> + public XPathNavigator CreateNavigator() + { + return new HtmlNodeNavigator(this, _documentnode); + } + + /// <summary> + /// Gets a valid XML name. + /// </summary> + /// <param name="name">Any text.</param> + /// <returns>A string that is a valid XML name.</returns> + public static string GetXmlName(string name) + { + string xmlname = string.Empty; + bool nameisok = true; + for(int i=0;i<name.Length;i++) + { + // names are lcase + // note: we are very limited here, too much? + if (((name[i]>='a') && (name[i]<='z')) || + ((name[i]>='0') && (name[i]<='9')) || + // (name[i]==':') || (name[i]=='_') || (name[i]=='-') || (name[i]=='.')) // these are bads in fact + (name[i]=='_') || (name[i]=='-') || (name[i]=='.')) + { + xmlname += name[i]; + } + else + { + nameisok = false; + byte[] bytes = System.Text.Encoding.UTF8.GetBytes(new char[]{name[i]}); + for(int j=0;j<bytes.Length;j++) + { + xmlname += bytes[j].ToString("x2"); + } + xmlname += "_"; + } + + } + if (nameisok) + { + return xmlname; + } + return "_" + xmlname; + } + + internal void SetIdForNode(HtmlNode node, string id) + { + if (!OptionUseIdAttribute) + { + return; + } + + if ((_nodesid == null) || (id == null)) + { + return; + } + + if (node == null) + { + _nodesid.Remove(id.ToLower()); + } + else + { + _nodesid[id.ToLower()] = node; + } + } + + /// <summary> + /// Gets the HTML node with the specified 'id' attribute value. + /// </summary> + /// <param name="id">The attribute id to match. May not be null.</param> + /// <returns>The HTML node with the matching id or null if not found.</returns> + public HtmlNode GetElementbyId(string id) + { + if (id == null) + { + throw new ArgumentNullException("id"); + } + if (_nodesid == null) + { + throw new Exception(HtmlExceptionUseIdAttributeFalse); + } + + return _nodesid[id.ToLower()] as HtmlNode; + } + + /// <summary> + /// Creates an HTML element node with the specified name. + /// </summary> + /// <param name="name">The qualified name of the element. May not be null.</param> + /// <returns>The new HTML node.</returns> + public HtmlNode CreateElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + HtmlNode node = CreateNode(HtmlNodeType.Element); + node._name = name; + return node; + } + + /// <summary> + /// Creates an HTML comment node. + /// </summary> + /// <returns>The new HTML comment node.</returns> + public HtmlCommentNode CreateComment() + { + return (HtmlCommentNode)CreateNode(HtmlNodeType.Comment); + } + + /// <summary> + /// Creates an HTML comment node with the specified comment text. + /// </summary> + /// <param name="comment">The comment text. May not be null.</param> + /// <returns>The new HTML comment node.</returns> + public HtmlCommentNode CreateComment(string comment) + { + if (comment == null) + { + throw new ArgumentNullException("comment"); + } + HtmlCommentNode c = CreateComment(); + c.Comment = comment; + return c; + } + + /// <summary> + /// Creates an HTML text node. + /// </summary> + /// <returns>The new HTML text node.</returns> + public HtmlTextNode CreateTextNode() + { + return (HtmlTextNode)CreateNode(HtmlNodeType.Text); + } + + /// <summary> + /// Creates an HTML text node with the specified text. + /// </summary> + /// <param name="text">The text of the node. May not be null.</param> + /// <returns>The new HTML text node.</returns> + public HtmlTextNode CreateTextNode(string text) + { + if (text == null) + { + throw new ArgumentNullException("text"); + } + HtmlTextNode t = CreateTextNode(); + t.Text = text; + return t; + } + + internal HtmlNode CreateNode(HtmlNodeType type) + { + return CreateNode(type, -1); + } + + internal HtmlNode CreateNode(HtmlNodeType type, int index) + { + switch (type) + { + case HtmlNodeType.Comment: + return new HtmlCommentNode(this, index); + + case HtmlNodeType.Text: + return new HtmlTextNode(this, index); + + default: + return new HtmlNode(type, this, index); + } + } + + internal HtmlAttribute CreateAttribute() + { + return new HtmlAttribute(this); + } + + /// <summary> + /// Creates an HTML attribute with the specified name. + /// </summary> + /// <param name="name">The name of the attribute. May not be null.</param> + /// <returns>The new HTML attribute.</returns> + public HtmlAttribute CreateAttribute(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + HtmlAttribute att = CreateAttribute(); + att.Name = name; + return att; + } + + /// <summary> + /// Creates an HTML attribute with the specified name. + /// </summary> + /// <param name="name">The name of the attribute. May not be null.</param> + /// <param name="value">The value of the attribute.</param> + /// <returns>The new HTML attribute.</returns> + public HtmlAttribute CreateAttribute(string name, string value) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + HtmlAttribute att = CreateAttribute(name); + att.Value = value; + return att; + } + + /// <summary> + /// Gets the root node of the document. + /// </summary> + public HtmlNode DocumentNode + { + get + { + return _documentnode; + } + } + + /// <summary> + /// Gets the document CRC32 checksum if OptionComputeChecksum was set to true before parsing, 0 otherwise. + /// </summary> + public int CheckSum + { + get + { + if (_crc32 == null) + { + return 0; + } + else + { + return (int)_crc32.CheckSum; + } + } + } + + private HtmlParseError AddError( + HtmlParseErrorCode code, + int line, + int linePosition, + int streamPosition, + string sourceText, + string reason) + { + HtmlParseError err = new HtmlParseError(code, line, linePosition, streamPosition, sourceText, reason); + _parseerrors.Add(err); + return err; + } + + + private enum ParseState + { + Text, + WhichTag, + Tag, + BetweenAttributes, + EmptyTag, + AttributeName, + AttributeBeforeEquals, + AttributeAfterEquals, + AttributeValue, + Comment, + QuotedAttributeValue, + ServerSideCode, + PcData + } + + private void IncrementPosition() + { + if (_crc32 != null) + { + // REVIEW: should we add some checksum code in DecrementPosition too? + _crc32.AddToCRC32(_c); + } + + _index++; + _maxlineposition = _lineposition; + if (_c == 10) + { + _lineposition = 1; + _line++; + } + else + { + _lineposition++; + } + } + + private void DecrementPosition() + { + _index--; + if (_lineposition == 1) + { + _lineposition = _maxlineposition; + _line--; + } + else + { + _lineposition--; + } + } + + private void Parse() + { + int lastquote = 0; + if (OptionComputeChecksum) + { + _crc32 = new Crc32(); + } + + _lastnodes = new Hashtable(); + _c = 0; + _fullcomment = false; + _parseerrors = new ArrayList(); + _line = 1; + _lineposition = 1; + _maxlineposition = 1; + + _state = ParseState.Text; + _oldstate = _state; + _documentnode._innerlength = _text.Length; + _documentnode._outerlength = _text.Length; + _remainderOffset = _text.Length; + + _lastparentnode = _documentnode; + _currentnode = CreateNode(HtmlNodeType.Text, 0); + _currentattribute = null; + + _index = 0; + PushNodeStart(HtmlNodeType.Text, 0); + while (_index<_text.Length) + { + _c = _text[_index]; + IncrementPosition(); + + switch(_state) + { + case ParseState.Text: + if (NewCheck()) + continue; + break; + + case ParseState.WhichTag: + if (NewCheck()) + continue; + if (_c == '/') + { + PushNodeNameStart(false, _index); + } + else + { + PushNodeNameStart(true, _index-1); + DecrementPosition(); + } + _state = ParseState.Tag; + break; + + case ParseState.Tag: + if (NewCheck()) + continue; + if (IsWhiteSpace(_c)) + { + PushNodeNameEnd(_index-1); + if (_state != ParseState.Tag) + continue; + _state = ParseState.BetweenAttributes; + continue; + } + if (_c == '/') + { + PushNodeNameEnd(_index-1); + if (_state != ParseState.Tag) + continue; + _state = ParseState.EmptyTag; + continue; + } + if (_c == '>') + { + PushNodeNameEnd(_index-1); + if (_state != ParseState.Tag) + continue; + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.Tag) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + } + break; + + case ParseState.BetweenAttributes: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + continue; + + if ((_c == '/') || (_c == '?')) + { + _state = ParseState.EmptyTag; + continue; + } + + if (_c == '>') + { + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + + if (_state != ParseState.BetweenAttributes) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + + PushAttributeNameStart(_index-1); + _state = ParseState.AttributeName; + break; + + case ParseState.EmptyTag: + if (NewCheck()) + continue; + + if (_c == '>') + { + if (!PushNodeEnd(_index, true)) + { + // stop parsing + _index = _text.Length; + break; + } + + if (_state != ParseState.EmptyTag) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + _state = ParseState.BetweenAttributes; + break; + + case ParseState.AttributeName: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + { + PushAttributeNameEnd(_index-1); + _state = ParseState.AttributeBeforeEquals; + continue; + } + if (_c == '=') + { + PushAttributeNameEnd(_index-1); + _state = ParseState.AttributeAfterEquals; + continue; + } + if (_c == '>') + { + PushAttributeNameEnd(_index-1); + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.AttributeName) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + break; + + case ParseState.AttributeBeforeEquals: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + continue; + if (_c == '>') + { + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.AttributeBeforeEquals) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + if (_c == '=') + { + _state = ParseState.AttributeAfterEquals; + continue; + } + // no equals, no whitespace, it's a new attrribute starting + _state = ParseState.BetweenAttributes; + DecrementPosition(); + break; + + case ParseState.AttributeAfterEquals: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + continue; + + if ((_c == '\'') || (_c == '"')) + { + _state = ParseState.QuotedAttributeValue; + PushAttributeValueStart(_index); + lastquote = _c; + continue; + } + if (_c == '>') + { + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.AttributeAfterEquals) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + PushAttributeValueStart(_index-1); + _state = ParseState.AttributeValue; + break; + + case ParseState.AttributeValue: + if (NewCheck()) + continue; + + if (IsWhiteSpace(_c)) + { + PushAttributeValueEnd(_index-1); + _state = ParseState.BetweenAttributes; + continue; + } + + if (_c == '>') + { + PushAttributeValueEnd(_index-1); + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + if (_state != ParseState.AttributeValue) + continue; + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + break; + + case ParseState.QuotedAttributeValue: + if (_c == lastquote) + { + PushAttributeValueEnd(_index-1); + _state = ParseState.BetweenAttributes; + continue; + } + if (_c == '<') + { + if (_index<_text.Length) + { + if (_text[_index] == '%') + { + _oldstate = _state; + _state = ParseState.ServerSideCode; + continue; + } + } + } + break; + + case ParseState.Comment: + if (_c == '>') + { + if (_fullcomment) + { + if ((_text[_index-2] != '-') || + (_text[_index-3] != '-')) + { + continue; + } + } + if (!PushNodeEnd(_index, false)) + { + // stop parsing + _index = _text.Length; + break; + } + _state = ParseState.Text; + PushNodeStart(HtmlNodeType.Text, _index); + continue; + } + break; + + case ParseState.ServerSideCode: + if (_c == '%') + { + if (_index<_text.Length) + { + if (_text[_index] == '>') + { + switch(_oldstate) + { + case ParseState.AttributeAfterEquals: + _state = ParseState.AttributeValue; + break; + + case ParseState.BetweenAttributes: + PushAttributeNameEnd(_index+1); + _state = ParseState.BetweenAttributes; + break; + + default: + _state = _oldstate; + break; + } + IncrementPosition(); + } + } + } + break; + + case ParseState.PcData: + // look for </tag + 1 char + + // check buffer end + if ((_currentnode._namelength+3)<=(_text.Length-(_index-1))) + { + if (string.Compare(_text.Substring(_index-1, _currentnode._namelength+2), + "</" + _currentnode.Name, true) == 0) + { + int c = _text[_index-1 + 2 + _currentnode.Name.Length]; + if ((c == '>') || (IsWhiteSpace(c))) + { + // add the script as a text node + HtmlNode script = CreateNode(HtmlNodeType.Text, + _currentnode._outerstartindex + _currentnode._outerlength); + script._outerlength = _index-1 - script._outerstartindex; + _currentnode.AppendChild(script); + + + PushNodeStart(HtmlNodeType.Element, _index-1); + PushNodeNameStart(false, _index-1 +2); + _state = ParseState.Tag; + IncrementPosition(); + } + } + } + break; + } + } + + // finish the current work + if (_currentnode._namestartindex > 0) + { + PushNodeNameEnd(_index); + } + PushNodeEnd(_index, false); + + // we don't need this anymore + _lastnodes.Clear(); + } + + private bool NewCheck() + { + if (_c != '<') + { + return false; + } + if (_index<_text.Length) + { + if (_text[_index] == '%') + { + switch(_state) + { + case ParseState.AttributeAfterEquals: + PushAttributeValueStart(_index-1); + break; + + case ParseState.BetweenAttributes: + PushAttributeNameStart(_index-1); + break; + + case ParseState.WhichTag: + PushNodeNameStart(true, _index-1); + _state = ParseState.Tag; + break; + } + _oldstate = _state; + _state = ParseState.ServerSideCode; + return true; + } + } + + if (!PushNodeEnd(_index-1, true)) + { + // stop parsing + _index = _text.Length; + return true; + } + _state = ParseState.WhichTag; + if ((_index-1) <= (_text.Length-2)) + { + if (_text[_index] == '!') + { + PushNodeStart(HtmlNodeType.Comment, _index-1); + PushNodeNameStart(true, _index); + PushNodeNameEnd(_index+1); + _state = ParseState.Comment; + if (_index<(_text.Length-2)) + { + if ((_text[_index+1] == '-') && + (_text[_index+2] == '-')) + { + _fullcomment = true; + } + else + { + _fullcomment = false; + } + } + return true; + } + } + PushNodeStart(HtmlNodeType.Element, _index-1); + return true; + } + + private void ReadDocumentEncoding(HtmlNode node) + { + if (!OptionReadEncoding) + return; + // format is + // <meta http-equiv="content-type" content="text/html;charset=iso-8859-1" /> + + // when we append a child, we are in node end, so attributes are already populated + if (node._namelength == 4) // quick check, avoids string alloc + { + if (node.Name == "meta") // all nodes names are lowercase + { + HtmlAttribute att = node.Attributes["http-equiv"]; + if (att != null) + { + if (string.Compare(att.Value, "content-type", true) == 0) + { + HtmlAttribute content = node.Attributes["content"]; + if (content != null) + { + string charset = NameValuePairList.GetNameValuePairsValue(content.Value, "charset"); + if (charset != null) + { + _declaredencoding = Encoding.GetEncoding(charset); + if (_onlyDetectEncoding) + { + throw new EncodingFoundException(_declaredencoding); + } + + if (_streamencoding != null) + { + if (_declaredencoding.WindowsCodePage != _streamencoding.WindowsCodePage) + { + AddError( + HtmlParseErrorCode.CharsetMismatch, + _line, _lineposition, + _index, node.OuterHtml, + "Encoding mismatch between StreamEncoding: " + + _streamencoding.WebName + " and DeclaredEncoding: " + _declaredencoding.WebName); + } + } + } + } + } + } + } + } + } + + private void PushAttributeNameStart(int index) + { + _currentattribute = CreateAttribute(); + _currentattribute._namestartindex = index; + _currentattribute._line = _line; + _currentattribute._lineposition = _lineposition; + _currentattribute._streamposition = index; + } + + private void PushAttributeNameEnd(int index) + { + _currentattribute._namelength = index - _currentattribute._namestartindex; + _currentnode.Attributes.Append(_currentattribute); + } + + private void PushAttributeValueStart(int index) + { + _currentattribute._valuestartindex = index; + } + + private void PushAttributeValueEnd(int index) + { + _currentattribute._valuelength = index - _currentattribute._valuestartindex; + } + + private void PushNodeStart(HtmlNodeType type, int index) + { + _currentnode = CreateNode(type, index); + _currentnode._line = _line; + _currentnode._lineposition = _lineposition; + if (type == HtmlNodeType.Element) + { + _currentnode._lineposition--; + } + _currentnode._streamposition = index; + } + + private bool PushNodeEnd(int index, bool close) + { + _currentnode._outerlength = index - _currentnode._outerstartindex; + + if ((_currentnode._nodetype == HtmlNodeType.Text) || + (_currentnode._nodetype == HtmlNodeType.Comment)) + { + // forget about void nodes + if (_currentnode._outerlength>0) + { + _currentnode._innerlength = _currentnode._outerlength; + _currentnode._innerstartindex = _currentnode._outerstartindex; + if (_lastparentnode != null) + { + _lastparentnode.AppendChild(_currentnode); + } + } + } + else + { + if ((_currentnode._starttag) && (_lastparentnode != _currentnode)) + { + // add to parent node + if (_lastparentnode != null) + { + _lastparentnode.AppendChild(_currentnode); + } + + ReadDocumentEncoding(_currentnode); + + // remember last node of this kind + HtmlNode prev = (HtmlNode)_lastnodes[_currentnode.Name]; + _currentnode._prevwithsamename = prev; + _lastnodes[_currentnode.Name] = _currentnode; + + // change parent? + if ((_currentnode.NodeType == HtmlNodeType.Document) || + (_currentnode.NodeType == HtmlNodeType.Element)) + { + _lastparentnode = _currentnode; + } + + if (HtmlNode.IsCDataElement(CurrentNodeName())) + { + _state = ParseState.PcData; + return true; + } + + if ((HtmlNode.IsClosedElement(_currentnode.Name)) || + (HtmlNode.IsEmptyElement(_currentnode.Name))) + { + close = true; + } + } + } + + if ((close) || (!_currentnode._starttag)) + { + if ((OptionStopperNodeName != null) && (_remainder == null) && + (string.Compare(_currentnode.Name, OptionStopperNodeName, true) == 0)) + { + _remainderOffset = index; + _remainder = _text.Substring(_remainderOffset); + CloseCurrentNode(); + return false; // stop parsing + } + CloseCurrentNode(); + } + return true; + } + + private void PushNodeNameStart(bool starttag, int index) + { + _currentnode._starttag = starttag; + _currentnode._namestartindex = index; + } + + private string[] GetResetters(string name) + { + switch (name) + { + case "li": + return new string[]{"ul"}; + + case "tr": + return new string[]{"table"}; + + case "th": + case "td": + return new string[]{"tr", "table"}; + + default: + return null; + } + } + + private void FixNestedTags() + { + // we are only interested by start tags, not closing tags + if (!_currentnode._starttag) + return; + + string name = CurrentNodeName().ToLower(); + FixNestedTag(name, GetResetters(name)); + } + + private void FixNestedTag(string name, string[] resetters) + { + if (resetters == null) + return; + + HtmlNode prev; + + // if we find a previous unclosed same name node, without a resetter node between, we must close it + prev = (HtmlNode)_lastnodes[name]; + if ((prev != null) && (!prev.Closed)) + { + + // try to find a resetter node, if found, we do nothing + if (FindResetterNodes(prev, resetters)) + { + return; + } + + // ok we need to close the prev now + // create a fake closer node + HtmlNode close = new HtmlNode(prev.NodeType, this, -1); + close._endnode = close; + prev.CloseNode(close); + + } + } + + private bool FindResetterNodes(HtmlNode node, string[] names) + { + if (names == null) + { + return false; + } + for(int i=0;i<names.Length;i++) + { + if (FindResetterNode(node, names[i]) != null) + { + return true; + } + } + return false; + } + + private HtmlNode FindResetterNode(HtmlNode node, string name) + { + HtmlNode resetter = (HtmlNode)_lastnodes[name]; + if (resetter == null) + return null; + if (resetter.Closed) + { + return null; + } + if (resetter._streamposition<node._streamposition) + { + return null; + } + return resetter; + } + + private void PushNodeNameEnd(int index) + { + _currentnode._namelength = index - _currentnode._namestartindex; + if (OptionFixNestedTags) + { + FixNestedTags(); + } + } + + private void CloseCurrentNode() + { + if (_currentnode.Closed) // text or document are by def closed + return; + + bool error = false; + + // find last node of this kind + HtmlNode prev = (HtmlNode)_lastnodes[_currentnode.Name]; + if (prev == null) + { + if (HtmlNode.IsClosedElement(_currentnode.Name)) + { + // </br> will be seen as <br> + _currentnode.CloseNode(_currentnode); + + // add to parent node + if (_lastparentnode != null) + { + HtmlNode foundNode = null; + Stack futureChild = new Stack(); + for (HtmlNode node = _lastparentnode.LastChild; node != null; node = node.PreviousSibling) + { + if ((node.Name == _currentnode.Name) && (! node.HasChildNodes)) + { + foundNode = node; + break; + } + futureChild.Push(node); + } + if (foundNode != null) + { + HtmlNode node = null; + while(futureChild.Count != 0) + { + node = (HtmlNode)futureChild.Pop(); + _lastparentnode.RemoveChild(node); + foundNode.AppendChild(node); + } + } + else + { + _lastparentnode.AppendChild(_currentnode); + } + + } + } + else + { + // node has no parent + // node is not a closed node + + if (HtmlNode.CanOverlapElement(_currentnode.Name)) + { + // this is a hack: add it as a text node + HtmlNode closenode = CreateNode(HtmlNodeType.Text, _currentnode._outerstartindex); + closenode._outerlength = _currentnode._outerlength; + ((HtmlTextNode)closenode).Text = ((HtmlTextNode)closenode).Text.ToLower(); + if (_lastparentnode != null) + { + _lastparentnode.AppendChild(closenode); + } + + } + else + { + if (HtmlNode.IsEmptyElement(_currentnode.Name)) + { + AddError( + HtmlParseErrorCode.EndTagNotRequired, + _currentnode._line, _currentnode._lineposition, + _currentnode._streamposition, _currentnode.OuterHtml, + "End tag </" + _currentnode.Name + "> is not required"); + } + else + { + // node cannot overlap, node is not empty + AddError( + HtmlParseErrorCode.TagNotOpened, + _currentnode._line, _currentnode._lineposition, + _currentnode._streamposition, _currentnode.OuterHtml, + "Start tag <" + _currentnode.Name + "> was not found"); + error = true; + } + } + } + } + else + { + if (OptionFixNestedTags) + { + if (FindResetterNodes(prev, GetResetters(_currentnode.Name))) + { + AddError( + HtmlParseErrorCode.EndTagInvalidHere, + _currentnode._line, _currentnode._lineposition, + _currentnode._streamposition, _currentnode.OuterHtml, + "End tag </" + _currentnode.Name + "> invalid here"); + error = true; + } + } + + if (!error) + { + _lastnodes[_currentnode.Name] = prev._prevwithsamename; + prev.CloseNode(_currentnode); + } + } + + + // we close this node, get grandparent + if (!error) + { + if ((_lastparentnode != null) && + ((!HtmlNode.IsClosedElement(_currentnode.Name)) || + (_currentnode._starttag))) + { + UpdateLastParentNode(); + } + } + } + + internal void UpdateLastParentNode() + { + do + { + if (_lastparentnode.Closed) + { + _lastparentnode = _lastparentnode.ParentNode; + } + } + while ((_lastparentnode != null) && (_lastparentnode.Closed)); + if (_lastparentnode == null) + { + _lastparentnode = _documentnode; + } + } + + private string CurrentAttributeName() + { + return _text.Substring(_currentattribute._namestartindex, _currentattribute._namelength); + } + + private string CurrentAttributeValue() + { + return _text.Substring(_currentattribute._valuestartindex, _currentattribute._valuelength); + } + + private string CurrentNodeName() + { + return _text.Substring(_currentnode._namestartindex, _currentnode._namelength); + } + + private string CurrentNodeOuter() + { + return _text.Substring(_currentnode._outerstartindex, _currentnode._outerlength); + } + + private string CurrentNodeInner() + { + return _text.Substring(_currentnode._innerstartindex, _currentnode._innerlength); + } + + /// <summary> + /// Determines if the specified character is considered as a whitespace character. + /// </summary> + /// <param name="c">The character to check.</param> + /// <returns>true if if the specified character is considered as a whitespace character.</returns> + public static bool IsWhiteSpace(int c) + { + if ((c == 10) || (c == 13) || (c == 32) || (c == 9)) + { + return true; + } + return false; + } + + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlElementFlag.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlElementFlag.cs new file mode 100644 index 0000000..d04a059 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlElementFlag.cs @@ -0,0 +1,32 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Flags that describe the behavior of an Element node. + /// </summary> + public enum HtmlElementFlag + { + /// <summary> + /// The node is a CDATA node. + /// </summary> + CData = 1, + + /// <summary> + /// The node is empty. META or IMG are example of such nodes. + /// </summary> + Empty = 2, + + /// <summary> + /// The node will automatically be closed during parsing. + /// </summary> + Closed = 4, + + /// <summary> + /// The node can overlap. + /// </summary> + CanOverlap = 8 + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlEntity.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlEntity.cs new file mode 100644 index 0000000..3cf906f --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlEntity.cs @@ -0,0 +1,802 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; +using System.Text; + +namespace HtmlAgilityPack +{ + /// <summary> + /// A utility class to replace special characters by entities and vice-versa. + /// Follows HTML 4.0 specification found at http://www.w3.org/TR/html4/sgml/entities.html + /// </summary> + public class HtmlEntity + { + private static Hashtable _entityName; + private static Hashtable _entityValue; + private static readonly int _maxEntitySize; + + private HtmlEntity() + { + } + + static HtmlEntity() + { + _entityName = new Hashtable(); + _entityValue = new Hashtable(); + + #region Entities Definition + _entityValue.Add("nbsp", 160); // no-break space = non-breaking space, U+00A0 ISOnum + _entityName.Add(160, "nbsp"); + _entityValue.Add("iexcl", 161); // inverted exclamation mark, U+00A1 ISOnum + _entityName.Add(161, "iexcl"); + _entityValue.Add("cent", 162); // cent sign, U+00A2 ISOnum + _entityName.Add(162, "cent"); + _entityValue.Add("pound", 163); // pound sign, U+00A3 ISOnum + _entityName.Add(163, "pound"); + _entityValue.Add("curren", 164); // currency sign, U+00A4 ISOnum + _entityName.Add(164, "curren"); + _entityValue.Add("yen", 165); // yen sign = yuan sign, U+00A5 ISOnum + _entityName.Add(165, "yen"); + _entityValue.Add("brvbar", 166); // broken bar = broken vertical bar, U+00A6 ISOnum + _entityName.Add(166, "brvbar"); + _entityValue.Add("sect", 167); // section sign, U+00A7 ISOnum + _entityName.Add(167, "sect"); + _entityValue.Add("uml", 168); // diaeresis = spacing diaeresis, U+00A8 ISOdia + _entityName.Add(168, "uml"); + _entityValue.Add("copy", 169); // copyright sign, U+00A9 ISOnum + _entityName.Add(169, "copy"); + _entityValue.Add("ordf", 170); // feminine ordinal indicator, U+00AA ISOnum + _entityName.Add(170, "ordf"); + _entityValue.Add("laquo", 171); // left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum + _entityName.Add(171, "laquo"); + _entityValue.Add("not", 172); // not sign, U+00AC ISOnum + _entityName.Add(172, "not"); + _entityValue.Add("shy", 173); // soft hyphen = discretionary hyphen, U+00AD ISOnum + _entityName.Add(173, "shy"); + _entityValue.Add("reg", 174); // registered sign = registered trade mark sign, U+00AE ISOnum + _entityName.Add(174, "reg"); + _entityValue.Add("macr", 175); // macron = spacing macron = overline = APL overbar, U+00AF ISOdia + _entityName.Add(175, "macr"); + _entityValue.Add("deg", 176); // degree sign, U+00B0 ISOnum + _entityName.Add(176, "deg"); + _entityValue.Add("plusmn", 177); // plus-minus sign = plus-or-minus sign, U+00B1 ISOnum + _entityName.Add(177, "plusmn"); + _entityValue.Add("sup2", 178); // superscript two = superscript digit two = squared, U+00B2 ISOnum + _entityName.Add(178, "sup2"); + _entityValue.Add("sup3", 179); // superscript three = superscript digit three = cubed, U+00B3 ISOnum + _entityName.Add(179, "sup3"); + _entityValue.Add("acute", 180); // acute accent = spacing acute, U+00B4 ISOdia + _entityName.Add(180, "acute"); + _entityValue.Add("micro", 181); // micro sign, U+00B5 ISOnum + _entityName.Add(181, "micro"); + _entityValue.Add("para", 182); // pilcrow sign = paragraph sign, U+00B6 ISOnum + _entityName.Add(182, "para"); + _entityValue.Add("middot", 183); // middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum + _entityName.Add(183, "middot"); + _entityValue.Add("cedil", 184); // cedilla = spacing cedilla, U+00B8 ISOdia + _entityName.Add(184, "cedil"); + _entityValue.Add("sup1", 185); // superscript one = superscript digit one, U+00B9 ISOnum + _entityName.Add(185, "sup1"); + _entityValue.Add("ordm", 186); // masculine ordinal indicator, U+00BA ISOnum + _entityName.Add(186, "ordm"); + _entityValue.Add("raquo", 187); // right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum + _entityName.Add(187, "raquo"); + _entityValue.Add("frac14", 188); // vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum + _entityName.Add(188, "frac14"); + _entityValue.Add("frac12", 189); // vulgar fraction one half = fraction one half, U+00BD ISOnum + _entityName.Add(189, "frac12"); + _entityValue.Add("frac34", 190); // vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum + _entityName.Add(190, "frac34"); + _entityValue.Add("iquest", 191); // inverted question mark = turned question mark, U+00BF ISOnum + _entityName.Add(191, "iquest"); + _entityValue.Add("Agrave", 192); // latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1 + _entityName.Add(192, "Agrave"); + _entityValue.Add("Aacute", 193); // latin capital letter A with acute, U+00C1 ISOlat1 + _entityName.Add(193, "Aacute"); + _entityValue.Add("Acirc", 194); // latin capital letter A with circumflex, U+00C2 ISOlat1 + _entityName.Add(194, "Acirc"); + _entityValue.Add("Atilde", 195); // latin capital letter A with tilde, U+00C3 ISOlat1 + _entityName.Add(195, "Atilde"); + _entityValue.Add("Auml", 196); // latin capital letter A with diaeresis, U+00C4 ISOlat1 + _entityName.Add(196, "Auml"); + _entityValue.Add("Aring", 197); // latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1 + _entityName.Add(197, "Aring"); + _entityValue.Add("AElig", 198); // latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1 + _entityName.Add(198, "AElig"); + _entityValue.Add("Ccedil", 199); // latin capital letter C with cedilla, U+00C7 ISOlat1 + _entityName.Add(199, "Ccedil"); + _entityValue.Add("Egrave", 200); // latin capital letter E with grave, U+00C8 ISOlat1 + _entityName.Add(200, "Egrave"); + _entityValue.Add("Eacute", 201); // latin capital letter E with acute, U+00C9 ISOlat1 + _entityName.Add(201, "Eacute"); + _entityValue.Add("Ecirc", 202); // latin capital letter E with circumflex, U+00CA ISOlat1 + _entityName.Add(202, "Ecirc"); + _entityValue.Add("Euml", 203); // latin capital letter E with diaeresis, U+00CB ISOlat1 + _entityName.Add(203, "Euml"); + _entityValue.Add("Igrave", 204); // latin capital letter I with grave, U+00CC ISOlat1 + _entityName.Add(204, "Igrave"); + _entityValue.Add("Iacute", 205); // latin capital letter I with acute, U+00CD ISOlat1 + _entityName.Add(205, "Iacute"); + _entityValue.Add("Icirc", 206); // latin capital letter I with circumflex, U+00CE ISOlat1 + _entityName.Add(206, "Icirc"); + _entityValue.Add("Iuml", 207); // latin capital letter I with diaeresis, U+00CF ISOlat1 + _entityName.Add(207, "Iuml"); + _entityValue.Add("ETH", 208); // latin capital letter ETH, U+00D0 ISOlat1 + _entityName.Add(208, "ETH"); + _entityValue.Add("Ntilde", 209); // latin capital letter N with tilde, U+00D1 ISOlat1 + _entityName.Add(209, "Ntilde"); + _entityValue.Add("Ograve", 210); // latin capital letter O with grave, U+00D2 ISOlat1 + _entityName.Add(210, "Ograve"); + _entityValue.Add("Oacute", 211); // latin capital letter O with acute, U+00D3 ISOlat1 + _entityName.Add(211, "Oacute"); + _entityValue.Add("Ocirc", 212); // latin capital letter O with circumflex, U+00D4 ISOlat1 + _entityName.Add(212, "Ocirc"); + _entityValue.Add("Otilde", 213); // latin capital letter O with tilde, U+00D5 ISOlat1 + _entityName.Add(213, "Otilde"); + _entityValue.Add("Ouml", 214); // latin capital letter O with diaeresis, U+00D6 ISOlat1 + _entityName.Add(214, "Ouml"); + _entityValue.Add("times", 215); // multiplication sign, U+00D7 ISOnum + _entityName.Add(215, "times"); + _entityValue.Add("Oslash", 216); // latin capital letter O with stroke = latin capital letter O slash, U+00D8 ISOlat1 + _entityName.Add(216, "Oslash"); + _entityValue.Add("Ugrave", 217); // latin capital letter U with grave, U+00D9 ISOlat1 + _entityName.Add(217, "Ugrave"); + _entityValue.Add("Uacute", 218); // latin capital letter U with acute, U+00DA ISOlat1 + _entityName.Add(218, "Uacute"); + _entityValue.Add("Ucirc", 219); // latin capital letter U with circumflex, U+00DB ISOlat1 + _entityName.Add(219, "Ucirc"); + _entityValue.Add("Uuml", 220); // latin capital letter U with diaeresis, U+00DC ISOlat1 + _entityName.Add(220, "Uuml"); + _entityValue.Add("Yacute", 221); // latin capital letter Y with acute, U+00DD ISOlat1 + _entityName.Add(221, "Yacute"); + _entityValue.Add("THORN", 222); // latin capital letter THORN, U+00DE ISOlat1 + _entityName.Add(222, "THORN"); + _entityValue.Add("szlig", 223); // latin small letter sharp s = ess-zed, U+00DF ISOlat1 + _entityName.Add(223, "szlig"); + _entityValue.Add("agrave", 224); // latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1 + _entityName.Add(224, "agrave"); + _entityValue.Add("aacute", 225); // latin small letter a with acute, U+00E1 ISOlat1 + _entityName.Add(225, "aacute"); + _entityValue.Add("acirc", 226); // latin small letter a with circumflex, U+00E2 ISOlat1 + _entityName.Add(226, "acirc"); + _entityValue.Add("atilde", 227); // latin small letter a with tilde, U+00E3 ISOlat1 + _entityName.Add(227, "atilde"); + _entityValue.Add("auml", 228); // latin small letter a with diaeresis, U+00E4 ISOlat1 + _entityName.Add(228, "auml"); + _entityValue.Add("aring", 229); // latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1 + _entityName.Add(229, "aring"); + _entityValue.Add("aelig", 230); // latin small letter ae = latin small ligature ae, U+00E6 ISOlat1 + _entityName.Add(230, "aelig"); + _entityValue.Add("ccedil", 231); // latin small letter c with cedilla, U+00E7 ISOlat1 + _entityName.Add(231, "ccedil"); + _entityValue.Add("egrave", 232); // latin small letter e with grave, U+00E8 ISOlat1 + _entityName.Add(232, "egrave"); + _entityValue.Add("eacute", 233); // latin small letter e with acute, U+00E9 ISOlat1 + _entityName.Add(233, "eacute"); + _entityValue.Add("ecirc", 234); // latin small letter e with circumflex, U+00EA ISOlat1 + _entityName.Add(234, "ecirc"); + _entityValue.Add("euml", 235); // latin small letter e with diaeresis, U+00EB ISOlat1 + _entityName.Add(235, "euml"); + _entityValue.Add("igrave", 236); // latin small letter i with grave, U+00EC ISOlat1 + _entityName.Add(236, "igrave"); + _entityValue.Add("iacute", 237); // latin small letter i with acute, U+00ED ISOlat1 + _entityName.Add(237, "iacute"); + _entityValue.Add("icirc", 238); // latin small letter i with circumflex, U+00EE ISOlat1 + _entityName.Add(238, "icirc"); + _entityValue.Add("iuml", 239); // latin small letter i with diaeresis, U+00EF ISOlat1 + _entityName.Add(239, "iuml"); + _entityValue.Add("eth", 240); // latin small letter eth, U+00F0 ISOlat1 + _entityName.Add(240, "eth"); + _entityValue.Add("ntilde", 241); // latin small letter n with tilde, U+00F1 ISOlat1 + _entityName.Add(241, "ntilde"); + _entityValue.Add("ograve", 242); // latin small letter o with grave, U+00F2 ISOlat1 + _entityName.Add(242, "ograve"); + _entityValue.Add("oacute", 243); // latin small letter o with acute, U+00F3 ISOlat1 + _entityName.Add(243, "oacute"); + _entityValue.Add("ocirc", 244); // latin small letter o with circumflex, U+00F4 ISOlat1 + _entityName.Add(244, "ocirc"); + _entityValue.Add("otilde", 245); // latin small letter o with tilde, U+00F5 ISOlat1 + _entityName.Add(245, "otilde"); + _entityValue.Add("ouml", 246); // latin small letter o with diaeresis, U+00F6 ISOlat1 + _entityName.Add(246, "ouml"); + _entityValue.Add("divide", 247); // division sign, U+00F7 ISOnum + _entityName.Add(247, "divide"); + _entityValue.Add("oslash", 248); // latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1 + _entityName.Add(248, "oslash"); + _entityValue.Add("ugrave", 249); // latin small letter u with grave, U+00F9 ISOlat1 + _entityName.Add(249, "ugrave"); + _entityValue.Add("uacute", 250); // latin small letter u with acute, U+00FA ISOlat1 + _entityName.Add(250, "uacute"); + _entityValue.Add("ucirc", 251); // latin small letter u with circumflex, U+00FB ISOlat1 + _entityName.Add(251, "ucirc"); + _entityValue.Add("uuml", 252); // latin small letter u with diaeresis, U+00FC ISOlat1 + _entityName.Add(252, "uuml"); + _entityValue.Add("yacute", 253); // latin small letter y with acute, U+00FD ISOlat1 + _entityName.Add(253, "yacute"); + _entityValue.Add("thorn", 254); // latin small letter thorn, U+00FE ISOlat1 + _entityName.Add(254, "thorn"); + _entityValue.Add("yuml", 255); // latin small letter y with diaeresis, U+00FF ISOlat1 + _entityName.Add(255, "yuml"); + _entityValue.Add("fnof", 402); // latin small f with hook = function = florin, U+0192 ISOtech + _entityName.Add(402, "fnof"); + _entityValue.Add("Alpha", 913); // greek capital letter alpha, U+0391 + _entityName.Add(913, "Alpha"); + _entityValue.Add("Beta", 914); // greek capital letter beta, U+0392 + _entityName.Add(914, "Beta"); + _entityValue.Add("Gamma", 915); // greek capital letter gamma, U+0393 ISOgrk3 + _entityName.Add(915, "Gamma"); + _entityValue.Add("Delta", 916); // greek capital letter delta, U+0394 ISOgrk3 + _entityName.Add(916, "Delta"); + _entityValue.Add("Epsilon", 917); // greek capital letter epsilon, U+0395 + _entityName.Add(917, "Epsilon"); + _entityValue.Add("Zeta", 918); // greek capital letter zeta, U+0396 + _entityName.Add(918, "Zeta"); + _entityValue.Add("Eta", 919); // greek capital letter eta, U+0397 + _entityName.Add(919, "Eta"); + _entityValue.Add("Theta", 920); // greek capital letter theta, U+0398 ISOgrk3 + _entityName.Add(920, "Theta"); + _entityValue.Add("Iota", 921); // greek capital letter iota, U+0399 + _entityName.Add(921, "Iota"); + _entityValue.Add("Kappa", 922); // greek capital letter kappa, U+039A + _entityName.Add(922, "Kappa"); + _entityValue.Add("Lambda", 923); // greek capital letter lambda, U+039B ISOgrk3 + _entityName.Add(923, "Lambda"); + _entityValue.Add("Mu", 924); // greek capital letter mu, U+039C + _entityName.Add(924, "Mu"); + _entityValue.Add("Nu", 925); // greek capital letter nu, U+039D + _entityName.Add(925, "Nu"); + _entityValue.Add("Xi", 926); // greek capital letter xi, U+039E ISOgrk3 + _entityName.Add(926, "Xi"); + _entityValue.Add("Omicron", 927); // greek capital letter omicron, U+039F + _entityName.Add(927, "Omicron"); + _entityValue.Add("Pi", 928); // greek capital letter pi, U+03A0 ISOgrk3 + _entityName.Add(928, "Pi"); + _entityValue.Add("Rho", 929); // greek capital letter rho, U+03A1 + _entityName.Add(929, "Rho"); + _entityValue.Add("Sigma", 931); // greek capital letter sigma, U+03A3 ISOgrk3 + _entityName.Add(931, "Sigma"); + _entityValue.Add("Tau", 932); // greek capital letter tau, U+03A4 + _entityName.Add(932, "Tau"); + _entityValue.Add("Upsilon", 933); // greek capital letter upsilon, U+03A5 ISOgrk3 + _entityName.Add(933, "Upsilon"); + _entityValue.Add("Phi", 934); // greek capital letter phi, U+03A6 ISOgrk3 + _entityName.Add(934, "Phi"); + _entityValue.Add("Chi", 935); // greek capital letter chi, U+03A7 + _entityName.Add(935, "Chi"); + _entityValue.Add("Psi", 936); // greek capital letter psi, U+03A8 ISOgrk3 + _entityName.Add(936, "Psi"); + _entityValue.Add("Omega", 937); // greek capital letter omega, U+03A9 ISOgrk3 + _entityName.Add(937, "Omega"); + _entityValue.Add("alpha", 945); // greek small letter alpha, U+03B1 ISOgrk3 + _entityName.Add(945, "alpha"); + _entityValue.Add("beta", 946); // greek small letter beta, U+03B2 ISOgrk3 + _entityName.Add(946, "beta"); + _entityValue.Add("gamma", 947); // greek small letter gamma, U+03B3 ISOgrk3 + _entityName.Add(947, "gamma"); + _entityValue.Add("delta", 948); // greek small letter delta, U+03B4 ISOgrk3 + _entityName.Add(948, "delta"); + _entityValue.Add("epsilon", 949); // greek small letter epsilon, U+03B5 ISOgrk3 + _entityName.Add(949, "epsilon"); + _entityValue.Add("zeta", 950); // greek small letter zeta, U+03B6 ISOgrk3 + _entityName.Add(950, "zeta"); + _entityValue.Add("eta", 951); // greek small letter eta, U+03B7 ISOgrk3 + _entityName.Add(951, "eta"); + _entityValue.Add("theta", 952); // greek small letter theta, U+03B8 ISOgrk3 + _entityName.Add(952, "theta"); + _entityValue.Add("iota", 953); // greek small letter iota, U+03B9 ISOgrk3 + _entityName.Add(953, "iota"); + _entityValue.Add("kappa", 954); // greek small letter kappa, U+03BA ISOgrk3 + _entityName.Add(954, "kappa"); + _entityValue.Add("lambda", 955); // greek small letter lambda, U+03BB ISOgrk3 + _entityName.Add(955, "lambda"); + _entityValue.Add("mu", 956); // greek small letter mu, U+03BC ISOgrk3 + _entityName.Add(956, "mu"); + _entityValue.Add("nu", 957); // greek small letter nu, U+03BD ISOgrk3 + _entityName.Add(957, "nu"); + _entityValue.Add("xi", 958); // greek small letter xi, U+03BE ISOgrk3 + _entityName.Add(958, "xi"); + _entityValue.Add("omicron", 959); // greek small letter omicron, U+03BF NEW + _entityName.Add(959, "omicron"); + _entityValue.Add("pi", 960); // greek small letter pi, U+03C0 ISOgrk3 + _entityName.Add(960, "pi"); + _entityValue.Add("rho", 961); // greek small letter rho, U+03C1 ISOgrk3 + _entityName.Add(961, "rho"); + _entityValue.Add("sigmaf", 962); // greek small letter final sigma, U+03C2 ISOgrk3 + _entityName.Add(962, "sigmaf"); + _entityValue.Add("sigma", 963); // greek small letter sigma, U+03C3 ISOgrk3 + _entityName.Add(963, "sigma"); + _entityValue.Add("tau", 964); // greek small letter tau, U+03C4 ISOgrk3 + _entityName.Add(964, "tau"); + _entityValue.Add("upsilon", 965); // greek small letter upsilon, U+03C5 ISOgrk3 + _entityName.Add(965, "upsilon"); + _entityValue.Add("phi", 966); // greek small letter phi, U+03C6 ISOgrk3 + _entityName.Add(966, "phi"); + _entityValue.Add("chi", 967); // greek small letter chi, U+03C7 ISOgrk3 + _entityName.Add(967, "chi"); + _entityValue.Add("psi", 968); // greek small letter psi, U+03C8 ISOgrk3 + _entityName.Add(968, "psi"); + _entityValue.Add("omega", 969); // greek small letter omega, U+03C9 ISOgrk3 + _entityName.Add(969, "omega"); + _entityValue.Add("thetasym", 977); // greek small letter theta symbol, U+03D1 NEW + _entityName.Add(977, "thetasym"); + _entityValue.Add("upsih", 978); // greek upsilon with hook symbol, U+03D2 NEW + _entityName.Add(978, "upsih"); + _entityValue.Add("piv", 982); // greek pi symbol, U+03D6 ISOgrk3 + _entityName.Add(982, "piv"); + _entityValue.Add("bull", 8226); // bullet = black small circle, U+2022 ISOpub + _entityName.Add(8226, "bull"); + _entityValue.Add("hellip", 8230); // horizontal ellipsis = three dot leader, U+2026 ISOpub + _entityName.Add(8230, "hellip"); + _entityValue.Add("prime", 8242); // prime = minutes = feet, U+2032 ISOtech + _entityName.Add(8242, "prime"); + _entityValue.Add("Prime", 8243); // double prime = seconds = inches, U+2033 ISOtech + _entityName.Add(8243, "Prime"); + _entityValue.Add("oline", 8254); // overline = spacing overscore, U+203E NEW + _entityName.Add(8254, "oline"); + _entityValue.Add("frasl", 8260); // fraction slash, U+2044 NEW + _entityName.Add(8260, "frasl"); + _entityValue.Add("weierp", 8472); // script capital P = power set = Weierstrass p, U+2118 ISOamso + _entityName.Add(8472, "weierp"); + _entityValue.Add("image", 8465); // blackletter capital I = imaginary part, U+2111 ISOamso + _entityName.Add(8465, "image"); + _entityValue.Add("real", 8476); // blackletter capital R = real part symbol, U+211C ISOamso + _entityName.Add(8476, "real"); + _entityValue.Add("trade", 8482); // trade mark sign, U+2122 ISOnum + _entityName.Add(8482, "trade"); + _entityValue.Add("alefsym", 8501); // alef symbol = first transfinite cardinal, U+2135 NEW + _entityName.Add(8501, "alefsym"); + _entityValue.Add("larr", 8592); // leftwards arrow, U+2190 ISOnum + _entityName.Add(8592, "larr"); + _entityValue.Add("uarr", 8593); // upwards arrow, U+2191 ISOnum + _entityName.Add(8593, "uarr"); + _entityValue.Add("rarr", 8594); // rightwards arrow, U+2192 ISOnum + _entityName.Add(8594, "rarr"); + _entityValue.Add("darr", 8595); // downwards arrow, U+2193 ISOnum + _entityName.Add(8595, "darr"); + _entityValue.Add("harr", 8596); // left right arrow, U+2194 ISOamsa + _entityName.Add(8596, "harr"); + _entityValue.Add("crarr", 8629); // downwards arrow with corner leftwards = carriage return, U+21B5 NEW + _entityName.Add(8629, "crarr"); + _entityValue.Add("lArr", 8656); // leftwards double arrow, U+21D0 ISOtech + _entityName.Add(8656, "lArr"); + _entityValue.Add("uArr", 8657); // upwards double arrow, U+21D1 ISOamsa + _entityName.Add(8657, "uArr"); + _entityValue.Add("rArr", 8658); // rightwards double arrow, U+21D2 ISOtech + _entityName.Add(8658, "rArr"); + _entityValue.Add("dArr", 8659); // downwards double arrow, U+21D3 ISOamsa + _entityName.Add(8659, "dArr"); + _entityValue.Add("hArr", 8660); // left right double arrow, U+21D4 ISOamsa + _entityName.Add(8660, "hArr"); + _entityValue.Add("forall", 8704); // for all, U+2200 ISOtech + _entityName.Add(8704, "forall"); + _entityValue.Add("part", 8706); // partial differential, U+2202 ISOtech + _entityName.Add(8706, "part"); + _entityValue.Add("exist", 8707); // there exists, U+2203 ISOtech + _entityName.Add(8707, "exist"); + _entityValue.Add("empty", 8709); // empty set = null set = diameter, U+2205 ISOamso + _entityName.Add(8709, "empty"); + _entityValue.Add("nabla", 8711); // nabla = backward difference, U+2207 ISOtech + _entityName.Add(8711, "nabla"); + _entityValue.Add("isin", 8712); // element of, U+2208 ISOtech + _entityName.Add(8712, "isin"); + _entityValue.Add("notin", 8713); // not an element of, U+2209 ISOtech + _entityName.Add(8713, "notin"); + _entityValue.Add("ni", 8715); // contains as member, U+220B ISOtech + _entityName.Add(8715, "ni"); + _entityValue.Add("prod", 8719); // n-ary product = product sign, U+220F ISOamsb + _entityName.Add(8719, "prod"); + _entityValue.Add("sum", 8721); // n-ary sumation, U+2211 ISOamsb + _entityName.Add(8721, "sum"); + _entityValue.Add("minus", 8722); // minus sign, U+2212 ISOtech + _entityName.Add(8722, "minus"); + _entityValue.Add("lowast", 8727); // asterisk operator, U+2217 ISOtech + _entityName.Add(8727, "lowast"); + _entityValue.Add("radic", 8730); // square root = radical sign, U+221A ISOtech + _entityName.Add(8730, "radic"); + _entityValue.Add("prop", 8733); // proportional to, U+221D ISOtech + _entityName.Add(8733, "prop"); + _entityValue.Add("infin", 8734); // infinity, U+221E ISOtech + _entityName.Add(8734, "infin"); + _entityValue.Add("ang", 8736); // angle, U+2220 ISOamso + _entityName.Add(8736, "ang"); + _entityValue.Add("and", 8743); // logical and = wedge, U+2227 ISOtech + _entityName.Add(8743, "and"); + _entityValue.Add("or", 8744); // logical or = vee, U+2228 ISOtech + _entityName.Add(8744, "or"); + _entityValue.Add("cap", 8745); // intersection = cap, U+2229 ISOtech + _entityName.Add(8745, "cap"); + _entityValue.Add("cup", 8746); // union = cup, U+222A ISOtech + _entityName.Add(8746, "cup"); + _entityValue.Add("int", 8747); // integral, U+222B ISOtech + _entityName.Add(8747, "int"); + _entityValue.Add("there4", 8756); // therefore, U+2234 ISOtech + _entityName.Add(8756, "there4"); + _entityValue.Add("sim", 8764); // tilde operator = varies with = similar to, U+223C ISOtech + _entityName.Add(8764, "sim"); + _entityValue.Add("cong", 8773); // approximately equal to, U+2245 ISOtech + _entityName.Add(8773, "cong"); + _entityValue.Add("asymp", 8776); // almost equal to = asymptotic to, U+2248 ISOamsr + _entityName.Add(8776, "asymp"); + _entityValue.Add("ne", 8800); // not equal to, U+2260 ISOtech + _entityName.Add(8800, "ne"); + _entityValue.Add("equiv", 8801); // identical to, U+2261 ISOtech + _entityName.Add(8801, "equiv"); + _entityValue.Add("le", 8804); // less-than or equal to, U+2264 ISOtech + _entityName.Add(8804, "le"); + _entityValue.Add("ge", 8805); // greater-than or equal to, U+2265 ISOtech + _entityName.Add(8805, "ge"); + _entityValue.Add("sub", 8834); // subset of, U+2282 ISOtech + _entityName.Add(8834, "sub"); + _entityValue.Add("sup", 8835); // superset of, U+2283 ISOtech + _entityName.Add(8835, "sup"); + _entityValue.Add("nsub", 8836); // not a subset of, U+2284 ISOamsn + _entityName.Add(8836, "nsub"); + _entityValue.Add("sube", 8838); // subset of or equal to, U+2286 ISOtech + _entityName.Add(8838, "sube"); + _entityValue.Add("supe", 8839); // superset of or equal to, U+2287 ISOtech + _entityName.Add(8839, "supe"); + _entityValue.Add("oplus", 8853); // circled plus = direct sum, U+2295 ISOamsb + _entityName.Add(8853, "oplus"); + _entityValue.Add("otimes", 8855); // circled times = vector product, U+2297 ISOamsb + _entityName.Add(8855, "otimes"); + _entityValue.Add("perp", 8869); // up tack = orthogonal to = perpendicular, U+22A5 ISOtech + _entityName.Add(8869, "perp"); + _entityValue.Add("sdot", 8901); // dot operator, U+22C5 ISOamsb + _entityName.Add(8901, "sdot"); + _entityValue.Add("lceil", 8968); // left ceiling = apl upstile, U+2308 ISOamsc + _entityName.Add(8968, "lceil"); + _entityValue.Add("rceil", 8969); // right ceiling, U+2309 ISOamsc + _entityName.Add(8969, "rceil"); + _entityValue.Add("lfloor", 8970); // left floor = apl downstile, U+230A ISOamsc + _entityName.Add(8970, "lfloor"); + _entityValue.Add("rfloor", 8971); // right floor, U+230B ISOamsc + _entityName.Add(8971, "rfloor"); + _entityValue.Add("lang", 9001); // left-pointing angle bracket = bra, U+2329 ISOtech + _entityName.Add(9001, "lang"); + _entityValue.Add("rang", 9002); // right-pointing angle bracket = ket, U+232A ISOtech + _entityName.Add(9002, "rang"); + _entityValue.Add("loz", 9674); // lozenge, U+25CA ISOpub + _entityName.Add(9674, "loz"); + _entityValue.Add("spades", 9824); // black spade suit, U+2660 ISOpub + _entityName.Add(9824, "spades"); + _entityValue.Add("clubs", 9827); // black club suit = shamrock, U+2663 ISOpub + _entityName.Add(9827, "clubs"); + _entityValue.Add("hearts", 9829); // black heart suit = valentine, U+2665 ISOpub + _entityName.Add(9829, "hearts"); + _entityValue.Add("diams", 9830); // black diamond suit, U+2666 ISOpub + _entityName.Add(9830, "diams"); + _entityValue.Add("quot", 34); // quotation mark = APL quote, U+0022 ISOnum + _entityName.Add(34, "quot"); + _entityValue.Add("amp", 38); // ampersand, U+0026 ISOnum + _entityName.Add(38, "amp"); + _entityValue.Add("lt", 60); // less-than sign, U+003C ISOnum + _entityName.Add(60, "lt"); + _entityValue.Add("gt", 62); // greater-than sign, U+003E ISOnum + _entityName.Add(62, "gt"); + _entityValue.Add("OElig", 338); // latin capital ligature OE, U+0152 ISOlat2 + _entityName.Add(338, "OElig"); + _entityValue.Add("oelig", 339); // latin small ligature oe, U+0153 ISOlat2 + _entityName.Add(339, "oelig"); + _entityValue.Add("Scaron", 352); // latin capital letter S with caron, U+0160 ISOlat2 + _entityName.Add(352, "Scaron"); + _entityValue.Add("scaron", 353); // latin small letter s with caron, U+0161 ISOlat2 + _entityName.Add(353, "scaron"); + _entityValue.Add("Yuml", 376); // latin capital letter Y with diaeresis, U+0178 ISOlat2 + _entityName.Add(376, "Yuml"); + _entityValue.Add("circ", 710); // modifier letter circumflex accent, U+02C6 ISOpub + _entityName.Add(710, "circ"); + _entityValue.Add("tilde", 732); // small tilde, U+02DC ISOdia + _entityName.Add(732, "tilde"); + _entityValue.Add("ensp", 8194); // en space, U+2002 ISOpub + _entityName.Add(8194, "ensp"); + _entityValue.Add("emsp", 8195); // em space, U+2003 ISOpub + _entityName.Add(8195, "emsp"); + _entityValue.Add("thinsp", 8201); // thin space, U+2009 ISOpub + _entityName.Add(8201, "thinsp"); + _entityValue.Add("zwnj", 8204); // zero width non-joiner, U+200C NEW RFC 2070 + _entityName.Add(8204, "zwnj"); + _entityValue.Add("zwj", 8205); // zero width joiner, U+200D NEW RFC 2070 + _entityName.Add(8205, "zwj"); + _entityValue.Add("lrm", 8206); // left-to-right mark, U+200E NEW RFC 2070 + _entityName.Add(8206, "lrm"); + _entityValue.Add("rlm", 8207); // right-to-left mark, U+200F NEW RFC 2070 + _entityName.Add(8207, "rlm"); + _entityValue.Add("ndash", 8211); // en dash, U+2013 ISOpub + _entityName.Add(8211, "ndash"); + _entityValue.Add("mdash", 8212); // em dash, U+2014 ISOpub + _entityName.Add(8212, "mdash"); + _entityValue.Add("lsquo", 8216); // left single quotation mark, U+2018 ISOnum + _entityName.Add(8216, "lsquo"); + _entityValue.Add("rsquo", 8217); // right single quotation mark, U+2019 ISOnum + _entityName.Add(8217, "rsquo"); + _entityValue.Add("sbquo", 8218); // single low-9 quotation mark, U+201A NEW + _entityName.Add(8218, "sbquo"); + _entityValue.Add("ldquo", 8220); // left double quotation mark, U+201C ISOnum + _entityName.Add(8220, "ldquo"); + _entityValue.Add("rdquo", 8221); // right double quotation mark, U+201D ISOnum + _entityName.Add(8221, "rdquo"); + _entityValue.Add("bdquo", 8222); // double low-9 quotation mark, U+201E NEW + _entityName.Add(8222, "bdquo"); + _entityValue.Add("dagger", 8224); // dagger, U+2020 ISOpub + _entityName.Add(8224, "dagger"); + _entityValue.Add("Dagger", 8225); // double dagger, U+2021 ISOpub + _entityName.Add(8225, "Dagger"); + _entityValue.Add("permil", 8240); // per mille sign, U+2030 ISOtech + _entityName.Add(8240, "permil"); + _entityValue.Add("lsaquo", 8249); // single left-pointing angle quotation mark, U+2039 ISO proposed + _entityName.Add(8249, "lsaquo"); + _entityValue.Add("rsaquo", 8250); // single right-pointing angle quotation mark, U+203A ISO proposed + _entityName.Add(8250, "rsaquo"); + _entityValue.Add("euro", 8364); // euro sign, U+20AC NEW + _entityName.Add(8364, "euro"); + + _maxEntitySize = 8 + 1; // we add the # char + #endregion + } + + /// <summary> + /// A collection of entities indexed by name. + /// </summary> + public static Hashtable EntityName + { + get + { + return _entityName; + } + } + + /// <summary> + /// A collection of entities indexed by value. + /// </summary> + public static Hashtable EntityValue + { + get + { + return _entityValue; + } + } + + /// <summary> + /// Clone and entitize an HtmlNode. This will affect attribute values and nodes' text. It will also entitize all child nodes. + /// </summary> + /// <param name="node">The node to entitize.</param> + /// <returns>An entitized cloned node.</returns> + public static HtmlNode Entitize(HtmlNode node) + { + if (node == null) + { + throw new ArgumentNullException("node"); + } + HtmlNode result = node.CloneNode(true); + if (result.HasAttributes) + Entitize(result.Attributes); + + if (result.HasChildNodes) + { + Entitize(result.ChildNodes); + } + else + { + if (result.NodeType == HtmlNodeType.Text) + { + ((HtmlTextNode)result).Text = Entitize(((HtmlTextNode)result).Text, true, true); + } + } + return result; + } + + private static void Entitize(HtmlAttributeCollection collection) + { + foreach(HtmlAttribute at in collection) + { + at.Value = Entitize(at.Value); + } + } + + private static void Entitize(HtmlNodeCollection collection) + { + foreach(HtmlNode node in collection) + { + if (node.HasAttributes) + Entitize(node.Attributes); + + if (node.HasChildNodes) + { + Entitize(node.ChildNodes); + } + else + { + if (node.NodeType == HtmlNodeType.Text) + { + ((HtmlTextNode)node).Text = Entitize(((HtmlTextNode)node).Text, true, true); + } + } + } + } + + + /// <summary> + /// Replace characters above 127 by entities. + /// </summary> + /// <param name="text">The source text.</param> + /// <returns>The result text.</returns> + public static string Entitize(string text) + { + return Entitize(text, true); + } + + /// <summary> + /// Replace characters above 127 by entities. + /// </summary> + /// <param name="text">The source text.</param> + /// <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> + /// <returns>The result text.</returns> + public static string Entitize(string text, bool useNames) + { + return Entitize( text, useNames, false); + } + /// <summary> + /// Replace characters above 127 by entities. + /// </summary> + /// <param name="text">The source text.</param> + /// <param name="useNames">If set to false, the function will not use known entities name. Default is true.</param> + /// <param name="entitizeQuotAmpAndLtGt">If set to true, the [quote], [ampersand], [lower than] and [greather than] characters will be entitized.</param> + /// <returns>The result text</returns> + public static string Entitize(string text, bool useNames, bool entitizeQuotAmpAndLtGt) +// _entityValue.Add("quot", 34); // quotation mark = APL quote, U+0022 ISOnum +// _entityName.Add(34, "quot"); +// _entityValue.Add("amp", 38); // ampersand, U+0026 ISOnum +// _entityName.Add(38, "amp"); +// _entityValue.Add("lt", 60); // less-than sign, U+003C ISOnum +// _entityName.Add(60, "lt"); +// _entityValue.Add("gt", 62); // greater-than sign, U+003E ISOnum +// _entityName.Add(62, "gt"); + { + if (text == null) + return null; + + if (text.Length == 0) + return text; + + StringBuilder sb = new StringBuilder(text.Length); + for(int i=0;i<text.Length;i++) + { + int code = (int)text[i]; + if ((code>127) || (entitizeQuotAmpAndLtGt && ((code == 34) || (code == 38) || (code == 60) || (code == 62)))) + { + string entity = _entityName[code] as string; + if ((entity == null) || (!useNames)) + { + sb.Append("&#" + code + ";"); + } + else + { + sb.Append("&" + entity + ";"); + } + } + else + { + sb.Append(text[i]); + } + } + + return sb.ToString(); + } + + /// <summary> + /// Replace known entities by characters. + /// </summary> + /// <param name="text">The source text.</param> + /// <returns>The result text.</returns> + public static string DeEntitize(string text) + { + if (text == null) + return null; + + if (text.Length == 0) + return text; + + StringBuilder sb = new StringBuilder(text.Length); + ParseState state = ParseState.Text; + StringBuilder entity = new StringBuilder(10); + + for(int i=0;i<text.Length;i++) + { + switch(state) + { + case ParseState.Text: + switch(text[i]) + { + case '&': + state = ParseState.EntityStart; + break; + + default: + sb.Append(text[i]); + break; + + } + break; + + case ParseState.EntityStart: + switch(text[i]) + { + case ';': + if (entity.Length == 0) + { + sb.Append("&;"); + } + else + { + if (entity[0] == '#') + { + string e = entity.ToString(); + try + { + int code = Convert.ToInt32(e.Substring(1, e.Length-1)); + sb.Append(Convert.ToChar(code)); + } + catch + { + sb.Append("&#" + e + ";"); + } + } + else + { + // named entity? + int code; + object o = _entityValue[entity.ToString()]; + if (o == null) + { + // nope + sb.Append("&" + entity + ";"); + } + else + { + // we found one + code = (int)o; + sb.Append(Convert.ToChar(code)); + } + } + entity.Remove(0, entity.Length); + } + state = ParseState.Text; + break; + + case '&': + // new entity start without end, it was not an entity... + sb.Append("&" + entity); + entity.Remove(0, entity.Length); + break; + + default: + entity.Append(text[i]); + if (entity.Length>_maxEntitySize) + { + // unknown stuff, just don't touch it + state = ParseState.Text; + sb.Append("&" + entity); + entity.Remove(0, entity.Length); + } + break; + + } + break; + } + } + + // finish the work + if (state == ParseState.EntityStart) + { + sb.Append("&" + entity); + } + return sb.ToString(); + } + + private enum ParseState + { + Text, + EntityStart + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNameTable.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNameTable.cs new file mode 100644 index 0000000..dab41c1 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNameTable.cs @@ -0,0 +1,46 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Xml; + +namespace HtmlAgilityPack +{ + internal class HtmlNameTable : XmlNameTable + { + private NameTable _nametable = new NameTable(); + + internal HtmlNameTable() + { + } + + internal string GetOrAdd(string array) + { + string s = Get(array); + if (s == null) + { + return Add(array); + } + return s; + } + + public override string Add(string array) + { + return _nametable.Add(array); + } + + public override string Get(string array) + { + return _nametable.Get(array); + } + + public override string Get(char[] array, int offset, int length) + { + return _nametable.Get(array, offset, length); + } + + public override string Add(char[] array, int offset, int length) + { + return _nametable.Add(array, offset, length); + } + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNode.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNode.cs new file mode 100644 index 0000000..beef132 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNode.cs @@ -0,0 +1,1760 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; +using System.IO; +using System.Xml; +using System.Xml.XPath; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML node. + /// </summary> + public class HtmlNode: IXPathNavigable + { + /// <summary> + /// Gets the name of a comment node. It is actually defined as '#comment'. + /// </summary> + public static readonly string HtmlNodeTypeNameComment = "#comment"; + + /// <summary> + /// Gets the name of the document node. It is actually defined as '#document'. + /// </summary> + public static readonly string HtmlNodeTypeNameDocument = "#document"; + + /// <summary> + /// Gets the name of a text node. It is actually defined as '#text'. + /// </summary> + public static readonly string HtmlNodeTypeNameText = "#text"; + + /// <summary> + /// Gets a collection of flags that define specific behaviors for specific element nodes. + /// The table contains a DictionaryEntry list with the lowercase tag name as the Key, and a combination of HtmlElementFlags as the Value. + /// </summary> + public static Hashtable ElementsFlags; + + internal HtmlNodeType _nodetype; + internal HtmlNode _nextnode; + internal HtmlNode _prevnode; + internal HtmlNode _parentnode; + internal HtmlDocument _ownerdocument; + internal HtmlNodeCollection _childnodes; + internal HtmlAttributeCollection _attributes; + internal int _line = 0; + internal int _lineposition = 0; + internal int _streamposition = 0; + internal int _innerstartindex = 0; + internal int _innerlength = 0; + internal int _outerstartindex = 0; + internal int _outerlength = 0; + internal int _namestartindex = 0; + internal int _namelength = 0; + internal bool _starttag = false; + internal string _name; + internal HtmlNode _prevwithsamename = null; + internal HtmlNode _endnode; + + internal bool _innerchanged = false; + internal bool _outerchanged = false; + internal string _innerhtml; + internal string _outerhtml; + + static HtmlNode() + { + // tags whose content may be anything + ElementsFlags = new Hashtable(); + ElementsFlags.Add("script", HtmlElementFlag.CData); + ElementsFlags.Add("style", HtmlElementFlag.CData); + ElementsFlags.Add("noxhtml", HtmlElementFlag.CData); + + // tags that can not contain other tags + ElementsFlags.Add("base", HtmlElementFlag.Empty); + ElementsFlags.Add("link", HtmlElementFlag.Empty); + ElementsFlags.Add("meta", HtmlElementFlag.Empty); + ElementsFlags.Add("isindex", HtmlElementFlag.Empty); + ElementsFlags.Add("hr", HtmlElementFlag.Empty); + ElementsFlags.Add("col", HtmlElementFlag.Empty); + ElementsFlags.Add("img", HtmlElementFlag.Empty); + ElementsFlags.Add("param", HtmlElementFlag.Empty); + ElementsFlags.Add("embed", HtmlElementFlag.Empty); + ElementsFlags.Add("frame", HtmlElementFlag.Empty); + ElementsFlags.Add("wbr", HtmlElementFlag.Empty); + ElementsFlags.Add("bgsound", HtmlElementFlag.Empty); + ElementsFlags.Add("spacer", HtmlElementFlag.Empty); + ElementsFlags.Add("keygen", HtmlElementFlag.Empty); + ElementsFlags.Add("area", HtmlElementFlag.Empty); + ElementsFlags.Add("input", HtmlElementFlag.Empty); + ElementsFlags.Add("basefont", HtmlElementFlag.Empty); + + ElementsFlags.Add("form", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty); + + // they sometimes contain, and sometimes they don 't... + ElementsFlags.Add("option", HtmlElementFlag.Empty); + + // tag whose closing tag is equivalent to open tag: + // <p>bla</p>bla will be transformed into <p>bla</p>bla + // <p>bla<p>bla will be transformed into <p>bla<p>bla and not <p>bla></p><p>bla</p> or <p>bla<p>bla</p></p> + //<br> see above + ElementsFlags.Add("br", HtmlElementFlag.Empty | HtmlElementFlag.Closed); + ElementsFlags.Add("p", HtmlElementFlag.Empty | HtmlElementFlag.Closed); + } + + /// <summary> + /// Determines if an element node is closed. + /// </summary> + /// <param name="name">The name of the element node to check. May not be null.</param> + /// <returns>true if the name is the name of a closed element node, false otherwise.</returns> + public static bool IsClosedElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + object flag = ElementsFlags[name.ToLower()]; + if (flag == null) + { + return false; + } + return (((HtmlElementFlag)flag)&HtmlElementFlag.Closed) != 0; + } + + /// <summary> + /// Determines if an element node can be kept overlapped. + /// </summary> + /// <param name="name">The name of the element node to check. May not be null.</param> + /// <returns>true if the name is the name of an element node that can be kept overlapped, false otherwise.</returns> + public static bool CanOverlapElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + object flag = ElementsFlags[name.ToLower()]; + if (flag == null) + { + return false; + } + return (((HtmlElementFlag)flag)&HtmlElementFlag.CanOverlap) != 0; + } + + /// <summary> + /// Determines if a text corresponds to the closing tag of an node that can be kept overlapped. + /// </summary> + /// <param name="text">The text to check. May not be null.</param> + /// <returns>true or false.</returns> + public static bool IsOverlappedClosingElement(string text) + { + if (text == null) + { + throw new ArgumentNullException("text"); + } + // min is </x>: 4 + if (text.Length <= 4) + return false; + + if ((text[0] != '<') || + (text[text.Length - 1] != '>') || + (text[1] != '/')) + return false; + + string name = text.Substring(2, text.Length - 3); + return CanOverlapElement(name); + } + + /// <summary> + /// Determines if an element node is a CDATA element node. + /// </summary> + /// <param name="name">The name of the element node to check. May not be null.</param> + /// <returns>true if the name is the name of a CDATA element node, false otherwise.</returns> + public static bool IsCDataElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + object flag = ElementsFlags[name.ToLower()]; + if (flag == null) + { + return false; + } + return (((HtmlElementFlag)flag)&HtmlElementFlag.CData) != 0; + } + + /// <summary> + /// Determines if an element node is defined as empty. + /// </summary> + /// <param name="name">The name of the element node to check. May not be null.</param> + /// <returns>true if the name is the name of an empty element node, false otherwise.</returns> + public static bool IsEmptyElement(string name) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (name.Length == 0) + { + return true; + } + + // <!DOCTYPE ... + if ('!' == name[0]) + { + return true; + } + + // <?xml ... + if ('?' == name[0]) + { + return true; + } + + object flag = ElementsFlags[name.ToLower()]; + if (flag == null) + { + return false; + } + return (((HtmlElementFlag)flag)&HtmlElementFlag.Empty) != 0; + } + + /// <summary> + /// Creates an HTML node from a string representing literal HTML. + /// </summary> + /// <param name="html">The HTML text.</param> + /// <returns>The newly created node instance.</returns> + public static HtmlNode CreateNode(string html) + { + // REVIEW: this is *not* optimum... + HtmlDocument doc = new HtmlDocument(); + doc.LoadHtml(html); + return doc.DocumentNode.FirstChild; + } + + /// <summary> + /// Creates a duplicate of the node and the subtree under it. + /// </summary> + /// <param name="node">The node to duplicate. May not be null.</param> + public void CopyFrom(HtmlNode node) + { + CopyFrom(node, true); + } + + /// <summary> + /// Creates a duplicate of the node. + /// </summary> + /// <param name="node">The node to duplicate. May not be null.</param> + /// <param name="deep">true to recursively clone the subtree under the specified node, false to clone only the node itself.</param> + public void CopyFrom(HtmlNode node, bool deep) + { + if (node == null) + { + throw new ArgumentNullException("node"); + } + + Attributes.RemoveAll(); + if (node.HasAttributes) + { + foreach(HtmlAttribute att in node.Attributes) + { + SetAttributeValue(att.Name, att.Value); + } + } + + if (!deep) + { + RemoveAllChildren(); + if (node.HasChildNodes) + { + foreach(HtmlNode child in node.ChildNodes) + { + AppendChild(child.CloneNode(true)); + } + } + } + } + + internal HtmlNode(HtmlNodeType type, HtmlDocument ownerdocument, int index) + { + _nodetype = type; + _ownerdocument = ownerdocument; + _outerstartindex = index; + + switch(type) + { + case HtmlNodeType.Comment: + _name = HtmlNodeTypeNameComment; + _endnode = this; + break; + + case HtmlNodeType.Document: + _name = HtmlNodeTypeNameDocument; + _endnode = this; + break; + + case HtmlNodeType.Text: + _name = HtmlNodeTypeNameText; + _endnode = this; + break; + } + + if (_ownerdocument._openednodes != null) + { + if (!Closed) + { + // we use the index as the key + + // -1 means the node comes from public + if (-1 != index) + { + _ownerdocument._openednodes.Add(index, this); + } + } + } + + if ((-1 == index) && (type != HtmlNodeType.Comment) && (type != HtmlNodeType.Text)) + { + // innerhtml and outerhtml must be calculated + _outerchanged = true; + _innerchanged = true; + } + } + + internal void CloseNode(HtmlNode endnode) + { + if (!_ownerdocument.OptionAutoCloseOnEnd) + { + // close all children + if (_childnodes != null) + { + foreach(HtmlNode child in _childnodes) + { + if (child.Closed) + continue; + + // create a fake closer node + HtmlNode close = new HtmlNode(NodeType, _ownerdocument, -1); + close._endnode = close; + child.CloseNode(close); + } + } + } + + if (!Closed) + { + _endnode = endnode; + + if (_ownerdocument._openednodes != null) + { + _ownerdocument._openednodes.Remove(_outerstartindex); + } + + HtmlNode self = _ownerdocument._lastnodes[Name] as HtmlNode; + if (self == this) + { + _ownerdocument._lastnodes.Remove(Name); + _ownerdocument.UpdateLastParentNode(); + } + + if (endnode == this) + return; + + // create an inner section + _innerstartindex = _outerstartindex + _outerlength; + _innerlength = endnode._outerstartindex - _innerstartindex; + + // update full length + _outerlength = (endnode._outerstartindex + endnode._outerlength) - _outerstartindex; + } + } + + internal HtmlNode EndNode + { + get + { + return _endnode; + } + } + + internal string GetId() + { + HtmlAttribute att = Attributes["id"]; + if (att == null) + { + return null; + } + return att.Value; + } + + internal void SetId(string id) + { + HtmlAttribute att = Attributes["id"]; + if (att == null) + { + att = _ownerdocument.CreateAttribute("id"); + } + att.Value = id; + _ownerdocument.SetIdForNode(this, att.Value); + _outerchanged = true; + } + + /// <summary> + /// Creates a new XPathNavigator object for navigating this HTML node. + /// </summary> + /// <returns>An XPathNavigator object. The XPathNavigator is positioned on the node from which the method was called. It is not positioned on the root of the document.</returns> + public XPathNavigator CreateNavigator() + { + return new HtmlNodeNavigator(_ownerdocument, this); + } + + /// <summary> + /// Selects the first XmlNode that matches the XPath expression. + /// </summary> + /// <param name="xpath">The XPath expression. May not be null.</param> + /// <returns>The first HtmlNode that matches the XPath query or a null reference if no matching node was found.</returns> + public HtmlNode SelectSingleNode(string xpath) + { + if (xpath == null) + { + throw new ArgumentNullException("xpath"); + } + + HtmlNodeNavigator nav = new HtmlNodeNavigator(_ownerdocument, this); + XPathNodeIterator it = nav.Select(xpath); + if (!it.MoveNext()) + { + return null; + } + + HtmlNodeNavigator node = (HtmlNodeNavigator)it.Current; + return node.CurrentNode; + } + + /// <summary> + /// Selects a list of nodes matching the XPath expression. + /// </summary> + /// <param name="xpath">The XPath expression.</param> + /// <returns>An HtmlNodeCollection containing a collection of nodes matching the XPath query, or null if no node matched the XPath expression.</returns> + public HtmlNodeCollection SelectNodes(string xpath) + { + HtmlNodeCollection list = new HtmlNodeCollection(null); + + HtmlNodeNavigator nav = new HtmlNodeNavigator(_ownerdocument, this); + XPathNodeIterator it = nav.Select(xpath); + while (it.MoveNext()) + { + HtmlNodeNavigator n = (HtmlNodeNavigator)it.Current; + list.Add(n.CurrentNode); + } + if (list.Count == 0) + { + return null; + } + return list; + } + + /// <summary> + /// Gets or sets the value of the 'id' HTML attribute. The document must have been parsed using the OptionUseIdAttribute set to true. + /// </summary> + public string Id + { + get + { + if (_ownerdocument._nodesid == null) + { + throw new Exception(HtmlDocument.HtmlExceptionUseIdAttributeFalse); + } + return GetId(); + } + set + { + if (_ownerdocument._nodesid == null) + { + throw new Exception(HtmlDocument.HtmlExceptionUseIdAttributeFalse); + } + + if (value == null) + { + throw new ArgumentNullException("value"); + } + SetId(value); + } + } + + /// <summary> + /// Gets the line number of this node in the document. + /// </summary> + public int Line + { + get + { + return _line; + } + } + + /// <summary> + /// Gets the column number of this node in the document. + /// </summary> + public int LinePosition + { + get + { + return _lineposition; + } + } + + /// <summary> + /// Gets the stream position of this node in the document, relative to the start of the document. + /// </summary> + public int StreamPosition + { + get + { + return _streamposition; + } + } + + /// <summary> + /// Gets a value indicating if this node has been closed or not. + /// </summary> + public bool Closed + { + get + { + return (_endnode != null); + } + } + + /// <summary> + /// Gets or sets this node's name. + /// </summary> + public string Name + { + get + { + if (_name == null) + { + _name = _ownerdocument._text.Substring(_namestartindex, _namelength).ToLower(); + } + return _name; + } + set + { + _name = value; + } + } + + /// <summary> + /// Gets or Sets the text between the start and end tags of the object. + /// </summary> + public virtual string InnerText + { + get + { + if (_nodetype == HtmlNodeType.Text) + { + return ((HtmlTextNode)this).Text; + } + + if (_nodetype == HtmlNodeType.Comment) + { + return ((HtmlCommentNode)this).Comment; + } + + // note: right now, this method is *slow*, because we recompute everything. + // it could be optimised like innerhtml + if (!HasChildNodes) + { + return string.Empty; + } + + string s = null; + foreach(HtmlNode node in ChildNodes) + { + s += node.InnerText; + } + return s; + } + } + + /// <summary> + /// Gets or Sets the HTML between the start and end tags of the object. + /// </summary> + public virtual string InnerHtml + { + get + { + if (_innerchanged) + { + _innerhtml = WriteContentTo(); + _innerchanged = false; + return _innerhtml; + } + if (_innerhtml != null) + { + return _innerhtml; + } + + if (_innerstartindex < 0) + { + return string.Empty; + } + + return _ownerdocument._text.Substring(_innerstartindex, _innerlength); + } + set + { + HtmlDocument doc = new HtmlDocument(); + doc.LoadHtml(value); + + RemoveAllChildren(); + AppendChildren(doc.DocumentNode.ChildNodes); + } + } + + /// <summary> + /// Gets or Sets the object and its content in HTML. + /// </summary> + public virtual string OuterHtml + { + get + { + if (_outerchanged) + { + _outerhtml = WriteTo(); + _outerchanged = false; + return _outerhtml; + } + + if (_outerhtml != null) + { + return _outerhtml; + } + + if (_outerstartindex < 0) + { + return string.Empty; + } + + return _ownerdocument._text.Substring(_outerstartindex, _outerlength); + } + } + + /// <summary> + /// Creates a duplicate of the node + /// </summary> + /// <returns></returns> + public HtmlNode Clone() + { + return CloneNode(true); + } + + /// <summary> + /// Creates a duplicate of the node and changes its name at the same time. + /// </summary> + /// <param name="newName">The new name of the cloned node. May not be null.</param> + /// <returns>The cloned node.</returns> + public HtmlNode CloneNode(string newName) + { + return CloneNode(newName, true); + } + + /// <summary> + /// Creates a duplicate of the node and changes its name at the same time. + /// </summary> + /// <param name="newName">The new name of the cloned node. May not be null.</param> + /// <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> + /// <returns>The cloned node.</returns> + public HtmlNode CloneNode(string newName, bool deep) + { + if (newName == null) + { + throw new ArgumentNullException("newName"); + } + + HtmlNode node = CloneNode(deep); + node._name = newName; + return node; + } + + /// <summary> + /// Creates a duplicate of the node. + /// </summary> + /// <param name="deep">true to recursively clone the subtree under the specified node; false to clone only the node itself.</param> + /// <returns>The cloned node.</returns> + public HtmlNode CloneNode(bool deep) + { + HtmlNode node = _ownerdocument.CreateNode(_nodetype); + node._name = Name; + + switch(_nodetype) + { + case HtmlNodeType.Comment: + ((HtmlCommentNode)node).Comment = ((HtmlCommentNode)this).Comment; + return node; + + case HtmlNodeType.Text: + ((HtmlTextNode)node).Text = ((HtmlTextNode)this).Text; + return node; + } + + // attributes + if (HasAttributes) + { + foreach(HtmlAttribute att in _attributes) + { + HtmlAttribute newatt = att.Clone(); + node.Attributes.Append(newatt); + } + } + + // closing attributes + if (HasClosingAttributes) + { + node._endnode = _endnode.CloneNode(false); + foreach(HtmlAttribute att in _endnode._attributes) + { + HtmlAttribute newatt = att.Clone(); + node._endnode._attributes.Append(newatt); + } + } + if (!deep) + { + return node; + } + + if (!HasChildNodes) + { + return node; + } + + // child nodes + foreach(HtmlNode child in _childnodes) + { + HtmlNode newchild = child.Clone(); + node.AppendChild(newchild); + } + return node; + } + + /// <summary> + /// Gets the HTML node immediately following this element. + /// </summary> + public HtmlNode NextSibling + { + get + { + return _nextnode; + } + } + + /// <summary> + /// Gets the node immediately preceding this node. + /// </summary> + public HtmlNode PreviousSibling + { + get + { + return _prevnode; + } + } + + /// <summary> + /// Removes all the children and/or attributes of the current node. + /// </summary> + public void RemoveAll() + { + RemoveAllChildren(); + + if (HasAttributes) + { + _attributes.Clear(); + } + + if ((_endnode != null) && (_endnode != this)) + { + if (_endnode._attributes != null) + { + _endnode._attributes.Clear(); + } + } + _outerchanged = true; + _innerchanged = true; + } + + /// <summary> + /// Removes all the children of the current node. + /// </summary> + public void RemoveAllChildren() + { + if (!HasChildNodes) + { + return; + } + + if (_ownerdocument.OptionUseIdAttribute) + { + // remove nodes from id list + foreach(HtmlNode node in _childnodes) + { + _ownerdocument.SetIdForNode(null, node.GetId()); + } + } + _childnodes.Clear(); + _outerchanged = true; + _innerchanged = true; + } + + /// <summary> + /// Removes the specified child node. + /// </summary> + /// <param name="oldChild">The node being removed. May not be null.</param> + /// <returns>The node removed.</returns> + public HtmlNode RemoveChild(HtmlNode oldChild) + { + if (oldChild == null) + { + throw new ArgumentNullException("oldChild"); + } + + int index = -1; + + if (_childnodes != null) + { + index = _childnodes[oldChild]; + } + + if (index == -1) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + + _childnodes.Remove(index); + + _ownerdocument.SetIdForNode(null, oldChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return oldChild; + } + + /// <summary> + /// Removes the specified child node. + /// </summary> + /// <param name="oldChild">The node being removed. May not be null.</param> + /// <param name="keepGrandChildren">true to keep grand children of the node, false otherwise.</param> + /// <returns>The node removed.</returns> + public HtmlNode RemoveChild(HtmlNode oldChild, bool keepGrandChildren) + { + if (oldChild == null) + { + throw new ArgumentNullException("oldChild"); + } + + if ((oldChild._childnodes != null) && keepGrandChildren) + { + // get prev sibling + HtmlNode prev = oldChild.PreviousSibling; + + // reroute grand children to ourselves + foreach(HtmlNode grandchild in oldChild._childnodes) + { + InsertAfter(grandchild, prev); + } + } + RemoveChild(oldChild); + _outerchanged = true; + _innerchanged = true; + return oldChild; + } + + /// <summary> + /// Replaces the child node oldChild with newChild node. + /// </summary> + /// <param name="newChild">The new node to put in the child list.</param> + /// <param name="oldChild">The node being replaced in the list.</param> + /// <returns>The node replaced.</returns> + public HtmlNode ReplaceChild(HtmlNode newChild, HtmlNode oldChild) + { + if (newChild == null) + { + return RemoveChild(oldChild); + } + + if (oldChild == null) + { + return AppendChild(newChild); + } + + int index = -1; + + if (_childnodes != null) + { + index = _childnodes[oldChild]; + } + + if (index == -1) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + + _childnodes.Replace(index, newChild); + + _ownerdocument.SetIdForNode(null, oldChild.GetId()); + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Inserts the specified node immediately before the specified reference node. + /// </summary> + /// <param name="newChild">The node to insert. May not be null.</param> + /// <param name="refChild">The node that is the reference node. The newChild is placed before this node.</param> + /// <returns>The node being inserted.</returns> + public HtmlNode InsertBefore(HtmlNode newChild, HtmlNode refChild) + { + if (newChild == null) + { + throw new ArgumentNullException("newChild"); + } + + if (refChild == null) + { + return AppendChild(newChild); + } + + if (newChild == refChild) + { + return newChild; + } + + int index = -1; + + if (_childnodes != null) + { + index = _childnodes[refChild]; + } + + if (index == -1) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + + _childnodes.Insert(index, newChild); + + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Inserts the specified node immediately after the specified reference node. + /// </summary> + /// <param name="newChild">The node to insert. May not be null.</param> + /// <param name="refChild">The node that is the reference node. The newNode is placed after the refNode.</param> + /// <returns>The node being inserted.</returns> + public HtmlNode InsertAfter(HtmlNode newChild, HtmlNode refChild) + { + if (newChild == null) + { + throw new ArgumentNullException("newChild"); + } + + if (refChild == null) + { + return PrependChild(newChild); + } + + if (newChild == refChild) + { + return newChild; + } + + int index = -1; + + if (_childnodes != null) + { + index = _childnodes[refChild]; + } + if (index == -1) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + + _childnodes.Insert(index + 1, newChild); + + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Gets the first child of the node. + /// </summary> + public HtmlNode FirstChild + { + get + { + if (!HasChildNodes) + { + return null; + } + return _childnodes[0]; + } + } + + /// <summary> + /// Gets the last child of the node. + /// </summary> + public HtmlNode LastChild + { + get + { + if (!HasChildNodes) + { + return null; + } + return _childnodes[_childnodes.Count-1]; + } + } + + /// <summary> + /// Gets the type of this node. + /// </summary> + public HtmlNodeType NodeType + { + get + { + return _nodetype; + } + } + + /// <summary> + /// Gets the parent of this node (for nodes that can have parents). + /// </summary> + public HtmlNode ParentNode + { + get + { + return _parentnode; + } + } + + /// <summary> + /// Gets the HtmlDocument to which this node belongs. + /// </summary> + public HtmlDocument OwnerDocument + { + get + { + return _ownerdocument; + } + } + + /// <summary> + /// Gets all the children of the node. + /// </summary> + public HtmlNodeCollection ChildNodes + { + get + { + if (_childnodes == null) + { + _childnodes = new HtmlNodeCollection(this); + } + return _childnodes; + } + } + + /// <summary> + /// Adds the specified node to the beginning of the list of children of this node. + /// </summary> + /// <param name="newChild">The node to add. May not be null.</param> + /// <returns>The node added.</returns> + public HtmlNode PrependChild(HtmlNode newChild) + { + if (newChild == null) + { + throw new ArgumentNullException("newChild"); + } + ChildNodes.Prepend(newChild); + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Adds the specified node list to the beginning of the list of children of this node. + /// </summary> + /// <param name="newChildren">The node list to add. May not be null.</param> + public void PrependChildren(HtmlNodeCollection newChildren) + { + if (newChildren == null) + { + throw new ArgumentNullException("newChildren"); + } + + foreach(HtmlNode newChild in newChildren) + { + PrependChild(newChild); + } + } + + /// <summary> + /// Adds the specified node to the end of the list of children of this node. + /// </summary> + /// <param name="newChild">The node to add. May not be null.</param> + /// <returns>The node added.</returns> + public HtmlNode AppendChild(HtmlNode newChild) + { + if (newChild == null) + { + throw new ArgumentNullException("newChild"); + } + + ChildNodes.Append(newChild); + _ownerdocument.SetIdForNode(newChild, newChild.GetId()); + _outerchanged = true; + _innerchanged = true; + return newChild; + } + + /// <summary> + /// Adds the specified node to the end of the list of children of this node. + /// </summary> + /// <param name="newChildren">The node list to add. May not be null.</param> + public void AppendChildren(HtmlNodeCollection newChildren) + { + if (newChildren == null) + throw new ArgumentNullException("newChildrend"); + + foreach(HtmlNode newChild in newChildren) + { + AppendChild(newChild); + } + } + + /// <summary> + /// Gets a value indicating whether the current node has any attributes. + /// </summary> + public bool HasAttributes + { + get + { + if (_attributes == null) + { + return false; + } + + if (_attributes.Count <= 0) + { + return false; + } + return true; + } + } + + /// <summary> + /// Gets a value indicating whether the current node has any attributes on the closing tag. + /// </summary> + public bool HasClosingAttributes + { + get + { + if ((_endnode == null) || (_endnode == this)) + { + return false; + } + + if (_endnode._attributes == null) + { + return false; + } + + if (_endnode._attributes.Count <= 0) + { + return false; + } + return true; + } + } + + /// <summary> + /// Gets a value indicating whether this node has any child nodes. + /// </summary> + public bool HasChildNodes + { + get + { + if (_childnodes == null) + { + return false; + } + + if (_childnodes.Count <= 0) + { + return false; + } + return true; + } + } + + /// <summary> + /// Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + /// </summary> + /// <param name="name">The name of the attribute to get. May not be null.</param> + /// <param name="def">The default value to return if not found.</param> + /// <returns>The value of the attribute if found, the default value if not found.</returns> + public string GetAttributeValue(string name, string def) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (!HasAttributes) + { + return def; + } + HtmlAttribute att = Attributes[name]; + if (att == null) + { + return def; + } + return att.Value; + } + + /// <summary> + /// Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + /// </summary> + /// <param name="name">The name of the attribute to get. May not be null.</param> + /// <param name="def">The default value to return if not found.</param> + /// <returns>The value of the attribute if found, the default value if not found.</returns> + public int GetAttributeValue(string name, int def) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (!HasAttributes) + { + return def; + } + HtmlAttribute att = Attributes[name]; + if (att == null) + { + return def; + } + try + { + return Convert.ToInt32(att.Value); + } + catch + { + return def; + } + } + + /// <summary> + /// Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned. + /// </summary> + /// <param name="name">The name of the attribute to get. May not be null.</param> + /// <param name="def">The default value to return if not found.</param> + /// <returns>The value of the attribute if found, the default value if not found.</returns> + public bool GetAttributeValue(string name, bool def) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (!HasAttributes) + { + return def; + } + HtmlAttribute att = Attributes[name]; + if (att == null) + { + return def; + } + try + { + return Convert.ToBoolean(att.Value); + } + catch + { + return def; + } + } + + /// <summary> + /// Helper method to set the value of an attribute of this node. If the attribute is not found, it will be created automatically. + /// </summary> + /// <param name="name">The name of the attribute to set. May not be null.</param> + /// <param name="value">The value for the attribute.</param> + /// <returns>The corresponding attribute instance.</returns> + public HtmlAttribute SetAttributeValue(string name, string value) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + HtmlAttribute att = Attributes[name]; + if (att == null) + { + return Attributes.Append(_ownerdocument.CreateAttribute(name, value)); + } + att.Value = value; + return att; + } + + /// <summary> + /// Gets the collection of HTML attributes for this node. May not be null. + /// </summary> + public HtmlAttributeCollection Attributes + { + get + { + if (!HasAttributes) + { + _attributes = new HtmlAttributeCollection(this); + } + return _attributes; + } + } + + /// <summary> + /// Gets the collection of HTML attributes for the closing tag. May not be null. + /// </summary> + public HtmlAttributeCollection ClosingAttributes + { + get + { + if (!HasClosingAttributes) + { + return new HtmlAttributeCollection(this); + } + return _endnode.Attributes; + } + } + + internal void WriteAttribute(TextWriter outText, HtmlAttribute att) + { + string name; + + if (_ownerdocument.OptionOutputAsXml) + { + if (_ownerdocument.OptionOutputUpperCase) + { + name = att.XmlName.ToUpper(); + } + else + { + name = att.XmlName; + } + + outText.Write(" " + name + "=\"" + HtmlDocument.HtmlEncode(att.XmlValue) + "\""); + } + else + { + if (_ownerdocument.OptionOutputUpperCase) + { + name = att.Name.ToUpper(); + } + else + { + name = att.Name; + } + + if (att.Name.Length >= 4) + { + if ((att.Name[0] == '<') && (att.Name[1] == '%') && + (att.Name[att.Name.Length-1] == '>') && (att.Name[att.Name.Length-2] == '%')) + { + outText.Write(" " + name); + return; + } + } + if (_ownerdocument.OptionOutputOptimizeAttributeValues) + { + if (att.Value.IndexOfAny(new Char[]{(char)10, (char)13, (char)9, ' '}) < 0) + { + outText.Write(" " + name + "=" + att.Value); + } + else + { + outText.Write(" " + name + "=\"" + att.Value + "\""); + } + } + else + { + outText.Write(" " + name + "=\"" + att.Value + "\""); + } + } + } + + internal static void WriteAttributes(XmlWriter writer, HtmlNode node) + { + if (!node.HasAttributes) + { + return; + } + // we use _hashitems to make sure attributes are written only once + foreach(HtmlAttribute att in node.Attributes._hashitems.Values) + { + writer.WriteAttributeString(att.XmlName, att.Value); + } + } + + internal void WriteAttributes(TextWriter outText, bool closing) + { + if (_ownerdocument.OptionOutputAsXml) + { + if (_attributes == null) + { + return; + } + // we use _hashitems to make sure attributes are written only once + foreach(HtmlAttribute att in _attributes._hashitems.Values) + { + WriteAttribute(outText, att); + } + return; + } + + if (!closing) + { + if (_attributes != null) + { + + foreach(HtmlAttribute att in _attributes) + { + WriteAttribute(outText, att); + } + } + if (_ownerdocument.OptionAddDebuggingAttributes) + { + WriteAttribute(outText, _ownerdocument.CreateAttribute("_closed", Closed.ToString())); + WriteAttribute(outText, _ownerdocument.CreateAttribute("_children", ChildNodes.Count.ToString())); + + int i = 0; + foreach(HtmlNode n in ChildNodes) + { + WriteAttribute(outText, _ownerdocument.CreateAttribute("_child_" + i, + n.Name)); + i++; + } + } + } + else + { + if (_endnode == null) + { + return; + } + + if (_endnode._attributes == null) + { + return; + } + + if (_endnode == this) + { + return; + } + + foreach(HtmlAttribute att in _endnode._attributes) + { + WriteAttribute(outText, att); + } + if (_ownerdocument.OptionAddDebuggingAttributes) + { + WriteAttribute(outText, _ownerdocument.CreateAttribute("_closed", Closed.ToString())); + WriteAttribute(outText, _ownerdocument.CreateAttribute("_children", ChildNodes.Count.ToString())); + } + } + } + + internal static string GetXmlComment(HtmlCommentNode comment) + { + string s = comment.Comment; + return s.Substring(4, s.Length-7).Replace("--", " - -"); + } + + /// <summary> + /// Saves the current node to the specified TextWriter. + /// </summary> + /// <param name="outText">The TextWriter to which you want to save.</param> + public void WriteTo(TextWriter outText) + { + string html; + switch(_nodetype) + { + case HtmlNodeType.Comment: + html = ((HtmlCommentNode)this).Comment; + if (_ownerdocument.OptionOutputAsXml) + { + outText.Write("<!--" + GetXmlComment((HtmlCommentNode)this) + " -->"); + } + else + { + outText.Write(html); + } + break; + + case HtmlNodeType.Document: + if (_ownerdocument.OptionOutputAsXml) + { + outText.Write("<?xml version=\"1.0\" encoding=\"" + _ownerdocument.GetOutEncoding().BodyName + "\"?>"); + + // check there is a root element + if (_ownerdocument.DocumentNode.HasChildNodes) + { + int rootnodes = _ownerdocument.DocumentNode._childnodes.Count; + if (rootnodes > 0) + { + HtmlNode xml = _ownerdocument.GetXmlDeclaration(); + if (xml != null) + { + rootnodes --; + } + + if (rootnodes > 1) + { + if (_ownerdocument.OptionOutputUpperCase) + { + outText.Write("<SPAN>"); + WriteContentTo(outText); + outText.Write("</SPAN>"); + } + else + { + outText.Write("<span>"); + WriteContentTo(outText); + outText.Write("</span>"); + } + break; + } + } + } + } + WriteContentTo(outText); + break; + + case HtmlNodeType.Text: + html = ((HtmlTextNode)this).Text; + if (_ownerdocument.OptionOutputAsXml) + { + outText.Write(HtmlDocument.HtmlEncode(html)); + } + else + { + outText.Write(html); + } + break; + + case HtmlNodeType.Element: + string name; + if (_ownerdocument.OptionOutputUpperCase) + { + name = Name.ToUpper(); + } + else + { + name = Name; + } + + if (_ownerdocument.OptionOutputAsXml) + { + if (name.Length > 0) + { + if (name[0] == '?') + { + // forget this one, it's been done at the document level + break; + } + + if (name.Trim().Length == 0) + { + break; + } + name = HtmlDocument.GetXmlName(name); + } + else + { + break; + } + } + + outText.Write("<" + name); + WriteAttributes(outText, false); + + if (!HasChildNodes) + { + if (HtmlNode.IsEmptyElement(Name)) + { + if ((_ownerdocument.OptionWriteEmptyNodes) || (_ownerdocument.OptionOutputAsXml)) + { + outText.Write(" />"); + } + else + { + if (Name.Length > 0) + { + if (Name[0] == '?') + { + outText.Write("?"); + } + } + + outText.Write(">"); + } + } + else + { + outText.Write("></" + name + ">"); + } + } + else + { + outText.Write(">"); + bool cdata = false; + if (_ownerdocument.OptionOutputAsXml) + { + if (HtmlNode.IsCDataElement(Name)) + { + // this code and the following tries to output things as nicely as possible for old browsers. + cdata = true; + outText.Write("\r\n//<![CDATA[\r\n"); + } + } + + if (cdata) + { + if (HasChildNodes) + { + // child must be a text + ChildNodes[0].WriteTo(outText); + } + outText.Write("\r\n//]]>//\r\n"); + } + else + { + WriteContentTo(outText); + } + + outText.Write("</" + name); + if (!_ownerdocument.OptionOutputAsXml) + { + WriteAttributes(outText, true); + } + outText.Write(">"); + } + break; + } + } + + /// <summary> + /// Saves the current node to the specified XmlWriter. + /// </summary> + /// <param name="writer">The XmlWriter to which you want to save.</param> + public void WriteTo(XmlWriter writer) + { + string html; + switch(_nodetype) + { + case HtmlNodeType.Comment: + writer.WriteComment(GetXmlComment((HtmlCommentNode)this)); + break; + + case HtmlNodeType.Document: + writer.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"" + _ownerdocument.GetOutEncoding().BodyName + "\""); + if (HasChildNodes) + { + foreach(HtmlNode subnode in ChildNodes) + { + subnode.WriteTo(writer); + } + } + break; + + case HtmlNodeType.Text: + html = ((HtmlTextNode)this).Text; + writer.WriteString(html); + break; + + case HtmlNodeType.Element: + string name; + if (_ownerdocument.OptionOutputUpperCase) + { + name = Name.ToUpper(); + } + else + { + name = Name; + } + writer.WriteStartElement(name); + WriteAttributes(writer, this); + + if (HasChildNodes) + { + foreach(HtmlNode subnode in ChildNodes) + { + subnode.WriteTo(writer); + } + } + writer.WriteEndElement(); + break; + } + } + + /// <summary> + /// Saves all the children of the node to the specified TextWriter. + /// </summary> + /// <param name="outText">The TextWriter to which you want to save.</param> + public void WriteContentTo(TextWriter outText) + { + if (_childnodes == null) + { + return; + } + + foreach(HtmlNode node in _childnodes) + { + node.WriteTo(outText); + } + } + + /// <summary> + /// Saves the current node to a string. + /// </summary> + /// <returns>The saved string.</returns> + public string WriteTo() + { + StringWriter sw = new StringWriter(); + WriteTo(sw); + sw.Flush(); + return sw.ToString(); + } + + /// <summary> + /// Saves all the children of the node to a string. + /// </summary> + /// <returns>The saved string.</returns> + public string WriteContentTo() + { + StringWriter sw = new StringWriter(); + WriteContentTo(sw); + sw.Flush(); + return sw.ToString(); + } + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeCollection.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeCollection.cs new file mode 100644 index 0000000..6596a6e --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeCollection.cs @@ -0,0 +1,326 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a combined list and collection of HTML nodes. + /// </summary> + public class HtmlNodeCollection : IEnumerable + { + private ArrayList _items = new ArrayList(); + private HtmlNode _parentnode; + + internal HtmlNodeCollection(HtmlNode parentnode) + { + _parentnode = parentnode; // may be null + } + + /// <summary> + /// Gets the number of elements actually contained in the list. + /// </summary> + public int Count + { + get + { + return _items.Count; + } + } + + internal void Clear() + { + foreach (HtmlNode node in _items) + { + node._parentnode = null; + node._nextnode = null; + node._prevnode = null; + } + _items.Clear(); + } + + internal void Remove(int index) + { + HtmlNode next = null; + HtmlNode prev = null; + HtmlNode oldnode = (HtmlNode)_items[index]; + + if (index > 0) + { + prev = (HtmlNode)_items[index - 1]; + } + + if (index < (_items.Count - 1)) + { + next = (HtmlNode)_items[index + 1]; + } + + _items.RemoveAt(index); + + if (prev != null) + { + if (next == prev) + { + throw new InvalidProgramException("Unexpected error."); + } + prev._nextnode = next; + } + + if (next != null) + { + next._prevnode = prev; + } + + oldnode._prevnode = null; + oldnode._nextnode = null; + oldnode._parentnode = null; + } + + internal void Replace(int index, HtmlNode node) + { + HtmlNode next = null; + HtmlNode prev = null; + HtmlNode oldnode = (HtmlNode)_items[index]; + + if (index > 0) + { + prev = (HtmlNode)_items[index - 1]; + } + + if (index < (_items.Count - 1)) + { + next = (HtmlNode)_items[index + 1]; + } + + _items[index] = node; + + if (prev != null) + { + if (node == prev) + { + throw new InvalidProgramException("Unexpected error."); + } + prev._nextnode = node; + } + + if (next != null) + { + next._prevnode = node; + } + + node._prevnode = prev; + if (next == node) + { + throw new InvalidProgramException("Unexpected error."); + } + node._nextnode = next; + node._parentnode = _parentnode; + + oldnode._prevnode = null; + oldnode._nextnode = null; + oldnode._parentnode = null; + } + + internal void Insert(int index, HtmlNode node) + { + HtmlNode next = null; + HtmlNode prev = null; + + if (index > 0) + { + prev = (HtmlNode)_items[index - 1]; + } + + if (index < _items.Count) + { + next = (HtmlNode)_items[index]; + } + + _items.Insert(index, node); + + if (prev != null) + { + if (node == prev) + { + throw new InvalidProgramException("Unexpected error."); + } + prev._nextnode = node; + } + + if (next != null) + { + next._prevnode = node; + } + + node._prevnode = prev; + + if (next == node) + { + throw new InvalidProgramException("Unexpected error."); + } + + node._nextnode = next; + node._parentnode = _parentnode; + } + + internal void Append(HtmlNode node) + { + HtmlNode last = null; + if (_items.Count > 0) + { + last = (HtmlNode)_items[_items.Count - 1]; + } + + _items.Add(node); + node._prevnode = last; + node._nextnode = null; + node._parentnode = _parentnode; + if (last != null) + { + if (last == node) + { + throw new InvalidProgramException("Unexpected error."); + } + last._nextnode = node; + } + } + + internal void Prepend(HtmlNode node) + { + HtmlNode first = null; + if (_items.Count > 0) + { + first = (HtmlNode)_items[0]; + } + + _items.Insert(0, node); + + if (node == first) + { + throw new InvalidProgramException("Unexpected error."); + } + node._nextnode = first; + node._prevnode = null; + node._parentnode = _parentnode; + if (first != null) + { + first._prevnode = node; + } + } + + internal void Add(HtmlNode node) + { + _items.Add(node); + } + + /// <summary> + /// Gets the node at the specified index. + /// </summary> + public HtmlNode this[int index] + { + get + { + return _items[index] as HtmlNode; + } + } + + internal int GetNodeIndex(HtmlNode node) + { + // TODO: should we rewrite this? what would be the key of a node? + for (int i = 0; i < _items.Count; i++) + { + if (node == ((HtmlNode)_items[i])) + { + return i; + } + } + return -1; + } + + /// <summary> + /// Gets a given node from the list. + /// </summary> + public int this[HtmlNode node] + { + get + { + int index = GetNodeIndex(node); + if (index == -1) + { + throw new ArgumentOutOfRangeException("node", "Node \"" + node.CloneNode(false).OuterHtml + "\" was not found in the collection"); + } + return index; + } + } + + /// <summary> + /// Returns an enumerator that can iterate through the list. + /// </summary> + /// <returns>An IEnumerator for the entire list.</returns> + public HtmlNodeEnumerator GetEnumerator() + { + return new HtmlNodeEnumerator(_items); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// <summary> + /// Represents an enumerator that can iterate through the list. + /// </summary> + public class HtmlNodeEnumerator : IEnumerator + { + int _index; + ArrayList _items; + + internal HtmlNodeEnumerator(ArrayList items) + { + _items = items; + _index = -1; + } + + /// <summary> + /// Sets the enumerator to its initial position, which is before the first element in the collection. + /// </summary> + public void Reset() + { + _index = -1; + } + + /// <summary> + /// Advances the enumerator to the next element of the collection. + /// </summary> + /// <returns>true if the enumerator was successfully advanced to the next element, false if the enumerator has passed the end of the collection.</returns> + public bool MoveNext() + { + _index++; + return (_index < _items.Count); + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + public HtmlNode Current + { + get + { + return (HtmlNode)(_items[_index]); + } + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + object IEnumerator.Current + { + get + { + return (Current); + } + } + } + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeNavigator.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeNavigator.cs new file mode 100644 index 0000000..760ddde --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeNavigator.cs @@ -0,0 +1,767 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Diagnostics; +using System.Collections.Specialized; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.XPath; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML navigator on an HTML document seen as a data store. + /// </summary> + public class HtmlNodeNavigator : XPathNavigator, IXPathNavigable + { + private HtmlDocument _doc = new HtmlDocument(); + private HtmlNode _currentnode; + private int _attindex; + private HtmlNameTable _nametable = new HtmlNameTable(); + + internal bool Trace = false; + + internal HtmlNodeNavigator() + { + Reset(); + } + + private void Reset() + { + InternalTrace(null); + _currentnode = _doc.DocumentNode; + _attindex = -1; + } + + [Conditional("TRACE")] + internal void InternalTrace(object Value) + { + if (!Trace) + { + return; + } + string name = null; + StackFrame sf = new StackFrame(1, true); + name = sf.GetMethod().Name; + string nodename; + if (_currentnode == null) + { + nodename = "(null)"; + } + else + { + nodename = _currentnode.Name; + } + string nodevalue; + if (_currentnode == null) + { + nodevalue = "(null)"; + } + else + { + switch(_currentnode.NodeType) + { + case HtmlNodeType.Comment: + nodevalue = ((HtmlCommentNode)_currentnode).Comment; + break; + + case HtmlNodeType.Document: + nodevalue = ""; + break; + + case HtmlNodeType.Text: + nodevalue = ((HtmlTextNode)_currentnode).Text; + break; + + default: + nodevalue = _currentnode.CloneNode(false).OuterHtml; + break; + + } + } + System.Diagnostics.Trace.WriteLine("oid=" + GetHashCode() + + ",n=" + nodename + + ",a=" + _attindex + "," + + ",v=" + nodevalue + "," + + Value, "N!"+ name); + } + + internal HtmlNodeNavigator(HtmlDocument doc, HtmlNode currentNode) + { + if (currentNode == null) + { + throw new ArgumentNullException("currentNode"); + } + if (currentNode.OwnerDocument != doc) + { + throw new ArgumentException(HtmlDocument.HtmlExceptionRefNotChild); + } + InternalTrace(null); + + _doc = doc; + Reset(); + _currentnode = currentNode; + } + + private HtmlNodeNavigator(HtmlNodeNavigator nav) + { + if (nav == null) + { + throw new ArgumentNullException("nav"); + } + InternalTrace(null); + + _doc = nav._doc; + _currentnode = nav._currentnode; + _attindex = nav._attindex; + _nametable = nav._nametable; // REVIEW: should we do this? + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + public HtmlNodeNavigator(Stream stream) + { + _doc.Load(stream); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + public HtmlNodeNavigator(Stream stream, bool detectEncodingFromByteOrderMarks) + { + _doc.Load(stream, detectEncodingFromByteOrderMarks); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + public HtmlNodeNavigator(Stream stream, Encoding encoding) + { + _doc.Load(stream, encoding); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + public HtmlNodeNavigator(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + _doc.Load(stream, encoding, detectEncodingFromByteOrderMarks); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the stream.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public HtmlNodeNavigator(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + _doc.Load(stream, encoding, detectEncodingFromByteOrderMarks, buffersize); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a TextReader. + /// </summary> + /// <param name="reader">The TextReader used to feed the HTML data into the document.</param> + public HtmlNodeNavigator(TextReader reader) + { + _doc.Load(reader); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + public HtmlNodeNavigator(string path) + { + _doc.Load(path); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public HtmlNodeNavigator(string path, bool detectEncodingFromByteOrderMarks) + { + _doc.Load(path, detectEncodingFromByteOrderMarks); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + public HtmlNodeNavigator(string path, Encoding encoding) + { + _doc.Load(path, encoding); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public HtmlNodeNavigator(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + _doc.Load(path, encoding, detectEncodingFromByteOrderMarks); + Reset(); + } + + /// <summary> + /// Initializes a new instance of the HtmlNavigator and loads an HTML document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public HtmlNodeNavigator(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + _doc.Load(path, encoding, detectEncodingFromByteOrderMarks, buffersize); + Reset(); + } + + /// <summary> + /// Gets the name of the current HTML node without the namespace prefix. + /// </summary> + public override string LocalName + { + get + { + if (_attindex != -1) + { + InternalTrace("att>" + _currentnode.Attributes[_attindex].Name); + return _nametable.GetOrAdd(_currentnode.Attributes[_attindex].Name); + } + else + { + InternalTrace("node>" + _currentnode.Name); + return _nametable.GetOrAdd(_currentnode.Name); + } + } + } + + /// <summary> + /// Gets the namespace URI (as defined in the W3C Namespace Specification) of the current node. + /// Always returns string.Empty in the case of HtmlNavigator implementation. + /// </summary> + public override string NamespaceURI + { + get + { + InternalTrace(">"); + return _nametable.GetOrAdd(string.Empty); + } + } + + /// <summary> + /// Gets the qualified name of the current node. + /// </summary> + public override string Name + { + get + { + InternalTrace(">" + _currentnode.Name); + return _nametable.GetOrAdd(_currentnode.Name); + } + } + + /// <summary> + /// Gets the prefix associated with the current node. + /// Always returns string.Empty in the case of HtmlNavigator implementation. + /// </summary> + public override string Prefix + { + get + { + InternalTrace(null); + return _nametable.GetOrAdd(string.Empty); + } + } + + /// <summary> + /// Gets the type of the current node. + /// </summary> + public override XPathNodeType NodeType + { + get + { + switch(_currentnode.NodeType) + { + case HtmlNodeType.Comment: + InternalTrace(">" + XPathNodeType.Comment); + return XPathNodeType.Comment; + + case HtmlNodeType.Document: + InternalTrace(">" + XPathNodeType.Root); + return XPathNodeType.Root; + + case HtmlNodeType.Text: + InternalTrace(">" + XPathNodeType.Text); + return XPathNodeType.Text; + + case HtmlNodeType.Element: + { + if (_attindex != -1) + { + InternalTrace(">" + XPathNodeType.Attribute); + return XPathNodeType.Attribute; + } + InternalTrace(">" + XPathNodeType.Element); + return XPathNodeType.Element; + } + + default: + throw new NotImplementedException("Internal error: Unhandled HtmlNodeType: " + _currentnode.NodeType); + } + } + } + + /// <summary> + /// Gets the text value of the current node. + /// </summary> + public override string Value + { + get + { + InternalTrace("nt=" + _currentnode.NodeType); + switch(_currentnode.NodeType) + { + case HtmlNodeType.Comment: + InternalTrace(">" + ((HtmlCommentNode)_currentnode).Comment); + return ((HtmlCommentNode)_currentnode).Comment; + + case HtmlNodeType.Document: + InternalTrace(">"); + return ""; + + case HtmlNodeType.Text: + InternalTrace(">" + ((HtmlTextNode)_currentnode).Text); + return ((HtmlTextNode)_currentnode).Text; + + case HtmlNodeType.Element: + { + if (_attindex != -1) + { + InternalTrace(">" + _currentnode.Attributes[_attindex].Value); + return _currentnode.Attributes[_attindex].Value; + } + return _currentnode.InnerText; + } + + default: + throw new NotImplementedException("Internal error: Unhandled HtmlNodeType: " + _currentnode.NodeType); + } + } + } + + /// <summary> + /// Gets the base URI for the current node. + /// Always returns string.Empty in the case of HtmlNavigator implementation. + /// </summary> + public override string BaseURI + { + get + { + InternalTrace(">"); + return _nametable.GetOrAdd(string.Empty); + } + } + + /// <summary> + /// Gets the xml:lang scope for the current node. + /// Always returns string.Empty in the case of HtmlNavigator implementation. + /// </summary> + public override string XmlLang + { + get + { + InternalTrace(null); + return _nametable.GetOrAdd(string.Empty); + } + } + + /// <summary> + /// Gets a value indicating whether the current node is an empty element. + /// </summary> + public override bool IsEmptyElement + { + get + { + InternalTrace(">" + !HasChildren); + // REVIEW: is this ok? + return !HasChildren; + } + } + + /// <summary> + /// Gets the XmlNameTable associated with this implementation. + /// </summary> + public override XmlNameTable NameTable + { + get + { + InternalTrace(null); + return _nametable; + } + } + + /// <summary> + /// Gets a value indicating whether the current node has child nodes. + /// </summary> + public override bool HasAttributes + { + get + { + InternalTrace(">" + (_currentnode.Attributes.Count>0)); + return (_currentnode.Attributes.Count>0); + } + } + + /// <summary> + /// Gets a value indicating whether the current node has child nodes. + /// </summary> + public override bool HasChildren + { + get + { + InternalTrace(">" + (_currentnode.ChildNodes.Count>0)); + return (_currentnode.ChildNodes.Count>0); + } + } + + /// <summary> + /// Moves to the next sibling of the current node. + /// </summary> + /// <returns>true if the navigator is successful moving to the next sibling node, false if there are no more siblings or if the navigator is currently positioned on an attribute node. If false, the position of the navigator is unchanged.</returns> + public override bool MoveToNext() + { + if (_currentnode.NextSibling == null) + { + InternalTrace(">false"); + return false; + } + InternalTrace("_c=" + _currentnode.CloneNode(false).OuterHtml); + InternalTrace("_n=" + _currentnode.NextSibling.CloneNode(false).OuterHtml); + _currentnode = _currentnode.NextSibling; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the previous sibling of the current node. + /// </summary> + /// <returns>true if the navigator is successful moving to the previous sibling node, false if there is no previous sibling or if the navigator is currently positioned on an attribute node.</returns> + public override bool MoveToPrevious() + { + if (_currentnode.PreviousSibling == null) + { + InternalTrace(">false"); + return false; + } + _currentnode = _currentnode.PreviousSibling; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the first sibling of the current node. + /// </summary> + /// <returns>true if the navigator is successful moving to the first sibling node, false if there is no first sibling or if the navigator is currently positioned on an attribute node.</returns> + public override bool MoveToFirst() + { + if (_currentnode.ParentNode == null) + { + InternalTrace(">false"); + return false; + } + if (_currentnode.ParentNode.FirstChild == null) + { + InternalTrace(">false"); + return false; + } + _currentnode = _currentnode.ParentNode.FirstChild; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the first child of the current node. + /// </summary> + /// <returns>true if there is a first child node, otherwise false.</returns> + public override bool MoveToFirstChild() + { + if (!_currentnode.HasChildNodes) + { + InternalTrace(">false"); + return false; + } + _currentnode = _currentnode.ChildNodes[0]; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the parent of the current node. + /// </summary> + /// <returns>true if there is a parent node, otherwise false.</returns> + public override bool MoveToParent() + { + if (_currentnode.ParentNode == null) + { + InternalTrace(">false"); + return false; + } + _currentnode = _currentnode.ParentNode; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the root node to which the current node belongs. + /// </summary> + public override void MoveToRoot() + { + _currentnode = _doc.DocumentNode; + InternalTrace(null); + } + + /// <summary> + /// Moves to the same position as the specified HtmlNavigator. + /// </summary> + /// <param name="other">The HtmlNavigator positioned on the node that you want to move to.</param> + /// <returns>true if successful, otherwise false. If false, the position of the navigator is unchanged.</returns> + public override bool MoveTo(XPathNavigator other) + { + HtmlNodeNavigator nav = other as HtmlNodeNavigator; + if (nav == null) + { + InternalTrace(">false (nav is not an HtmlNodeNavigator)"); + return false; + } + InternalTrace("moveto oid=" + nav.GetHashCode() + + ", n:" + nav._currentnode.Name + + ", a:" + nav._attindex); + + if (nav._doc == _doc) + { + _currentnode = nav._currentnode; + _attindex = nav._attindex; + InternalTrace(">true"); + return true; + } + // we don't know how to handle that + InternalTrace(">false (???)"); + return false; + } + + /// <summary> + /// Moves to the node that has an attribute of type ID whose value matches the specified string. + /// </summary> + /// <param name="id">A string representing the ID value of the node to which you want to move. This argument does not need to be atomized.</param> + /// <returns>true if the move was successful, otherwise false. If false, the position of the navigator is unchanged.</returns> + public override bool MoveToId(string id) + { + InternalTrace("id=" + id); + HtmlNode node = _doc.GetElementbyId(id); + if (node == null) + { + InternalTrace(">false"); + return false; + } + _currentnode = node; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Determines whether the current HtmlNavigator is at the same position as the specified HtmlNavigator. + /// </summary> + /// <param name="other">The HtmlNavigator that you want to compare against.</param> + /// <returns>true if the two navigators have the same position, otherwise, false.</returns> + public override bool IsSamePosition(XPathNavigator other) + { + HtmlNodeNavigator nav = other as HtmlNodeNavigator; + if (nav == null) + { + InternalTrace(">false"); + return false; + } + InternalTrace(">" + (nav._currentnode == _currentnode)); + return (nav._currentnode == _currentnode); + } + + /// <summary> + /// Creates a new HtmlNavigator positioned at the same node as this HtmlNavigator. + /// </summary> + /// <returns>A new HtmlNavigator object positioned at the same node as the original HtmlNavigator.</returns> + public override XPathNavigator Clone() + { + InternalTrace(null); + return new HtmlNodeNavigator(this); + } + + /// <summary> + /// Gets the value of the HTML attribute with the specified LocalName and NamespaceURI. + /// </summary> + /// <param name="localName">The local name of the HTML attribute.</param> + /// <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> + /// <returns>The value of the specified HTML attribute. String.Empty or null if a matching attribute is not found or if the navigator is not positioned on an element node.</returns> + public override string GetAttribute(string localName, string namespaceURI) + { + InternalTrace("localName=" + localName + ", namespaceURI=" + namespaceURI); + HtmlAttribute att = _currentnode.Attributes[localName]; + if (att == null) + { + InternalTrace(">null"); + return null; + } + InternalTrace(">" + att.Value); + return att.Value; + } + + /// <summary> + /// Moves to the HTML attribute with matching LocalName and NamespaceURI. + /// </summary> + /// <param name="localName">The local name of the HTML attribute.</param> + /// <param name="namespaceURI">The namespace URI of the attribute. Unsupported with the HtmlNavigator implementation.</param> + /// <returns>true if the HTML attribute is found, otherwise, false. If false, the position of the navigator does not change.</returns> + public override bool MoveToAttribute(string localName, string namespaceURI) + { + InternalTrace("localName=" + localName + ", namespaceURI=" + namespaceURI); + int index = _currentnode.Attributes.GetAttributeIndex(localName); + if (index == -1) + { + InternalTrace(">false"); + return false; + } + _attindex = index; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the first HTML attribute. + /// </summary> + /// <returns>true if the navigator is successful moving to the first HTML attribute, otherwise, false.</returns> + public override bool MoveToFirstAttribute() + { + if (!HasAttributes) + { + InternalTrace(">false"); + return false; + } + _attindex = 0; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Moves to the next HTML attribute. + /// </summary> + /// <returns></returns> + public override bool MoveToNextAttribute() + { + InternalTrace(null); + if (_attindex>=(_currentnode.Attributes.Count-1)) + { + InternalTrace(">false"); + return false; + } + _attindex++; + InternalTrace(">true"); + return true; + } + + /// <summary> + /// Returns the value of the namespace node corresponding to the specified local name. + /// Always returns string.Empty for the HtmlNavigator implementation. + /// </summary> + /// <param name="name">The local name of the namespace node.</param> + /// <returns>Always returns string.Empty for the HtmlNavigator implementation.</returns> + public override string GetNamespace(string name) + { + InternalTrace("name=" + name); + return string.Empty; + } + + /// <summary> + /// Moves the XPathNavigator to the namespace node with the specified local name. + /// Always returns false for the HtmlNavigator implementation. + /// </summary> + /// <param name="name">The local name of the namespace node.</param> + /// <returns>Always returns false for the HtmlNavigator implementation.</returns> + public override bool MoveToNamespace(string name) + { + InternalTrace("name=" + name); + return false; + } + + /// <summary> + /// Moves the XPathNavigator to the first namespace node of the current element. + /// Always returns false for the HtmlNavigator implementation. + /// </summary> + /// <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> + /// <returns>Always returns false for the HtmlNavigator implementation.</returns> + public override bool MoveToFirstNamespace(XPathNamespaceScope scope) + { + InternalTrace(null); + return false; + } + + /// <summary> + /// Moves the XPathNavigator to the next namespace node. + /// Always returns falsefor the HtmlNavigator implementation. + /// </summary> + /// <param name="scope">An XPathNamespaceScope value describing the namespace scope.</param> + /// <returns>Always returns false for the HtmlNavigator implementation.</returns> + public override bool MoveToNextNamespace(XPathNamespaceScope scope) + { + InternalTrace(null); + return false; + } + + /// <summary> + /// Gets the current HTML node. + /// </summary> + public HtmlNode CurrentNode + { + get + { + return _currentnode; + } + } + + /// <summary> + /// Gets the current HTML document. + /// </summary> + public HtmlDocument CurrentDocument + { + get + { + return _doc; + } + } + + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeType.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeType.cs new file mode 100644 index 0000000..ba4a6fc --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlNodeType.cs @@ -0,0 +1,32 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents the type of a node. + /// </summary> + public enum HtmlNodeType + { + /// <summary> + /// The root of a document. + /// </summary> + Document, + + /// <summary> + /// An HTML element. + /// </summary> + Element, + + /// <summary> + /// An HTML comment. + /// </summary> + Comment, + + /// <summary> + /// A text node is always the child of an element or a document node. + /// </summary> + Text, + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlParseError.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlParseError.cs new file mode 100644 index 0000000..e874dc7 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlParseError.cs @@ -0,0 +1,101 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + + /// <summary> + /// Represents a parsing error found during document parsing. + /// </summary> + public class HtmlParseError + { + private HtmlParseErrorCode _code; + private int _line; + private int _linePosition; + private int _streamPosition; + private string _sourceText; + private string _reason; + + internal HtmlParseError( + HtmlParseErrorCode code, + int line, + int linePosition, + int streamPosition, + string sourceText, + string reason) + { + _code = code; + _line = line; + _linePosition = linePosition; + _streamPosition = streamPosition; + _sourceText = sourceText; + _reason = reason; + } + + /// <summary> + /// Gets the type of error. + /// </summary> + public HtmlParseErrorCode Code + { + get + { + return _code; + } + } + + /// <summary> + /// Gets the line number of this error in the document. + /// </summary> + public int Line + { + get + { + return _line; + } + } + + /// <summary> + /// Gets the column number of this error in the document. + /// </summary> + public int LinePosition + { + get + { + return _linePosition; + } + } + + /// <summary> + /// Gets the absolute stream position of this error in the document, relative to the start of the document. + /// </summary> + public int StreamPosition + { + get + { + return _streamPosition; + } + } + + /// <summary> + /// Gets the the full text of the line containing the error. + /// </summary> + public string SourceText + { + get + { + return _sourceText; + } + } + + /// <summary> + /// Gets a description for the error. + /// </summary> + public string Reason + { + get + { + return _reason; + } + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlParseErrorCode.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlParseErrorCode.cs new file mode 100644 index 0000000..3c3b4be --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlParseErrorCode.cs @@ -0,0 +1,38 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections.Generic; +using System.Text; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents the type of parsing error. + /// </summary> + public enum HtmlParseErrorCode + { + /// <summary> + /// A tag was not closed. + /// </summary> + TagNotClosed, + + /// <summary> + /// A tag was not opened. + /// </summary> + TagNotOpened, + + /// <summary> + /// There is a charset mismatch between stream and declared (META) encoding. + /// </summary> + CharsetMismatch, + + /// <summary> + /// An end tag was not required. + /// </summary> + EndTagNotRequired, + + /// <summary> + /// An end tag is invalid at this position. + /// </summary> + EndTagInvalidHere + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlTextNode.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlTextNode.cs new file mode 100644 index 0000000..f4c3035 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlTextNode.cs @@ -0,0 +1,69 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an HTML text node. + /// </summary> + public class HtmlTextNode : HtmlNode + { + private string _text; + + internal HtmlTextNode(HtmlDocument ownerdocument, int index) + : + base(HtmlNodeType.Text, ownerdocument, index) + { + } + + /// <summary> + /// Gets or Sets the HTML between the start and end tags of the object. In the case of a text node, it is equals to OuterHtml. + /// </summary> + public override string InnerHtml + { + get + { + return OuterHtml; + } + set + { + _text = value; + } + } + + /// <summary> + /// Gets or Sets the object and its content in HTML. + /// </summary> + public override string OuterHtml + { + get + { + if (_text == null) + { + return base.OuterHtml; + } + return _text; + } + } + + /// <summary> + /// Gets or Sets the text of the node. + /// </summary> + public string Text + { + get + { + if (_text == null) + { + return base.OuterHtml; + } + return _text; + } + set + { + _text = value; + } + } + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlWeb.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlWeb.cs new file mode 100644 index 0000000..6988a66 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlWeb.cs @@ -0,0 +1,807 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; +using System.Net; +using System.Xml; +using System.Xml.Serialization; +using System.Xml.Xsl; +using Microsoft.Win32; + +namespace HtmlAgilityPack +{ + /// <summary> + /// A utility class to get HTML document from HTTP. + /// </summary> + public class HtmlWeb + { + /// <summary> + /// Represents the method that will handle the PreRequest event. + /// </summary> + public delegate bool PreRequestHandler(HttpWebRequest request); + + /// <summary> + /// Represents the method that will handle the PostResponse event. + /// </summary> + public delegate void PostResponseHandler(HttpWebRequest request, HttpWebResponse response); + + /// <summary> + /// Represents the method that will handle the PreHandleDocument event. + /// </summary> + public delegate void PreHandleDocumentHandler(HtmlDocument document); + + private int _streamBufferSize = 1024; + private string _cachePath; + private bool _usingCache; + private bool _fromCache; + private bool _cacheOnly; + private bool _useCookies; + private int _requestDuration; + private bool _autoDetectEncoding = true; + private HttpStatusCode _statusCode = HttpStatusCode.OK; + private Uri _responseUri; + + /// <summary> + /// Occurs before an HTTP request is executed. + /// </summary> + public PreRequestHandler PreRequest; + + /// <summary> + /// Occurs after an HTTP request has been executed. + /// </summary> + public PostResponseHandler PostResponse; + + /// <summary> + /// Occurs before an HTML document is handled. + /// </summary> + public PreHandleDocumentHandler PreHandleDocument; + + /// <summary> + /// Creates an instance of an HtmlWeb class. + /// </summary> + public HtmlWeb() + { + } + + /// <summary> + /// Gets an HTML document from an Internet resource and saves it to the specified file. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="path">The location of the file where you want to save the document.</param> + public void Get(string url, string path) + { + Get(url, path, "GET"); + } + + /// <summary> + /// Gets an HTML document from an Internet resource and saves it to the specified file. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="path">The location of the file where you want to save the document.</param> + /// <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> + public void Get(string url, string path, string method) + { + Uri uri = new Uri(url); + if ((uri.Scheme == Uri.UriSchemeHttps) || + (uri.Scheme == Uri.UriSchemeHttp)) + { + Get(uri, method, path, null); + } + else + { + throw new HtmlWebException("Unsupported uri scheme: '" + uri.Scheme + "'."); + } + } + + /// <summary> + /// Gets an HTML document from an Internet resource. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <returns>A new HTML document.</returns> + public HtmlDocument Load(string url) + { + return Load(url, "GET"); + } + + /// <summary> + /// Loads an HTML document from an Internet resource. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="method">The HTTP method used to open the connection, such as GET, POST, PUT, or PROPFIND.</param> + /// <returns>A new HTML document.</returns> + public HtmlDocument Load(string url, string method) + { + Uri uri = new Uri(url); + HtmlDocument doc; + if ((uri.Scheme == Uri.UriSchemeHttps) || + (uri.Scheme == Uri.UriSchemeHttp)) + { + doc = LoadUrl(uri, method); + } + else + { + + if (uri.Scheme == Uri.UriSchemeFile) + { + doc = new HtmlDocument(); + doc.OptionAutoCloseOnEnd = false; + doc.OptionAutoCloseOnEnd = true; + doc.DetectEncodingAndLoad(url, _autoDetectEncoding); + } + else + { + throw new HtmlWebException("Unsupported uri scheme: '" + uri.Scheme + "'."); + } + } + if (PreHandleDocument != null) + { + PreHandleDocument(doc); + } + return doc; + } + + private bool IsCacheHtmlContent(string path) + { + string ct = GetContentTypeForExtension(Path.GetExtension(path), null); + return IsHtmlContent(ct); + } + + private bool IsHtmlContent(string contentType) + { + return contentType.ToLower().StartsWith("text/html"); + } + + private string GetCacheHeadersPath(Uri uri) + { + //return Path.Combine(GetCachePath(uri), ".h.xml"); + return GetCachePath(uri) + ".h.xml"; + } + + /// <summary> + /// Gets the cache file path for a specified url. + /// </summary> + /// <param name="uri">The url fo which to retrieve the cache path. May not be null.</param> + /// <returns>The cache file path.</returns> + public string GetCachePath(Uri uri) + { + if (uri == null) + { + throw new ArgumentNullException("uri"); + } + if (!UsingCache) + { + throw new HtmlWebException("Cache is not enabled. Set UsingCache to true first."); + } + string cachePath; + if (uri.AbsolutePath == "/") + { + cachePath = Path.Combine(_cachePath, ".htm"); + } + else + { + cachePath = Path.Combine(_cachePath, (uri.Host + uri.AbsolutePath).Replace('/', '\\')); + } + return cachePath; + } + + /// <summary> + /// Gets a value indicating if the last document was retrieved from the cache. + /// </summary> + public bool FromCache + { + get + { + return _fromCache; + } + } + + /// <summary> + /// Gets the URI of the Internet resource that actually responded to the request. + /// </summary> + public Uri ResponseUri + { + get + { + return _responseUri; + } + } + + /// <summary> + /// Gets or Sets a value indicating whether to get document only from the cache. + /// If this is set to true and document is not found in the cache, nothing will be loaded. + /// </summary> + public bool CacheOnly + { + get + { + return _cacheOnly; + } + set + { + if ((value) && !UsingCache) + { + throw new HtmlWebException("Cache is not enabled. Set UsingCache to true first."); + } + _cacheOnly = value; + } + } + + /// <summary> + /// Gets or Sets a value indicating if cookies will be stored. + /// </summary> + public bool UseCookies + { + get + { + return _useCookies; + } + set + { + _useCookies = value; + } + } + + /// <summary> + /// Gets the last request duration in milliseconds. + /// </summary> + public int RequestDuration + { + get + { + return _requestDuration; + } + } + + /// <summary> + /// Gets or Sets a value indicating if document encoding must be automatically detected. + /// </summary> + public bool AutoDetectEncoding + { + get + { + return _autoDetectEncoding; + } + set + { + _autoDetectEncoding = value; + } + } + + /// <summary> + /// Gets the last request status. + /// </summary> + public HttpStatusCode StatusCode + { + get + { + return _statusCode; + } + } + + /// <summary> + /// Gets or Sets the size of the buffer used for memory operations. + /// </summary> + public int StreamBufferSize + { + get + { + return _streamBufferSize; + } + set + { + if (_streamBufferSize <= 0) + { + throw new ArgumentException("Size must be greater than zero."); + } + _streamBufferSize = value; + } + } + + private HtmlDocument LoadUrl(Uri uri, string method) + { + HtmlDocument doc = new HtmlDocument(); + doc.OptionAutoCloseOnEnd = false; + doc.OptionFixNestedTags = true; + _statusCode = Get(uri, method, null, doc); + if (_statusCode == HttpStatusCode.NotModified) + { + // read cached encoding + doc.DetectEncodingAndLoad(GetCachePath(uri)); + } + return doc; + } + + private HttpStatusCode Get(Uri uri, string method, string path, HtmlDocument doc) + { + string cachePath = null; + HttpWebRequest req; + bool oldFile = false; + + req = WebRequest.Create(uri) as HttpWebRequest; + req.Method = method; + + _fromCache = false; + _requestDuration = 0; + int tc = Environment.TickCount; + if (UsingCache) + { + cachePath = GetCachePath(req.RequestUri); + if (File.Exists(cachePath)) + { + req.IfModifiedSince = File.GetLastAccessTime(cachePath); + oldFile = true; + } + } + + if (_cacheOnly) + { + if (!File.Exists(cachePath)) + { + throw new HtmlWebException("File was not found at cache path: '" + cachePath + "'"); + } + + if (path != null) + { + IOLibrary.CopyAlways(cachePath, path); + // touch the file + File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); + } + _fromCache = true; + return HttpStatusCode.NotModified; + } + + if (_useCookies) + { + req.CookieContainer = new CookieContainer(); + } + + if (PreRequest != null) + { + // allow our user to change the request at will + if (!PreRequest(req)) + { + return HttpStatusCode.ResetContent; + } + + // dump cookie +// if (_useCookies) +// { +// foreach(Cookie cookie in req.CookieContainer.GetCookies(req.RequestUri)) +// { +// HtmlLibrary.Trace("Cookie " + cookie.Name + "=" + cookie.Value + " path=" + cookie.Path + " domain=" + cookie.Domain); +// } +// } + } + + HttpWebResponse resp; + + try + { + resp = req.GetResponse() as HttpWebResponse; + } + catch (WebException we) + { + _requestDuration = Environment.TickCount - tc; + resp = (HttpWebResponse)we.Response; + if (resp == null) + { + if (oldFile) + { + if (path != null) + { + IOLibrary.CopyAlways(cachePath, path); + // touch the file + File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); + } + return HttpStatusCode.NotModified; + } + throw; + } + } + catch(Exception) + { + _requestDuration = Environment.TickCount - tc; + throw; + } + + // allow our user to get some info from the response + if (PostResponse != null) + { + PostResponse(req, resp); + } + + _requestDuration = Environment.TickCount - tc; + _responseUri = resp.ResponseUri; + + bool html = IsHtmlContent(resp.ContentType); + System.Text.Encoding respenc; + + if ((resp.ContentEncoding != null) && (resp.ContentEncoding.Length>0)) + { + respenc = System.Text.Encoding.GetEncoding(resp.ContentEncoding); + } + else + { + respenc = null; + } + + if (resp.StatusCode == HttpStatusCode.NotModified) + { + if (UsingCache) + { + _fromCache = true; + if (path != null) + { + IOLibrary.CopyAlways(cachePath, path); + // touch the file + File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); + } + return resp.StatusCode; + } + else + { + // this should *never* happen... + throw new HtmlWebException("Server has send a NotModifed code, without cache enabled."); + } + } + Stream s = resp.GetResponseStream(); + if (s != null) + { + if (UsingCache) + { + // NOTE: LastModified does not contain milliseconds, so we remove them to the file + SaveStream(s, cachePath, RemoveMilliseconds(resp.LastModified), _streamBufferSize); + + // save headers + SaveCacheHeaders(req.RequestUri, resp); + + if (path != null) + { + // copy and touch the file + IOLibrary.CopyAlways(cachePath, path); + File.SetLastWriteTime(path, File.GetLastWriteTime(cachePath)); + } + } + else + { + // try to work in-memory + if ((doc != null) && (html)) + { + if (respenc != null) + { + doc.Load(s, respenc); + } + else + { + doc.Load(s, true); + } + } + } + resp.Close(); + } + return resp.StatusCode; + } + + private string GetCacheHeader(Uri requestUri, string name, string def) + { + // note: some headers are collection (ex: www-authenticate) + // we don't handle that here + XmlDocument doc = new XmlDocument(); + doc.Load(GetCacheHeadersPath(requestUri)); + XmlNode node = doc.SelectSingleNode("//h[translate(@n, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')='" + name.ToUpper() + "']"); + if (node == null) + { + return def; + } + // attribute should exist + return node.Attributes[name].Value; + } + + private void SaveCacheHeaders(Uri requestUri, HttpWebResponse resp) + { + // we cache the original headers aside the cached document. + string file = GetCacheHeadersPath(requestUri); + XmlDocument doc = new XmlDocument(); + doc.LoadXml("<c></c>"); + XmlNode cache = doc.FirstChild; + foreach(string header in resp.Headers) + { + XmlNode entry = doc.CreateElement("h"); + XmlAttribute att = doc.CreateAttribute("n"); + att.Value = header; + entry.Attributes.Append(att); + + att = doc.CreateAttribute("v"); + att.Value = resp.Headers[header]; + entry.Attributes.Append(att); + + cache.AppendChild(entry); + } + doc.Save(file); + } + + private static long SaveStream(Stream stream, string path, DateTime touchDate, int streamBufferSize) + { + FilePreparePath(path); + FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write); + BinaryReader br = null; + BinaryWriter bw = null; + long len; + try + { + br = new BinaryReader(stream); + bw = new BinaryWriter(fs); + len = 0; + byte[] buffer; + do + { + buffer = br.ReadBytes(streamBufferSize); + len += buffer.Length; + if (buffer.Length>0) + { + bw.Write(buffer); + } + } + while (buffer.Length>0); + } + finally + { + if (br != null) + { + br.Close(); + } + if (bw != null) + { + bw.Flush(); + bw.Close(); + } + if (fs != null) + { + fs.Close(); + } + } + File.SetLastWriteTime(path, touchDate); + return len; + } + + private static void FilePreparePath(string target) + { + if (File.Exists(target)) + { + FileAttributes atts = File.GetAttributes(target); + File.SetAttributes(target, atts & ~FileAttributes.ReadOnly); + } + else + { + string dir = Path.GetDirectoryName(target); + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + } + } + + private static DateTime RemoveMilliseconds(DateTime t) + { + return new DateTime(t.Year, t.Month, t.Day, t.Hour, t.Minute, t.Second, 0); + } + + /// <summary> + /// Gets the path extension for a given MIME content type. + /// </summary> + /// <param name="contentType">The input MIME content type.</param> + /// <param name="def">The default path extension to return if any error occurs.</param> + /// <returns>The MIME content type's path extension.</returns> + public static string GetExtensionForContentType(string contentType, string def) + { + if ((contentType == null) || (contentType.Length == 0)) + { + return def; + } + string ext; + try + { + RegistryKey reg = Registry.ClassesRoot; + reg = reg.OpenSubKey(@"MIME\Database\Content Type\" + contentType, false); + ext = (string)reg.GetValue("Extension", def); + } + catch(Exception) + { + ext = def; + } + return ext; + } + + /// <summary> + /// Gets the MIME content type for a given path extension. + /// </summary> + /// <param name="extension">The input path extension.</param> + /// <param name="def">The default content type to return if any error occurs.</param> + /// <returns>The path extention's MIME content type.</returns> + public static string GetContentTypeForExtension(string extension, string def) + { + if ((extension == null) || (extension.Length == 0)) + { + return def; + } + string contentType; + try + { + RegistryKey reg = Registry.ClassesRoot; + reg = reg.OpenSubKey(extension, false); + contentType = (string)reg.GetValue("", def); + } + catch(Exception) + { + contentType = def; + } + return contentType; + } + + /// <summary> + /// Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="writer">The XmlTextWriter to which you want to save.</param> + public void LoadHtmlAsXml(string htmlUrl, XmlTextWriter writer) + { + HtmlDocument doc = Load(htmlUrl); + doc.Save(writer); + } + + /// <summary> + /// Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + /// <param name="writer">The XmlTextWriter to which you want to save.</param> + public void LoadHtmlAsXml(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, XmlTextWriter writer) + { + LoadHtmlAsXml(htmlUrl, xsltUrl, xsltArgs, writer, null); + } + + /// <summary> + /// Loads an HTML document from an Internet resource and saves it to the specified XmlTextWriter, after an XSLT transformation. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp". May not be null.</param> + /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + /// <param name="writer">The XmlTextWriter to which you want to save.</param> + /// <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> + public void LoadHtmlAsXml(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, XmlTextWriter writer, string xmlPath) + { + if (htmlUrl == null) + { + throw new ArgumentNullException("htmlUrl"); + } + + HtmlDocument doc = Load(htmlUrl); + + if (xmlPath != null) + { + XmlTextWriter w = new XmlTextWriter(xmlPath, doc.Encoding); + doc.Save(w); + w.Close(); + } + if (xsltArgs == null) + { + xsltArgs = new XsltArgumentList(); + } + + // add some useful variables to the xslt doc + xsltArgs.AddParam("url", "", htmlUrl); + xsltArgs.AddParam("requestDuration", "", RequestDuration); + xsltArgs.AddParam("fromCache", "", FromCache); + + XslCompiledTransform xslt = new XslCompiledTransform(); + xslt.Load(xsltUrl); + xslt.Transform(doc, xsltArgs, writer); + } + + /// <summary> + /// Creates an instance of the given type from the specified Internet resource. + /// </summary> + /// <param name="url">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="type">The requested type.</param> + /// <returns>An newly created instance.</returns> + public object CreateInstance(string url, Type type) + { + return CreateInstance(url, null, null, type); + } + + /// <summary> + /// Creates an instance of the given type from the specified Internet resource. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + /// <param name="type">The requested type.</param> + /// <returns>An newly created instance.</returns> + public object CreateInstance(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, Type type) + { + return CreateInstance(htmlUrl, xsltUrl, xsltArgs, type, null); + } + + /// <summary> + /// Creates an instance of the given type from the specified Internet resource. + /// </summary> + /// <param name="htmlUrl">The requested URL, such as "http://Myserver/Mypath/Myfile.asp".</param> + /// <param name="xsltUrl">The URL that specifies the XSLT stylesheet to load.</param> + /// <param name="xsltArgs">An XsltArgumentList containing the namespace-qualified arguments used as input to the transform.</param> + /// <param name="type">The requested type.</param> + /// <param name="xmlPath">A file path where the temporary XML before transformation will be saved. Mostly used for debugging purposes.</param> + /// <returns>An newly created instance.</returns> + public object CreateInstance(string htmlUrl, string xsltUrl, XsltArgumentList xsltArgs, Type type, string xmlPath) + { + StringWriter sw = new StringWriter(); + XmlTextWriter writer = new XmlTextWriter(sw); + if (xsltUrl == null) + { + LoadHtmlAsXml(htmlUrl, writer); + } + else + { + if (xmlPath == null) + { + LoadHtmlAsXml(htmlUrl, xsltUrl, xsltArgs, writer); + } + else + { + LoadHtmlAsXml(htmlUrl, xsltUrl, xsltArgs, writer, xmlPath); + } + } + writer.Flush(); + StringReader sr = new StringReader(sw.ToString()); + XmlTextReader reader = new XmlTextReader(sr); + XmlSerializer serializer = new XmlSerializer(type); + object o = null; + try + { + o = serializer.Deserialize(reader); + } + catch(InvalidOperationException ex) + { + throw new Exception(ex.ToString() + ", --- xml:" + sw.ToString()); + } + return o; + } + + /// <summary> + /// Gets or Sets the cache path. If null, no caching mechanism will be used. + /// </summary> + public string CachePath + { + get + { + return _cachePath; + } + set + { + _cachePath = value; + } + } + + /// <summary> + /// Gets or Sets a value indicating whether the caching mechanisms should be used or not. + /// </summary> + public bool UsingCache + { + get + { + if (_cachePath == null) + { + return false; + } + return _usingCache; + } + set + { + if ((value) && (_cachePath == null)) + { + throw new HtmlWebException("You need to define a CachePath first."); + } + _usingCache = value; + } + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlWebException.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlWebException.cs new file mode 100644 index 0000000..127a7fa --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/HtmlWebException.cs @@ -0,0 +1,20 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents an exception thrown by the HtmlWeb utility class. + /// </summary> + public class HtmlWebException : Exception + { + /// <summary> + /// Creates an instance of the HtmlWebException. + /// </summary> + /// <param name="message">The exception's message.</param> + public HtmlWebException(string message) + : base(message) + { + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/IOLibrary.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/IOLibrary.cs new file mode 100644 index 0000000..96df013 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/IOLibrary.cs @@ -0,0 +1,26 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; + +namespace HtmlAgilityPack +{ + internal struct IOLibrary + { + internal static void MakeWritable(string path) + { + if (!File.Exists(path)) + return; + File.SetAttributes(path, File.GetAttributes(path) & ~FileAttributes.ReadOnly); + } + + internal static void CopyAlways(string source, string target) + { + if (!File.Exists(source)) + return; + Directory.CreateDirectory(Path.GetDirectoryName(target)); + MakeWritable(target); + File.Copy(source, target, true); + } + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocument.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocument.cs new file mode 100644 index 0000000..dcfc2b6 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocument.cs @@ -0,0 +1,440 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; +using System.Text; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a document with mixed code and text. ASP, ASPX, JSP, are good example of such documents. + /// </summary> + public class MixedCodeDocument + { + private System.Text.Encoding _streamencoding = null; + internal string _text; + internal MixedCodeDocumentFragmentList _fragments; + internal MixedCodeDocumentFragmentList _codefragments; + internal MixedCodeDocumentFragmentList _textfragments; + private ParseState _state; + private int _index; + private int _c; + private int _line; + private int _lineposition; + private MixedCodeDocumentFragment _currentfragment; + + /// <summary> + /// Gets or sets the token representing code start. + /// </summary> + public string TokenCodeStart = "<%"; + + /// <summary> + /// Gets or sets the token representing code end. + /// </summary> + public string TokenCodeEnd = "%>"; + + /// <summary> + /// Gets or sets the token representing code directive. + /// </summary> + public string TokenDirective = "@"; + + /// <summary> + /// Gets or sets the token representing response write directive. + /// </summary> + public string TokenResponseWrite = "Response.Write "; + + + private string TokenTextBlock = "TextBlock({0})"; + + /// <summary> + /// Creates a mixed code document instance. + /// </summary> + public MixedCodeDocument() + { + _codefragments = new MixedCodeDocumentFragmentList(this); + _textfragments = new MixedCodeDocumentFragmentList(this); + _fragments = new MixedCodeDocumentFragmentList(this); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + public void Load(Stream stream) + { + Load(new StreamReader(stream)); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(Stream stream, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(stream, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Load(Stream stream, Encoding encoding) + { + Load(new StreamReader(stream, encoding)); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads a mixed code document from a stream. + /// </summary> + /// <param name="stream">The input stream.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + Load(new StreamReader(stream, encoding, detectEncodingFromByteOrderMarks, buffersize)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + public void Load(string path) + { + Load(new StreamReader(path)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(string path, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(path, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Load(string path, Encoding encoding) + { + Load(new StreamReader(path, encoding)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) + { + Load(new StreamReader(path, encoding, detectEncodingFromByteOrderMarks)); + } + + /// <summary> + /// Loads a mixed code document from a file. + /// </summary> + /// <param name="path">The complete file path to be read.</param> + /// <param name="encoding">The character encoding to use.</param> + /// <param name="detectEncodingFromByteOrderMarks">Indicates whether to look for byte order marks at the beginning of the file.</param> + /// <param name="buffersize">The minimum buffer size.</param> + public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize) + { + Load(new StreamReader(path, encoding, detectEncodingFromByteOrderMarks, buffersize)); + } + + /// <summary> + /// Loads a mixed document from a text + /// </summary> + /// <param name="html">The text to load.</param> + public void LoadHtml(string html) + { + Load(new StringReader(html)); + } + + /// <summary> + /// Loads the mixed code document from the specified TextReader. + /// </summary> + /// <param name="reader">The TextReader used to feed the HTML data into the document.</param> + public void Load(TextReader reader) + { + _codefragments.Clear(); + _textfragments.Clear(); + + // all pseudo constructors get down to this one + StreamReader sr = reader as StreamReader; + if (sr != null) + { + _streamencoding = sr.CurrentEncoding; + } + + _text = reader.ReadToEnd(); + reader.Close(); + Parse(); + } + + internal System.Text.Encoding GetOutEncoding() + { + if (_streamencoding != null) + return _streamencoding; + return System.Text.Encoding.Default; + } + + /// <summary> + /// Gets the encoding of the stream used to read the document. + /// </summary> + public System.Text.Encoding StreamEncoding + { + get + { + return _streamencoding; + } + } + + /// <summary> + /// Gets the list of code fragments in the document. + /// </summary> + public MixedCodeDocumentFragmentList CodeFragments + { + get + { + return _codefragments; + } + } + + /// <summary> + /// Gets the list of text fragments in the document. + /// </summary> + public MixedCodeDocumentFragmentList TextFragments + { + get + { + return _textfragments; + } + } + + /// <summary> + /// Gets the list of all fragments in the document. + /// </summary> + public MixedCodeDocumentFragmentList Fragments + { + get + { + return _fragments; + } + } + + /// <summary> + /// Saves the mixed document to the specified stream. + /// </summary> + /// <param name="outStream">The stream to which you want to save.</param> + public void Save(Stream outStream) + { + StreamWriter sw = new StreamWriter(outStream, GetOutEncoding()); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified stream. + /// </summary> + /// <param name="outStream">The stream to which you want to save.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Save(Stream outStream, System.Text.Encoding encoding) + { + StreamWriter sw = new StreamWriter(outStream, encoding); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified file. + /// </summary> + /// <param name="filename">The location of the file where you want to save the document.</param> + public void Save(string filename) + { + StreamWriter sw = new StreamWriter(filename, false, GetOutEncoding()); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified file. + /// </summary> + /// <param name="filename">The location of the file where you want to save the document.</param> + /// <param name="encoding">The character encoding to use.</param> + public void Save(string filename, System.Text.Encoding encoding) + { + StreamWriter sw = new StreamWriter(filename, false, encoding); + Save(sw); + } + + /// <summary> + /// Saves the mixed document to the specified StreamWriter. + /// </summary> + /// <param name="writer">The StreamWriter to which you want to save.</param> + public void Save(StreamWriter writer) + { + Save((TextWriter)writer); + } + + /// <summary> + /// Saves the mixed document to the specified TextWriter. + /// </summary> + /// <param name="writer">The TextWriter to which you want to save.</param> + public void Save(TextWriter writer) + { + + writer.Flush(); + } + + /// <summary> + /// Gets the code represented by the mixed code document seen as a template. + /// </summary> + public string Code + { + get + { + string s = ""; + int i = 0; + foreach(MixedCodeDocumentFragment frag in _fragments) + { + switch(frag._type) + { + case MixedCodeDocumentFragmentType.Text: + s += TokenResponseWrite + string.Format(TokenTextBlock, i) + "\n"; + i++; + break; + + case MixedCodeDocumentFragmentType.Code: + s += ((MixedCodeDocumentCodeFragment)frag).Code + "\n"; + break; + } + } + return s; + } + } + + /// <summary> + /// Create a text fragment instances. + /// </summary> + /// <returns>The newly created text fragment instance.</returns> + public MixedCodeDocumentTextFragment CreateTextFragment() + { + return (MixedCodeDocumentTextFragment)CreateFragment(MixedCodeDocumentFragmentType.Text); + } + + /// <summary> + /// Create a code fragment instances. + /// </summary> + /// <returns>The newly created code fragment instance.</returns> + public MixedCodeDocumentCodeFragment CreateCodeFragment() + { + return (MixedCodeDocumentCodeFragment)CreateFragment(MixedCodeDocumentFragmentType.Code); + } + + internal MixedCodeDocumentFragment CreateFragment(MixedCodeDocumentFragmentType type) + { + switch(type) + { + case MixedCodeDocumentFragmentType.Text: + return new MixedCodeDocumentTextFragment(this); + + case MixedCodeDocumentFragmentType.Code: + return new MixedCodeDocumentCodeFragment(this); + + default: + throw new NotSupportedException(); + } + } + + private void SetPosition() + { + _currentfragment._line = _line; + _currentfragment._lineposition = _lineposition; + _currentfragment._index = _index - 1; + _currentfragment._length = 0; + } + + private void IncrementPosition() + { + _index++; + if (_c == 10) + { + _lineposition = 1; + _line++; + } + else + _lineposition++; + } + + private enum ParseState + { + Text, + Code + } + + private void Parse() + { + _state = ParseState.Text; + _index = 0; + _currentfragment = CreateFragment(MixedCodeDocumentFragmentType.Text); + + while (_index<_text.Length) + { + _c = _text[_index]; + IncrementPosition(); + + switch(_state) + { + case ParseState.Text: + if (_index+TokenCodeStart.Length<_text.Length) + { + if (_text.Substring(_index-1, TokenCodeStart.Length) == TokenCodeStart) + { + _state = ParseState.Code; + _currentfragment._length = _index -1 - _currentfragment._index; + _currentfragment = CreateFragment(MixedCodeDocumentFragmentType.Code); + SetPosition(); + continue; + } + } + break; + + case ParseState.Code: + if (_index+TokenCodeEnd.Length<_text.Length) + { + if (_text.Substring(_index-1, TokenCodeEnd.Length) == TokenCodeEnd) + { + _state = ParseState.Text; + _currentfragment._length = _index + TokenCodeEnd.Length - _currentfragment._index; + _index += TokenCodeEnd.Length; + _lineposition += TokenCodeEnd.Length; + _currentfragment = CreateFragment(MixedCodeDocumentFragmentType.Text); + SetPosition(); + continue; + } + } + break; + } + } + + _currentfragment._length = _index - _currentfragment._index; + } + + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentCodeFragment.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentCodeFragment.cs new file mode 100644 index 0000000..984574c --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentCodeFragment.cs @@ -0,0 +1,43 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a fragment of code in a mixed code document. + /// </summary> + public class MixedCodeDocumentCodeFragment : MixedCodeDocumentFragment + { + internal string _code; + + internal MixedCodeDocumentCodeFragment(MixedCodeDocument doc) + : + base(doc, MixedCodeDocumentFragmentType.Code) + { + } + + /// <summary> + /// Gets the fragment code text. + /// </summary> + public string Code + { + get + { + if (_code == null) + { + _code = FragmentText.Substring(_doc.TokenCodeStart.Length, + FragmentText.Length - _doc.TokenCodeEnd.Length - _doc.TokenCodeStart.Length - 1).Trim(); + if (_code.StartsWith("=")) + { + _code = _doc.TokenResponseWrite + _code.Substring(1, _code.Length - 1); + } + } + return _code; + } + set + { + _code = value; + } + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragment.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragment.cs new file mode 100644 index 0000000..7a9fc60 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragment.cs @@ -0,0 +1,95 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a base class for fragments in a mixed code document. + /// </summary> + public abstract class MixedCodeDocumentFragment + { + internal MixedCodeDocumentFragmentType _type; + internal MixedCodeDocument _doc; + internal int _index; + internal int _length; + internal int _line; + internal int _lineposition; + internal string _fragmenttext; + + internal MixedCodeDocumentFragment(MixedCodeDocument doc, MixedCodeDocumentFragmentType type) + { + _doc = doc; + _type = type; + switch (type) + { + case MixedCodeDocumentFragmentType.Text: + _doc._textfragments.Append(this); + break; + + case MixedCodeDocumentFragmentType.Code: + _doc._codefragments.Append(this); + break; + } + _doc._fragments.Append(this); + } + + /// <summary> + /// Gets the type of fragment. + /// </summary> + public MixedCodeDocumentFragmentType FragmentType + { + get + { + return _type; + } + } + + /// <summary> + /// Gets the fragment position in the document's stream. + /// </summary> + public int StreamPosition + { + get + { + return _index; + } + } + + /// <summary> + /// Gets the line number of the fragment. + /// </summary> + public int Line + { + get + { + return _line; + } + } + + /// <summary> + /// Gets the line position (column) of the fragment. + /// </summary> + public int LinePosition + { + get + { + return _lineposition; + } + } + + /// <summary> + /// Gets the fragement text. + /// </summary> + public string FragmentText + { + get + { + if (_fragmenttext == null) + { + _fragmenttext = _doc._text.Substring(_index, _length); + } + return _fragmenttext; + } + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentList.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentList.cs new file mode 100644 index 0000000..75d5075 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentList.cs @@ -0,0 +1,196 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a list of mixed code fragments. + /// </summary> + public class MixedCodeDocumentFragmentList : IEnumerable + { + private MixedCodeDocument _doc; + private ArrayList _items = new ArrayList(); + + internal MixedCodeDocumentFragmentList(MixedCodeDocument doc) + { + _doc = doc; + } + + /// <summary> + /// Appends a fragment to the list of fragments. + /// </summary> + /// <param name="newFragment">The fragment to append. May not be null.</param> + public void Append(MixedCodeDocumentFragment newFragment) + { + if (newFragment == null) + { + throw new ArgumentNullException("newFragment"); + } + _items.Add(newFragment); + } + + /// <summary> + /// Prepends a fragment to the list of fragments. + /// </summary> + /// <param name="newFragment">The fragment to append. May not be null.</param> + public void Prepend(MixedCodeDocumentFragment newFragment) + { + if (newFragment == null) + { + throw new ArgumentNullException("newFragment"); + } + _items.Insert(0, newFragment); + } + + /// <summary> + /// Remove a fragment from the list of fragments. If this fragment was not in the list, an exception will be raised. + /// </summary> + /// <param name="fragment">The fragment to remove. May not be null.</param> + public void Remove(MixedCodeDocumentFragment fragment) + { + if (fragment == null) + { + throw new ArgumentNullException("fragment"); + } + int index = GetFragmentIndex(fragment); + if (index == -1) + { + throw new IndexOutOfRangeException(); + } + RemoveAt(index); + } + + /// <summary> + /// Remove a fragment from the list of fragments, using its index in the list. + /// </summary> + /// <param name="index">The index of the fragment to remove.</param> + public void RemoveAt(int index) + { + MixedCodeDocumentFragment frag = (MixedCodeDocumentFragment)_items[index]; + _items.RemoveAt(index); + } + + /// <summary> + /// Remove all fragments from the list. + /// </summary> + public void RemoveAll() + { + _items.Clear(); + } + + /// <summary> + /// Gets the number of fragments contained in the list. + /// </summary> + public int Count + { + get + { + return _items.Count; + } + } + + internal int GetFragmentIndex(MixedCodeDocumentFragment fragment) + { + if (fragment == null) + { + throw new ArgumentNullException("fragment"); + } + for (int i = 0; i < _items.Count; i++) + { + if (((MixedCodeDocumentFragment)_items[i]) == fragment) + { + return i; + } + } + return -1; + } + + /// <summary> + /// Gets a fragment from the list using its index. + /// </summary> + public MixedCodeDocumentFragment this[int index] + { + get + { + return _items[index] as MixedCodeDocumentFragment; + } + } + + internal void Clear() + { + _items.Clear(); + } + + /// <summary> + /// Gets an enumerator that can iterate through the fragment list. + /// </summary> + public MixedCodeDocumentFragmentEnumerator GetEnumerator() + { + return new MixedCodeDocumentFragmentEnumerator(_items); + } + + /// <summary> + /// Gets an enumerator that can iterate through the fragment list. + /// </summary> + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// <summary> + /// Represents a fragment enumerator. + /// </summary> + public class MixedCodeDocumentFragmentEnumerator : IEnumerator + { + int _index; + ArrayList _items; + + internal MixedCodeDocumentFragmentEnumerator(ArrayList items) + { + _items = items; + _index = -1; + } + + /// <summary> + /// Sets the enumerator to its initial position, which is before the first element in the collection. + /// </summary> + public void Reset() + { + _index = -1; + } + + /// <summary> + /// Advances the enumerator to the next element of the collection. + /// </summary> + /// <returns>true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.</returns> + public bool MoveNext() + { + _index++; + return (_index < _items.Count); + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + public MixedCodeDocumentFragment Current + { + get + { + return (MixedCodeDocumentFragment)(_items[_index]); + } + } + + /// <summary> + /// Gets the current element in the collection. + /// </summary> + object IEnumerator.Current + { + get + { + return (Current); + } + } + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentType.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentType.cs new file mode 100644 index 0000000..4b266da --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentFragmentType.cs @@ -0,0 +1,22 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents the type of fragement in a mixed code document. + /// </summary> + public enum MixedCodeDocumentFragmentType + { + /// <summary> + /// The fragment contains code. + /// </summary> + Code, + + /// <summary> + /// The fragment contains text. + /// </summary> + Text, + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentTextFragment.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentTextFragment.cs new file mode 100644 index 0000000..6d213e1 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/MixedCodeDocumentTextFragment.cs @@ -0,0 +1,32 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + /// <summary> + /// Represents a fragment of text in a mixed code document. + /// </summary> + public class MixedCodeDocumentTextFragment : MixedCodeDocumentFragment + { + internal MixedCodeDocumentTextFragment(MixedCodeDocument doc) + : + base(doc, MixedCodeDocumentFragmentType.Text) + { + } + + /// <summary> + /// Gets the fragment text. + /// </summary> + public string Text + { + get + { + return FragmentText; + } + set + { + base._fragmenttext = value; + } + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/NameValuePair.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/NameValuePair.cs new file mode 100644 index 0000000..a5761b7 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/NameValuePair.cs @@ -0,0 +1,30 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; + +namespace HtmlAgilityPack +{ + internal class NameValuePair + { + internal readonly string Name; + internal string Value; + + internal NameValuePair() + { + } + + internal NameValuePair(string name) + : + this() + { + Name = name; + } + + internal NameValuePair(string name, string value) + : + this(name) + { + Value = value; + } + } + +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/NameValuePairList.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/NameValuePairList.cs new file mode 100644 index 0000000..8e45623 --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/NameValuePairList.cs @@ -0,0 +1,89 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.Collections; + +namespace HtmlAgilityPack +{ + internal class NameValuePairList + { + internal readonly string Text; + private ArrayList _allPairs; + private Hashtable _pairsWithName; + + internal NameValuePairList(): + this(null) + { + } + + internal NameValuePairList(string text) + { + Text = text; + _allPairs = new ArrayList(); + _pairsWithName = new Hashtable(); + + Parse(text); + } + + internal string GetNameValuePairValue(string name) + { + if (name==null) + throw new ArgumentNullException(); + ArrayList al = GetNameValuePairs(name); + if (al==null) + return null; + + // return first item + NameValuePair nvp = al[0] as NameValuePair; + return nvp.Value; + } + + internal ArrayList GetNameValuePairs(string name) + { + if (name==null) + return _allPairs; + return _pairsWithName[name] as ArrayList; + } + + private void Parse(string text) + { + _allPairs.Clear(); + _pairsWithName.Clear(); + if (text==null) + return; + + string[] p = text.Split(';'); + if (p==null) + return; + foreach(string pv in p) + { + if (pv.Length==0) + continue; + string[] onep = pv.Split(new char[]{'='}, 2); + if (onep==null) + continue; + NameValuePair nvp = new NameValuePair(onep[0].Trim().ToLower()); + if (onep.Length<2) + nvp.Value = ""; + else + nvp.Value = onep[1]; + + _allPairs.Add(nvp); + + // index by name + ArrayList al = _pairsWithName[nvp.Name] as ArrayList; + if (al==null) + { + al = new ArrayList(); + _pairsWithName[nvp.Name] = al; + } + al.Add(nvp); + } + } + + internal static string GetNameValuePairsValue(string text, string name) + { + NameValuePairList l = new NameValuePairList(text); + return l.GetNameValuePairValue(name); + } + } +} diff --git a/FineUI_v6/FineUI/lib/HtmlAgilityPack/crc32.cs b/FineUI_v6/FineUI/lib/HtmlAgilityPack/crc32.cs new file mode 100644 index 0000000..4b4624f --- /dev/null +++ b/FineUI_v6/FineUI/lib/HtmlAgilityPack/crc32.cs @@ -0,0 +1,140 @@ +// HtmlAgilityPack V1.0 - Simon Mourier <simon underscore mourier at hotmail dot com> +using System; +using System.IO; + +namespace HtmlAgilityPack +{ + /// <summary> + /// A utility class to compute CRC32. + /// </summary> + public class Crc32 + { + private uint _crc32 = 0; + static private uint[] crc_32_tab = // CRC polynomial 0xedb88320 + { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + }; + + static private uint UPDC32(byte octet, uint crc) + { + return (crc_32_tab[((crc)^((byte)octet)) & 0xff] ^ ((crc) >> 8)); + } + + internal uint CheckSum + { + get + { + return _crc32; + } + set + { + _crc32 = value; + } + } + + internal uint AddToCRC32(int c) + { + return AddToCRC32((ushort)c); + } + + internal uint AddToCRC32(ushort c) + { + byte lowByte, hiByte; + lowByte = (byte)(c & 0x00ff); + hiByte = (byte)(c >> 8); + _crc32 = UPDC32(hiByte, _crc32); + _crc32 = UPDC32(lowByte, _crc32); + return ~_crc32; + } + + /// <summary> + /// Compute a checksum for a given string. + /// </summary> + /// <param name="text">The string to compute the checksum for.</param> + /// <returns>The computed checksum.</returns> + static public uint CRC32String(string text) + { + uint oldcrc32; + oldcrc32 = 0xFFFFFFFF; + int len = text.Length; + ushort uCharVal; + byte lowByte, hiByte; + + for ( int i=0; len>0; i++) + { + --len; + uCharVal = text[len]; + unchecked + { + lowByte = (byte)(uCharVal & 0x00ff); + hiByte = (byte)(uCharVal >> 8); + } + oldcrc32 = UPDC32(hiByte, oldcrc32); + oldcrc32 = UPDC32(lowByte, oldcrc32); + } + + return ~oldcrc32; + } + + /// <summary> + /// Compute a checksum for a given array of bytes. + /// </summary> + /// <param name="bytes">The array of bytes to compute the checksum for.</param> + /// <returns>The computed checksum.</returns> + static public uint CRC32Bytes(byte[] bytes) + { + uint oldcrc32; + oldcrc32 = 0xFFFFFFFF; + int len = bytes.Length; + + for ( int i=0; len>0; i++) + { + --len; + oldcrc32 = UPDC32(bytes[len], oldcrc32); + } + return ~oldcrc32; + } + } +} diff --git a/FineUI_v6/FineUI/lib/JSBeautifyLib/JSBeautify.cs b/FineUI_v6/FineUI/lib/JSBeautifyLib/JSBeautify.cs new file mode 100644 index 0000000..6b412bc --- /dev/null +++ b/FineUI_v6/FineUI/lib/JSBeautifyLib/JSBeautify.cs @@ -0,0 +1,971 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections; +using System.Text.RegularExpressions; + +namespace JSBeautifyLib +{ + /// <summary> + /// JSBeautifyOptions + /// </summary> + public class JSBeautifyOptions + { + /// <summary> + /// indent_size + /// </summary> + public int? indent_size { get; set; } + /// <summary> + /// indent_char + /// </summary> + public char? indent_char { get; set; } + /// <summary> + /// indent_level + /// </summary> + public int? indent_level { get; set; } + /// <summary> + /// preserve_newlines + /// </summary> + public bool? preserve_newlines { get; set; } + } + + /// <summary> + /// JSBeautify + /// </summary> + public class JSBeautify + { + private StringBuilder output; + private string indent_string; + private int indent_level; + private string token_text; + private Stack<string> modes; + private string current_mode; + private int opt_indent_size; + private char opt_indent_char; + private int opt_indent_level; + private bool opt_preserve_newlines; + private bool if_line_flag; + private bool do_block_just_closed; + private string input; + + + private void trim_output() + { + while ((output.Length > 0) && ((output[output.Length - 1] == ' ') || (output[output.Length - 1].ToString() == indent_string))) + { + output.Remove(output.Length - 1, 1); + } + } + + private void print_newline(bool? ignore_repeated) + { + ignore_repeated = ignore_repeated ?? true; + + if_line_flag = false; + trim_output(); + + if (output.Length == 0) + return; + + if ((output[output.Length - 1] != '\n') || !ignore_repeated.Value) + { + output.Append(Environment.NewLine); + } + + for (var i = 0; i < indent_level; i++) + { + output.Append(indent_string); + } + } + + private void print_space() + { + var last_output = " "; + if (output.Length > 0) + last_output = output[output.Length - 1].ToString(); + if ((last_output != " ") && (last_output != "\n") && (last_output != indent_string)) + { + output.Append(' '); + } + } + + + private void print_token() + { + output.Append(token_text); + } + + private void indent() + { + indent_level++; + } + + private void unindent() + { + if (indent_level > 0) + indent_level--; + } + + private void remove_indent() + { + if ((output.Length > 0) && (output[output.Length - 1].ToString() == indent_string)) + { + output.Remove(output.Length - 1, 1); + } + } + + private void set_mode(string mode) + { + modes.Push(current_mode); + current_mode = mode; + } + + private void restore_mode() + { + do_block_just_closed = (current_mode == "DO_BLOCK"); + current_mode = modes.Pop(); + } + + private bool in_array(object what, ArrayList arr) + { + return arr.Contains(what); + + } + + private bool is_ternary_op() + { + int level = 0; + int colon_count = 0; + for (var i = output.Length - 1; i >= 0; i--) + { + switch (output[i]) + { + case ':': + if (level == 0) + colon_count++; + break; + case '?': + if (level == 0) + { + if (colon_count == 0) + { + return true; + } + else + { + colon_count--; + } + } + break; + case '{': + if (level == 0) return false; + level--; + break; + case '(': + case '[': + level--; + break; + case ')': + case ']': + case '}': + level++; + break; + } + } + return false; + } + + private string whitespace; + private string wordchar; + private int parser_pos; + private string last_type; + private string last_text; + private string digits; + private string[] punct; + private string prefix; + private string[] get_next_token(ref int parser_pos) + { + var n_newlines = 0; + + if (parser_pos >= input.Length) + { + return new string[] { "", "TK_EOF" }; + } + + string c = input[parser_pos].ToString(); + parser_pos++; + + while (whitespace.Contains(c)) + { + if (parser_pos >= input.Length) + { + return new string[] { "", "TK_EOF" }; + } + + if (c == "\n") + n_newlines++; + + c = input[parser_pos].ToString(); + parser_pos++; + } + + var wanted_newline = false; + + if (opt_preserve_newlines) + { + if (n_newlines > 1) + { + for (var i = 0; i < 2; i++) + { + print_newline(i == 0); + } + } + wanted_newline = (n_newlines == 1); + + } + + if (wordchar.Contains(c)) + { + if (parser_pos < input.Length) + { + while (wordchar.Contains(input[parser_pos].ToString())) + { + c += input[parser_pos]; + parser_pos++; + if (parser_pos == input.Length) + break; + } + } + + + if ((parser_pos != input.Length) && (Regex.IsMatch(c, "^[0-9]+[Ee]$")) && ((input[parser_pos] == '-') || (input[parser_pos] == '+'))) + { + var sign = input[parser_pos]; + parser_pos++; + + var t = get_next_token(ref parser_pos); + c += sign + t[0]; + return new string[] { c, "TK_WORD" }; + } + + if (c == "in") + { + return new string[] { c, "TK_OPERATOR" }; + } + + if (wanted_newline && last_type != "TK_OPERATOR" && !if_line_flag) + { + print_newline(null); + } + return new string[] { c, "TK_WORD" }; + + } + + if ((c == "(") || (c == "[")) + return new string[] { c, "TK_START_EXPR" }; + + if (c == ")" || c == "]") + { + return new string[] { c, "TK_END_EXPR" }; + } + + if (c == "{") + { + return new string[] { c, "TK_START_BLOCK" }; + } + + if (c == "}") + { + return new string[] { c, "TK_END_BLOCK" }; + } + + if (c == ";") + { + return new string[] { c, "TK_SEMICOLON" }; + } + + if (c == "/") + { + var comment = ""; + if (input[parser_pos] == '*') + { + parser_pos++; + if (parser_pos < input.Length) + { + while (!((input[parser_pos] == '*') && (input[parser_pos + 1] > '\0') && (input[parser_pos + 1] == '/') && (parser_pos < input.Length))) + { + comment += input[parser_pos]; + parser_pos++; + if (parser_pos >= input.Length) + { + break; + } + } + } + + parser_pos += 2; + return new string[] { "/*" + comment + "*/", "TK_BLOCK_COMMENT" }; + } + + if (input[parser_pos] == '/') + { + comment = c; + while ((input[parser_pos] != '\x0d') && (input[parser_pos] != '\x0a')) + { + comment += input[parser_pos]; + parser_pos++; + if (parser_pos >= input.Length) + { + break; + } + } + + parser_pos++; + if (wanted_newline) + { + print_newline(null); + } + return new string[] { comment, "TK_COMMENT" }; + + } + } + + if ((c == "'") || (c == "\"") || ((c == "/") + && ((last_type == "TK_WORD" && last_text == "return") || ((last_type == "TK_START_EXPR") || (last_type == "TK_START_BLOCK") || (last_type == "TK_END_BLOCK") + || (last_type == "TK_OPERATOR") || (last_type == "TK_EOF") || (last_type == "TK_SEMICOLON")))) + ) + { + var sep = c; + var esc = false; + var resulting_string = c; + + if (parser_pos < input.Length) + { + if (sep == "/") + { + var in_char_class = false; + while ((esc) || (in_char_class) || (input[parser_pos].ToString() != sep)) + { + resulting_string += input[parser_pos]; + if (!esc) + { + esc = input[parser_pos] == '\\'; + if (input[parser_pos] == '[') + { + in_char_class = true; + } + else if (input[parser_pos] == ']') + { + in_char_class = false; + } + } + else + { + esc = false; + } + parser_pos++; + if (parser_pos >= input.Length) + { + return new string[] { resulting_string, "TK_STRING" }; + } + } + } + else + { + while ((esc) || (input[parser_pos].ToString() != sep)) + { + resulting_string += input[parser_pos]; + if (!esc) + { + esc = input[parser_pos] == '\\'; + } + else + { + esc = false; + } + parser_pos++; + if (parser_pos >= input.Length) + { + return new string[] { resulting_string, "TK_STRING" }; + } + } + } + } + + parser_pos += 1; + + resulting_string += sep; + + if (sep == "/") + { + // regexps may have modifiers /regexp/MOD , so fetch those, too + while ((parser_pos < input.Length) && (wordchar.Contains(input[parser_pos].ToString()))) + { + resulting_string += input[parser_pos]; + parser_pos += 1; + } + } + return new string[] { resulting_string, "TK_STRING" }; + + + } + + if (c == "#") + { + var sharp = "#"; + if ((parser_pos < input.Length) && (digits.Contains(input[parser_pos].ToString()))) + { + do + { + c = input[parser_pos].ToString(); + sharp += c; + parser_pos += 1; + } while ((parser_pos < input.Length) && (c != "#") && (c != "=")); + if (c == "#") + { + return new string[] { sharp, "TK_WORD" }; ; + } + else + { + return new string[] { sharp, "TK_OPERATOR" }; ; + } + } + } + + + if ((c == "<") && (input.Substring(parser_pos - 1, 3) == "<!--")) + { + parser_pos += 3; + return new string[] { "<!--", "TK_COMMENT" }; ; + } + + if ((c == "-") && (input.Substring(parser_pos - 1, 2) == "-->")) + { + parser_pos += 2; + if (wanted_newline) + { + print_newline(null); + } + return new string[] { "-->", "TK_COMMENT" }; + } + + if (((IList<string>)punct).Contains(c)) + { + while ((parser_pos < input.Length) && (((IList<string>)punct).Contains(c + input[parser_pos]))) + { + c += input[parser_pos]; + parser_pos += 1; + if (parser_pos >= input.Length) + { + break; + } + } + + return new string[] { c, "TK_OPERATOR" }; + } + + return new string[] { c, "TK_UNKNOWN" }; + + + } + + private string last_word; + private bool var_line; + private bool var_line_tainted; + private string[] line_starters; + private bool in_case; + private string token_type; + + /// <summary> + /// GetResult + /// </summary> + /// <returns></returns> + public string GetResult() + { + if (add_script_tags) + { + output.AppendLine().AppendLine("</script>"); + } + + return output.ToString(); + } + + private bool add_script_tags; + /// <summary> + /// JSBeautify + /// </summary> + /// <param name="js_source_text"></param> + /// <param name="options"></param> + public JSBeautify(string js_source_text, JSBeautifyOptions options) + { + opt_indent_size = options.indent_size ?? 4; + opt_indent_char = options.indent_char ?? ' '; + opt_indent_level = options.indent_level ?? 0; + opt_preserve_newlines = options.preserve_newlines ?? true; + output = new StringBuilder(); + modes = new Stack<string>(); + + + + indent_string = ""; + + while (opt_indent_size > 0) + { + indent_string += opt_indent_char; + opt_indent_size -= 1; + } + + indent_level = opt_indent_level; + + + + input = js_source_text.Replace("<script type=\"text/javascript\">", "").Replace("</script>", ""); + if (input.Length != js_source_text.Length) + { + output.AppendLine("<script type=\"text/javascript\">"); + add_script_tags = true; + } + + last_word = ""; // last 'TK_WORD' passed + last_type = "TK_START_EXPR"; // last token type + last_text = ""; // last token text + + do_block_just_closed = false; + var_line = false; // currently drawing var .... ; + var_line_tainted = false; // false: var a = 5; true: var a = 5, b = 6 + + whitespace = "\n\r\t "; + wordchar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$"; + digits = "0123456789"; + + // <!-- is a special case (ok, it's a minor hack actually) + punct = "+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! !! , : ? ^ ^= |= ::".Split(' '); + + // words which should always start on new line. + line_starters = "continue,try,throw,return,var,if,switch,case,default,for,while,break,function".Split(','); + + // states showing if we are currently in expression (i.e. "if" case) - 'EXPRESSION', or in usual block (like, procedure), 'BLOCK'. + // some formatting depends on that. + current_mode = "BLOCK"; + modes.Push(current_mode); + + parser_pos = 0; + in_case = false; + + while (true) + { + var t = get_next_token(ref parser_pos); + token_text = t[0]; + token_type = t[1]; + if (token_type == "TK_EOF") + { + break; + } + + switch (token_type) + { + + case "TK_START_EXPR": + var_line = false; + set_mode("EXPRESSION"); + if ((last_text == ";") || (last_type == "TK_START_BLOCK")) + { + print_newline(null); + } + else if ((last_type == "TK_END_EXPR") || (last_type == "TK_START_EXPR")) + { + // do nothing on (( and )( and ][ and ]( .. + } + else if ((last_type != "TK_WORD") && (last_type != "TK_OPERATOR")) + { + print_space(); + } + else if (((IList<string>)line_starters).Contains(last_word)) + { + print_space(); + } + print_token(); + break; + + case "TK_END_EXPR": + print_token(); + restore_mode(); + break; + + case "TK_START_BLOCK": + + if (last_word == "do") + { + set_mode("DO_BLOCK"); + } + else + { + set_mode("BLOCK"); + } + if ((last_type != "TK_OPERATOR") && (last_type != "TK_START_EXPR")) + { + if (last_type == "TK_START_BLOCK") + { + print_newline(null); + } + else + { + print_space(); + } + } + print_token(); + indent(); + break; + + case "TK_END_BLOCK": + if (last_type == "TK_START_BLOCK") + { + // nothing + trim_output(); + unindent(); + } + else + { + unindent(); + print_newline(null); + } + print_token(); + restore_mode(); + break; + + case "TK_WORD": + + if (do_block_just_closed) + { + // do {} ## while () + print_space(); + print_token(); + print_space(); + do_block_just_closed = false; + break; + } + + if ((token_text == "case") || (token_text == "default")) + { + if (last_text == ":") + { + // switch cases following one another + remove_indent(); + } + else + { + // case statement starts in the same line where switch + unindent(); + print_newline(null); + indent(); + } + print_token(); + in_case = true; + break; + } + + prefix = "NONE"; + + if (last_type == "TK_END_BLOCK") + { + if (!(new List<string> { "else", "catch", "finally" }).Contains(token_text.ToLower())) + { + prefix = "NEWLINE"; + } + else + { + prefix = "SPACE"; + print_space(); + } + } + else if ((last_type == "TK_SEMICOLON") && ((current_mode == "BLOCK") || (current_mode == "DO_BLOCK"))) + { + prefix = "NEWLINE"; + } + else if ((last_type == "TK_SEMICOLON") && (current_mode == "EXPRESSION")) + { + prefix = "SPACE"; + } + else if (last_type == "TK_STRING") + { + prefix = "NEWLINE"; + } + else if (last_type == "TK_WORD") + { + prefix = "SPACE"; + } + else if (last_type == "TK_START_BLOCK") + { + prefix = "NEWLINE"; + } + else if (last_type == "TK_END_EXPR") + { + print_space(); + prefix = "NEWLINE"; + } + + if ((last_type != "TK_END_BLOCK") && ((new List<string> { "else", "catch", "finally" }).Contains(token_text.ToLower()))) + { + print_newline(null); + } + else if ((((IList<string>)line_starters).Contains(token_text)) || (prefix == "NEWLINE")) + { + if (last_text == "else") + { + // no need to force newline on else break + print_space(); + } + else if (((last_type == "TK_START_EXPR") || (last_text == "=") || (last_text == ",")) && (token_text == "function")) + { + // no need to force newline on "function": (function + // DONOTHING + } + else if ((last_type == "TK_WORD") && ((last_text == "return") || (last_text == "throw"))) + { + // no newline between "return nnn" + print_space(); + } + else if (last_type != "TK_END_EXPR") + { + if (((last_type != "TK_START_EXPR") || (token_text != "var")) && (last_text != ":")) + { + // no need to force newline on "var": for (var x = 0...) + if ((token_text == "if") && (last_type == "TK_WORD") && (last_word == "else")) + { + // no newline for } else if { + print_space(); + } + else + { + print_newline(null); + } + } + } + else + { + if ((((IList<string>)line_starters).Contains(token_text)) && (last_text != ")")) + { + print_newline(null); + } + } + } + else if (prefix == "SPACE") + { + print_space(); + } + print_token(); + last_word = token_text; + + if (token_text == "var") + { + var_line = true; + var_line_tainted = false; + } + + if (token_text == "if" || token_text == "else") + { + if_line_flag = true; + } + + break; + + case "TK_SEMICOLON": + + print_token(); + var_line = false; + break; + + case "TK_STRING": + + if ((last_type == "TK_START_BLOCK") || (last_type == "TK_END_BLOCK") || (last_type == "TK_SEMICOLON")) + { + print_newline(null); + } + else if (last_type == "TK_WORD") + { + print_space(); + } + print_token(); + break; + + case "TK_OPERATOR": + + var start_delim = true; + var end_delim = true; + if (var_line && (token_text != ",")) + { + var_line_tainted = true; + if (token_text == ":") + { + var_line = false; + } + } + if (var_line && (token_text == ",") && (current_mode == "EXPRESSION")) + { + // do not break on comma, for(var a = 1, b = 2) + var_line_tainted = false; + } + + if (token_text == ":" && in_case) + { + print_token(); // colon really asks for separate treatment + print_newline(null); + in_case = false; + break; + } + + if (token_text == "::") + { + // no spaces around exotic namespacing syntax operator + print_token(); + break; + } + + if (token_text == ",") + { + if (var_line) + { + if (var_line_tainted) + { + print_token(); + print_newline(null); + var_line_tainted = false; + } + else + { + print_token(); + print_space(); + } + } + else if (last_type == "TK_END_BLOCK") + { + print_token(); + print_newline(null); + } + else + { + if (current_mode == "BLOCK") + { + print_token(); + print_newline(null); + } + else + { + // EXPR od DO_BLOCK + print_token(); + print_space(); + } + } + break; + } + else if ((token_text == "--") || (token_text == "++")) + { // unary operators special case + if (last_text == ";") + { + if (current_mode == "BLOCK") + { + // { foo; --i } + print_newline(null); + start_delim = true; + end_delim = false; + } + else + { + // space for (;; ++i) + start_delim = true; + end_delim = false; + } + } + else + { + if (last_text == "{") + { + // {--i + print_newline(null); + } + start_delim = false; + end_delim = false; + } + } + else if (((token_text == "!") || (token_text == "+") || (token_text == "-")) && ((last_text == "return") || (last_text == "case"))) + { + start_delim = true; + end_delim = false; + } + else if (((token_text == "!") || (token_text == "+") || (token_text == "-")) && (last_type == "TK_START_EXPR")) + { + // special case handling: if (!a) + start_delim = false; + end_delim = false; + } + else if (last_type == "TK_OPERATOR") + { + start_delim = false; + end_delim = false; + } + else if (last_type == "TK_END_EXPR") + { + start_delim = true; + end_delim = true; + } + else if (token_text == ".") + { + // decimal digits or object.property + start_delim = false; + end_delim = false; + + } + else if (token_text == ":") + { + if (is_ternary_op()) + { + start_delim = true; + } + else + { + start_delim = false; + } + } + if (start_delim) + { + print_space(); + } + + print_token(); + + if (end_delim) + { + print_space(); + } + break; + + case "TK_BLOCK_COMMENT": + + print_newline(null); + print_token(); + print_newline(null); + break; + + case "TK_COMMENT": + + // print_newline(); + print_space(); + print_token(); + print_newline(null); + break; + + case "TK_UNKNOWN": + print_token(); + break; + } + + last_type = token_type; + last_text = token_text; + } + + + } + + + } +} diff --git a/FineUI_v6/FineUI/lib/JSBeautifyLib/JSBeautify.txt b/FineUI_v6/FineUI/lib/JSBeautifyLib/JSBeautify.txt new file mode 100644 index 0000000..5967b77 --- /dev/null +++ b/FineUI_v6/FineUI/lib/JSBeautifyLib/JSBeautify.txt @@ -0,0 +1,8 @@ +License: The MIT License (MIT) +Copyright (c) 2009 Rekna + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/FineUI_v6/FineUI/lib/extjs.txt b/FineUI_v6/FineUI/lib/extjs.txt new file mode 100644 index 0000000..215b7bd --- /dev/null +++ b/FineUI_v6/FineUI/lib/extjs.txt @@ -0,0 +1,41 @@ +Ext JS - JavaScript Library +Copyright (c) 2006-2011, Sencha Inc. +All rights reserved. +licensing@sencha.com + +http://www.sencha.com/license + +Open Source License +------------------------------------------------------------------------------------------ +Ext JS is licensed under the terms of the Open Source GPL 3.0 license. + +http://www.gnu.org/licenses/gpl.html + +There are several FLOSS exceptions available for use with this release for +open source applications that are distributed under a license other than the GPL. + +* Open Source License Exception for Applications + + http://www.sencha.com/products/floss-exception.php + +* Open Source License Exception for Development + + http://www.sencha.com/products/ux-exception.php + + +Commercial License +------------------------------------------------------------------------------------------ +This is the appropriate option if you are creating proprietary applications and you are +not prepared to distribute and share the source code of your application under the +GPL v3 license. Please visit http://www.sencha.com/license for more details. + + +OEM / Reseller License +------------------------------------------------------------------------------------------ +For more details, please visit: http://www.sencha.com/license. + +-- + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY RIGHTS. See the GNU +General Public License for more details. \ No newline at end of file diff --git a/FineUI_v6/FineUI/lib/json.net/Net20/Newtonsoft.Json.dll b/FineUI_v6/FineUI/lib/json.net/Net20/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..eeeebf5eff2df798087142a1804935577c6e435f GIT binary patch literal 389120 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⁡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%0Dsb$VZc+OKv4p1&Mt!j(2b3w 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 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/lib/json.net/Net20/Newtonsoft.Json.xml b/FineUI_v6/FineUI/lib/json.net/Net20/Newtonsoft.Json.xml new file mode 100644 index 0000000..6d5ae2c --- /dev/null +++ b/FineUI_v6/FineUI/lib/json.net/Net20/Newtonsoft.Json.xml @@ -0,0 +1,8181 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value"></param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T"></typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.GetEnumNameMap(System.Type)"> + <summary> + A cached representation of the Enum string representation to respect per Enum field name. + </summary> + <param name="t">The type of the Enum.</param> + <returns>A map of enum field name to either the field name, or the configured enum member name (<see cref="!:EnumMemberAttribute"/>).</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Enumerable"> + <summary> + Provides a set of static (Shared in Visual Basic) methods for + querying objects that implement <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.AsEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Empty``1"> + <summary> + Returns an empty <see cref="T:System.Collections.Generic.IEnumerable`1"/> that has the + specified type argument. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Cast``1(System.Collections.IEnumerable)"> + <summary> + Converts the elements of an <see cref="T:System.Collections.IEnumerable"/> to the + specified type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OfType``1(System.Collections.IEnumerable)"> + <summary> + Filters the elements of an <see cref="T:System.Collections.IEnumerable"/> based on a specified type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Range(System.Int32,System.Int32)"> + <summary> + Generates a sequence of integral numbers within a specified range. + </summary> + <param name="start">The value of the first integer in the sequence.</param> + <param name="count">The number of sequential integers to generate.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Repeat``1(``0,System.Int32)"> + <summary> + Generates a sequence that contains one repeated value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Filters a sequence of values based on a predicate. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Filters a sequence of values based on a predicate. + Each element's index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Projects each element of a sequence into a new form. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,``1})"> + <summary> + Projects each element of a sequence into a new form by + incorporating the element's index. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/> + and flattens the resulting sequences into one sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + and flattens the resulting sequences into one sequence. The + index of each source element is used in the projected form of + that element. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. The index of + each source element is used in the intermediate projected form + of that element. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns elements from a sequence as long as a specified condition is true. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Returns elements from a sequence as long as a specified condition is true. + The element's index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of First operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the first element of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the first element in a sequence that satisfies a specified condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the first element of a sequence, or a default value if + the sequence contains no elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the first element of the sequence that satisfies a + condition or a default value if no such element is found. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of Last operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the last element of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the last element of a sequence that satisfies a + specified condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the last element of a sequence, or a default value if + the sequence contains no elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the last element of a sequence that satisfies a + condition or a default value if no such element is found. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of Single operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the only element of a sequence, and throws an exception + if there is not exactly one element in the sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the only element of a sequence that satisfies a + specified condition, and throws an exception if more than one + such element exists. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the only element of a sequence, or a default value if + the sequence is empty; this method throws an exception if there + is more than one element in the sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the only element of a sequence that satisfies a + specified condition or a default value if no such element + exists; this method throws an exception if more than one element + satisfies the condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAt``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns the element at a specified index in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAtOrDefault``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns the element at a specified index in a sequence or a + default value if the index is out of range. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Reverse``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Inverts the order of the elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Take``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns a specified number of contiguous elements from the start + of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Skip``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Bypasses a specified number of elements in a sequence and then + returns the remaining elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. The element's + index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the number of elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns a number that represents how many elements in the + specified sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns an <see cref="T:System.Int64"/> that represents the total number + of elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns an <see cref="T:System.Int64"/> that represents how many elements + in a sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Concat``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Concatenates two sequences. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToList``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.List`1"/> from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToArray``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Creates an array from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns distinct elements from a sequence by using the default + equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns distinct elements from a sequence by using a specified + <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function and a key comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key + and element selector functions. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function, a comparer and an element selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and compares the keys by using a specified + comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and projects the elements for each group by + using a specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2})"> + <summary> + Groups the elements of a sequence according to a key selector + function. The keys are compared by using a comparer and each + group's elements are projected by using a specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The elements of each group are projected by using a + specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The keys are compared by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. Key values are compared by using a specified comparer, + and the elements of each group are projected by using a + specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,``0})"> + <summary> + Applies an accumulator function over a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``2(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1})"> + <summary> + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``3(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1},Newtonsoft.Json.Serialization.Func{``1,``2})"> + <summary> + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value, and the + specified function is used to select the result value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set union of two sequences by using the default + equality comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set union of two sequences by using a specified + <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the elements of the specified sequence or the type + parameter's default value in a singleton collection if the + sequence is empty. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0},``0)"> + <summary> + Returns the elements of the specified sequence or the specified + value in a singleton collection if the sequence is empty. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.All``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Determines whether all elements of a sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Determines whether a sequence contains any elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Determines whether any element of a sequence satisfies a + condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0)"> + <summary> + Determines whether a sequence contains a specified element by + using the default equality comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Determines whether a sequence contains a specified element by + using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Determines whether two sequences are equal by comparing the + elements by using the default equality comparer for their type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Determines whether two sequences are equal by comparing their + elements by using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,System.Boolean})"> + <summary> + Base implementation for Min/Max operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{System.Nullable{``0}},System.Nullable{``0},Newtonsoft.Json.Serialization.Func{System.Nullable{``0},System.Nullable{``0},System.Boolean})"> + <summary> + Base implementation for Min/Max operator for nullable types. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the minimum value in a generic sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Invokes a transform function on each element of a generic + sequence and returns the minimum resulting value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the maximum value in a generic sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Invokes a transform function on each element of a generic + sequence and returns the maximum resulting value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Renumerable``1(System.Collections.Generic.IEnumerator{``0})"> + <summary> + Makes an enumerator seen as enumerable once more. + </summary> + <remarks> + The supplied enumerator must have been started. The first element + returned is the element the enumerator was on when passed in. + DO NOT use this method if the caller must be a generator. It is + mostly safe among aggregate operations. + </remarks> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Sorts the elements of a sequence in ascending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Sorts the elements of a sequence in ascending order by using a + specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Sorts the elements of a sequence in descending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Sorts the elements of a sequence in descending order by using a + specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + ascending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + ascending order by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + descending order, according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + descending order by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.IntersectExceptImpl``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0},System.Boolean)"> + <summary> + Base implementation for Intersect and Except operators. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set intersection of two sequences by using the + default equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set intersection of two sequences by using the + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set difference of two sequences by using the + default equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set difference of two sequences by using the + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function and key comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key + selector and element selector functions. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function, a comparer, and an element selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3})"> + <summary> + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3},System.Collections.Generic.IEqualityComparer{``2})"> + <summary> + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. A + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3})"> + <summary> + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3},System.Collections.Generic.IEqualityComparer{``2})"> + <summary> + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. A specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> + is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int32})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int32})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int32"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int32"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Int32"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Int32"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int64})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int64})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int64"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int64"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Int64"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Int64"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Single})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Single"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Single})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Single"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Single"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Single"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Single"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Single"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Double})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Double"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Double})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Double"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Double"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Double"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Double"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Double"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Decimal})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Decimal})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Decimal"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Decimal"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Decimal"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Decimal"/> value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"> + <summary> + Represents a collection of objects that have a common key. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2.Key"> + <summary> + Gets the key of the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.ILookup`2"> + <summary> + Defines an indexer, size property, and Boolean search method for + data structures that map keys to <see cref="T:System.Collections.Generic.IEnumerable`1"/> + sequences of values. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"> + <summary> + Represents a sorted sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1.CreateOrderedEnumerable``1(Newtonsoft.Json.Serialization.Func{`0,``0},System.Collections.Generic.IComparer{``0},System.Boolean)"> + <summary> + Performs a subsequent ordering on the elements of an + <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"/> according to a key. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"> + <summary> + Represents a collection of keys each mapped to one or more values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Contains(`0)"> + <summary> + Determines whether a specified key is in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.ApplyResultSelector``1(Newtonsoft.Json.Serialization.Func{`0,System.Collections.Generic.IEnumerable{`1},``0})"> + <summary> + Applies a transform function to each key and its associated + values and returns the results. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.GetEnumerator"> + <summary> + Returns a generic enumerator that iterates through the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Count"> + <summary> + Gets the number of key/value collection pairs in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Item(`0)"> + <summary> + Gets the collection of values indexed by the specified key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.TagPosition(`0,System.Int32)"> + <remarks> + See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> + for why this method is needed and cannot be expressed as a + lambda at the call site. + </remarks> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.GetFirst(Newtonsoft.Json.Utilities.LinqBridge.Tuple{`0,System.Int32})"> + <remarks> + See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> + for why this method is needed and cannot be expressed as a + lambda at the call site. + </remarks> + </member> + <member name="T:System.Runtime.CompilerServices.ExtensionAttribute"> + <remarks> + This attribute allows us to define extension methods without + requiring .NET Framework 3.5. For more information, see the section, + <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx#S7">Extension Methods in .NET Framework 2.0 Apps</a>, + of <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx">Basic Instincts: Extension Methods</a> + column in <a href="http://msdn.microsoft.com/msdnmag/">MSDN Magazine</a>, + issue <a href="http://msdn.microsoft.com/en-us/magazine/cc135410.aspx">Nov 2007</a>. + </remarks> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has childen tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has childen tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON, and ignores setting members when the JSON value equals the member's default value. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current Json token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current Json token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current Json token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="!:DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="!:DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns>A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has childen tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified id. + </summary> + <param name="id">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified id.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Identity"> + <summary> + Gets or sets the identity. + </summary> + <value>The identity.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Options"> + <summary> + Gets or sets a collection of options. + </summary> + <value>A collection of options.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the extend <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + <value>The extended <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc> diff --git a/FineUI_v6/FineUI/lib/json.net/Net40/Newtonsoft.Json.dll b/FineUI_v6/FineUI/lib/json.net/Net40/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..aecba523a49d72243262d97decc6019b88c433a2 GIT binary patch literal 373248 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⩔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%0A7<`2+U3C4!A!Kh#6M86Yfti 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 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/lib/json.net/Net40/Newtonsoft.Json.xml b/FineUI_v6/FineUI/lib/json.net/Net40/Newtonsoft.Json.xml new file mode 100644 index 0000000..4794eb0 --- /dev/null +++ b/FineUI_v6/FineUI/lib/json.net/Net40/Newtonsoft.Json.xml @@ -0,0 +1,7560 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns> + A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTimeOffset})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value"></param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T"></typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.EntityKeyMemberConverter"> + <summary> + Converts an Entity Framework EntityKey to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.ExpandoObjectConverter"> + <summary> + Converts an ExpandoObject to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.GetEnumNameMap(System.Type)"> + <summary> + A cached representation of the Enum string representation to respect per Enum field name. + </summary> + <param name="t">The type of the Enum.</param> + <returns>A map of enum field name to either the field name, or the configured enum member name (<see cref="T:System.Runtime.Serialization.EnumMemberAttribute"/>).</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTimeOffset"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTimeOffset"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTimeOffset}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTimeOffset)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTimeOffset"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTimeOffset})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.System#Dynamic#IDynamicMetaObjectProvider#GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has childen tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has childen tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDynamicContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDynamicContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON, and ignores setting members when the JSON value equals the member's default value. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current Json token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current Json token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current Json token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="T:System.Runtime.Serialization.DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="T:System.Runtime.Serialization.DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.DateTimeOffset"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset,Newtonsoft.Json.DateFormatHandling)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object)"> + <summary> + Asynchronously serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Asynchronously serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObjectAsync(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous populate operation. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string. + </summary> + <param name="node">The node to convert to JSON.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string. + </summary> + <param name="node">The node to convert to JSON.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XNode</returns> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns>A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.Collections.Specialized.NotifyCollectionChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"> + <summary> + Occurs when the items list of the collection has changed, or the collection is reset. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has childen tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanging(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"> + <summary> + Occurs when a property value is changing. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified id. + </summary> + <param name="id">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified id.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDynamicContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToName(System.Type,System.String@,System.String@)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="serializedType">The type of the object the formatter creates a new instance of.</param> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object. </param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object. </param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Identity"> + <summary> + Gets or sets the identity. + </summary> + <value>The identity.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Options"> + <summary> + Gets or sets a collection of options. + </summary> + <value>A collection of options.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the extend <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + <value>The extended <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodWithResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback,Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodReturnLast(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodNoResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.GetRestrictions"> + <summary> + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc> diff --git a/FineUI_v6/FineUI/lib/licenses/JSBeautify.txt b/FineUI_v6/FineUI/lib/licenses/JSBeautify.txt new file mode 100644 index 0000000..71b47b3 --- /dev/null +++ b/FineUI_v6/FineUI/lib/licenses/JSBeautify.txt @@ -0,0 +1,8 @@ +License: The MIT License (MIT) +Copyright (c) 2009 Rekna + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/FineUI_v6/FineUI/lib/licenses/extjs.txt b/FineUI_v6/FineUI/lib/licenses/extjs.txt new file mode 100644 index 0000000..215b7bd --- /dev/null +++ b/FineUI_v6/FineUI/lib/licenses/extjs.txt @@ -0,0 +1,41 @@ +Ext JS - JavaScript Library +Copyright (c) 2006-2011, Sencha Inc. +All rights reserved. +licensing@sencha.com + +http://www.sencha.com/license + +Open Source License +------------------------------------------------------------------------------------------ +Ext JS is licensed under the terms of the Open Source GPL 3.0 license. + +http://www.gnu.org/licenses/gpl.html + +There are several FLOSS exceptions available for use with this release for +open source applications that are distributed under a license other than the GPL. + +* Open Source License Exception for Applications + + http://www.sencha.com/products/floss-exception.php + +* Open Source License Exception for Development + + http://www.sencha.com/products/ux-exception.php + + +Commercial License +------------------------------------------------------------------------------------------ +This is the appropriate option if you are creating proprietary applications and you are +not prepared to distribute and share the source code of your application under the +GPL v3 license. Please visit http://www.sencha.com/license for more details. + + +OEM / Reseller License +------------------------------------------------------------------------------------------ +For more details, please visit: http://www.sencha.com/license. + +-- + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY RIGHTS. See the GNU +General Public License for more details. \ No newline at end of file diff --git a/FineUI_v6/FineUI/lib/licenses/json.net.txt b/FineUI_v6/FineUI/lib/licenses/json.net.txt new file mode 100644 index 0000000..612934a --- /dev/null +++ b/FineUI_v6/FineUI/lib/licenses/json.net.txt @@ -0,0 +1,85 @@ +Json.NET + +http://james.newtonking.com/projects/json-net.aspx +http://www.codeplex.com/json/ + + +Description: + +Json.NET makes working with JSON formatted data in .NET simple. Quickly read and write +JSON using LINQ to JSON or serialize your .NET objects with a single method call using +the JsonSerializer. + +-Flexible JSON serializer to convert .NET objects to JSON and back again +-LINQ to JSON for reading and writing JSON +-Writes indented, easy to read JSON +-Convert JSON to and from XML +-Supports Silverlight and Windows Phone + + + +Versions: + +Json.NET comes in different versions for the various .NET frameworks. + +-Net40: + .NET latest (4.0 & 4.5) + +-Net35: + .NET 3.5 SP1, Mono + +-Net20: + .NET 2.0 + +-Silverlight: + Silverlight 4 & 5 + +-WindowsPhone: + Windows Phone 7 & 7.1 + +-Metro + Windows 8 Metro, WinRT 4.5 + +-Portable + Portable Class Library (.NET 4.0, WP7, SL4) + + +Notes: + +The Silverlight and Windows Phone builds are not strong-named. +Use the assemblies in the Signed sub-directories for the strong-named versions. + +Microsoft stopped support for the Compact Framework in Visual Studio 2010. +For a Compact Framework 3.5 build download Json.NET 3.5. + +For a Silverlight 3.0 build download Json.NET 3.5. + + +Instructions: + + 1. Extract Newtonsoft.Json.dll and Newtonsoft.Json.xml from the archive's /bin + directory into your own applications. + 2. Add a reference to Newtonsoft.Json.dll within Visual Studio.NET to your project. + + + +License: + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all copies +or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/FineUI_v6/FineUI/release_history.txt b/FineUI_v6/FineUI/release_history.txt new file mode 100644 index 0000000..c05b24a --- /dev/null +++ b/FineUI_v6/FineUI/release_history.txt @@ -0,0 +1,2414 @@ +FineUI(开源版) +基于 ExtJS 的开源 ASP.NET 控件库 + +FineUI的使命 +创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices 的网站应用程序 + +支持的浏览器 +Chrome、Firefox、Safari、IE 8.0+ + +授权协议 +Apache License v2.0 +注:ExtJS 库在 GPL v3 协议下发布(http://www.sencha.com/license) + + +相关链接 +首页:http://fineui.com/ +论坛:http://fineui.com/bbs/ +示例:http://fineui.com/demo/ +文档:http://fineui.com/doc/ +下载:http://fineui.codeplex.com/ + + +FineUI 严格遵守 ExtJS 对开源软件的规定,不再内置 ExtJS 库,请自行获取: +1. 获取适用于 FineUI 的 ExtJS 库 + http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218 +2. 基于 FineUI 的空项目(已包含 ExtJS 库) + http://fineui.com/bbs/forum.php?mod=viewthread&tid=2123 + + +发布历史 + ++2017-**-** v6.0.4 + -修正未激活选项卡中表格的getStore().sorters为null导致的问题(甘桂-9373)。 + -增加示例:其他杂项->第三方组件->UEditor->UEditor(后台赋值)等四个示例。 + -增加示例:表格控件->杂项->在新标签页中打开;(同一个标签页)(张波-9520)。 + -增加示例:表格控件->杂项->在新标签页中打开(关闭后刷新父选项卡);(关闭后更新父选项卡)。 + + + ++2017-02-06 v6.0.3 + -修正无法在后台切换工具栏显示状态的问题(zhifeng521-9035)。 + -修正下拉列表后台绑定后,可能会出现F_STATE验证出错的问题(阿波_gvwYv,Removable-9076)。 + -修正AjaxTimeout无效的问题(网缘-9212)。 + -全局配置参数EnableFStateValidation默认为false,和专业版保持一致。 + -修正表格的DataKeyNames未定义时出错的问题(世界没有真情-9300)。 + -修正表格内存分页时,分页信息可能显示不正确的问题(╱/茶杯oо-9097)。 + + + ++2016-11-11 v6.0.1 + -修正RederField的FieldType=Double时出现的客户端JS错误(零度九分.拍豆-8936)。 + +修正DataKeyNames值是小数(比如9.80),则页面回发时会出现F_STATE验证出错的问题(Fire-8910)。 + -JavaScript会自动忽略小数的最后零(比如2.0,9.80),导致服务器生成的数据和回发的数据不一致。 + -修正后台更新复选框列表后无法获取选中项的问题(究级闪电EX-8926)。 + +部分样式问题。 + -修正Neptune主题下面,工具栏中按钮在IE8-9中存在的样式问题(xieyonjie-8956)。 + -修正Triton、Crisp主题下,[上传控件(自动回发)]示例中上传按钮在IE下出现左侧空白的问题。 + -修正Triton、Crisp、Neptune主题下,[工具栏中的上传控件]示例中上传按钮在IE下出现右侧空白的问题。 + -修正Blue和Gray主题下,[工具栏中的上传控件]示例中上传按钮在所有浏览器中都出现右侧空白的问题。 + -IE下min-width属性不支持initial属性,可以改为inherit。 + + + ++2016-10-24 v6.0.0 + -前端库ExtJS跨版本升级:v4.2.1->v6.2.0(FineUI对老版本兼容,v4.2.4可直接升级到v6.0)。 + -增加Crisp(小清新)和Triton(海卫一)主题。 + +ExtJS_v6.2.0引入的问题以及解决方案(仅为内部调整)。 + -v6删除了doLayout函数,FineUI自行扩展了此函数,因此对比doLayout函数的调用无需更改。 + -v6触发器图标居左显示,为了让[上传控件(自动回发)]示例正常工作,为ButtonOnly的上传控件增加自定义样式类f-fileupload-buttononly。 + -v6上传控件的触发器图标显示缺省光标样式,我们通过增加自定义CSS来支持手型光标。 + -v6行序号列RowNumberer的renderer函数改名为defaultRenderer,调整代码以适应变化。 + -v6在ArrayStore的beforeload事件中,operation.sorters[0]的方法调用改为operation.getSorters()[0]。 + -v6中判断数字由Ext.type(startIndex)==='number'改为原生的typeof(startIndex)==='number'。 + -v6中将x-grid-row改名为x-grid-item,将x-grid-row-selected改名为x-grid-item-selected,而x-grid-row-summary命名不改。 + -v6中表格合计行渲染函数名由summaryType改为summaryRenderer。 + -v6中表格不显示标题栏和表头的情况下,上边框不显示,内部为x-panel-body添加x-panel-default-outer-border-trbl样式。 + -v6中布局的{defaultMargins:'5px'}属性改为{defaults:{margin:'5px'}}。 + -v6中显示页面加载提示,由原来的Ext.LoadMask对象改为直接调用Ext.getBody().mask('Loading...');。 + -v6中node.raw改为node.data,beforeload事件参数op.id改为op.node.id。 + -v6在IE11点击链接时,event.preventDefault()不能阻止链接跳转(需要设置translate:false)。 + -v6在IE11下会给x-viewport添加样式-ms-overflow-x:auto;-ms-overflow-y:auto;,需要通过自定义CSS修正。 + -v6中点击按钮并禁用,会让页面上第一个输入框获取焦点,我们通过手工聚焦一个隐藏输入框来避免此问题。 + -表单验证失败的错误提示由[请为用户邮箱*提供有效值!]改为[用户邮箱 BR 请输入有效的邮箱地址!]。 + -关闭验证失败提示框后,第一个验证失败的输入框将获取焦点。 + -修正启用排序,但是默认不排序可能引起的JS错误(dongfanghong,柳黯花明,雨天不打伞)。 + -表格启用单元格编辑时,回发时不会改变行的Values和DataKeys属性,如果数据变化需要重新绑定。 + +增加配置项LoadingImageNumber,增加 30 种不同的页面加载动画。 + -增加示例:基本用法->配置信息->加载动画列表。 + -官网示例右上角增加[加载动画]设置项。 + -更新F.initTreeTabStrip函数,可接受初始对象参数,可以设置最大允许打开的选项卡数量。 + -更新F.addMainTab函数,可接受初始对象参数,更新官网示例首页调用代码。 + -增加配置项EnableFStateValidation(默认为true),对F_STATE进行服务器端验证,防止客户端篡改(8846)。 + -修正模拟树的表格只支持6级的问题(风摇曳了树-8878)。 + +更新官网示例单元格编辑示例中GetDeleteScript()函数,并放到PageBase中(不兼容提醒)。 + -ExtJSv6.2中模式弹出框会阻止事件传播,导致点击删除图标时不能选中单元格,所以一定要加上延迟! + + + ++2016-06-15 v4.2.4 + +表格增强。 + -修正选中不存在行时出错的问题(yygy-8066)。 + -修正删除当前选中的新增行时总是删除第一行的问题(lrjnew-8004)。 + -新增行之前先清空当前选中的单元格。 + -修正单元格编辑表格可能抛出错误undefined.getVisibleIndex(longlizhi-8415,蒙奇.D.二毛-8325)。 + +简化表格的分页和排序代码,不需要显式赋值操作(不兼容提醒)。 + -分页事件中不需要赋值代码:Grid1.PageIndex = e.NewPageIndex; + -排序事件中不需要赋值代码:Grid1.SortDirection = e.SortDirection;Grid1.SortField = e.SortField; + -删除表格ClearSelectedRowsAfterPaging属性,请使用ClearSelectionsBeforePaging属性。 + -更新示例:分页与排序->内存分页(跨页保持选中行);数据库分页(跨页保持选中行)。 + -表格列废除属性HtmlEncodeFormatString,请直接使用HtmlEncode属性。 + +表单增强。 + -修正按钮回发事件中不能禁用自己的问题(FighterLuo-8364)。 + -修正触发器输入框TriggerBoxUrl无效的问题,增加示例:表单控件->杂项->自定义触发器输入框图标。 + -增加示例:基本元素->日期控件(最小日期和最大日期);杂项->输入框文本居中。 + -增加示例:下拉列表控件->杂项->下拉列表(MatchFieldWidth,右侧空间不足)。 + -修正窗体控件在父页面弹出时不能最大化的问题(老鱼翁-7900)。 + -支持数据绑定到Dynamic对象集合(飘移-8423)。 + +为了方便在源代码视图书写ASPX文件,将部分可空类型转换为不可空类型。 + -表格列控件的TextAlign和HeaderTextAlign的类型:TextAlign? -> TextAlign。 + -表单字段的LabelAlign的类型:LabelAlign? -> LabelAlign。 + -官网示例中在PageBase中统一添加公共CSS样式文件,无需每个页面单独引用。 + -官网示例顶级菜单项加上图标。 + + + ++2016-01-04 v4.2.3 + -修正表格后台无法更新选中行的问题(丝路、black_shrimp-7649)。 + -更新表格控件->模板列->购物车示例,数量输入框只允许输入数字(揣兜-7654)。 + -官网示例首页树菜单增加提示信息,在NodeDataBound中进行处理。 + +树控件增强。 + -树节点增加CssClass属性,增加示例:树控件->杂项->节点样式。 + -树控件增加EnableTextSelection属性,增加示例:树控件->杂项->启用文字选择。 + -增加示例:树控件->杂项->同级节点只能展开一个;右键菜单(展开全部子节点)(揣兜-7653)。 + -增加示例:更多控件->手风琴控件->手风琴(禁用填充)。 + -修正RenderCheckField的失去焦点事件中得到e.RowIndex=-1的问题(叶子)。 + -修正在顶层页面弹出EnableIFrame的窗体控件,先关闭父页面后无法关闭弹出窗体的问题(7107135-7683)。 + -增加示例:更多控件->工具栏和菜单->工具栏布局(左中右)。 + -增加示例:表格控件->扩展列->行扩展列(嵌套表格)(spring2007-7668)。 + -修正不同域的IFrame中,在IFrame内弹出窗体时出现拒绝访问的问题。 + -修正在弹出窗体中使用ASP.NET的原生FileUpload控件时无法关闭窗体的问题(ζั͡ޓއއ人-7767)。 + -表格增加KeepCurrentSelection属性,增加示例:行选择->行选择(保持选中行)(cubealex、shihahayue-7861)。 + -修正res.axd导致的安全漏洞(cnblogs.com/dotnet-org-cn/p/5089924.html)。 + + + ++2015-11-09 v4.2.2 + -官网示例总数突破300个! + -更新示例,如果PageManager定义了AutoSizePanelID属性,则去除页面的CSS定义:body.f-body。 + -修正自定义提示对话框图标无效的问题(莮亾-7615)。 + -Alert、Confirm增加CssClass属性。更新示例:杂项->消息框->自定义对话框图标。 + +表格增强。 + -单元格编辑表格重新绑定数据时,先取消当前活动的编辑器(andyxjy2-7559)。 + -单元格编辑表格底层传输数据优化(不兼容提醒!),将修改和删除数据合并,由原来的:[[1,0,{"AtSchool":false}]] + 改为:[{"index":1,"originalIndex":0,"id":"record-3","values":{"AtSchool":false},"status":"modified"}]。 + -为FieldType增加枚举类型Double(精度为15~16),Float的精度为6~7。 + +一个函数获取单元格编辑的全部内容(GetMergedData),包含新增、删除、修改的数据。 + -新增示例:单元格编辑->新增删除->新增行与删除行(GetMergedData)。 + -表格增加DataIDField属性,GridRow增加RowID属性。 + -表格服务器事件参数增强,主要是增加RowID属性,并和之前兼容。 + -将GetDeleteSelectedReference标识为已过时,请使用GetDeleteSelectedRowsReference。 + +为GetAddNewRecordReference增加重载函数,可以指定增加行后进入编辑状态的列。 + -增加示例:单元格编辑->新增删除->新增行(定位到某一列)。 + -增加示例:单元格编辑->结束编辑->结束编辑(姓名不能为空);结束编辑(高亮单元格);结束编辑(更新单元格的值); + 结束编辑(更新非可编辑单元格的值)。 + +SelectedCell的数据类型由int[]改为string[](不兼容提醒!)。 + -更新示例:单元格编辑->新增删除行->服务器端删除行。 + -增加示例:单元格编辑->结束编辑->结束编辑(绑定数据后选中单元格)。 + -增加属性SelectedRowIDArray、SelectedRowID。 + -增加属性EnableRowDeselectEvent,更新示例:事件->行选中事件(取消选中事件)。 + -表格列增加MinWidth,增加示例:列宽度->自适应列(多列);各列宽度自适应(最小列宽度)。 + -表格增加EnableColumnResize属性,增加示例:标题栏菜单->隐藏标题栏;禁用表头菜单。 + +优化导出文件的脚本。 + -__doPostBack第一个参数指定是否AJAX请求,例如:__doPostBack(false, '', 'Confirm_OK')。 + -JS变量F.control_enable_ajax更名为F.controlEnableAjax(不兼容提醒!)。 + -GetCustomEventReference第一个参数指定是否AJAX请求,例如:GetCustomEventReference(false, "Confirm_OK")。 + -更新示例:杂项->消息框->响应确定按钮(点击确定按钮后,下载文件);响应确定按钮(点击确定按钮后,先隐藏窗体再下载文件); + 响应确定按钮(点击确定按钮后,先隐藏IFrame窗体再下载文件)。 + -增加示例:表格控件->导出与下载->导出文件(双击下载);杂项->消息框->自定义对话框按钮文本。 + +表单增强。 + -增加配置项:FormRowItemsSpace(表单行子项之间的间距,默认为8px,对应于Form的FormRowItemsSpace属性)。 + -Form控件重构,FormRow作为面板渲染到客户端,可以显示隐藏。 + -Form中的表单元素响应Tab键时横向跳转,更加符合用户习惯(之前是纵向跳转)。 + -更新示例:表单控件->杂项->隐藏表单字段;禁用与只读。 + -增加示例:表单布局->标签文本水平居中;表单中的多行按钮; + -增加示例:杂项->自定义标签宽度和位置;标签换行;ColumnWidths混合使用百分比和固定宽度。 + + + ++2015-10-22 v4.2.1 + +修正部分IE11下出现的JS错误。 + -无法获取未定义或null引用的属性 ext-quicktips-tip_header-overflowPadderEl(baolin1389、♂♂LOVE、meng)。 + +仅对表格内存分页有部分影响(不兼容提醒!)。 + -表格属性SelectedRowIndex、SelectedRowIndexArray指的是在当前分页中的索引(和之前兼容,无需修改)。 + +表格所有其他地方的RowIndex指的是在全部数据源中的索引(和之前不兼容,需要注意)。 + -所有表格事件参数RowIndex属性,包括GridAfterEditEventArgs、GridRowClickEventArgs等。 + -获取单元格编辑修改值grid1.GetModifiedDict,以及删除的行GetDeletedList。 + -表格行实例的RowIndex属性。 + -CheckBoxField的函数GetCheckedState的参数。 + -增加示例:杂项->拦截服务器端重定向(模拟登陆超时,同步确认对话框);(同步确认对话框)。 + -客户端函数F.alert、F.confirm参数调整,接受options对象参数。 + -修正日期控件的星期中文缩写错误的问题(dzvane-7271)。 + -修正新增的行无法清空的问题(tyarist-7284)。 + -新增示例:表格控件->单元格编辑->多行文本输入框。 + -面板标题可以为空字符串。 + +为面板增加MinHeight、MinWidth、MaxHeight、MaxWidth属性。 + -增加示例:更多控件->面板与窗体->窗体(限制最小和最大尺寸)。 + -表单字段增加LabelAlign属性。 + -增加示例:页面布局->布局(VBox,折叠面板);布局(HBox,横向表单);布局(VBox,表单); + 布局(VBox,折叠面板);布局(VBox,纵向滚动条);布局(VBox,自动高度);布局(VBox,表单与表格,纵向滚动条); + 布局(HBox,横向滚动条);布局(HBox,自动高度);布局(HBox,自动高度,多层嵌套); + 布局(Table,Table布局的表单);布局(Column,纵向滚动条);布局(Column,自动高度)。 + -启用单元格编辑的表格调用DataBind时会重新加载数据(客户端新增的行也会被清除)。 + -增加示例:更多控件->面板与窗体->窗体(固定最大化)。 + -增加示例:更多控件->工具栏和菜单->工具栏上的表单字段。 + -增加示例:表单控件->下拉列表控件->下拉列表(默认为空);事件->下拉列表(自动回发); + 下拉列表(自动回发,可编辑,强制选择);下拉列表(不自动回发,定义了回发事件); + 下拉列表(多选,自动回发,可编辑,强制选择)。 + + + + ++2015-05-20 v4.2.0 + -增加示例:更多控件->面板与窗体->同时打开多个窗体。 + -增加示例:第三方组件->jQueryUI Autocomplete->内联数据(位于Window控件中)。 + -增加示例:更多控件->工具栏与菜单->工具栏上的图片(固定宽度);工具栏上的图片(动态调整)。 + -修正删除不存在的选项卡时可能出现的错误(揣兜-7085)。 + +表格增强。 + -增加示例:行与列样式->行样式(数据库分页);行样式(内存分页);列样式。 + -增加示例:序号列->序号列(靠左显示)(dennisliu)。 + -更新示例:杂项->文本居中显示(标题靠左)。 + -增加示例:事件->行内按钮事件(内存分页);行内按钮事件(数据库分页)。 + +修正一直存在的一个隐藏问题。 + -此问题仅在用户多次快速点击页面上的回发按钮,并且网速比较慢时才可能会出现。 + -关于如何重现本问题以及内部原因,请搜索论坛 - 验证视图状态MAC失败。 + -修正多选下拉列表取消某项选中时出现的JS错误(uykonxu、揣兜-7053)。 + -增加示例:杂项->捕获全局JavaScript错误。 + -删除PageLoading控件,为PageManager增加PageLoadingImageUrl属性。 + -优化官网示例首页[仅显示最新示例]逻辑,仅在叶子节点定义IsNew属性。 + -增加客户端函数F.cookie和F.removeCookie,在前端处理官网首页配置菜单的点击事件。 + -修正选项卡标题中放置红色[New!]时,底部出现的一行空白线。 + -优化官网示例首页样式。 + + + ++2015-02-03 v4.1.6 + -增加示例:表格控件->导出与下载->导出文件(FindControl,查找模板列中控件)。 + -增加示例:表格控件->导出与下载->导出文件(多表头)。 + -修正下拉列表数据绑定后在第一个位置插入项,而最终选中的非第一项的问题。 + -修正下拉列表在没有数据项时,可能会触发SelectedIndexChanged事件的问题。 + -BoxLayoutAlign的默认值由Start改为Stretch。 + -增加示例:更多控件->选项卡控件->选项卡的位置。 + -更新示例:表单控件->杂项->禁用与只读。 + -修正AutoSizePanelID的面板中Submit按钮回车无效的问题(Ward_Lee)。 + +支持一个面板拥有多个工具栏。 + -增加示例:更多控件->工具栏与菜单->多行工具栏。 + -增加示例:表格控件->分页与排序->数据库分页(底部工具栏)。 + +重构表单改变确认对话框(不兼容提醒!)。 + -删除Window控件的EnableConfirmOnClose属性,以及GetConfirmHideReference类似的5个方法。 + -删除ActiveWindow中GetConfirmHideReference类似的5个方法。 + -增加配置项EnableFormChangeConfirm,启用表单改变确认对话框(默认为false)。 + -为面板控件增加GetClearDirtyReference方法,用来清空面板内表单字段的改变状态。 + -更新示例:内联框架->窗体关闭前的确认对话框;保存按钮放在窗体工具栏中。 + + + ++2014-11-14 v4.1.5 + +F.util.addMainTab函数在指定refreshWhenExist参数时也要更新标题(舞柯庶)。 + -更新示例:杂项->向父页面添加选项卡。 + -页面回发时如果脚本出错,不再弹出出错对话框,有助于快速定位错误。 + -新增示例:表格控件->单元格编辑->行扩展列与单元格编辑/行扩展列与新增删除行。 + -新增示例:导航控件->面板与窗体->窗体与表单。 + -修正下拉列表(可编辑、不强制选择)清空内容后,后台依然可以获取SelectedItem的问题。 + -下拉列表控件增加EmptyText属性并更新相关示例。 + -修正下拉列表后台绑定后SelectedIndex返回-1的问题(yezie、brawei)。 + -修正ShowLabel=false时,表单验证失败对话框消息中缺失字段标签字符串,更新示例:表单控件->表单布局->自定义表单布局。 + -修正NextFocusControl是按钮出错的问题,增加示例:基本用法->登录页面(回车导航)(ZZZzzz)。 + +修正多选下拉列表启用自动回发时,取消最后一个选中项不会自动回发的问题(偶然那么一次)。 + -新增示例:表单控件->下拉列表控件->多选->下拉列表(自动回发)。 + + + ++2014-09-22 v4.1.4 + -修正TriggerBox先禁用再启用后不能触发TriggerClick事件的问题(飘移-2870)。 + +下拉列表增加MatchFieldWidth属性,可设置弹出框和字段宽度不同。 + -增加示例:表单控件->下拉列表控件->下拉列表(MatchFieldWidth)。 + -废除Region的Split和Position,请使用RegionSplit和RegionPosition属性。 + -增加页面底部区域,显示版本和版权信息。 + -修正表格在RecordCount=0时获取PageIndex出错的问题(userlm-6302)。 + -修正表格AllowPaging=true,并且数据源为空出错的问题(tlxyniu、hroger-6289)。 + -修正在母版页内容中放置Window控件,在页面回发时出错的问题。 + -增加示例:表格控件->扩展列->全选列(单选)。 + +Tree增加PreNodeDataBound事件。 + -增加类TreePreNodeEventArgs,其Cancelled属性用来取消添加当前树节点。 + -GridPreRowEventArgs增加Cancelled属性,作用同上。 + -官网主框架增加[仅显示最新示例]菜单项。 + -增加示例:表格控件->事件->行预绑定事件(Cancelled属性)。 + +修正通过服务器端脚本关闭当前标签页可能出现的JS错误(xtb_sp-6277)。 + -在IE11出现错误[无法获取未定义或 null 引用的属性 callback]。 + -更新示例:杂项->向父页面添加选项卡。 + + + ++2014-09-09 v4.1.3 + +母版页支持。 + -增加新控件CPHConnector(ContentPlaceHolder)。 + +增加三个示例,演示布局、接口以及动态加载在母版页中的运用: + -杂项->母版页->树(布局)。 + -杂项->母版页->表格(布局、接口与动态加载)。 + -杂项->母版页->表格与表单(布局、接口与动态加载)。 + -修正UMEditor在从全屏恢复时滚动条消失的问题(Gnid-6187)。 + +窗体控件增强。 + +增加子窗体关闭后调用父页面JS函数的方法(txw999-6022)。 + -分别为ActiveWindow和Window增加GetHideExecuteScriptReference方法。 + -增加示例:内联框架->新窗口中选择省份(GetHideExecuteScriptReference)。 + -窗体的Width和Height属性更新为AJAX属性,可以在后台改变 + +修正在父页面弹出窗体时无法通过设置Title属性来改变标题的问题(舞柯庶-6031)。 + -更新示例:内联框架->回发父页面(改变属性或者注册脚本)。 + -HyperLinkField的DataNavigateUrlFieldsEncode属性已废除,请替换为UrlEncode属性。 + +为ControlBase增加Listeners属性,方便设置控件的客户端事件处理函数,同时更新如下示例: + -表格控件->复选框列->全选复选框列(客户端实现)。 + -表格控件->杂项->右键菜单(全选复选框)。 + -杂项->自定义回发(__doPostBack)。 + -杂项->自定义回发(F.customEvent)。 + -杂项->文本框改变客户端事件。 + -修正行扩展列无法显示隐藏的问题(zy32002-6195)。 + -为Grid增加ShowPagingMessage,并更新示例:表格控件->分页与排序->数据库分页。 + -增加示例:导航控件->工具栏与菜单->内联菜单(HideOnClick)。 + -表格的PageIndex有效性检查,更新示例:表格控件->分页工具条->改变每页记录数。 + + + ++2014-08-29 v4.1.2 + -修正树控件的EnableIcons属性无效的问题。 + -为树控件增加NodeDataBound事件,并增加示例tree/tree_nodedatabound.aspx。 + -修正F.util.initTreeTabStrip不处理父节点打开新标签页的问题。 + -修正更新未打开选项卡IFrame地址出错的问题(xxdddail-6107)。 + -修正选项卡非激活ContentPanel面板内容在外部显示的问题(张海-6011)。 + -修正页面上只有一个input[type=text]时,回车键会默认提交表单的问题(隨風往事-6128)。 + -表格增加EnableRowLines属性,增加示例:表格控件->杂项->隐藏表格标题栏。 + -修正单选框列表和复选框列表默认设置ReadOnly=true无效的问题(mark_01-6160)。 + -修正日期字段为DBNull.Value时导致RenderField绑定出错的问题。 + -修正表格的[改变行背景色]示例在显示隐藏列时行背景色消失的问题(robsun-6162)。 + +下拉列表增强。 + +增加AutoSelectFirstItem属性,如果设置为false,则下拉列表可以默认为空。 + -更新示例:表单控件->下拉列表控件->杂项->重置表单。 + -可以使用Required属性做客户端验证,从而减少为下拉列表添加默认项[--请选择--]的麻烦。 + -可多选,增加属性EnableMultiSelect、MultiSelectSeparator。 + -增加示例:表单控件->下拉列表控件->多选下拉列表->多选。 + -增加示例:表单控件->下拉列表控件->多选下拉列表->多选(可过滤,强制选择)。 + + + ++2014-08-15 v4.1.1 + -修正Form中表单字段设置宽度无效的问题(李明海-5929)。 + -为TemplateField增加ExpandOnDoubleClick、ExpandOnEnter、ExpandToSelectRow三个属性(LZOM-5932)。 + -BodyPadding支持纯数字形式,类似“5”“5 10”,之前只支持带单位的形式“5px”“5px 10px”。 + -修正TriggerBox在EnableEdit=false的情况下,点击文本输入框不能触发的问题(Jango_Jing-5450)。 + -修正可编辑单元格未定义DataKeyNames的情况下可能出现的错误(yygy-6002)。 + -修正下拉列表在数据重新加载后没有更新选中值的问题(Gnid-6018)。 + -确保PageManager在指定AutoSizePanelID的情况下,其初始化脚本在用户自定义脚本之前执行(yygy-6008)。 + -将FState的相关操作放在页面初始化完毕后,防止出现与动态创建控件相关的问题(隨風往事-5925)。 + -修正树节点的OnClientClick中包含return语句可能引起的错误(FineUserSG-6042)。 + -修正Confirm对话框标题无效的问题(小豬仔-5987)。 + -表格的行扩展列支持,并增加6个相关示例。 + + + ++2014-07-21 v4.1.0 + -渲染到页面上的按钮,其外部容器display默认为inline-block。 + -示例grid/grid_iframe_window.aspx减少两个Panel,实现和之前一样的效果。 + +反射获取对象属性时,不仅包含public属性,而且包含private, internal属性。 + -指定参数BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic。 + +修正普通回发时主题丢失问题。 + -重现步骤:选择Blue主题,打开aspnet/aspnet.aspx,点击“4.ASP.NET按钮”,页面回到默认的Neptune主题。 + -增加示例other/keydown.aspx。 + -为ControlUtil.FindParentControl增加重载方法,用来处理继承关系。 + -为ControlBase的GetPostBackEventReference增加重置函数,指定是否返回启用AJAX的脚本。 + -更新示例iframe/passvalue_iframe.aspx,增加父窗口向子窗口传值。 + -GroupPanel的默认布局由Container改为Anchor。 + -修正输出页面的X-UA-Compatible标签错误(zjfeiye-5803)。 + -将icon目录移到res目录内部。 + -修正打开包含IFrame的Window的过程中按下ESC键时,可能出现弹出框的问题(tucq168-5858)。 + -Tree的EnableArrows属性默认为true。 + -修正MenuCheckBox总是回发的问题,也即AutoPostBack设置无效。 + +表单增强。 + -Web.config和PageManager中FormOffsetRight的默认值从5px改为0px。 + -Form控件中非最后一列的右侧空白默认为5px。 + -修正定义在Form,SimpleForm上的OffsetRight、LabelSeparator无效的问题。 + -增加示例form/form_disabled.aspx,将所有表单字段禁用、设置只读、应用无效标识。 + -Form控件启用Items属性,Layout属性默认为Anchor,可以自行设置(之前为只读属性)。 + -如果父控件的布局不是Anchor,则表单字段忽略OffsetRight属性(也即渲染到客户端的anchor属性)。 + -更新示例form/layout_panel2.aspx。 + -增加示例form/layout_contactus.aspx,演示用VBox和HBox进行复杂的表单布局。 + -增加示例form/layout_checkout.aspx,演示用Form和GroupPanel制作更加复杂的表单。 + -示例dropdownlist/shengshixian.aspx重构。 + -修正FileUpload无法显示图标的问题,更新示例form/fileupload_autopostback.aspx。 + +表格增强。 + -增加简单购物车示例(grid/grid_edit_cart.aspx)。 + -增加示例grid/grid_rowcommand_download.aspx,以便在表格行内下载文件。 + -增加示例grid/grid_summary_scrollbar.aspx,演示绝对定位合计行与横向滚动条同时存在的情况。 + -GridRow的Values属性类型更改为object[]。 + -删除示例grid/grid_edit_save_manual.aspx。 + -重构示例grid/grid_edit_save_auto.aspx,客户端更新表格行对应的表单,定时保存全部数据并显示提示信息。 + +单元格编辑表格增强。 + -可编辑单元格和CheckBoxField同时存在时,出现BackupPostDataProperty中无法添加相同键的问题(ji78-5797)。 + -修正日期列在不进行修改即退出编辑状态后,显示左上角的已修改标识的问题。 + +返回后台的日期字段为字符串是格式化后的(类似2014-07-20,而不是之前的2003-09-01T00:00:00)。 + -修改后台的处理代码DateTime.Parse(rowDict["EntranceDate"]).ToString("yyyy-MM-dd"),直接使用rowDict["EntranceDate"]。 + -修正重新绑定数据后,仍然显示左上角已修改标识的问题(zjfeiye-5779)。 + -Grid的GetNewAddedList函数返回类型更改为List<Dictionary<string, object>>。 + -Grid的GetModifiedDict函数返回类型更改为Dictionary<int, Dictionary<string, object>>。 + +比如入学年份列标签定义了DataField=EntranceYear,FieldType=Int,那么后台拿到修改值就是整形值,无需再做转换。 + -rowData["AtSchool"]=Convert.ToBoolean(rowDict["AtSchool"]);可以更改为:rowData["AtSchool"]=rowDict["AtSchool"]; + -修正NumberBox的NoNegative属性无效的问题(yezie-5789)。 + +删除无效或者重复的属性。 + -删除TabStrip的属性EnableTitleBackgroundColor、EnableDeferredRender。 + -删除Window的属性Plain。 + -删除ToolbarPosition的枚举类型Footer、Buttons,这两个都用Bottom枚举类型代替。 + -删除Region上的Margins属性,删除BoxComponent上的BoxMargin属性,这两个都可以使用Margin属性代替。 + -修正用户控件中使用NextFocusControl时定位错误的问题(牙膏人-5835)。 + +第三方编辑器示例重构。 + -删除FCKEditor的示例。 + -CKEditor的示例不再使用ASP.NET控件,而是直接调用JS。 + -增加TinyMCE和UMEditor的示例。 + -更新ueditor/ueditor.aspx示例,删除难以理解的jQuery Promise,使用简单的处理方式。 + -更新ueditor/ueditor_two.aspx示例,使用Form的自定义布局,而不是原始的table标签。 + -修正树控件绑定为空值无效的问题,更新示例tree/databind/tree_document.aspx(IT刀客)。 + + + ++2014-05-11 v4.0.6 + -修正下拉列表禁用时提交数据错误的问题(惘思)。 + +修正顶部菜单框架(右侧选项卡)在多次点击头部菜单后,出现“不能执行已释放 Script 的代码”的错误(failist)。 + -IE的问题:外部页面使用已关闭IFrame页面的数据(或回调)时发生。 + -修正方法是将initTreeTabStrip的调用放在父页面,如此以来mainTabStrip的回调存在于父页面,而非已关闭IFrame。 + -使用google-code-prettify对示例源代码进行着色。 + -添加到页面上的主题样式类由theme-neptune改名为f-theme-neptune。 + +树控件增强。 + -TreeNode的AutoPostBack改名为EnableCheckEvent,EnablePostBack改名为EnableClickEvent。 + -NodeExpand事件改名为NodeLazyLoad,TreeExpandEventArgs改名为TreeNodeEventArgs。 + -TreeNode增加属性EnableExpandEvent和EnableCollapseEvent,Tree增加事件NodeExpand和NodeCollapse。 + -增加示例tree/tree_expand.aspx,更新示例tree/tree_ajax.aspx。 + -支持Server.Transfer,需要设置EnableAjax=false(chwentao)。 + -修正TriggerBox的TriggerIcon无效的问题。 + +增加FineUI与My97DatePicker整合的示例(aspnet/my97.aspx)。 + -自定义皮肤neptune,以便和FineUIv4.x的Neptune主题兼容。 + -修正UserControlConnector无效的问题。 + +为面板Panel、Tab、Region、GroupPanel、AccordionPane、Window增加Content属性。 + -可以在一定程度上避免使用ContentPanel,从而减少页面层次结构,加快页面渲染速度。 + -更新示例window/window.aspx、default.aspx。 + +为FileUpload控件增加AcceptFileTypes属性,控制默认显示的文件类型(六月寒)。 + -更新示例form/fileupload_toolbar.aspx。 + +表格中模板列的CSS类名由x-grid-tpl更改为f-grid-tpl。 + +为Component增加Margin属性。 + -删除Region上的Margins属性,请使用新增的Margin属性。 + -删除BoxComponent上的BoxMargin属性,请使用新增的Margin属性。 + +Layout枚举值Border改名为Region,为BoxComponent增加RegionPosition和RegionSplit两个属性。 + -普通的面板也支持Region布局,可以在一定程度上减少页面上的层次结构。 + -更新示例iframe/topmenu4/default.aspx。 + -为Web.config和PageManager增加IEEdge属性(在IE浏览器中使用最新的渲染模式),默认为true(⑥阿太⑥)。 + -新增三列面板示例layout/column.aspx(binbin)。 + -修正Alert对话框与ActiveWindow.GetHidePostBackReference冲突的问题(wlj928449657)。 + + + ++2014-03-03 v4.0.5 + -修正表格在AJAX更新时加载慢的问题。 + -修正表格在分页和排序同时存在,分页时会发送两次AJAX请求的问题(Gunu40)。 + -修正表格在特殊情况下出现getEditor未定义的错误(yygy)。 + -修正示例form/layout_panel.aspx的布局错位(隨風往事、死水沼泽)。 + -修正合计行在Blue主题下的样式问题(yygy)。 + -修正示例form/layout_panel2.aspx的布局错位。 + -修正basic/login_captcha.aspx的布局错位。 + -修正复选框列表的标签分隔符为半角冒号的问题(highong)。 + -确保EnableIFrame=false时Target只能为Self。 + -为CheckItem、RadioItem、ListItem增加可以设置是否选中的构造函数(五四)。 + + + ++2014-02-28 v4.0.4 + -为Neptune主题下的工具条添加背景色(szjazz)。 + -树控件增加EnableSingleClickExpand属性,实现单击展开树节点功能(erp8@live.cn)。 + -修复手风琴控件首次加载后无法获取展开状态的问题(asdfsdgd)。 + +将在线示例的设置按钮移到左侧面板的顶部。 + -演示如何使用JS为面板添加工具图标。 + -演示如何使用JS来显示上下文菜单。 + +修正表格无法多选的问题。 + -更新示例grid/grid_checkboxfield_rowcheckall.aspx。 + -增加示例grid/grid_checkboxfield_rowcheckall_clientside.aspx。 + -增加示例grid/grid_checkboxfield_rowcheckall_contextmenu.aspx,演示如何在表格中使用右键菜单。 + +面板增加展开折叠事件(asdfsdgd)。 + -增加EnableCollapseEvent属性和Collapse事件。 + -增加EnableExpandEvent属性和Expand事件。 + -增加示例window/panel_collapse.aspx。 + +Accordion增强(asdfsdgd)。 + -修正Accordion的EnableFill,ShowCollapseTool等属性失效的问题。 + -ActiveIndex改名为ActivePaneIndex,并更新为AJAX属性。 + -增加属性AutoPostBack和PaneIndexChanged事件。 + -更新示例accordion/accordion.aspx。 + -增加示例accordion/accordion_autopostback.aspx。 + -为Button增加MenuID属性,增加示例button/button_menu_menuid.aspx。 + -修正页面第一次加载时Window控件遮挡Alert对话框的问题。 + -修正无法修改表单字段Label的问题。 + +删除所有之前版本标记为废除的方法和属性。 + -PanelBase: EnableBackgroundColor + -Calendar: EnableDateSelect + -PageManager: HideScrollbar + -DatePicker: EnableDateSelect + -TimePicker: EnableTimeSelect + -Window: Popup + -Grid: AutoPostBack, EnableRowSelect, EnableRowDoubleClick, EnableRowClick, GetSelectCountReference + -GlobalConfig: GetDefaultBackgroundColor + -修正IE8下无法上传文件的问题(猫咪君、asdfsdgd)。 + -修正Window控件不支持EnableAjax的问题,增加示例grid/grid_excel_selectcolumns.aspx(◆◇_提拉米苏℡)。 + -将控件的Visible属性设为只读,如果想隐藏控件并在随后的请求中显示出来,请使用Hidden属性。 + -修正tabstrip/tabstrip_addtab.aspx示例中相同ID可以多次添加的问题(春节)。 + -修正删除选中树节点后重新绑定出错的问题(Panda)。 + -修正aspnet/fckeditor.aspx示例无法获取用户输入值的问题(xie_g_j)。 + -添加extjs缺少提醒,避免初学者走弯路。 + + + ++2014-01-20 v4.0.3(beta) + -修正表格动态创建列与模板列的冲突问题,增加示例grid/grid_excel_dynamic_columns.aspx(气人号-4586)。 + -配置项ExtjsBasePath改名为JSBasePath,控件标签前缀由x改名为f,配置项删除不再使用的ResourceHandler。 + -子窗口向父窗口传值错误(小兵、水+木-4591)。 + -修正没有项目的下拉列回发时会触发SelectedIndexChanged事件的问题(purplebolt-4571)。 + -修正在父页面弹出的窗体在显示时加载两次的问题(Gunu40-4725)。 + -更新示例form/textbox_autopostback.aspx,增加示例grid/grid_summary2.aspx。 + +表格增强。 + -单元格编辑支持。 + -更新之前的6个示例; + -新增示例grid/grid_editor_cell_databind.aspx,演示在后台绑定可编辑表格中的下拉列表。 + +修正向表格末尾添加行时,不能默认选中第一个单元格的问题(奋斗~-4658)。 + -更新示例grid/grid_editor_cell_new.aspx和grid/grid_editor_cell_new_delete.aspx。 + +为PageManager增加CustomEvent事件。 + -为PageManager增加ValidateForms、ValidateTarget、ValidateMessageBox属性。 + -为PageManager增加重载方法GetCustomEventReference。 + -为Window增加重载方法GetIFrameCustomEventReference方法。 + -更新示例iframe/window2.aspx,在保存之前首先验证IFrame中的表单。 + -增加示例other/confirm_cancel2.aspx,演示如何在后台响应确认对话框的确定和取消按钮事件。 + +根据网友反馈,删除Form和SimpleForm的SubmitButton属性,恢复按钮的Type属性(Submit/Reset)。 + -尽管新版ExtJS不支持按钮的Submit属性,我们还是手工实现,为了和正常的HTML表单兼容。 + -更新示例basic/login.aspx和basic/login_captcha.aspx。 + + + ++2014-01-20 v3.3.3 + -下拉列表ForceSelection默认值保持为true,否则对现有项目影响很大(蓝色天空-4381)。 + -下拉列表在页面第一次加载时出现错误提示(牙膏人-4390)。 + -修正在父页面弹出的窗体在显示时加载两次的问题(Gunu40-4725)。 + -修正表格动态创建列与模板列的冲突问题,增加示例grid/grid_excel_dynamic_columns.aspx(气人号-4586)。 + +新增示例grid/grid_editor_cell_databind.aspx,演示在后台绑定可编辑表格中的下拉列表。 + -注意与模板列中的下拉列表的后台绑定对比:grid/grid_edit_dropdownlist2.aspx。 + +修正向表格末尾添加行时,不能默认选中第一个单元格的问题(奋斗~-4658)。 + -更新示例grid/grid_editor_cell_new.aspx和grid/grid_editor_cell_new_delete.aspx。 + + + ++2013-12-14 v4.0.2(beta) + +表格合计行重构。 + -增加属性EnableSummary、SummaryData、SummaryPosition。 + -增加示例grid/grid_summary.aspx、。 + +增强品牌意识。 + -客户端库简称 X 统一改为 F。 + -服务器控件标签前缀由 x 统一改为 f。 + -自定义CSS、JavaScript前缀由 x_ 或者 box- 统一改为 f_ 或者 f- 。 + +客户端事件由函数定义形式改为传入回调函数。 + -函数onReady更改为F.ready(fn)。 + -函数onAjaxReady更改为F.ajaxReady(fn)。 + -函数X.util.beforeAjaxPostBackScript更改为F.beforeAjax(fn)。 + -删除PageManager的ExecuteOnReadyWhenPostBack属性。 + -更新需要JavaScript参与的示例,DOM相关操作改为jQuery实现。 + -增加示例grid/grid_edit_enterkey_v.aspx,演示如果使用回车键遍历表格中所有文本框(⑥阿太⑥)。 + -更新X.util.addMainTab方法,如果refreshWhenExist为true,则尝试更新iframe的url,而不是调用location.reload(KITTEN-4293)。 + -如果面板的EnableIFrame为true,则忽略Items属性(purplebolt)。 + -为窗体控件的GetShowReference增加重载方法,可以在打开窗体时指定宽度和高度(黑冰.cn)。 + -修正Can not add property X_Rows_GZ to Newtonsoft.Json.Linq.JObject(今夕何夕、treedun、欧志辉)。 + -增加示例iframe/topmenu4/default.aspx,演示IFrame中的树如何与父窗口中的选项卡控件交互(wolkai-4386)。 + -修正IE8下数组不支持indexOf方法的问题。 + -IE10下示例页面顶部背景空白(奋斗~-4173)。 + -IE9/10下自定义按钮的图片显示不了(奋斗~-4197)。 + -包含日期控件的页面回发时出错(奋斗~-4172)。 + -选项卡示例中的多行文本框在IE7下没有展开(奋斗~-4198)。 + -多行显示补全数据示例问题(慧信-4180)。 + -示例站点Cookie冲突导致无法访问(石头oswica-4182)。 + -主题为Access时,表格的序号列背景色异常(死水沼泽-4183)。 + -最大化窗体不能响应浏览器窗口大小改变事件(老白杨-4403)。 + -删除行布局(吉吉﹑-4200)。 + +多表头问题(吉吉﹑-4242)。 + -表格的ForceFitAllTime改名为ForceFit,此属性暂时不能和多表头一起使用。 + +按钮的Type=Submit无效(Herb-4192)。 + -删除Button的Type属性,为SimpleForm和Form控件增加属性SubmitButton。 + -更新示例basic/login.aspx和form/form_reset.aspx。 + +关闭窗体之前,检查窗体IFrame内表单是否已经改变,如果已经改变则弹出是否关闭的确认对话框以防止用户录入数据丢失。 + -窗体启用EnableConfirmOnClose,EnableIFrame。 + -窗体IFrame里面的关闭按钮通过ActiveWindow.GetConfirmHideReference等函数注册客户端事件。 + -更新客户端函数F.wnd.getActiveWindow,直接返回窗体对象,浏览器窗口对象可以通过F.wnd.getActiveWindow().window来获取。 + -窗体增加GetIFramePostBackEventReference函数,用来回发窗体内的IFrame页面。 + -增加示例iframe/window.aspx和iframe/window2.aspx,演示如何使用窗体关闭确认对话框,并且第一次将保持按钮放在窗体的工具栏中。 + -窗体控件的IsModal属性无效(purplebolt-4209)。 + -删除面板的FooterBarAlign属性,为Toolbar控件增加ToolbarAlign属性(可能需要为Footer工具栏设置ToolbarAlign="Right")。 + -修正动态创建模板列无法导出的问题(hroger-4584)。 + + + ++2013-11-21 v3.3.2 + -修正IE7/IE8下表格的日期列显示错误,IE不能正确解析Date.parse('2015-10-01')(夏雨雪)。 + -修正表格中模板列在数据绑定时可能不更新的问题(小兵、舞柯庶、蒙奇.D.二毛、李明海)。 + +更新示例grid/grid_pageitems_pagesize.aspx和grid/grid_pageitems_pagesize_database.aspx。 + -在更改每页显示数目(PageSize)时,防止PageIndex越界。 + -UEditor更新为1.2.6.1。 + -增加自定义图片按钮示例button/button_custom.aspx(簫今Shawgin)。 + +修正Collapsed属性在客户端改变后状态同步问题。 + -重现步骤:window/group_panel.aspx示例,折叠分组面板二,点击下面的按钮,不能展开分组面板二。 + +修正树控件的SelectedNodeIDArray属性在客户端改变后状态同步问题。 + -重现步骤:tree/checkbox/tree_checkall.aspx示例,选中驻马店,点击河南省,则驻马店没能保持选中状态。 + -修正TimerPicker无法赋值的问题(隨風往事、凤凰涅盘ing)。 + -修正表格列绑定的数据库字段值为空时出错的问题(欧志辉)。 + -修正引入样式文件的标签笔误,应为type=text/css(是梦~`)。 + -DropDownList的ForceSelection属性默认为false,更新示例dropdownlist/dropdownlist_forceselection.aspx。 + -更新X.util.addMainTab方法,如果refreshWhenExist为true,则尝试更新iframe的url,而不是调用location.reload(KITTEN)。 + -如果面板的EnableIFrame为true,则忽略Items属性(purplebolt)。 + -为窗体控件的GetShowReference增加重载方法,可以在打开窗体时指定宽度和高度(黑冰.cn)。 + -修正Can not add property X_Rows_GZ to Newtonsoft.Json.Linq.JObject(今夕何夕、treedun、欧志辉)。 + + + ++2013-10-28 v4.0.1(beta) + +修正面板的Collapsed属性在客户端改变后状态同步问题。 + -重现步骤:window/group_panel.aspx示例,折叠分组面板二,点击下面的按钮,不能展开分组面板二。 + +修正树控件的SelectedNodeIDArray属性在客户端改变后状态同步问题。 + -重现步骤:tree/checkbox/tree_checkall.aspx示例,选中驻马店,点击河南省,则驻马店没能保持选中状态。 + -修正TimerPicker无法赋值的问题(隨風往事、凤凰涅盘ing)。 + -修正表格列绑定的数据库字段值为空时出错的问题(欧志辉)。 + -修正引入样式文件的标签笔误,应为type=text/css(是梦~`)。 + -MsgTarget改名为MessageTarget,增加项None。 + -FormOffsetRight的默认值由20px改为5px。 + -为Web.config和PageManager增加FormLabelAlign配置项。 + -ToolbarPosition增加Left/Right。 + -删除Web.config中的配置项EnableBigFont。 + -删除PanelBase的EnableBackgroundColor和EnableLargeHeader属性。 + -删除Component的FormItemClass和ContainerClass属性。 + -ExtJS的CheckboxGroup的setValue和getValue方法和之前不兼容,已更新相关示例form/checkboxlist.aspx。 + -ExtJS_v4.2和之前版本对change事件的处理不同。 + -FineUI_v4中的文本输入框或者日期选择器,AutoPostBack使得TextChanged事件立即触发(输入单个字符串和选择日期后)。 + -FineUI_v3中的文本输入框或者日期选择器,AutoPostBack使得TextChanged事件在输入框失去焦点后触发。 + -为了在FineUI_v4中实现之前的失去焦点后触发的事件,为文本输入框增加EnableBlurEvent属性和Blur事件。 + +DropDownList更新。 + -默认可以为空,方便使用Required属性做客户端验证,示例form/form.aspx。 + -ForceSelection属性默认为false,更新示例dropdownlist/dropdownlist_forceselection.aspx。 + -删除Resizable属性。 + -优化XState的初始化代码,使得Reset按钮可用于下拉列表、富文本编辑器等控件,而不会清空这些控件的值。 + -删除PanelBase的属性AutoHeight和AutoWidth。 + +表格更新。 + -生成的样式类"x-grid3"字符串全部更改为"x-grid"。 + -删除表格属性VerticalScrollWidth、EnableColumnHide。 + +表格列和之前不兼容(现在使用HBox布局,注意列的Width和BoxFlex属性)。 + -可以为Column指定BoxFlex属性或者Width属性(之前ExpandUnusedSpace属性等价于BoxFlex=1)。 + -删除表格属性MinColumnWidth、AutoExpandColumnMax、AutoExpandColumnMin。 + -删除表格属性ForceFitFirstTime,属性ForceFitAllTime依然可用。 + -增加列属性HeaderToolTip、HeaderToolTipType、BoxFlex、EnableColumnHide。 + -增加列属性EnableHeaderMenu(默认为true),修改表格的EnableHeaderMenu默认值true。 + -删除表格属性EnableRowNumber、EnableRowNumberPaging、RowNumberWidth,增加列RowNumberField(增加EnablePagingNumber属性)。 + -LinkButtonField默认EnableHeaderMenu=false,EnableColumnHide=false。 + -删除表格属性SortColumnIndex、SortColumn,请直接使用SortField属性(注意RowNumberField对属性SortColumnIndex的影响)。 + -设置表格内图片的默认大小为16px*16px,用户可以手工设置样式来覆盖图片的默认大小。 + -删除HiddenColumnIndexArray属性,增加HiddenColumns属性。 + -更新可编辑表格实示例的客户端脚本,在执行onReady函数时表格的viewready事件已经执行完毕。 + +分组表头和之前不兼容。 + -删除类GridGroupColumn,删除表格的Columns属性,增加类GroupField。 + +选项卡控件更新。 + -为TabPosition类型增加Left、Right两个枚举类型。 + -自动完成文本框示例更新(FineUI的TextBox控件被渲染为table而不是之前的input)。 + +树控件更新。 + -删除TreeNode的属性SingleClickExpand。 + +增加事件参数类CheckedEventArgs,复选框、单选框以及菜单按钮的CheckedChanged事件会接收这个事件参数。 + -更新示例default.aspx、toolbar/menucheckbox.aspx、form/radiobutton.aspx,处理单选框列表时需要的技巧。 + +窗体控件更新。 + -如果删除面板初始属性IFrameUrl=#,则面板中的IFrame会延迟加载。 + -对于设置了IFrameName的面板,初始属性IFrameUrl需要保留,比如iframe/topmenu/default.aspx。 + -删除Region的EnableSplitTip、CollapsibleSplitTip、SplitTip、CollapseMode、CMargins属性。 + -删除AccordionPane的EnableHightlight属性。 + -全部200多个示例更新。 + + + ++2013-07-29 v3.3.1 + -将工具YUICompressor替换为Microsoft Ajax Minifier(需要指定-evals:immediate)。 + -完善FineUI的代码注释,创建FineUI参考手册离线版。 + -修正Window控件无法在外层页面最大化的问题(小兵)。 + -修正Window控件在Master-Content页中无法触发关闭事件的问题(小兵)。 + -对X.util.initTreeTabStrip和X.util.addMainTab进行重构,可以指定切换/新增选项卡时是否刷新IFrame。 + -更新other/addtab.aspx示例,在JavaScript中使用网站根路径。 + -增加示例other/confirm_cancel.aspx,点击确认对话框的取消按钮也能回发页面(夏了,夏天)。 + -修正AJAX异常时提示信息没有消失的问题。 + -优化AJAX超时提示对话框(请求超时,请刷新页面并重试!)。 + +性能优化。 + -为官方示例增加压缩ViewState的方法,在页面基类PageBase中实现。 + +为表格/树/下拉列表/单选框复选框列表/表单字段控件启用XState的Gzip压缩,减少AJAX时POST的数据量。 + -会稍微增加下载数据量,从整体上提升用户体验。 + -可以通过设置控件、PageManager或者Web.config的EnableXStateCompress属性来关闭XState压缩(默认启用)。 + +表格性能优化 + -优化CheckBoxField/HyperLinkField/LinkButtonField,减少生成的HTML代码片段大小。 + -优化模板列存在时POST数据大小,优化内存分页时响应数据大小。 + -优化CheckBoxField生产的CSS类名,将.box-grid-checkbox-unchecked-disabled更改为.unchecked.disabled。 + -优化TextArea/HtmlEditor在页面第一次加载和AJAX回发时产生的数据大小,防止生成重复数据。 + -更新导出Excel的示例grid/grid_excel.aspx,特别注意如何处理模板列(为了优化性能,不能直接获取模板列的内容了)。 + +优化结果(A:grid/grid_rowcommand_paging.aspx,B:grid/grid_rowcommand_paging_database.aspx): + -[版本][A首次响应][A下一页请求][A下一页响应][B首次响应][B下一页请求][B下一页响应] + -[v3.3.0][56.4K][61.7K][7.8K][18.0K][14.4K][10.7K] + -[v3.3.1][43.7K][7.0K][0.2K][16.4K][3.5K][8.6K] + +表格增强。 + +修正模板列示例中注册客户端事件的错误,重新绑定数据后客户端脚本失效。 + -现在使用ExtJS的代理事件,只需要在页面第一次加载时注册事件即可。 + -更新全部模板列示例grid\grid_edit.aspx、grid_edit_compare.aspx等,请仔细阅读源代码。 + +修正SelectedRowIndexArray的一个BUG。 + -在grid/grid_checkboxfield_rowcheckall.aspx中,点击第一个复选框选中行,然后再次点击第一个复选框不能取消行的选中状态。 + +模板列重构(内部实现)。 + -模板列的ClientID由原来的Grid1_r1c5调整为Grid1_ctl09,现在ID由系统自动生成。 + -GridRow不再继承自WebControl,重新优化Grid内部的数据绑定逻辑(减少一个控件层次结构)。 + -模板列控件GridRowControl实例直接添加到Grid.Controls中(之前添加为行控件的子控件)。 + +可编辑单元格重构。 + -更新所有示例,通过行索引找到行DataKeys,然后根据行关键字查找需要更新的数据。 + -为表格增加DeleteSelected/GetDeleteSelectedReference方法,以便在客户端删除行。 + -服务器端通过GetDeletedList方法获取客户端删除的行在原始数据中的索引列表。 + -重构GetModifiedData的实现[[rowIndex(int),originalRowIndex(int),modifiedFields(Dictionary)]]。 + -增加示例grid/grid_editor_cell_new_delete.aspx。 + -为表格增加EnableAfterEditEvent属性和AfterEdit事件,用来处理单元格失去焦点事件。 + -增加示例grid/grid_editor_cell_afteredit.aspx。 + + + ++2013-06-17 v3.3.0 + -更新示例form/form_center_button.aspx,支持IE7(Stone.yu)。 + -修正动态添加列在页面回发时的错误(舞柯庶、落寞一声笑、路人甲)。 + -改变浏览器大小可以自动调整窗体控件的大小(窗体控件最大化时)(grass_root、蓝色天空)。 + -修正Chrome下多表头样式错位(风笑痴)。 + +对允许自动回发事件的属性名字进行重构。 + -在原来的名字后面添加Event,比如EnableRowClick改为EnableRowClickEvent。出于兼容性考虑,之前的属性依然有效。 + -表格相关:EnableRowSelectEvent、EnableRowClickEvent、EnableRowDoubleClickEvent + -表单相关:EnableTimeSelectEvent(TimePicker)、EnableDateSelect(DatePicker、Calendar) + +更新aspnet/ueditor.aspx、aspnet/ueditor_two.aspx. + -修正IE9下编辑框无法获取焦点的问题,将UEditor的初始化代码放在onReady函数中(消失的键盘 )。 + -UEditor更新为1.2.6.0,FineUI与百度的UEditor将携手促进国内开源软件的发展。 + -更新other/addtab.aspx示例,增加关闭当前TAB的实现。 + -增加示例tabstrip/tabstrip_iframe_disabled.aspx,在IFrame内部启用外部TabStrip的标签(◆◇_提拉米苏℡)。 + +窗体控件优化。 + -将JS函数box_show/box_hide等改名为x_show/x_hide。出于兼容性考虑,之前的函数依然有效。 + -减少窗体控件生成的JS代码量。 + +遵守ExtJS对开源软件的限制,将ExtJS相关JavaScript、CSS以及图片资源从FineUI库中移除。 + -增加Web.config中的配置项ExtjsBasePath,默认为~/extjs。 + -FineUI.dll从原来的2.4M减少为600K。 + -FineUI.Examples增加extjs_builder文件夹,用来生成FineUI所需的extjs目录。 + +表格增强。 + +合计行示例。 + -增加客户端合计行示例grid/grid_summary.aspx(◇辉◆:)。 + -增加服务器端合计行示例grid/grid_summary_serverside.aspx(◆◇提拉米苏℡)。 + -增加合计行绝对定位到分页条上方的示例grid/grid_summary_absolute.aspx。 + -修正Chrome下表格EnableTextSelection属性失效问题(D大调)。 + +优化模板列示例grid/grid_edit_compare.aspx。 + -增加自动换行的示例grid/grid_line_wrap.aspx(水中月 )。 + -增加CheckBoxSelectOnly属性,满足只能通过多选框选中行的需求,增加示例grid/grid_checkall_only.aspx(隨风.NET)。 + -修正下次提交依然提交上次修改数据的问题。 + +可编辑表格增强。 + +修改GetModifiedDict函数的返回结果,这个和上个版本不兼容,需要特别注意。 + -之前返回的结构是Dictionary<int, Dictionary<int, string>>,现在返回的结构是Dictionary<int, Dictionary<string, string>>。 + -之前是通过RowIndex + ColumnIndex获得修改的值,现在通过RowIndex + ColumnID获得修改的值,更简单直观。 + -如果同时启用EnableCheckBoxSelect和AllowCellEditing,则忽略EnableCheckBoxSelect属性。 + -增加SelectedCell属性,用来获取AllowCellEditing模式下选中的单元格。 + -增加示例grid/grid_editor_cell_delete.aspx。 + -优化GetSelectCountReference方法使其在AllowCellEditing模式下也不出错,并改名为GetSelectedCountReference。 + -增加方法GetSelectedCellReference,用来获取选中的单元格,仅在AllowCellEditing模式下有效。 + -增加方法RejectChanges、GetRejectChangesReference、ClearSelections、GetClearSelectionsReference。 + -增加示例grid/grid_editor_cell_renderfunction.aspx,在RendererFunction通过客户端脚本获得下拉列表的值(舞柯庶)。 + -增加函数GetNewAddedList,返回新增数据行,增加示例grid/grid_editor_cell_new.aspx。 + +综合示例。 + -增加顶部菜单框架(一)综合示例iframe/topmenu/default.aspx(未来(sun))。 + -增加顶部菜单框架(二)综合示例iframe/topmenu2/default.aspx,左侧菜单也是放在单独的IFrame中,灵活度更高。 + -增加顶部菜单框架(三)综合示例iframe/topmenu3/default.aspx,左侧是手风琴和树控件的组合。 + +去AXD化并更新整个示例工程,所有对res.axd的引用都换成直接的网址,这也有效地减少了服务器部署的麻烦。 + -出于兼容性考虑,之前对res.axd调用依然有效,比如res.axd?icon=World。 + + + ++2013-05-21 v3.2.6 + +修正extjs v3.4.1.1引入的问题。 + +恢复表格和树控件中链接光标的手型而非指针。 + -删除ext-all-notheme中对x-unselectable的光标定义。 + -修正grid/grid_textselection.aspx无法选择文本的问题。 + -修正Chrome下无法编辑表格模板列中的文本输入框(刘军)。 + +表单相关。 + -修正在文本输入框中按回车键无法触发type=submit按钮的表单提交事件(jieking、luyj56、^老鼠^、消失的键盘)。 + -更新示例form/layout_panel2.aspx,增加表单验证功能。 + -增加示例form/form_reset.aspx、form/form_hide_field.aspx(注意控件HideMode属性的使用)。 + -为DatePicker和TimePicker增加EnableEdit属性(默认为true),更新form/timepicker.aspx(DT♂杰杰 )。 + -增加示例form/form_center_button.aspx,使两个按钮水平居中显示(夜冰)。 + -增加示例form/fileupload_toolbar.aspx,在工具栏中放置FileUpload控件(asp.net)。 + -UEditor升级为v1.2.5.1。 + -增加两个UEditor的示例aspnet/ueditor_two.aspx(Apollo)。 + +表格增强。 + -表格,下拉列表、复选框列表以及单选框列表的数据源支持IDataReader(路过秋天、周星星)。 + +增加EnableColumnLines属性,是否启用列分隔线(默认为false)。 + -增加示例grid/grid_column_lines.aspx。 + -修正Access和Gray主题下表格多表头的样式问题(bestwowo)。 + -增加示例grid/grid_empty_text.aspx。 + +增加只读属性SortField(从SortColumnIndex或者SortColumn计算得来)。 + -最好在Sort事件中设置表格的SortDirection和SortColumnIndex。出于兼容性考虑,在触发事件之前已经设置好了。 + -对示例grid/grid_sorting.aspx、grid/grid_paging_sorting.aspx、grid/grid_groupheader_sort.aspx进行重构。 + -增加示例grid/grid_groupheader_sort_hdmenu.aspx、grid/grid_paging_database_sorting.aspx。 + +对GridColumn进行重构(表格列也是一个控件),如果没有设置ColumnID,则ColumnID等于列的ClientID。 + +对CheckBoxField进行重构(内部实现)。 + -删除生成X_Rows.Values中的换行符。 + -将X_States放在X_Rows.State中,因为客户端对States的更改会同时影响到X_Rows.Values和X_Rows.DataKeys。 + -服务器端对States的改变,会同时更新Values,进而促使表格重新加载。 + -注意:表格行的States属性对外部不可见(internal),可以通过CheckBoxField的GetCheckedState和SetCheckedState来访问此属性。 + +增加表格的单元格编辑功能。 + -增加AllowCellEditing、ClicksToEdit属性;CommitChanges、GetModifiedCells、GetModifiedDict几个方法。 + -增加RenderField和RenderCheckField两个列类型。 + -增加示例grid/grid_editor_cell.aspx。 + + + ++2013-04-27 v3.2.5 + +更新extjs库到v3.4.1.1。 + -解决IE9/IE10下的UI显示问题。 + -解决表格控件在谷歌浏览器下,最后一列的标题栏没对齐的问题。 + -解决IE7/Chrome下有时不能拖动窗体的问题。 + +删除PageManager的EnableAspnetSubmitButtonAjax属性(shiningrise、夏雨雪(joe) )。 + -原因是低版本IE浏览器不允许使用JS修改input标签的type属性。 + -我们需要手工设置Asp.Net按钮的UseSubmitBehavior=false,更新示例aspnet/aspnet.aspx。 + -修正extjs的Ext.lib.Ajax.serializeForm函数,使其在序列化表单时不包含submit按钮,从而避免触发后台submit按钮的事件。 + -更新示例aspnet/aspnet.aspx。 + -更新示例config/release_time_chart.htm。 + +表格增强。 + -增加RowVerticalAlign属性(默认为Middle),以后所有表格中的行文字默认都是垂直居中显示。 + +增加EnableHeaderMenu属性(默认为false),支持在表格标题栏下拉菜单中显示隐藏列以及排序操作。 + -增加EnableColumnHide属性(默认为true),是否可以标题栏下拉菜单中显示隐藏列。 + -增加示例grid/grid_hdmenu_hidecolumn.aspx。 + -增加示例grid/grid_hdmenu_sorting.aspx。 + +增加EmptyText属性,指定数据为空时显示在内容区域的文本,可以是HTML标签。 + + + ++2013-03-23 v3.2.4 + -修正FineUI按钮和Asp.Net按钮共存时,点击FineUI按钮会触发Asp.Net按钮事件的问题(shiningrise)。 + -修正在表单字段中按回车键触发表单提交的问题(欧志辉)。 + -修正RadioButtonList隐藏时客户端验证出错的问题(⑥阿太⑥、appletreegd)。 + -为Image、LinkButton、HyperLink、Label增加Attributes属性,用来设置HTML标签属性。 + +增加示例iframe/selectprovince1.aspx、iframe/selectprovince2.aspx、iframe/selectprovince3.aspx(猪八戒)。 + -演示如何使用Attributes属性(或者使用JS脚本来设置HTML标签属性)。 + -演示如何调用父窗口的JS函数(如何找到原始窗口对象X.wnd.getActiveWindow()[1])。 + -演示如何自定义回发,如何使用ActiveWindow的GetHideReference和GetHidePostBackReference函数。 + +表格增强。 + -增加实时比较表格中两个文本输入框值的例子grid/grid_edit_compare.aspx(Mr.Wu)。 + -增加同步表格中下拉列表的选中值到文本输入框的例子grid/grid_edit_dropdownlist_textbox.aspx(老皮鞋)。 + -更新示例grid/grid_pageitems.aspx,演示如何使用extjs内置的图片资源。 + +增加调整表格宽度的四个示例。 + -grid/grid_width_expandunusedspace.aspx(最常用,一列宽度自适应其他列宽度固定)。 + -grid/grid_width.aspx、grid/grid_width_forcefitalltime.aspx、grid/grid_width_forcefitfirsttime.aspx。 + +增加保存表格模板数据的示例grid/grid_edit_save_auto.aspx、grid/grid_edit_save_manual.aspx(angrySperm)。 + -通过向表格元素添加HTML属性来防止重复注册表格的客户端事件。 + -修正其他示例中潜在的重复注册客户端事件的问题。 + -注意RowSelect事件在本示例中的运用。 + +增加EnableRowSelect属性和RowSelect事件,注意RowClick和RowSelect事件的区别。 + -增加示例grid/grid_rowselect.aspx,更新示例grid/grid_twogrid.aspx。 + -增加表格中文字居中显示的例子grid/grid_text_middle.aspx。 + +数据库分页时支持每页显示的记录数不同(appletreegd)。 + -增加示例grid/grid_simulate_tree_paging.aspx、grid/grid_simulate_tree_database_paging.aspx。 + -增加示例grid/grid_simulate_tree_database_paging_dropdownlist.aspx。 + +更新内置JS函数X.util.initTreeTabStrip,切换选项卡时是否在top.location.hash记录当前页面的地址。 + -在更新此版本后,你可能需要将此变量置为true,参考js/default.js。 + + + ++2013-01-09 v3.2.3 + -修正身份证和IP地址验证规则错误(Mr.Wu、轻雨湿意)。 + -为正则表达式验证增加RegexIgnoreCase属性,默认是区分大小写的。 + -修正清空CheckBoxList或者RadioButtonList时仍然存在一项的问题(liugeZ)。 + -整合jQuery UI Autocomplete组件,并增加了6个示例。 + -增强grid/grid_edit.aspx示例,现在可以通过回车键遍历所有的文本框(Mr.Wu)。 + -增强表单字段的Label为Ajax属性,也即是可以在页面回发时修改。 + -修正表单字段隐藏后仍然进行有效性校验的问题。 + -增加工具栏图标。 + +修正ExpandAllNodes无法展开二级节点的问题(szjazz)。 + -现在有两个办法来展开全部节点tree.ExpandAllNodes(); + -或者PageContext.RegisterStartupScript(tree.GetExpandAllNodesReference())。 + -FineUI的设计时支持,以商业软件的形式单独提供,请到官方论坛了解详情。 + + + ++2012-12-03 v3.2.2 + -修正动态添加按钮菜单的错误,并更新示例button/button_menu.aspx(西门吹雪)。 + +为Window控件增加Plain属性;为ToolbarPosition增加Footer类型;为面板增加FooterBarAlign属性。 + -增加示例window/window_toolbar.aspx。 + -更新示例basic/login.aspx、basic/login_captcha.aspx。 + -更新示例basic/login_captcha.aspx,增加刷新验证码的功能。 + +第三方编辑器增强。 + -修正示例aspnet/fckeditor.aspx无法获取用户输入值的问题。 + -增强示例aspnet/fckeditor.aspx,在更新编辑器内容时不需要刷新整个编辑器。 + -增加示例aspnet/ckeditor.aspx,演示如何在项目中整合CKEditor_4.0。 + -增加示例aspnet/ueditor.aspx,演示如何在项目中整合UEditor_1.2.3。 + +Grid增强。 + +重新绑定数据时(DataBind)清空选中的行(SelectedRowIndexArray)(欧志辉)。 + -更新注意:1. 需要先绑定表格数据,再设置选中的行。2.重新绑定数据时不再需要手工清空选中的行。 + -增加RowNumberWidth属性,对于序号列可能大于等于100的表格,需要设置合适的宽度,比如30px(凡人哥)。 + +增加EnableRowNumberPaging属性,行序号列是否支持分页(默认为false,也即是每页都从1开始)(欧志辉)。 + -增加示例grid/grid_rownumber_paging.aspx、grid/grid_rownumber_paging_database.aspx。 + +修正设置DataSource为null时无法清空表格内容的问题(猪八戒)。 + -更新grid/grid_pageitems.aspx,演示如何清空表格数据。 + -更新grid/grid_rowexpander.aspx示例,控制显示隐藏行扩展列。 + +增加ClearSelectedRowsAfterPaging属性,用来控制是否在服务器端分页后清空选中的行。 + -增加示例grid/grid_paging_selection.aspx和grid/grid_paging_database_selection.aspx,演示如何跨页保持选中数据。 + + + ++2012-11-25 v3.2.1 + +优化示例首页代码。 + -MenuCheckBox的CheckedChanged事件处理函数,防止事件重复执行两次。 + -向客户端注册的window.IDS脚本只在页面第一次加载时执行。 + -优化集合类(比如TabCollection,ControlBaseCollection)的实现,避免动态添加控件时存在的潜在风险。 + +Grid增强。 + -增加SelectAllRows方法。 + -增加PageItems属性,可以向分页工具条中添加控件,比如分隔符、按钮、下拉列表等(欧志辉)。 + -增加示例grid/grid_pageitems.aspx、grid/grid_pageitems_rowexpander.aspx、grid/grid_pageitems_pagesize.aspx。 + -修正第一次打开页面无法隐藏表格列的问题。 + -优化ExpandAllRowExpanders属性,从而避免页面第一次打开时的闪烁现象(grid/grid_rowexpander_expandall2.aspx)。 + -增加两个方法ExpandRowExpanders和CollapseRowExpanders。 + +为表单字段和面板控件增加Reset和GetResetReference方法,用来重置表单字段(小豬仔→pig/抓、随便逛逛、六脉神剑)。 + -更新示例form/form_compare.aspx、form/form.aspx、form/fileupload.aspx。 + +FileUpload增强。 + -修正FileUpload控件的HasFile属性总是为true的问题(黑冰.cn、8730574、☆幻~精灵、feitian78)。 + -为FileUpload控件增加OnFileSelected事件(启用AutoPostBack时有效)(辉月)。 + -增加示例form/fileupload_autopostback.aspx。 + + + ++2012-11-18 v3.2.0 + -修正通过标签初始的复选框列表在设置SelectedValueArray属性时出错的问题(◇辉◆:)。 + -修正下拉列表未绑定数据时回发页面出现在RecoverPropertiesFromJObject中的错误(〓飚〓、隨風往事、破风、Vian_Pan)。 + -修正动态创建的复选框列表,在默认未选中任何值的情况下,回发时SelectedValueArray取不到值的问题(sam.chang)。 + -修正Alert.Show始终显示默认图标的问题(swtseaman)。 + -为提示对话框增加自定义图标功能,通过Icon或者IconUrl来自定义(swtseaman)。 + -增加选择时间的控件TimePicker(时分)。 + -内置资源改为短格式,比如/res.axd?css=blue.css&v=1(◇辉◆:、swtseaman)。 + -更新示例站点样式,将配置项放到左侧菜单的上方,增加主区域空间。 + -增加控件MenuCheckBox(复选框或单选框)。 + -为RadioButton增加AutoPostBack属性。 + -修正示例工程中FCKEditor无法上传文件和浏览文件的问题。 + + + ++2012-08-18 v3.1.9 + -修正other/addtab.aspx示例的JS错误和BoundField使用Tooltip的错误(Dennis_Liu)。 + +修正Window的GetShowReference返回的字符串中包含双引号的问题(︶ㄣ東東ㄣ、天蓝若空、李剑飞、克儿~)。 + -虽然返回的JavaScript语句没问题,但是如果放到HTML属性中就有问题了。 + -修正HtmlNodeBuilder在处理双引号等字符时可能导致潜在JavaScript问题。 + -从根本上解决WindowField、LinkButton、HyperLink等控件的客户端脚本中存在单引号或者双引号时出现的各种问题。 + -增加动态创建模板列示例grid/grid_dynamic_columns2.aspx(大鸟打小鸟)。 + -修正按钮的Type设为Reset无效的问题,注意重置的其实是页面上所有的表单控件(e先生)。 + -修正英文下确认对话框标题依然默认中文的问题。 + -修正后台对可为空的int,short,double属性赋值时出现的异常(石头鱼)。 + +为Window控件增加GetMaximizeReference和GetRestoreReference两个方法。 + -变通的实现打开窗体后最大化:PageContext.RegisterStartupScript(Window2.GetShowReference() + Window2.GetMaximizeReference()); + -增加英文示例http://demo.fineui.com/en/。 + -更新行布局、列布局和锚点布局示例。 + -增加表格导出Excel文件示例。 + -增加表格模板列使用单选列表、复选列表的示例。 + -完善在线文档http://doc.fineui.com/。 + -公开ControlBase的ConvertPropertiesToJObject和RecoverPropertiesFromJObject两个方法。 + -兼容Asp.Net的用户控件(UserControl)并增加示例(Spring)。 + -更新示例框架,增加手风琴控件和树控件的组合菜单(幻之达)。 + -修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 + -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 + -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空的情况下去除<span></span>标签。 + -类似于onReady函数,增加对onInit函数的支持,用来在执行页面初始化脚本之前调用。 + -优化复选框列表和单选按钮列表,减少生成的代码量。 + -修正CheckBoxList和RadioButtonList无法在回发中更新的BUG(破风、吉吉﹑落叶飞尘)。 + -修正CheckBoxList和RadioButtonList初始为空时页面不能显示的BUG(e先生、黑眼睛咪咪、宇洋)。 + -预祝俺家小师生日快乐! + + + ++2012-06-24 v3.1.8 + +重新规划Grid中列宽度的设置(之前必须为除了ExpandUnusedSpace的列设置固定宽度)(含章)。 + -增加属性MinColumnWidth(列的最小宽度)。 + -增加属性AutoExpandColumn,自动扩展宽度以填充剩余空间的列(ColumnID)(如果设置了ForceFitFirstTime或者ForceFitAllTime,则忽略此属性)。 + -增加属性AutoExpandColumnMax和AutoExpandColumnMin。 + -增加属性ForceFitFirstTime,成比例改变表格各列的宽度,以防止出现水平滚动条(仅在第一次加载表格时有效)。 + -增加属性ForceFitAllTime,成比例改变表格各列的宽度,以防止出现水平滚动条(第一次加载和之后改变表格宽度时都有效)。 + -增加属性VerticalScrollWidth,垂直滚动条的宽度(不设置则自动计算宽度,0则消除右侧预留的滚动条宽度)。 + -增加示例grid/grid_forcefit.aspx。 + -修正工具栏中控件在设置EnableBigFont时的字体大小(£快乐→无罪、快乐的猪)。 + -修正三层IFrame结构并在最外层页面弹出窗体时无法关闭的问题,并增加示例iframe/parent_postback_top.aspx(feitian78)。 + +将框架页面中树控件和选项卡控件的交互操作、改变选项卡时更新地址栏,以及页面第一次打开时展开相应的树节点和打开选项卡封装到一个JS函数中。 + -现在一行代码X.util.initTreeTabStrip(treeMenu, mainTabStrip);就完成了之前需要手写的100行JavaScript代码。 + -这个函数带来的另一个好处是,不需要在手工写选项卡中每个选项卡所需要图标的CSS,这个函数会根据树节点的图标自动添加这些CSS代码。 + -更新default.aspx后台代码,以便根据树节点对象的页面地址返回相应的文件类型图标。 + -修正TriggerBox不能改变触发图标的问题。 + -修正ActiveWindow.GetHidePostBackReference不能传入带单引号参数的问题(e先生)。 + -修正Window控件最大化后关闭,下次再打开时位置不对的问题(蓝色天空、松松工作室)。 + -为Label、HyperLink增加Enabled属性,并更新相应示例(幻之达)。 + +为BoundField、HyperLinkField、WindowField、CheckBoxField增加Enabled属性。 + -更新示例grid/grid_prerowdatabound.aspx,演示如何根据行的不同参数启用禁用LinkButtonField。 + -Enabled属性在权限控制中非常重要,AppBox(基于FineUI的企业通用管理框架)依赖于此属性。 + -为Tree增加SelectedNode属性,为TreeNode增加ParentNode属性(你是我的)。 + +为Web.config和PageManager增加CustomTheme和CustomThemeBasePath属性,来支持自定义样式,并向示例工程增加自定义样式blueen。 + -向示例工程添加三个网友提供的样式(蓝色天空)。 + -为Grid增加PreDataBound事件,用来在数据绑定之前修改列的属性(如果列的属性依赖于行的数据,可以使用PreRowDataBound)。 + +此版本与AppBox v1.0(基于 FineUI 的企业通用管理框架)同时发布。 + -注:AppBox非免费软件,请捐赠作者以获得AppBox源代码,具体细节请查看论坛bbs.fineui.com。 + + + ++2012-06-03 v3.1.7 + -修正不能选蓝色主题BUG,修正后台生成RadioButtonList时,AJAX获取不到选中值的BUG(swtseaman、西门吹雪)。 + +为Grid的BoundField、HyperLinkField、LinkButtonField、WindowField增加HtmlEncode和HtmlEncodeFormatString(TiDi)。 + -HtmlEncode和HtmlEncodeFormatString的默认值都为true,这样字段中的HTML标签会被编码显示。 + -这两个属性和Asp.Net控件GridView的BoundField的同名属性作用相同。 + -http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.htmlencode + -为Grid的HyperLinkField、WindowField增加UrlEncode属性,用来进行URL编码(默认为true)。 + -修正窗体大小超过页面尺寸时,窗体的标题栏位于页面之外的BUG(⑥阿太⑥)。 + -为IconHelper.GetResolvedIconUrl增加保护,如果传入的参数为Icon.None和String.Empty,则返回空字符串。 + -修正在父页面弹出的窗体最大化时错位的问题。 + -为Grid增加SelectedRowIndex属性,用来简化单选行时的操作。 + +为Grid所有列增加TextAlign属性,用来控制文本的排列位置,默认靠左排列。 + -复选框列的排列位置默认靠左显示,同时更新示例grid/grid_centercolumn.aspx。 + -为Grid增加多表头功能,增加示例/grid/grid_groupheader.aspx和/grid/grid_groupheader2.aspx(快乐的猪)。 + + + ++2012-05-20 v3.1.6 + -修正RowDataBound中使用Grid1.DataKeys[e.RowIndex]出错的问题(信徒)。 + +增加配置项EnableAjaxLoading和AjaxLoadingType,用来全局控制是否显示Ajax提示以及提示样式(swtseaman、张怡)。 + -和其他配置项一样,可以从三个级别进行控制(Web.config全局级别、PageManager页面级别和控件级别)。 + -增加示例other/ajax_loading.aspx。 + -Panel的IFrameUrl为#或者about:blank,也会立即生成iframe节点,只有在IFrameUrl为空字符串时才会延迟生成iframe节点。 + -修正在Grid的Toolbar中放置可回发的单选框列表,并回发重新绑定Grid时出现的问题(找到多个具有相同ID“c6r0”的控件)(magicyugi)。 + -为Grid增加属性ExpandAllRowExpanders,并增加示例grid/grid_rowexpander_expandall2.aspx。 + -为Grid增加属性EnableTextSelection,并增加示例grid/grid_textselection.aspx(swtseaman)。 + +修正VBox布局时BoxLayoutAlign返回的错误代码,并统一为Start、Center、Stretch、StretchMax。 + -更新示例:layout/vbox.aspx、layout/hbox.aspx。 + -修正非AJAX页面回发时,会重复ASPX标签添加的下拉列表选项(同样的问题存在于RadioButtonList和CheckBoxList)(swtseaman)。 + -增加API文档:http://doc.fineui.com/。 + + + ++2012-05-06 v3.1.5 + -增加主从表的示例:grid/grid_twogrid.aspx。 + +修正表格中没有模板列时,更新表格出错的问题(大鸟打小鸟、水若寒冰、HUGO.理、河蟹社会、幻之达)。 + -只更新一行代码,由if(!tpls)改为if (typeof (tpls) === 'undefined'),因为没有模板列时tpls为空字符串。 + -修正重新绑定表单后无法获取TemplateField中数据的问题(落末醉)。 + +为示例网站(http://demo.fineui.com/)启用GZIP压缩,同时增加示例config/enable_gzip_iis6.htm。 + -经测试,FineUI示例首页下载的JavaScript由原来的650K减少到250K左右,对首次页面加载速度的提升非常可观。 + -修正Grid 做排序时SelectedRowIndexArray的BUG(emissary)。 + -增加示例iframe/passvalue_iframe.aspx,演示如何从子窗体向父窗体传真。 + -更新accordion/accordion_tree.aspx,演示如何通过后台改变每个树节点的Target属性。 + +页面第一次加载完成后会调用用户自定义的onReady函数,页面在AJAX回发后会调用用户定义的onAjaxReady函数。 + -更新示例grid/grid_rowcolor.aspx,增加在重新绑定数据后高亮行的功能。 + -增加示例grid/grid_rowexpander_expandall.aspx,演示如何在打开页面后展开所有的扩展列(〓飚〓)。 + +TabStrip的EnableDeferredRender属性默认值修改为false,DropDownList的EnableEdit属性的默认值修改为false。 + -EnableDeferredRender为true,在有些情况下会出现JS错误。 + -EnableEdit用来启用下拉列表过滤,默认false可以在点击列表框本身弹出下拉列表,和Asp.net的下拉列表行为一致。 + +修正在IE下,Grid的模版列中出现文本输入框或者下拉列表时,第一次不能选中的问题(水若寒冰、幻之达)。 + -问题出现在extjs源代码Ext.grid.GridView中的focusCell,在IE下会focusEl.focus.defer(1, focusEl); + -也就是说会在1秒钟后重新让当前行获得焦点,自然刚打开的下拉列表由于失去焦点就关闭了,出现闪烁问题。 + + + ++2012-04-24 v3.1.4 + -修正页面中单独放置GroupPanel出错的问题(〓飚〓)。 + -修正手工调用form.submit出错的问题(redleaf)。 + -修正IE8下aspnet目录下示例出错的问题(隨风.NET、〓飚〓)。 + -完善Calendar控件,增加DateSelect事件,增加示例form/calendar.aspx(被遗忘的角落)。 + -修正DropDownList中值为空字符串的项无法响应OnSelectedIndexChanged的问题,并增加示例dropdownlist/dropdownlist_emptyvalue.aspx(⑥阿太⑥)。 + -为DropDownList增加ForceSelection和Text属性,用来控制是否强制选中项为下拉列表中的项(dennis)。 + -修正地址中包含#时在IE下回发报错的问题(22854632)。 + +重要更新:修正Grid中TemplateField与Asp.net控件的兼容性问题(幻之达、快乐的猪)。 + -简单说来,就是可以通过(System.Web.UI.WebControls.TextBox)row.FindControl("tbxGroupName");来在回发时获取Asp.net控件了。 + -增加示例grid/grid_edit.aspx。 + -增加示例grid/grid_edit_dropdownlist.aspx和grid/grid_edit_dropdownlist2.aspx,演示如何在后台绑定Grid中下拉列表数据。 + -为Grid增加UpdateTemplateFields方法,并增加示例grid/grid_edit_dropdownlist_update.aspx。 + + + ++2012-04-08 v3.1.3 + -修正Language="zh_TW"时JS报错的BUG(大雄)。 + +为DatePicker增加EnableDateSelect属性和DateSelect事件,用来在选择日期时回发页面(Landroid)。 + -为了区分AutoPostBack和EnableDateSelect两个属性,特增加示例form/datepicker_autopostback.aspx。 + -修正Accordion在Access主题下的样式问题(czfeifan)。 + -修正ImageWidth等类型为Unit的属性在AJAX改变时出错的问题(过往烟云)。 + -修正Chrome下上传文件出错的问题(渔夫子、Landroid)。 + +为FileUpload控件增加ShortFileName属性,用来获取不包含路径的客户端文件名(Landroid)。 + -FileName得到的值在IE下为完成路径,在Chrome下为文件名。 + -更新俄语语言包(vbelyaev)。 + -为Grid中的ImageField增加ImageWidth和ImageHeight(redleaf0724)。 + -为IconHelper增加String2Icon和Icon2String两个方法(redleaf0724)。 + -可以直接在ASPX中指定SortDirection和SortColumnIndex,同时增加SortColumn属性(杜志彬)。 + -修正Grid的排序标记在翻页或绑定后消失的问题(杜志彬)。 + + + ++2012-04-04 v3.1.2 + -修正IE下出现错误提示时拒绝访问的BUG(错将"about:blank"写成"about:blank;")。 + -修正Grid中自动回发复选框的BUG。 + -修正示例问题,grid/grid_rowdoubleclick.aspx,config/ajax.aspx。 + -增加如何绑定到二级属性的示例grid/grid_complex_property.aspx。 + -修正form/triggerbox.aspx中在输入框中按回车出错的BUG。 + -修正dropdownlist/dropdownlist.aspx选项中存在左右尖括号时出错的BUG。 + +更新示例grid/grid_checkboxfield.aspx,增加获取复选框选中状态的代码。 + -为CheckBoxField增加GetCheckedState方法。 + -Convert.ToBoolean(Grid1.Rows[rowIndex].States[field1.ColumnIndex]) 和 field1.GetCheckedState(rowIndex) 结果一样。 + +增加示例grid/grid_rowcheckall.aspx,用来全选反选当前行的全部复选框(第一滴冰雨)。 + -为CheckBoxField增加SetCheckedState和GetCheckedState两个方法。 + +为PanelBase增加RefreshIFrame和GetRefreshIFrameReference两个方法(郑伟)。 + -更新示例iframe/parent_postback.aspx。 + + + ++2012-04-02 v3.1.1 + +手工输入日期值时,如果输入项不匹配指定的格式,则会按照如下格式尝试解析(dennis)。 + -增加EnableChineseAltFormats,默认为true。 + -yyyy-MM-dd、yyyy-M-d、yyyyMMdd、yyyyMd、yy-MM-dd、yy-M-d、yyMMdd、yyMd。 + -修正DropDownList中ListItem的值为空字符串时不能选中的BUG(杜志彬)。 + -为DropDownList增加EnableEdit属性,用来表示是否启用编辑,以便在录入时自动过滤下拉框中的值,默认为true(随便逛逛、杜志彬、峰回路转)。 + -Nii.JSON类库更换为JSON.NET,从下个版本开始,引入FineUI.dll的同时还必须引入Newtonsoft.Json.dll(杜志彬、惊鸿沧海)。 + -为Form和SimpleForm增加LabelAlign属性,用来控制表单标签的位置(靠左,靠右,靠上)(知心叔叔)。 + -为表单控件增加FormItemClass,用来向一个表单项的外部DIV添加Css类名,参见示例other/formitemclass.aspx(凤舞天翔)。 + -为Grid增加EnableRowClick和EnableRowDoubleClick属性,可以用来控制单击或者双击行回发页面(低调的生活、凤舞天翔)。 + -修正FormRow的ColumnWidths不能指定像素值的BUG,并增加示例(form/layout_panel1.aspx)(yezie)。 + -将所有布局设置相关属性从Container移动到BoxComponent,这就意味着所有的控件都能够参与布局(见示例form/layout_panel2.aspx)。 + -DLL减肥,除去了不必要的JS、CSS以及语言资源,还把所有的内置图标移到了外面,DLL的大小由原来的6.5M减少为2.5M(liko1688、yezie、蓝色幻想)。 + -修正返回数据为空时出现JS错误的问题(第一滴冰雨、杜志彬)。 + -增加示例other/addtab.aspx,这样设置URL中hash值:window.location.hash='#/basic/hello.aspx'(稻草人)。 + -修正IE7下,窗口出现滚动条时,点击Window控件标题栏有时node为null的问题(泗水亭长)。 + +修正原生的IE7(非IE8下的IE7模式)中,iframe中的页面出现滚动条时,页面上的所有按钮都不能点击了(泗水亭长)。 + -最终发现是初始化QuickTips时出的问题,必须这样初始化Ext.QuickTips.init(false);,这是Extjs本身的兼容性问题。 + -Ext.QuickTips.init - autoReader:True to render the QuickTips container immediately to preload images.。 + -优化出错提示,现在可以显示详细的出错信息,并且会启用已经变灰的按钮(凤舞天翔)。 + -Grid绑定时简化DataBinder.Eval(Container.DataItem, "Gender")为Eval("Gender")(大石头、杜志彬)。 + + + ++2012-03-04 v3.1.0 + -修正Hidden属性失效的问题(〓飚〓、杜志彬)。 + -为PageManager增加EnableAspnetSubmitButtonAjax属性。 + -修正了在IE9兼容模式以及IE7和IE8下面,IFrame的Tab页在第二次打开时显示空白的问题(快乐的猪、恒业创达)。 + -修正Grid在第一个列设置为RenderAsRowExpander时排序出现的问题(第一滴冰雨)。 + +为可回发控件增加EnableAjaxLoading属性,用来控制是否显示Ajax提示信息(dennis)。 + -同时注意PageManager有相同的属性来控制页面级别的行为。 + +启用Visible属性,但请尽量不要使用这个属性除非你理解它的工作原理(宇洋)。 + -为了解决ExtJS本身的一个问题——如果单选框列表或者复选框列表中没有任何一项,就会出现JS错误。 + -你需要手动将那些没有任何项的单选框列表或者复选框列表的Visible属性设置false来解决这个问题。 + -为了能够在Ajax中显示隐藏元素,请使用Hidden属性(而不是Visible)。 + -使用Visible属性会导致不向浏览器输出这个元素,因此也无法通过Ajax切换Visible属性。 + -修正Form的LabelWidth属性不能控制单列表单字段的标签宽度的问题(〓飚〓、173242184、※晨曦后浪、yezie)。 + -修正HtmlEditor获取不到值的问题(あ雨换晴)。 + +按需加载ExtJS的JavaScript文件,大大加快了页面第一次的显示速度。 + -原来需要一次性下载800K的JavaScript文件,在网络较慢的环境中,单独的文件下载就需要6s左右,形成严重的水桶效应。 + -现在将ExtJS的JavaScript文件拆成如下几个部分:core、foundation、form、grid、menu、tab、tree,页面按需下载其中的一些文件。 + -将一个大文件分成几个小文件下载,也充分发挥了浏览器并行下载的特性,为更快的显示页面提供了帮助。 + -注意:这仅仅适用于页面第一次加载的情况,第二次及以后的页面加载会充分利用浏览器自身的客户端缓存,而无需再次下载这些已经下载过的JavaScript文件。 + -为Button\MenuButton\LinkButton\LinkButtonField增加ValidateMessageBox,用来控制在验证失败时是否出现提示对话框。 + + + ++2012-02-05 v3.0.1 + -修正IE7、IE8的兼容性问题(dotnet试验田)。 + -修正BUG - 弹出层如果我点击右上角的关闭按钮,再打开就不能打开(用情)。 + -修正上传控件在IE7下的问题(yfen)。 + + + ++2012-01-28 v3.0 + -修正 TwinTriggerBox 控件输入值后回车出错的问题(李渝川)。 + +Tree 控件增强。 + -Tree 控件增加 EnableIcons 属性。 + -Tree 控件的 AutoLeafIdentification 属性默认为 true(这是常用属性,不应该每次都设置)。 + -Tree 控件增加 SelectedNodeIDArray 属性。 + -简化 TreeNode 的内部结构,现在不需要写 Nodes 节点(土豆丝)。 + +Web.config 增强。 + -为 Web.config 中的 FineUI 配置节增加 EnableBigFont 配置项,适合于显示中文字体(最小字体由11px改为12px)。 + -为 Web.config 中的 FineUI 配置节增加 DebugMode 属性,用于在 ASPX 生成的 HTML 源代码中显示格式化后的 ExtJS 代码,方便调试(vazumi)。 + -为 Web.config 中的 FineUI 配置节增加 FormLabelSeparator 属性,同时 SimpleForm 和 From 控件增加 LabelSeparator 属性。 + -LabelWidth的默认值改为100px,与extjs保持一致(以前默认是80px)。 + +Button 控件增强。 + -修正 Button 设置图标后,CssClass 不起作用的问题。 + -Button 增加 IconAlign 属性。 + -为 Button 增加 Size 属性,可以设置按钮的大小。 + +表单控件增强。 + -HtmlEditor 控件增加 EnableChineseFont 属性,默认为 true(土豆丝)。 + -修正位于表单外面的 CheckBox 控件自动回发时的 JavaScript 错误。 + -表单字段增加 ShowEmptyLabel 属性(默认为 false),用来控制是否显示空白标签(示例在 /basic/login_captcha.aspx)。 + -为 Label HyperLink LinkButton 增加 Tooltip ToolTipTitle ToolTipAutoHide 三个属性,用来显示提示信息。 + -为 HyperLink LinkButton 增加 EncodeText 属性。 + -为 TextArea 增加 AutoGrowHeightMin 属性。 + -为 HyperLinkField 添加属性 DataNavigateUrlFieldsEncode,用来编码地址栏URL。 + -修正 Window 的 ESC 按键事件处理和关闭按钮事件处理不一致的情况(sa)。 + -简化客户端应用内置图标的方式,以前需要这样的代码 <%= IconHelper.GetIconUrl(Icon.Reload) %>(依然有效),现在直接 res.axd?icon=Reload 就可以了(土豆丝)。 + +修正TabStrip以及Window的内容高度异常的问题:AutoWidth和AutoHeight默认为false,FineUI不会默认渲染这个值,除非手工指定。 + -这是extjs3.4引入的特性,如果组件的autoHeight为true,则浏览器会根据组件的内容管理其高度,手工调用setHeight没有效果。 + -典型的案例,如果设置Window的AutoHeight为true,在不能最大化和改变窗体的大小。 + -修正首页打开后不能默认选中左侧第三级树节点的问题。 + +增加FileUpload控件,并增加示例页面form/fileupload.aspx。 + -修正使用文件上传控件后,返回的结果中出现HTML编码问题。 + +Grid控件增强。 + -为 WindowField 和 LinkButtonField 字段增加 Icon 和 IconUrl 两个属性(efrigate43)。 + -为全部表格列字段增加 ToolTip 属性,同时原来的 DataTooltipField 改名为 DataToolTipField。 + -增加示例 grid/grid_centercolumn.aspx,使某列居中显示。 + -为 TemplateField 增加 RenderAsRowExpander 属性,用来显示行扩展。增加示例 /grid/grid_rowexpander.aspx。 + +为所有控件增加 Ajax 属性 CssClass 和 CssStyle(goansonpan)。 + -增加示例 other/cssstyle.aspx。 + -示例工程,在切换示例时同时修改地址栏,以便页面刷新后也能回到最后一次浏览的页面。 + -增加 Table、HBox 和 VBox三种布局,并对所有布局示例进行重构。 + +单选框控件增强。 + -为 RadioButtonList 增加 ColumnVertical、Required 和 RequiredMessage 三个属性。 + -增加 CheckBoxList 控件,并增加示例 /form/checkboxlist.aspx。 + -增加示例 /aspnet/aspnet_literal.aspx。 + +将Button和MenuItem的Menus属性改为Menu属性,毕竟一个按钮只可能有一个菜单,这样也简化了ASPX中的标签。 + -同时更新/button/button_menu.aspx和/other/menu_dynamic.aspx两个示例。 + + + ++2011-05-09 v2.3.5 + -大部分控件的设计时支持。 + -从下个版本开始,我将会启动本地化战略调整方案,简体中文将会作为官方支持语言。 + + + ++2011-05-02 v2.3.4 + -更新extjs版本至v3.3.3(GMz)。 + -修正问题#9869(Pablogrind)。 + -为Region控件增加CMargins属性 - issue #9597(ronnieoverby)。 + +修正问题#9448(tonyredondo). + -这个问题仅在树控件中出现,需要在客户端回发时使用UniqueID。 + -修正Grid控件排序图标显示的问题。 + -修正X.utils.updateViewState中存在的问题,它导致Grid的第一个示例在回发两次后出错。 + + + ++2011-02-22 v2.3.3 + -更新extjs版本至v3.3.1。 + -更新Ext.ux.TabCloseMenu的多语言支持(en, zh_CN, zh_TW)。 + + + ++2010-09-29 v2.3.2 + -不绑定任何数据到Grid时,确保页面不会出错。 + -修正了Grid列属性DataFormatString的一个bug,比如设置{0:yy-MM-dd HH:mm}时没有效果。 + -修正下拉列表控件不能绑定DataTable的BUG(RedOcean)。 + -增加土耳其语言资料文件(abdullaharslan)。 + -Grid的BoundField增加NullDisplayText属性,用于处理数据库中的null值,如果没有设置则默认为空字符串。 + -修正DatePicker中的一个bug(31/01/2010将会返回NULL)使用DateFormatString来生成SelectedDate属性(OktaEndy)。 + -修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则SelectedValue返回值永远是第一个Text的值(ben.zhou)。 + -应用补丁#6593, #6621(vbelyaev)。 + +修正IE7下Grid分页速度慢(youwei, StevenGuan, hazardvn, gavindou, ttjacky)。 + -实际上IE7下所有的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。 + -俄语翻译(vbelyaev)。 + + + ++2010-06-30 v2.3.1 + -FineUI控件将不在依赖ViewState,减少1/4左右的HTTP数据传输量。 + -控件和示例的增强。 + + + ++2010-03-28 v2.2.1 + +为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(mmdcup)。 + -修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(zhaowenke)。 + -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 + -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 + +集成Extjs最新版本v3.1.1。 + -增加一个新的Theme - Access。 + -修正了Firefox下Zoom In/Out时页面消失的BUG。 + -删除Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。 + + + ++2010-01-31 v2.2.0 + -使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(261629698)。 + +TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip控件动态增加删除Tab。 + -增加示例tabstrip/tabstrip_addtab.aspx。 + -重构了示例网站的架构,目前只有一层IFrame结构。 + -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 + -为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal="false")(zqmars)。 + -Window控件更新。 + -关闭按钮默认直接关闭,不会弹出确认对话框。 + -GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。 + -增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 + -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 + -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 + -WindowPosition默认居中,而不是黄金分割位置。 + +Button, Window等控件弹出位置属性的变化。 + -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 + -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 + -Confirm.GetShowReference的最后一个参数target变为枚举类型。 + -Alert.GetShowReference中的showInParent参数也变为Target枚举类型。 + -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 + + + ++2010-01-06 v2.1.9 + -集成Extjs最新版本v3.1.0。 + -修正灰色皮肤的CSS问题。 + -修正Grid的列名中不能包含中文字符的BUG(davidwen)。 + -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 + -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(Violet)。 + -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 + -修正了弹出菜单的位置在Firefox下不正确的BUG(eroach)。 + -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 + -使用Hidden来显示隐藏FineUI控件,而不是使用Visible属性(Visible目前设置为只读属性)。 + -使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。 + -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 + -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(anson)。 + -修正绑定到Tree的XMLDocument中Icon属性映射错误(nopnop9)。 + -修正HtmlEditor不能编辑的BUG(TheBox)。 + -修正IE下有时会出现空白页面的情况(olivia919)。 + + + ++2009-12-06 v2.1.8 + -修正了使用IFrame的Window关闭后不能再次打开的BUG(alexa99)。 + -修正了IE下Grid中的一个JS问题(lqm4108)。 + -修正Alert消息中引号未编码导致的JS错误(sun1299shine)。 + +集成extjs3.0.3。 + -修正弹出对话框的宽度计算错误(会保持最小的状态)。 + -增加新的皮肤Gray。 + -为示例工程添加改变语言和皮肤的下拉列表。 + -为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。 + + + ++2009-12-01 v2.1.7 + -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(eroach)。 + -修正一些书写错误(bmck)。 + -从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(bmck)。 + -BorderPanel更名为RegionPanel。 + -DropDownList拥有MarkInvalid方法(sun1299shine)。 + -增加中国的省市县三级联动示例(data/shengshixian.aspx)(Blues T)。 + -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(eroach)。 + -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(yymaoji)。 + + + ++2009-11-26 v2.1.6 + +修正动态创建Grid列的BUG(gxpan)。 + -增加示例(data/grid_dynamic_columns.aspx)。 + -修正Form不能自适应浏览器大小的改变(kaywood)(WorkItem#6309)。 + -增加重载方法Alert.Show(message, title, icon)(TheBox)(WorkItem#6353)。 + -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(BluesT)。 + -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 + + + ++2009-11-21 v2.1.5 + +Tree优化。 + -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 + -GetNodeById更名为FindNode,保持和FindControl一致命名。 + -删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。 + -删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。 + -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(wjl_wjl520)。 + +TreeNode的属性NodeId被重命名为NodeID,这是FineUI中的一个命名约定。 + -同时更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 + -Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。 + -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 + -为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。 + -增加示例(other/custom_postback.aspx)(thebox)。 + -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 + -为Tree增加AutoLeafIdentification属性。 + -增加示例(tree_auto_leaf_identification.aspx)(wdrabbit)。 + + + ++2009-11-17 v2.1.4 + -修正Window的关闭按钮提示信息一直是中文的BUG(thebox)。 + -部分FineUI控件的设计时支持(会在后续版本中逐步完善)。 + -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。 + -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 + -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(dk3214)。 + +为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。 + -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 + +为表单字段增加MarkInvalid和GetMarkInvalidReference函数(sun1299shine)。 + -增加示例:form/form_validate.aspx + + + ++2009-10-19 v2.1.3 + +增加支持在AJAX时改变的控件属性列表(/ajax.aspx)。 + -FineUI支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 + -加载s.gif图片在本机进行,不会请求extjs.com远程资源(efrigate43,abaocoole)。 + -在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。 + -更新/basic/login.aspx示例,使用验证图片(kedee)。 + -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_rowclick.aspx(chenguizhu2006)。 + -为所有的表单字段增加AJAX属性ReadOnly(skydb)。 + -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(geruger)。 + + + ++2009-09-27 v2.1.2 + -为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。 + -修正RELEASE版本下多语言加载的BUG(yigehaoren)。 + -增加pt_BR语言,由Ujvari提供。 + +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 + -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 + -所有Icon的列表在icon.aspx。 + -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。 + + + ++2009-09-15 v2.1.1 + -修正不能动态修改AccordionPane属性Items的BUG。 + +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 + -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window控件的Target="_parent")。 + +为FineUI.Alert.Show增加点击确定的JavaScript回调函数。 + -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 + -FineUI.Alert.Show("参数错误!", String.Empty, FineUI.ActiveWindow.GetCloseReference()); + +TreeNode的前面的多选框可以自动回发了。 + -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 + -示例在:http://demo.fineui.com/data/tree_run.aspx + -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 + -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(Steve.Wei)。 + -添加定时器控件Timer,用来定时发起AJAX请求。 + + + ++2009-09-06 v2.1.0 + -Button的Pressed属性值能够正确的反映客户端的变化。 + -优化Tree控件的AJAX实现。 + +为页面的Form添加autocomplete="off"属性。 + -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 + +添加对extjs3.0中所有语言的支持。 + -FineUI扩展的多语言包在js\languages\fineui目录下,目前只有en,zh_CN,zh_TW三种实现 + -你可以向其中添加自己的语言版本,并执行js\languages下的pack.bat打包,最后编译工程。 + + + ++2009-09-01 v2.0.9 + -为FineUI.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 + +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 + -这将会影响所有的aspx页面,所以要特别关注。 + -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). + +所有的面板默认有两个集合属性(Toolbars和Items). + -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). + -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 + -祝你生日快乐 - 小师妹妹。 + + + ++2009-08-29 v2.0.8 + -FineUI支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 + -将所有的示例转化为英语版本。 + -修正Tree控件的一个BUG(定义Mappings属性时)。 + +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 + -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。 + +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 + -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。 + + + ++2009-08-25 v2.0.7 + -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 + -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 + -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(503684912)。 + -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(your568)。 + -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 + -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 + -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 + +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 + -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 + -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 + + + ++2009-08-14 v2.0.6 + -动态生成菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(shguo)。 + -优化AJAX的内部实现,每个页面保存的ViewState现在减少1/3左右(重要更新)。 + -优化Tree节点的NodeId自动生成,减少ViewState占用。 + + + ++2009-08-09 v2.0 beta5 + +FineUI和Asp.net的提交按钮兼容问题(千帆)。 + -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior="false" + --也就是说生成的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 + --我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 + +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 + -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。 + -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 + -FCKEditor和上传控件兼容。示例在aspnet\fileupload_run.aspx。 + -修正ToolbarText的文本在AJAX下更新的BUG。 + -Button的Pressed属性在AJAX可更新(mgzhenhong)。 + -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 + + + ++2009-08-02 v2.0 beta4 + +和Asp.Net的Forms Authentication兼容[mgzhenhong]。 + -采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。 + -现在支持Response.Redirect,你可以选择Response.Redirect或者FineUI.PageContext.Redirect重定向页面,两者效果一样。 + -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 + -Button增加Type属性(button,reset,submit)[mgzhenhong]。 + -修正Alert.Show方法不能指定文本前图片的BUG[xmq&mgzhenhong]。 + -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 + -增加Menu和Accordion的示例。 + -修正Window控件的IconUrl有时不显示(Target="_parent")的BUG[xmq&mgzhenhong]。 + + + ++2009-07-22 v2.0 beta3 + -兼容FCKEditor。 + -在IE8.0,Firefox3.5下测试通过。以后FineUI将不会对IE6.0提供支持。 + + + ++2009-07-13 v2.0 beta2 + -集成extjs最新版本v3.0。 + +兼容IE6.0-7.0-8.0。 + -这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 + -目前先禁用IE6.0-7.0的QuickTips。 + -优化底层JavaScript。 + + + ++2009-07-05 v2.0 beta1 + -更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。 + -使用YUI Compressor压缩JavaScript和CSS文件。 + -Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。 + -FineUI自身的CSS会紧挨着页面<title>标签引入,这样在<head>中自定义的样式可以覆盖FineUI缺省样式。 + +Alert对话框会遮挡所有的Window窗口。 + -使用一个变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 + -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 + -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 + -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 + -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 + -更新示例工程。 + + + ++2009-03-25 v1.3.1 + -Tree在AJAX回发展开节点时JS错误[xlli]。 + -Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。 + -页面包含FileUpload控件,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx) + -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。 + + + ++2009-03-03 v1.3.0 + -如果弹出的窗口(Ext-Window)含有ASP.NET控件FileUpload,则此弹出窗口在关闭时出现JS错误(http://extjs.com/forum/showthread.php?t=8129)[xlli]。 + -如果页面中存在ASP.NET控件(TextBox),则第二次提交表单就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。 + -页面上放置FineUI-Button和ASP.NET-Button,则点击FineUI-Button时激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。 + -FineUI内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。 + +如果以前你听过不要在FineUI工程中使用ASP.NET标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在FineUI控件和ASP.NET标准控件和平共处了。 + -如果一个ASP.NET按钮控件要使用FineUI的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 + -如果要在一次FineUI的原生AJAX回发时更新ASP.NET控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 + + + ++2009-02-27 v1.2 beta9 + -网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。 + -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。 + +系统底层代码优化(主要是Javascript的封装和BUG修复)。 + -底层使用Javascript创建一个Window控件的代码由原来的2000字符减少为500个字符。 + -PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。 + ---[updated]删除PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 + -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串 + -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。 + ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误! + -A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 + ---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 + -Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本”。 + ---为Window控件增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 + ---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。 + ---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 + -如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。 + ---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 + -Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 + -CurrentActiveWindow改名为ActiveWindow。 + -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values) + ---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。 + + + ++2009-02-23 v1.2 beta8 + -ContentPanel中内容不能自动扩展高度的BUG[huihuang]。 + -DropDownList在Ajax回发时不能计算模拟树的数据[huihuang]。 + -DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。 + -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。 + -页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。 + +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。 + + + ++2008-10-28 v1.2 beta7 + -DropDownList没有选中任何一项,回发时报错[huihuang]。 + -Window显示位置不对,以及不能拖动的BUG[huihuang]。 + +PageContext优化。 + -去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 + -去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。 + -Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[jqpeng]。 + -Image控件增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[jqpeng]。 + -发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。 + -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。 + -Row和Column布局时,修正IE下设置RowHeight="100%"时显示不正确的BUG。 + -AccordionLink当鼠标移上和移开时,有背景色的变化效果[huihuang]。 + +TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。 + -有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 + + + ++2008-10-20 v1.2 beta6 + +使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。 + -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 + +DropDownList优化。 + -去除EnableFirstItem/FirstItemText/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 + 现在可以方便的在后台DropDownList1.Items.Insert(0, new FineUI.ListItem("全部", "-1"));来达到同样的效果。 + +如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[jqpeng]。 + -和Asp.net中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = ""; + -ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。 + -处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。 + -注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。 + +为所有控件属性增加在VS中的智能提示。 + -需要将FineUI.XML和FineUI.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。 + +控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。 + -TriggerIconType.Default -> TriggerIconType.None + -SystemIconType.Empty -> SystemIconType.None + -RegexPattern.USER_DEFINED -> RegexPattern.None + -表单验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。 + +注意:一个属性可以拥有多个值的情况。 + -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 + -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 + +AccordionLink实现为控件。 + -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[jima]。 + +确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form/form_dynamic_run.aspx)。 + + + ++2008-10-15 v1.2 beta5 + -验证表单字段的ValueToCompare属性,为字符串时会出错的BUG。 + +优化下拉列表。 + -验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。 + -DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 + -DropDownList不支持EmptyText属性。 + -ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。 + -DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 + + + ++2008-09-27 v1.2 beta4 + +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。 + -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 + -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 + -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。 + +AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。 + -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上<Items>标签。 + -适当增大AccordionPanel中链接的高度20px->22px,同时对链接的样式也做了微调。 + -通过BodyPadding控制链接列表的边距。 + -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需求由马季提出。 + + + ++2008-09-25 v1.2 beta3 + +代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。 + -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading + -TabStrip/Toolbar + -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。 + -向Form中动态添加控件的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。 + +大部分容器的子控件集合更正为Items(以前有些是Rows)。 + -影响的控件包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 + -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 + -保留TabStrip的Tabs(TabCollection)属性。 + -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 + -预祝今晚神七发射成功。 + + + ++2008-09-22 v1.2 beta2 + +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [xmzhu]。 + -表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时数组越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。 + +代码优化与设计时支持(示例中表单控件都已支持设计)。 + -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/TextBox + -TriggerBox/TwinTriggerBox/Window/TextArea/HtmlEditor/DatePicker/NumberBox + -CheckBox/RadioButton/RadioButtonList/DropDownList + -Grid + + + ++2008-09-19 v1.2 beta1 + -Image/LinkButton/HyperLink增加一些Ajax可更新属性。 + +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。 + -修正Form/SimpleForm中隐藏一个表单字段(Hidden=false)会占据页面空间的BUG。 + -ToolbarText/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [jbzhang]。 + -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果) + + + ++2008-09-09 v1.1 + +Toolbar去除IsPageMenu属性,可以用自定义样式实现,而不应该写在控件中。 + -CssClass="toolbar-pagemenu" CssStyle="border:0px;",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 + -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。 + -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。 + +布局整理。 + -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 + -其中一些控件默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局控件默认的布局是Container。 + -经常用到的布局控件:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor + + + ++2008-09-08 v1.1 beta7 + -MenuButton/MenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [huayu]。 + -MenuButton/MenuHyperLink/MenuSeparator/MenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。 + +大部分的FineUI控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。 + -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。 + -US的FineUI改造强烈依赖于此属性,这个版本发布后可以继续。 + -唯一没有用到FineUIAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。 + + + ++2008-09-04 v1.1 beta6 + -PageContext.Redirect支持普通页面转向和FineUIAjax下页面转向。 + +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[xmzhu]。 + -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。 + -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 + -DropDownList在Ajax时应该先更新数据再设置选定项 [xmzhu]。 + -Button/MenuButton增加Ajax可更新属性OnClientClick [xmzhu]。 + -Tree的Ajax支持(尚需优化)。 + + + ++2008-09-02 v1.1 beta5 + -DropDownList如果第一次没有绑定值,应该绑定到[[]](二维数组),而不是[](一维数组)。 + -模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的值,否则Ajax回发时会出错)。 + -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。 + -不要使用Asp.net的控件HiddenField,而是使用FineUI的HiddenField,因为Asp.net的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。 + -IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。 + -增加两个Theme[Slate/Black](样式尚需完善)。 + + + ++2008-09-01 v1.1 beta4 + -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。 + -RadioButtonList去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm/Form)的背景色一致。 + -TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。 + -Web.config中增加配置项FormLabelWidth="80"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的表单字段标题的宽度。 + +完善Ajax。 + -RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue/SelectedItem)。 + -DropDownList增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/SelectedItem)/DataSource。 + -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。 + -ToolbarText增加Ajax可更新属性Text。 + + + ++2008-08-31 v1.1 beta3 + -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。 + -重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。 + +安全的Ajax设计。 + -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。 + -基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。 + -整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。 + -Ajax整合(目前只支持所有的列表页面)(v0.8.1)。 + + + ++2008-08-29 v1.1 beta1 + +Window控件是否弹出的状态在回发时维持。 + -控件设计的一个原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。 + +完全抛弃Asp.NetAjax,FineUI控件内置Ajax支持。 + -这是一个值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。 + -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 + +在这种设计下,其实可以完全抛弃Javascript。 + -比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 + -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 + -推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。 + +目前FineUIAjax的限制。 + -只对FineUI控件起作用,对Asp.net控件不起作用。 + -对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。 + -对改变控件的Visible属性会有错误。 + -Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。 + -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。 + -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。 + -Grid选中行的状态在第一次回发时不能保持的BUG。 + + + ++2008-08-26 v1.0 + +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 + -主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。 + +优化弹出窗口中IFrame的显示速度。 + -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。 + -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。 + +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。 + -一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。 + -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。 + +TabStrip中非当前Tab会延迟渲染。 + -这会明显加快页面的渲染速度,一个典型的费用审批页面可以减少200ms的渲染时间。 + -由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。 + -不能比较两个DataPicker大小的BUG。 + -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。 + -全新的FineUI.Examples(基础知识/表单控件/数据绑定/容器布局/IFrame框架)。 + + + ++2008-08-19 v0.4 beta6 + +PageManager增加两个属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。 + -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 + -RadioButtonList放在在BorderLayout中显示不了的BUG [zgjiang2]。 + +extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.php?t=43246)(示例在test.aspx) + -现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true; + +需要先回发页面再弹出IFrame窗口。 + -在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。 + -另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 + + + ++2008-08-15 v0.4 beta5 + -点击关闭窗口的按钮,在IE6下会有JS错误。 + -增加BorderLayout控件,示例在iframe/borderlayout.aspx。 + +Radiobuttonlist显示有重影(示例在radio.aspx)。 + -全新的样式。 + -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 + -GetValueReference取得的值不正确的BUG。 + -动态向Form中添加FormRow,并动态的向FormRow中添加表单字段,以及如何取得表单字段的值。(示例在form_dynamic.aspx) + +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[xmzhu]。 + -这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 + -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) + + + ++2008-08-13 v0.4 beta4 + -点击关闭窗口的按钮,在IE下会有JS错误。 + -Window的右上角关闭图标增加提示,优化事件响应。 + -Window的代码重构。 + +修正一个的内存泄漏。 + -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 + -内存存在泄漏时,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 + -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 + -IE窗口最小化时,IE会自动进行垃圾回收。 + + + ++2008-08-12 v0.4 beta3 + -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。 + -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。 + +页面正在加载的提示尽早的显示出来。 + -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 + -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 + + + ++2008-08-08 v0.4 beta2 + -TabStrip延时加载出错。 + -Window的IFrameUrl处理的BUG,比如Pages_FineUI目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_FineUI/FE_ApplyEditor.aspx。 + -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。 + -实现首页下拉菜单和左侧菜单的导航功能。 + -Window的创建在页面显示后进行,不计算在js渲染时间内。 + -优化费用申请页面(尽量减少不必要的层次嵌套)。 + -button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。 + -Window中的保存并关闭按钮和Asp.netAjax冲突。 + -优化关闭Window的js脚本,减少写到页面的js大小。 + -加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。 + + + ++2008-08-05 v0.4 beta1 + -DropDownList去除Traditional属性,和传统的Asp.net控件一样不可编辑。 + -DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。 + -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[dcding]。 + -将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。 + +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [xmzhu]。 + -因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。 + -一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。 + -另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 + +PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。 + -这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦。 + -每个页面必须添加一个PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。 + -TextField等表单字段增加Readonly属性。 + +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。 + -最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe文件夹下) + +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) + -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加一个属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 + -显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 + -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) + +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) + -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 + -示例4,弹出窗口中的弹出窗口。 + -对整个Examples更新测试。 + + + ++2008-07-31 v0.3 beta12 + -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。 + -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。 + -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。 + -Tree控件,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [zgjiang2]。 + +规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。 + -内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。 + -参照Yslow的评分规则,将JS文件引用由head移动到body中。 + -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。 + +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx) + -增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 + + + ++2008-07-24 v0.3 beta11 + -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同时每个表单字段都增加OffsetRight属性 [jima]。 + -Window在回发时设置的Title不起作用的BUG。 + -增加Image控件 [jima]。 + -Tree控件,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [zgjiang2]。 + -Image增加ToolTipTitle/ToolTipAutoHide两个属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。 + -去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [xmzhu]。 + -过滤提示消息中的换行符(转换为<br/>),否则提示信息可能导致页面渲染错误 [dcding]。 + + + ++2008-07-23 v0.3 beta10 + +完善Tree控件。 + -如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。 + -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 + -更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。 + -Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码! + -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。 + + + ++2008-07-22 v0.3 beta9 + +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。 + -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 + +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。 + -虽然最后未能解决<div style="width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;"><div style="width: 16px; height: 18px; float: left;">##</div>差旅交通费</div>在IE和Firefox下显示的不同效果。 + -但是通过用<img src="##" />来代替<div style="background:url(##)" />,从而实现FF和IE下样式的统一。 + -刚看到old9的解决方案:把“差旅交通费”改成“<span style="margin-right: -1000px;">差旅交通费</span>”,在IE下和FF下的都不换行,:-) + -LinkButton增加OnClick事件 [huihuang]。 + -Window通过设置IFrameUrl和Popup不起作用的BUG。[xmzhu]。 + +增加树控件(Tree)(示例在tree2.aspx)。 + -可以在回发时维持树的状态(选中行,折叠/展开,CheckBox)。 + -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 + -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 + + + ++2008-07-16 v0.3 beta8 + +ContentPanel中放置FineUI控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。 + -隐蔽性非常强,原来在ContentPanel中渲染FineUI控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。 + 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 + -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。 + +IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。 + -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 + -最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: + 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();): + 示例在 Site.Master 页面。 + +集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了! + -解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), + 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 + + + ++2008-07-14 v0.3 beta6 + -增加FlashObject控件。 + -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。 + -Accordion选中样式微调。 + -预加载Form表单出错时提示信息的背景图片。 + +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。 + -因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 + -改变Grid中静态的CheckBoxField图片。 + -TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击一个Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx) + + + ++2008-07-12 v0.3 beta5 + -页面菜单Toolbar的分割符和背景不相融合。 + -表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。 + -如果是同种类型的表单字段,不需要指定CompareType,比如两个NumberBox比较值的大小不需要指定CompareType,而一个NumberBox和TextBox比较大小需要指定CompareType。 + +如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。 + -这是由于ajax后执行的javascript中不能有return false语句。 + +在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [xmzhu]。 + -在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。 + -弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是"#"。 + +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [xmzhu]。 + -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 + -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[jima]。 + +增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。 + -增加SplitButton控件。 + + + ++2008-07-09 v0.3 beta4 + -DataPicker默认的日期格式为(yyyy-MM-dd)。 + +Form表单字段(TextBox,DropDownList...)之间可以比较大小 [huihuang]。 + -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 + +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[jima]。 + -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。 + -RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [xmzhu]。 + -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[jima]。 + +表单字段Enable=false时显示颜色太浅 [jima]。 + -覆盖缺省样式的.x-item-disabled,设置不透明。 + + + ++2008-07-08 v0.3 beta3 + -Grid没有数据,向后翻页按钮可以点击的BUG [huihuang]。 + +增加HiddenField控件。 + -其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 + +TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。 + -最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。 + -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。 + +控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。 + -增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。 + -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。 + + + ++2008-07-07 v0.3 beta2 + +增加UpdatePanelConnector控件,支持在布局构建的页面使用Asp.net Ajax。 + -使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。 + -示例在ajax3.aspx/content_page4.aspx。 + -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 + + + ++2008-07-03 v0.3 beta1 + +容器控件的AutoHeight/AutoWidth默认为false。 + -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 + +增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。 + -也可以在ContentPanel中放置用户控件,注意两者的区别。 + +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。 + +支持Asp.net ajax异步加载。 + -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 + -对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。 + + + ++2008-07-02 v0.2 beta12 + +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx) + -支持Iframe内按钮和window右上角关闭按钮。 + -删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 + +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。 + -在Firefox下还有问题。 + +排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。 + -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 + -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 + +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。 + -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。 + -可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。 + + + ++2008-06-30 v0.2 beta11 + -增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。 + -Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录时总记录数不会变化 [zgjiang2]。 + -关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [zgjiang2](示例在window_postback.aspx)。 + -如果表单验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。 + +页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx) + -目前还不支持Window右上角关闭按钮的提示保存功能。 + -Master/Content的内容页中Grid的Sort事件不起作用的BUG [zgjiang2]。 + -Grid中的LinkButtonField设置ConfirmText会出错 [huihuang]。 + -增加静态类Confirm。 + + + ++2008-06-27 v0.2 beta10 + +Grid完善。 + -CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 + -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 + -切换分页时清空选中的值 [jqpeng]。 + -增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [xmzhu] (示例在grid_prerowdatabound.aspx)。 + -DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。 + + + ++2008-06-25 v0.2 beta9 + +Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx/simpleform.aspx) + -在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。 + +关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading控件,这样效果统一。 + +Grid完善。 + -去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在ASP.NET应用中会有很多问题(主要是状态保持的问题)。 + +EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx) + -使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函数中重新绑定数据。 + +增加AllowPaging属性。(示例在grid_paging.aspx) + -使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函数中Grid1.PageIndex = e.NewPageIndex;OK。 + +数据库分页支持。(示例在grid_database_paging.aspx) + -使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定时设置RecordCount为总的记录数,在OnPageIndexChange事件处理函数中Grid1.PageIndex = e.NewPageIndex;LoadPageData(Grid1.PageIndex);OK。 + -增加CheckBox绑定,可响应回发事件 [zgjiang2](示例在grid.aspx)。 + + + ++2008-06-23 v0.2 beta8 + -SimpleForm和Form可以在窗口大小发生变化时自动调整宽度。 + -Accordion右侧菜单增加鼠标hover的样式。 + +TriggerBox。 + -设置Enable=false,不会响应回车和点击事件。 + -增加EnableTextBox属性,只禁用文本框,不禁用Trigger。 + +向弹出的窗口动态传递页面数据。 + -解决方法和Button的ConfirmText的使用一样(<script>)。 + -Window1.GetShowReference(String.Format("triggerbox_iframe2.aspx?param1=<script>{0}</script>", TriggerBox2.GetValueReference())) (示例在textbox.aspx/triggerbox_iframe2.aspx)。 + -Grid的WindowField也支持将页面中的文本框等表单元素的值作为参数传递到Iframe页面 [zgjiang2]。(示例在grid_iframe.aspx/simpleform.aspx) + -Form中只有一行,并且某一列的字段设置Visible=false时会渲染出错的BUG [zgjiang2]。 + -Label/HyperLink在Form外面时不会占据一行的位置。 + -增加LinkButton控件。(示例在hyperlink.aspx) + +Grid完善。 + -增加RowDataBound事件 [zgjiang2]。(示例在grid.aspx) + -增加LinkButtonField [zgjiang2]。(示例在grid.aspx) + + + ++2008-06-20 v0.2 beta7 + -在链接中调用Window1.GetShowReference()出现js错误的BUG [clyin2]。 + -容器的EnableLightBackgroundColor在Form中有多列时渲染不正常 [zgjiang2]。 + -Button增加ConfirmIcon属性(默认MessageBoxIcon.Warning),两个按钮文本“确定”和“取消”[zgjiang2]。 + +Grid上面的Button要显示类似“你确定要删除 2 条信息吗?”这样的信息 [zgjiang2](示例在content_page1.aspx中)。 + -btnConfirmButton.ConfirmText = String.Format("你确定要删除 <b><script>{0}</script></b> 条信息吗?<br/>这是不可恢复操作,确认删除请选择“确定”。", Grid2.GetSelectCountReference());,系统会把<script></script>之间的内容解析为js代码。 + -TriggerBox响应回车按键 [zgjiang2]。 + +怎样查看Window中iframe页面的高度(示例在simpleform.aspx)。 + -在页面添加function onReady(){alert(Ext.get('<%= Panel1.ClientID %>').getSize().height);}脚本即可。 + -如果iframe中页面高579,则要设置Window的高度为579+31=610px(ie和firefox下少有不同,以ie下为准)。 + +Form中的表单字段不能设置Visible=false属性 [zgjiang2]。 + -Grid如果没有绑定数据,在回发时渲染出错 [zgjiang2](示例在budget.aspx)。 + -参考Asp.net自身的控件,DropDownList的SelectedIndex属性只能在后台代码中设置(以前在ASPX代码中设置的都要改动),就好像使用Accordion的ActiveIndex一样。 + -HyperLink增加OnClientClick属性 [jima](示例在hyperlink.aspx)。 + +增加RadioButton控件(可以模拟竖排RadioButtonList),在回发时保持状态 (示例在radio.aspx)。 + -增加RadioButtonList控件,可以在回发时保持状态,可以绑定数据(用法和DropDownList类似) (示例在radio.aspx)。 + -Grid在绑定DataBind()后的DataKeys还是空的BUG [zgjiang2]。 + -TabStrip中的Tab支持IFrame (IE下显示还有问题)。 + +已知问题(已经在v0.2 beta9中解决) + -Grid如果有选择框,则不能客户端排序,否则客户端排序后再回发取得的选中项不正确,目前是增加一个EnableClientSort属性,默认为false。 + + + ++2008-06-19 v0.2 beta6 + +Accordion完善。 + -ActiveIndex只能在代码中设置,不能在ASPX源码中设置。 + -AccordionPanel选中时标题的背景是高亮的(参考CRM实现)[zgjiang2]。 + -TabStrip中有多个Tab时,只有当前显示的Tab内容布局正确,其他不正确 [jima]。 + -IE6下表单字段(比如TextBox)下面的线显示不了(每个页面都应该添加正确的DOCTYPE:xhtml1-transitional)。 + -Utility改名为PageContext,和关闭Window相关的代码移动到CurrentActiveWindow(表示当前激活的窗口)。 + +Window完善。 + -Firefox下,用服务器端隐藏窗体控件时还有问题(Window内部放置一个ContentPanel)的BUG。 + -Window位置WindowPositionType(GoldenSection/Center)(默认使用黄金分割点)(如果不设置Top/Left),不会超出屏幕范围 [clyin2]。 + -CloseAction仅仅是点击关闭按钮的动作(示例在textbox.aspx)。 + -Window中网页的按钮动作通过注册特定的JS脚来实现(CurrentActiveWindow静态类下面的GetCloseReference/GetCloseRefreshReference/GetClosePostBackReference)(示例在textbox.aspx)。 + -GetShowReference(string windowTitle, string iframeUrl)定义改变成GetShowReference(string iframeUrl, string windowTitle),这个和以前的版本不兼容,需要注意! + -容器控件增加EnableLightBackgroundColor属性,此时背景色较浅。 + +增加TriggerBox。 + -服务器端事件TriggerClick。 + +弹出Window,关闭返回值(示例在textbox.aspx/triggerbox_iframe2.aspx)。 + +这个过程非常有意思: + -1.首先在弹出窗口之前,我们通过 TriggerBox1.OnClientTriggerClick = Window1.GetSaveStateReference(TriggerBox1.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx") + "return false;"; 把TriggerBox1的客户端id保存在Window1的js对象中,然后弹出窗口。 + -2.弹出窗口中点击一个按钮处理业务逻辑,并把结果返回给TriggerBox1的代码时:PageContext.RegisterStartupScript(CurrentActiveWindow.GetWriteBackValueReference(CurrentActiveWindow.GetLoadStateReference(), TextBox1.Text) + CurrentActiveWindow.GetClosePostBackReference());取得保存在Window1的js对象中的TriggerBox1的客户端id,然后把TextBox1的值赋给父页面的TriggerBox1,最后关闭Window。 + -3.OK。 + -如果弹出窗口时设置: TriggerBox1.OnClientTriggerClick = Window1.GetSaveStateReference(tbxName.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx") + "return false;"; 则返回时会把内容写到tbxName的文本框中,:-) + -这种方式的扩展性也很好,我们可以点击任一个按钮,弹出窗口,然后把窗口的返回值赋给任意一个文本框。只需要在父页面中:btnSetValueToName.OnClientClick = Window1.GetSaveStateReference(tbxName.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx");(注意:如果最后不加"return false;",则需要设置按钮的EnablePostBack=false,否则点击按钮会回发页面。) + +还有一种常见的应用:从窗口需要返回两个值,一个是给用户看的值(Text),另一个是隐藏的值(Value)(当然也可以返回多个值)。 + -1.首先在Window上下文中保存三个文本框的ClientID: TriggerBox2.OnClientTriggerClick = Window1.GetSaveStateReference(TriggerBox2.ClientID, TriggerBox2_TextBox.ClientID, TriggerBox2_TextBox2.ClientID) + Window1.GetShowReference("", "triggerbox_iframe2.aspx"); + -2.然后在Window返回时向这三个文本框赋值:PageContext.RegisterStartupScript(CurrentActiveWindow.GetWriteBackValueReference(CurrentActiveWindow.GetLoadStateReference(), TextBox1.Text, TextBox1.Text + " 的值", TextBox1.Text + " 的值2") + CurrentActiveWindow.GetCloseReference()); + -3.OK。 + -4.实际执行的javascript代码还是蛮复杂的(if(!activeWindow){var activeWindow=parent.box.window_default_group.getActive();if(!activeWindow)return false;}var controlClientIds=(function(){return eval('parent.box.'+activeWindow.id+'.box_string_state');})();if(typeof(controlClientIds)=='string'){eval('parent.box.'+controlClientIds).setValue('这是返回的值');}else{eval('parent.box.'+controlClientIds[0]).setValue('这是返回的值');var controlValues=['这是返回的值 的值','这是返回的值 的值2'];var controlCount=Math.min(controlClientIds.length-1,controlValues.length);for(var i=0;i<controlCount;i++){eval('parent.box.'+controlClientIds[i+1]).setValue(controlValues[i]);}}if(!activeWindow){var activeWindow=parent.box.window_default_group.getActive();if(!activeWindow)return false;}eval('parent.box.'+activeWindow.id+'_hide();');),不过不用管它,呵呵。 + -Button/TriggerBox增加EnablePostBack属性,EnablePostBack=false则点击按钮不会回发(这样OnClientClick时就不必写"return false;")(示例在triggerbox_iframe2.aspx)。 + + + ++2008-06-17 v0.2 beta4 + +Window完善。 + -标题前面的图标显示位置不正确(window.aspx)。 + -Window窗体有背景色的BUG(应该为白色)(window.aspx)。 + -Window的滚动条的颜色不对(button_iframe.aspx)。 + -登陆页面脚本错误,去掉Window控件的DefaultButtonID属性。 + +Grid,WindowField的DataWindowTitleFormatString属性有问题。 + -默认页面字体大小为12px。 + -容器控件(Panel,Accordion等)增加EnableLargeHeader属性(默认为false),同时删除Accordion的UsePanelHeaderStyle属性。 + -Form/SimpleForm的LabelWidth默认为80px(原来的是100px)。 + -表单字段控件增加FocusOnPageLoad属性,可以在页面加载完毕后获得焦点(示例在login.aspx)。 + -单行文本框(TextBox/NumberBox/DataPicker/DropDownList)增加NextFocusControlID属性,指定回车时获取焦点的控件(这样login.aspx可以实现两种效果:1.用户名框回车焦点到密码框,密码框回车提交页面;2.用户名框或密码框回车都提交页面)。 + -删除图标替换,按钮的关闭/删除/保存并继续等图标可以使用属性SystemIcon(枚举类型)来指定。 + + + ++2008-06-16 v0.2 beta3 + +Accordion完善(示例在content_page1.aspx)。 + -名称变化,增加AccordionPanel子控件,增加属性(ShowCollapseTool/EnableActiveOnTop/EnableFill/EnableAnimate)。 + -增加ActiveIndex属性,并在回发时保持状态。 + -增加UsePanelHeaderStyle属性,将AccordionPanel的标题渲染成Panel的标题样式。 + -标题前面的图标大小必须是:24*24,所有容器控件(Panel/Form等)的标题前面的图标都要求24*24。 + -页面菜单样式调整(设置Toolbar的IsPageMenu="true")。 + -滚动条和链接缺省样式的定义(在dll中定义)。 + + + ++2008-06-13 v0.2 beta2 + +Master/Content完善。 + -Content中弹出的Window窗口只能在Content中移动的BUG [leizhang5&clyin2&jima]。 + -Content下的最外层Panel不用设置AutoHeight=false&AutoWidth=false,这个是默认的 [leizhang5]。 + -Grid的工具条上的新增按钮和检查是否选中按钮出错 [zgjiang2]。(示例在content_page1.aspx) + +优化框架的视图状态(涉及所有的容器控件)。 + +参考Asp.net Ajax Extension对视图状态的处理方式。 + -所有Box控件实现INamingContainer接口。 + -对于像Panel这样的容器控件,设置[ParseChildren(true)] & [PersistChildren(true)],也就是说把控件内容作为属性,但是把控件的子控件作为控件保持状态,这样就不用手工一层一层的向下维护属性的视图状态了。 + -在控件的OnInit中,EnsureChildControls(),这样可以确保在Page_Load时引用的控件的ClientID是正确的(有层次结构)。 + -修正“ContentPanel放置在Panel等控件中,不能在回发时保持状态”的BUG。 + -pagelayout2.aspx中文本框的状态不能保持,其实时渲染时没有放在form中,参考extjs的开源实现FormViewport。 + -Master/Content的Content中的控件可以保持状态。 + -Grid中的WindowField,修改DataTitleField为DataWindowTitleField。 + -DropDownList的Traditional默认为true。 + + + ++2008-06-12 v0.2 beta1 + +Grid完善。 + +Grid控件中的列增加Visible属性,可以隐藏/显示列,使用:Grid1.Columns[0].Hidden = false; (Grid前面的多选框列和序号列不计算在内) [zgjiang2]。 + -CheckBoxField不使用CheckBox的图片,这样容易和Grid自身的多选框混淆 [zgjiang2]。 + -如果DataSource是对象的集合,则支持复合对象,也即时可以绑定到UserInfo.UserName的形式(示例在grid_complex.aspx)[zgjiang2]。 + -如果Grid放在Panel中,则WindowField不起作用,已经修正 [zgjiang2&jima]。 + -ToolBar内的Button不能设置Visible=false的BUG(同时容器控件中的子控件也面临同样BUG,并修正)[zgjiang2]。 + -Panel中只放置一个Toolbar,不放更多控件时会出错,已经修正 [zgjiang2]。 + +DropDownList完善。 + -和Grid的DataSource一样,DataTextField/DataValueField也支持复合对象的绑定。 + -自动回发的事件被激发两次 [zgjiang2]。 + +TabStrip中放置Form时显示不正确 [jima]。 + +页面布局完善。 + -容器控件增加属性(Layout=Anchor/Fit,AutoScroll,AutoHeight,AutoWidth,AnchorValue)。 + -Layout="",自动扩展的宽度和高度(autoHeight=true 并且 autoWidth=true)。 + -Layout=Fit,容器控件A中只能有一个子控件B,并且B会填充整个A(示例在layout_fit.aspx)。 + +Layout=Anchor,容器控件A可以包含很多子控件B1,B2,B3...通过B1,B2,B3的属性AnchorValue控制每个控件占据的宽度和高度(示例在layout_anchor.aspx)。 + -常用数据(每行表单26px,如果有一个三行的表单,并且设置了BodyPadding="5px",则此表单占据高度为 26px*3+5px*2=88px)。 + -经典查询页面布局为:Panel(Layout=Anchor)[Form(AnchorValue='100%'), Panel(Layout=Fit & AnchorValue='100% -88')[Grid]]。 + 其中"100% -88":第一个参数表示宽度,可以是百分比也可以是一个负整数(比如-56意思是距离右边框56px);第二个参数表示高度,可以是百分比也可以是一个负整数(比如-88意思是距离下边框88px); + +整体页面框架。 + -增加PageLayout控件,用于页面的整体布局(示例在pagelayout2.aspx)。 + -支持MasterPage(示例在Site.master/content_page1.aspx)(VERY COOL~~~)。 + -增加Accordin控件。 + + + ++2008-06-10 v0.1 beta12 + +Grid完善。 + -如果没有选中任何一项,则弹出对话框提示(btn1.OnClientClick=String.Format("if(!{0}){{{1}return false;}}",grid1.GetHasSelectionReference(),Alert.GetShowReference('至少选中一项'));),太麻烦,封装成一个函数(btn1.OnClientClick=grid1.GetNoSelectionAlertReference('至少选中一项');)[zgjiang2]。 + -禁用客户端排序(在GridColumn中不设置SortField即可)[clyin2]。 + +Button完善。 + -增加系统图标属性SystemIcon,并能自动设置ToolTip属性 [jima]。 + -按钮可以按下(在Toolbar中使用),增加属性(EnablePress/Pressed)(例子在simpleform.aspx)。 + -默认按钮的右侧不留任何空白,同时增加属性MarginRight来设置右侧空白。 + +DropDownList完善。 + -增加验证(Required)[clyin2]。 + -增加一些属性(Traditional将下拉框变成传统的不可编辑模式,Resizable下拉列表可以拖放大小) + -增加自动回发的支持(AutoPostBack属性和SelectedIndexChanged事件)[clyin2]。 + -下拉列表中经常需要一项“全部”,增加默认支持(EnableFirstItem/FirstItemText(默认"全部")/FirstItemText(默认"-1"))[jima]。 + +Form完善。 + -FormRow实现为控件。 + -Form中两列的LabelWidth不起作用。 + -Form中一列和两列的右侧对齐问题(全部距右边框25px)。 + -很多控件(包括Form/Panel/SimpleForm)增加在源代码(HTML)视图下的自动排版功能(使用Ctrl+D+K自动格式化),这对ASPX源代码的清晰非常有好处。 + -增加HyperLink控件(使用类似Label) [jima]。 + -在web.config中增加一个配置项(MessageTarget=side/qtip),设置表单验证的提示信息的显示方式。 + -增加静态类Utility(GetCloseWindowReference/RegisterStartupScript)。 + +Window的IFrame网页中添加关闭Window的功能(可以指定关闭后刷新Window所在页面或者引发Window的回发事件,在Window中定义)。 + -关闭Window:btnClose.OnClientClick = FineUI.PageContext.GetCloseWindowReference() + "return false;";(例子在button_iframe.aspx) + -保存后关闭Window:在按钮的回发事件最后注册脚本 FineUI.PageContext.RegisterStartupScript(Page, FineUI.PageContext.GetCloseWindowReference()); (示例在button_iframe.aspx) + +Toolbar完善(示例在simpleform.aspx)。 + -增加ToolbarSeparator,工具条分隔符。 + -增加ToolbarText,可以在工具栏放置静态的文本内容。 + -增加ToolbarFill,可以将工具栏分割成左右两部分。 + -页面整体布局示例(在pagelayout.aspx)。 + +已知问题。 + -有时设计时更改的内容不能保存到HTML源代码中,建议的做法是在HTML代码中修改,在设计时预览效果。 + + + ++2008-06-05 v0.1 beta10 + -Button的 OnClientClick 容错处理,如果最后没有分号结束,添加分号结束 [zgjiang2]。 + +Grid完善。 + -Grid增加客户端脚本,判断是否有CheckBox被选中(GetHasSelectionReference/GetSelectCountReference)(示例在grid.aspx) [zgjiang2]。 + -Grid如果不设置DataKeyNames会出错 [zgjiang2]。 + +Window完善。 + -Window控件通过右上角的图标按钮关闭,不能在回发时保持状态 [zgjiang2]。 + -关闭Window控件时的动作(CloseAction=None/Refresh/PostBack),并增加Close事件(示例在window.aspx)。 + -增加一些控件的默认属性,在从工具栏拖放到代码区域时直接赋值(Panel/Form/Window等)。 + -所有容器的BodyPadding默认为"0px"。 + -容器增加背景色支持(EnableBackgroundColor/BackgroundColor)(每种主题的默认背景色是不同,可以自己设置背景色)(示例在grid.aspx)。 + +Form完善。 + -DropDownList如果放在Form中,则不能在回发时保持状态 [zgjiang2&jima]。 + -Form中的FormRow不再是控件。 + -Tree/DropDownTree控件原型(只是简单的渲染,没有绑定编辑功能)(示例在tree.aspx)。 + + + ++2008-06-03 v0.1 beta9 + +增加IFrame支持。 + -Panel、Tab、Window、GroupPanel增加属性(EnableIFrame、IFrameUrl),用来指定iframe加载的网页地址。 + -Button控件增加OnClientClick属性,可以设置点击按钮时需要执行的客户端脚本 [zgjiang2]。 + +Window完善。 + -增加 Popup 属性(默认为true),指定页面加载时显示窗口,注意和Visible=false的区别(不渲染),Popup=false(渲染但不弹出)。 + -回发时保持弹出窗体是否显示的状态。 + -客户端(JavaScript)、服务器端代码(C#)显示隐藏弹出窗口的代码示例(window.aspx)。 + -如果Window窗体中嵌套ContentPanel,则隐藏(Popup=false)窗体时ContentPanel任然显示的BUG。 + -客户端改变IFrameUrl和窗体的Title,并在回发时保持状态(button_iframe.aspx)。 + +Grid和IFrame的交互。 + -示例(grid_iframe.aspx)。 + + + ++2008-05-30 v0.1 beta8 + +增加ContentPanel控件。 + -设计时支持,ContentPanel默认不显示边框和标题栏,并且BodyPadding为0。 + -去掉容器的RenderChildrenAsContent属性(这是一个不易用的设计),增加的ContentPanel控件专门放置html/asp/box标签,我们的Panel/Window/Tab/GroupPanel中只能放置box标签。 + -不向后兼容,这将影响所有的容器控件示例,已经更新工程。 + -Window窗口居中显示时避免闪烁(其实是移动Window造成的,现在的做法是先移动再显示,就不会闪烁了)。 + +DropDownList[jima]。 + -可以绑定到简单/复杂类型的列表(比如:List<string>/List<MyClass>),如果未指定DataTextField/DataValueField,则取对象的ToString()值。 + -Items集合增加 FindByText/FindByValue 方法。 + -Button控件增加一个IconUrl属性,可以在按钮文字前面添加一个图标。 + +增加Toolbar控件。 + -这是一个很酷的效果,可以向Panel/Window/SimpleForm等容器控件中加入顶部工具栏或底部工具栏。 + -设计时支持。 + + + ++2008-05-29 v0.1 beta7 + +Grid完善。 + -支持DataKeyNames,DataKeys,SelectedRowIndexArray属性,方便对选中行进行控制。 + -完善设计时支持,增加列编辑窗口。 + -列类型增加ImageField。 + -列增加Width属性,每列都应该指定列的宽度(除了设置ExpandUnusedSpace="True"的列)。 + -列的ExpandUnusedSpace指定此列的宽度是否占用未使用的空间,每个Grid只能有一列的ExpandUnusedSpace为true。 + -支持服务器端排序(列增加SortField属性,Grid增加EnableServerSort属性,Sort事件),客户端排序是默认支持的。 + -支持客户端分页(EnableClientPaging,PageSize),不需要回发刷新,适合数据量比较小的情况(<500)。 + -回发服务器过程中,能够保持客户端分页的状态和选中的状态。 + +Grid已知问题。 + -不支持行内按钮事件。 + -TemplateField内不能包含服务器端控件。 + -不支持服务器端分页。 + -Form中的字段不会随着页面的缩放而缩放,目前没有找到解决方法 [jima]。 + -Button不要占据一行,多个按钮排列成一行(并且默认margin-right:10px),现在不再需要table定位了 [jima]。 + + + ++2008-05-27 v0.1 beta6 + +Grid功能增强(不支持分页)。 + -设计时支持。 + -单选/多选,回发时保持状态。 + -属性控制是否显示多选框。 + -属性控制是否显示行序号。 + -客户端排序。 + -列类型可以为BoundField,CheckBoxField,HyperLinkField,TemplateField。 + -TemplateField中可以自定义数据绑定,目前只支持Asp.Net1.1的绑定语法<%# DataBinder.Eval(Container.DataItem, "MyValue") %>,不支持Asp.Net2.0的语法<%# Eval("MyValue") %>。 + -用户可以在function onReady(){}函数中,书写自定义Javascript代码块 [jqpeng]。 + -Button增加弹出Confirm对话框的功能(只需要设置属性ConfirmText)[jima]。 + -Window控件增加在窗体定位的属性(Top/Left)[jqpeng]。 + -容器控件增加IconUrl属性,可以在标题前面增加一个图标 [jqpeng]。 + + + ++2008-05-23 v0.1 beta5 + -如果Button的ValidateForms指定的表单嵌套在其他容器里面,会渲染失败 [jqpeng]。 + -去除容器的RenderAsItems属性(字面意思难理解),增加RenderChildrenAsContent(默认为false,将容器子控件渲染为内容),如果要在容器中放置System.Web.UI.HtmlControls和System.Web.UI.WebControls子控件,必须设置RenderChildrenAsContent="true"。 + -容器控件的内容只有在容器渲染完成后(RenderChildrenAsContent="true"),才会显示出来。 + -如果设置容器控件不可折叠,渲染时去掉保持折叠状态的隐藏字段。 + -在页面回发时保持可折叠容器的折叠状态 [jqpeng]。 + -在页面渲染时,Button的Text属性默认为"["+ID+"]",容器的Title属性默认为"["+ID+"]"。 + -容器的BodyPadding实现为字符串,可以设置为"5px"或"5px 10px"或"5px 10px 10px 20px",最终渲染为Style的padding属性。 + -PageLoading可以更改加载图片,可以设置回发时是否显示。 + -TextBox等表单控件放置在FromPanel中,其状态在回发过程中不能保持 [jqpeng]。 + -SimpleForm/Form的FormRow属性不再只能添加表单字段,而是和Panel一样可以添加任意的FineUI控件,这就意味这可以很方便的把Panel/Button/GroupPanel/TabPanel添加到Form中。 + -SimpleForm/Form的设计时有很大变化,去除SimpleForm/Form的字段设计窗口(可以方便的从工具栏拖放),FormRow重新实现为控件。 + + + ++2008-05-20 v0.1 beta4 + -修正表单字段的TabIndex属性,应该从1开始设置。 + -Button增加ValidateForms属性,可以执行提交之前对哪些表单进行有效性验证 [jima]。 + -表单嵌套在容器控件时,宽度和高度的自适应。Panel/GroupPanel/Window/Tab这几个控件增加RenderAsItems属性,表示将容器渲染为集合而非内容,其实FormPanel/SimpleFormPanel默认的就是把容器渲染为集合。 + -新增PageLoading控件,用于在页面尚未完成加载时显示Loading图标,完成加载后渐变到页面内容。 + -新增DropDownList控件。 + -新增Grid控件(原型阶段)。 + -改名:TabPanel->TabStrip,SimpleFormPanel->SimpleForm,FormPanel->Form,Row->FormRow。 + + + ++2008-05-14 v0.1 beta3 + -TabPanel设计时样式修正。 + -TabPanel增加选项卡编辑窗口。 + -SimpleFormPanel/FormPanel编辑表单字段的窗体的易用性调整。 + -设计时,阻止拖放非表单字段控件到表单字段编辑区域。 + -所有表单字段的设计时样式调整,表单字段必须放置在SimpleFormPanel/FormPanel容器中,已更新示例工程。 + -SimpleFormPanel设计时的可编辑区域,最后增加一个空白行,方便从工具条拖放表单字段控件。 + -FormPanel设计时用Table组织一行的显示效果,可以方便在一行中增加删除表单字段,这个效果非常酷,可以在行之间增加删除调整控件,行的列数会自动调整。 + -FormPanel中的Row不再实现为控件,同时舍弃ColumnCount属性,降低复杂度。 + -兼容UTF-8和GB2312类型的网站。 + -DesignTimeControl改名为DesignTimeStyle,需要在设计时样式支持的页面需要添加此控件。 + -表单字段增加属性ShowRedStar,在Label后面显示一个红色的星号,用来标示关键字段。 + -HtmlEditor控件的高度设置没用,这个应该是extjs的bug(http://extjs.com/forum/showthread.php?t=28150)[jima]。 + -允许自动回发的CheckBox放置在FormPanel中,在页面渲染时会回发到后台的BUG。 + + + ++2008-05-08 v0.1 beta2 + -增加控件的设计时支持。舍弃FormPanel里面的RowSet控件,并增加 GroupPanel控件。 + + + ++2008-04-30 v0.1 beta1 + -共包含Button、TextBox、TextArea、DataPicker、NumberBox、HtmlEditor、CheckBox、Label、 + Panel、Window、TabPanel、FormPanel、SimpleFormPanel 共 13 个服务器端控件和 Alert 一个静态帮助类。 + + + ++2008-04-25 v0.1 preview2 + -增加DropDownList,FormPanel,Label,CheckBox,RadioBox,Panel,TabPanel,TextArea,Window共 9 个服务端控件。 + + + ++2008-04-11 v0.1 preview + -包含Alert,Button,TextBox,DataBox,HtmlBox,Calendar,NumberBox共 7 个简单的控件。 + + + +Copyright 2008 30372245@qq.com, All rights reserved. diff --git a/FineUI_v6/FineUI/release_history_en.txt b/FineUI_v6/FineUI/release_history_en.txt new file mode 100644 index 0000000..2f67ea4 --- /dev/null +++ b/FineUI_v6/FineUI/release_history_en.txt @@ -0,0 +1,404 @@ +About FineUI +ExtJS based open source ASP.NET Controls + +FineUI Mission +Create No JavaScript, No CSS, No UpdatePanel, No ViewState and No WebServices web application + +Support Browsers +Chrome、Firefox、Safari、IE 8.0+ + +License +Apache License 2.0 (Apache) +Note: ExtJS is released under GPL v3 license (http://www.sencha.com/license). + +Demo&Download +http://fineui.com/demo/ + +You can download FineUI from CodePlex or install using NuGet. +PM> Install-Package FineUI + + + +Release History + +Check chinese version for latest releases. + + ++2012-11-18 v3.2.0 + -Check the chinese version. + + + ++2012-08-18 v3.1.9 + -Check the chinese version. + + + ++2012-06-24 v3.1.8 + -Check the chinese version. + + + ++2012-06-03 v3.1.7 + -Check the chinese version. + + + ++2012-05-20 v3.1.6 + -Check the chinese version. + + + ++2012-05-06 v3.1.5 + -Check the chinese version. + + + ++2012-04-24 v3.1.4 + -Check the chinese version. + + + ++2012-04-08 v3.1.3 + -Check the chinese version. + + + ++2012-04-04 v3.1.2 + -Check the chinese version. + + + ++2012-04-02 v3.1.1 + -Check the chinese version. + + + ++2012-03-04 v3.1.0 + -Check the chinese version. + + ++2012-02-05 v3.0.1 + -Check the chinese version. + + + ++2012-01-28 v3.0 + -Check the chinese version. + + + ++2011-05-09 v2.3.5 + -Design time support for most controls. + -From the next verion, I will start localization strategic adjustment, and Simplied Chinese will be the official support language. + + + ++2011-05-02 v2.3.4 + -Update to extjs v3.3.3(GMz). + -Fix issue #9869(Pablogrind). + -Add CMargins for Region control - issue #9597(ronnieoverby). + +Fix issue #9448(tonyredondo). + -It's bug only exist in Tree control, we need the UniqueID for postback usage. + -Fix Grid sort icon display issue. + -Fix a bug in X.utils.updateViewState, which cause the grid basic example doesn't work when postback more than 2 times. + + + ++2011-02-22 v2.3.3 + -Update to extjs v3.3.1. + -Add language support to Ext.ux.TabCloseMenu(en, zh_CN, zh_TW). + + + ++2010-09-29 v2.3.2 + -Make sure there is no error when no data is binding to Grid in page's first load. + -Fix a bug that DataFormatString not works in Grid, for example {0:yy-MM-dd HH:mm}. + -Fix a bug that DataTable cann't be binded to DropDownList(RedOcean). + -Add language translation for Turkish(abdullaharslan). + -Add NullDisplayText property to BoundField control of Grid, the default value of this property is an empty string. + -Fix a bug in DatePicker that Text = 31/01/2010 (31 Jan 2010) will return NULL, trying to parse DateTime using it's DateFormatString(OktaEndy). + -Fix a bug(ComboBox in extjs v3.2.2), the getValue function will always get the first item of duplicate item text(ben.zhou). + -Apply patch #6593, #6621(vbelyaev). + -Fix a bug that Grid paging is very slow under IE7&IE6(youwei, StevenGuan, hazardvn, gavindou, ttjacky). + -Russian language FineUI translation(vbelyaev). + -Construction like ToString("F2") on system with comma as decimal separator produce incorrect properties value(vbelyaev). + + + ++2010-06-30 v2.3.1 + -FineUI controls will on longer depends on ViewState, more than 1/4 data exchange will be saved. + -Enhancement for controls and examples. + + + ++2010-03-28 v2.2.1 + +Add a overload funtion to GetAddTabReference of TabStrip that you can specify the tab's icon url(mmdcup). + -Fix a bug when invoking this function through PageContext.RegisterStartupScript, the icon disappears(zhaowenke). + -Fix a bug in basic/hello.aspx, which can not pupop dialog in a new window. + -Hide the RegionPanel's border of the example site home page - ShowBorder="false". + +Integrate with extjs3.1.0. + -Add a new theme - Access. + -Fix a bug in firefox that page will disappear when using zoom in/out. + -Delete EnableLightBackgroundColor property for Panel, and EnableBackgroundColor property only support Blue and Gray themes. + + + ++2010-01-31 v2.2.0 + -Make ImageButton control in Asp.net has the similar behavior of Button(Ajax Submit)(261629698). + +Add two functions GetAddTabReference and GetRemoveTabReference to TabStrip, which are used to dynamic add Tabs. + -Add example tabstrip/tabstrip_addtab.aspx. + -Refector FineUI.Examples structure, now there is only one level iframe. + -Add EnableTabCloseMenu property to TabStrip, which is used to enable the mouse right menu. + -Add DecimalPrecision property to NumberBox control(Need set the property NoDecimal="false")(zqmars). + -Window control updates. + -Click the close button of a Window control, it will not show the confirm dialog by default. + -GetConfirmFormModifiedHideReference is renamed to GetConfirmHideReference, and the same thing happened to other funtions. + -Add two property EnableConfirmOnClose(default:false), CloseAction(Hide, HideRefresh, HidePostBack). + -Fix a bug that prevent EnableMaximize from working in Window control. + -Remove SystemIcon property from Button control, now you should use Icon="SystemClose" instead of SystemIcon="Close". + -Set WindowPosition default to Center, not GoldenSection. + +The target property of Button, Window etc controls change. + -The type of Window Target property is changed from string to enum, don't forget to change code in aspx: Target="_self" -> Target="Self", Target="_parent" -> Target="Parent". + -MenuButton, LinkButton, Button, LinkButtonField ConfirmTarget Target property is changed from string to enum. + -Confirm.GetShowReference and Alert.GetShowReference has the similar changes. + -Add ValidateTarget property to MenuButton, LinkButton, Button, LinkButtonField, to control where to show the form validation failure message. + + + ++2010-01-06 v2.1.9 + -Integrate with extjs3.1.0. + -Fix css issue in gray theme. + -Fix a bug that Grid column cann't contain chinese characters(davidwen). + -Add AjaxTimeout property to Web.config and PageManager(unit:second, default:30). + -Fix a bug that Grid control cann't get SelectedRowIndexArray property in PageIndexChange event(Violet). + -Button control will not gain display:inline CSS rules auto, if you want two buttons stay in the same line, please use float:left CSS rule. + -Fix a bug that popup menu's position is not right in Firefox(eroach). + -Add EnableEdit for TriggerBox and TwinTriggerBox controls. + -Use Hidden property to show and hide control instead of Visible, which is a readonly property now. + -Use Hidden to show and hide Window control, now Popup is marked as an Obsolete property. + -Method GetCloseReference in Window and GetCloseReference in ActiveWindow are renamed to GetHideReference(Notice all Close character are changed to Hide). + -Add EnableClose property(default false), two methods GetShowReference and GetHideReference to Tab control(anson). + -Fix a bug that Xml document binding to Tree has a error Icon property mapping(nopnop9). + -Fix a bug that HtmlEditor is not editable(TheBox). + -Fix a bug there will be blank page under IE sometimes(olivia919). + + + ++2009-12-06 v2.1.8 + -Fix a serious bug in previous version, the Window with iframe can't be opened twice(alexa99). + -Fix a JS error of Grid control in IE(lqm4108). + -Fix a JS bug in Alert class(when there are quote in the message or title)(sun1299shine). + +Integrate with extjs3.0.3. + -fix an issue where MessageBox width is calculated differently depending on the previous content. + -Add new theme - Gray. + -Add change language and theme dropdown list for examples. + -Add static method Refresh to PageContext, which is used in changing language and theme. + + + ++2009-12-01 v2.1.7 + -Add example(iframe/parent_postback_run3.aspx), how to postback parent page through simple javascript(eroach). + -Fix some typos(bmck). + -Remove SplitColor property from Region control, and add CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip properties(bmck). + -Rename BorderPanel to RegionPanel. + -Add MarkInvalid method for DropDownList(sun1299shine). + -Add example for interaction of Province-Region-Town of China(data/shengshixian.aspx)(Blues T). + -Fix a regression bug when changing Tab with IFrameUrl enabled will cause the page load again(eroach). + -Fix a bug that Grid with AutoPostBack="true", RowClick event will override other control's(LinkButtonField, HyperLinkField, CheckBoxField) click event(yymaoji). + + + ++2009-11-26 v2.1.6 + +Fix a bug when dynamic create Grid's columns(gxpan). + -Add an example(data/grid_dynamic_columns.aspx). + -Fix a bug that Form cann't adaptive browser size chaneg(kaywood)(WorkItem#6309). + -Add an overload method Alert.Show(message, title, icon)(TheBox)(WorkItem#6353). + -Add AJAX property IFrameUrl for container control(such as Panel,Region,Tab etc.)(BluesT). + -Redesign the implement of simulate tree DropDownList, avoid flicker when select a ListItem. + + + ++2009-11-21 v2.1.5 + +Tree optimize。 + -Fix the bug that states of Expanded and Checked items cann't be persisted through page post back. + -GetNodeById renamed to FindNode, which is consistent with FindControl of Asp.net controls. + -Remove CheckedNodeIDArray property, Add GetCheckedNodes and GetCheckedNodeIDs functions. + -Remove ExpandedNodeIDArray property, Add GetExpandedNodes and GetExpandedNodeIDs functions. + -Add example(data/tree_select_run.aspx), to explain how to check all children node when a parent node is checked(wjl_wjl520). + +NodeId property of TreeNode renamed to NodeID, this is a convention of FineUI. + -At the same time, In GridColumn class ColumnId renamed to ColumnID and GetColumnId renamed to GetColumnID. + -Grid1.Columns.FindColumnById replaced by Grid1.FindColumn function. + -Add Node property for the following class TreeCheckEventArgs, TreeExpandEventArgs and TreeCommandEventArgs. + -Add Focus(overwrite Control's Focus function) and GetFocusReference functions for all componnets. + -Add example other/custom_postback.aspx(thebox)。 + -Explain a way to send a postback on a textbox when you click the enter key. + -Add AutoLeafIdentification property to Tree control. + -Add examples(tree_auto_leaf_identification.aspx)(wdrabbit)。 + + + ++2009-11-17 v2.1.4 + -Fix a bug that Window's close button tooltip is always Chinese text(thebox). + -Design time support for part of FineUI controls. + -There is a mistake in v0.2beta2 about PersistChildren(true), which is design time property, no relation to runtime state persistence. + -Fix a bug that CheckedChanged event of CheckBox control will be triggered twice. + -Add AutoPostBack property for TextBox,TextArea,DatePicker,NumberBox,TriggerBox etc.(dk3214). + +Add RequiredMessage,MaxLengthMessage,MinLengthMessage for form field. + +Add MarkInvalid and GetMarkInvalidReference for form field controls(form/form_validate.aspx).(sun1299shine). + + + ++2009-10-19 v2.1.3 + +Add an AJAX properties list for all controls(/ajax.aspx). + -FineUI support native AJAX, which not means all properties change will be relfected on the page. + -Load s.gif from local server, not the remote extjs.com(efrigate43,abaocoole). + -Ensure the asp.net button still has AJAX feature after AJAX update. + -Update demo /basic/login.aspx, using CAPTCHA image(kedee). + -Add AutoPostBack property and RowClick event for Grid(/data/grid_autopostback.aspx)(chenguizhu2006). + -Add AJAX property ReadOnly for all form field controls(skydb). + -TemplateField will have a unique ID on the page Grid, for example Grid1_ct5_Label2,Grid1_ct6_Label2(geruger). + + + ++2009-09-27 v2.1.2 + -Add GetExpandAllNodesReference and GetCollapseAllNodesReference to tree control. + -Fix the bug when loading multi-lang package in RELEASE mode(yigehaoren). + -Add language - pt_BR, provide by Ujvari. + +Add Icon property to panel control(Include Grid,Tree,Form...), which contains more than 1700 icons. + -If the panel has IconUrl already, then IconUrl will take effect. + -All the icons can be found here - icon.aspx. + -Add Icon property for Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image. + + + ++2009-09-15 v2.1.1 + -Fix a bug with AccordionPane's Items property. + +Add ConfirmTarget property for Controls like Button, MenuButton, LinkButton, LinkButtonField. + -Use this property(ConfirmTarget="_parent"), we can popup confirm dialog in parent page(Similar to Target="_parent" of Window control). + +Add Javascript callback function to FineUI.Alert.Show when clicking the OK button. + -A typical scenario: Open an edit page in new window, if the url parameter is incorrect, first show an alert dialog, and then close the popup window when user click the OK button. + -FineUI.Alert.Show("Parameter error!", String.Empty, FineUI.ActiveWindow.GetCloseReference()); + +CheckBox in the TreeNode can be clicked with server-side event. + -Add AutoPostBack property to TreeNode, add event data class - TreeCheckEventArgs, add NodeCheck event to Tree。 + -Examples:http://fineui.com/data/tree_run.aspx + -Add GetNoSelectionAlertInParentReference function to Grid, which stands for a piece of javascript code to show an alert dialog in parent window. + -Fix a bug that underline character cann't be the prefix of CSS class name in IE7(Steve.Wei)。 + -Add control Timer, which procedure an interval AJAX request to server. + + + ++2009-09-04 v2.1.0 + -Fix a bug in Button's Pressed property. + -Optimize the AJAX process of Tree control. + +Add autocomplete="off" property to form tag. + -Refer: http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 + +Add all extjs3.0 languages to FineUI. + -FineUI has it's own extend language pack in js\languages\fineui, we currently support en,zh_CN,zh_TW. + -You can add your own language to js\languages, and don't forget to run pack.bat and rebuild the project. + + + ++2009-09-01 v2.0.9 + -Add two static functions ShowInParent and GetShowInParentReference to FineUI.Alert. Now we can show dialog in parent window. + +You must declare control's collection property explicitly in aspx source code now, which you don't need to do so before. + -This will affect all of you aspx pages, please take special attention! + -These properties include Tabs in TabStrip, Items in PanelBase, Nodes in TreeNode etc. + -Rename AccordionPanel to AccordionPane (It's a name used in Asp.net AJAX). + +All panels have two default collection properties - Toolbars and Items. + -Although TabStrip, From, Tree, Accordion inherite the Items property, but it's useless. + -This will affect all of you aspx pages, please separate the toolbars from the items. + -Happy birthday to you - xiaoshi meimei. + + + ++2009-08-29 v2.0.8 + -FineUI now support mutli-languages(en,zh_CN,zh_TW), you can modify it in Web.config. + -Convert example application into english. + -Fix a bug in Tree Control with Mappings property. + +PageManager.Instance should exist in HttpContext.Current, not a global static parameter. + -The Asp.net compatibility is ok now according to this bug fix. + +Remove PageManager function AddAjaxAspnetControls, Add AjaxAspnetControls property. + -This property is similar to ValidateForms of Button. You can check the example in aspnet folder. + + + ++2009-08-25 v2.0.7 + -Add DisableControlBeforePostBack for Button(Whether to disable control before postback, default to true). + -You can modify Values property of Grid freely. + -Add example - how to export Grid to Excel(data\grid_excel_run.aspx)(503684912). + -Add Enabled="false" to TreeNode, this item is gray and can't be selected(your568). + -Fix the bug NavigateUrl of TreeNode can't accept server-side url(such as ~/default.aspx). + -Add example(other\accordion_tree_run.aspx). + -Fix the bug Icon in Panel show abnormal(class name of CSS can't contain $ character). + +Remove PageLayout control, instead you can use BorderLayout control and specify AutoSizePanelID property of PageManager. + -In this method, all Panel(No matter you are Accordion, Panel, ContentPanel, Form, GroupPanel, SimpleForm, Tree or you are Grid, TabStrip) can be full size of the viewport. + -Add exmples(default.aspx, other\accordion_tree_run.aspx). + + + ++2009-08-14 v2.0.6 + -Add exampls(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(shguo). + -Optimise AJAX internal implement, ViewState of each page should be much less than before. + -Optimise NodeId generation of TreeNode. + + + ++2009-08-09 v2.0 beta5 + +Compatible FineUI with Asp.net submit button(qianfan). + -We do some optimization, to make an Asp.Net button AJAX behavior, you only need to set EnableAjax="true" for PageManager control, and this is default value). + +Rename AddAjaxUpdateControl of PageManager control to AddAjaxAspnetControls, now you can set how many Asp.Net controls should be updated in Page_Load event. + -Use RemoveAjaxAspnetControls to remove the Asp.Net controls which will not be updated in AJAX request. + -Examples under aspnet\fckeditor_run.aspx and aspnet\aspnet_run.aspx. + -Compatible FCKEditor with Asp.Net upload control, add an example(aspnet\fileupload_run.aspx). + -Fix the bug Text of ToolbarText can't update in AJAX mode. + -Update Pressed property as an AJAX property of Button control(mgzhenhong). + -Update all examples, test under IE7.0, IE8.0, Firefox3.5, Chrome2.0. + + + ++2009-08-02 v2.0 beta4 + +Compatible with Asp.Net Forms Authentication[mgzhenhong]. + -Adopt the same way used in Asp.Net Ajax, we must add a httpModules section in Web.config. + -Support Response.Redirect, which is the same effort with FineUI.PageContext.Redirect. + -Support FormsAuthentication.RedirectFromLoginPage(accountID, false); method. + -Add Type property for Button(button,reset,submit)[mgzhenhong]. + -Fix the bug Alert.Show can't assign the icon[xmq&mgzhenhong]. + -Fix the bug Iframe in window control can't load in the first time. + -Add Menu and Accordion examples. + -Fix the bug IconUrl of Window control disappear some times(Target="_parent")[xmq&mgzhenhong]. + + + ++2009-07-22 v2.0 beta3 + -Compatible with FCKEditor。 + -Test under IE8.0, Firefox3.5. From now on FineUI will not support IE6.0. + + + ++2009-07-13 v2.0 beta2 + -Integrate extjs v3.0。 + +Compatible with IE6.0,7.0,8.0。 + -This must be an extjs3.0 bug, because Ext.QuickTips.init(); will cause the click event of button abnormal under IE6.0,7.0(IE8 works well). + -Now I must disable QucikTips in IE6.0, 7.0. + -Optimize inner JavaScript。 + + + ++2009-07-05 v2.0 beta1 + -Update extjs to v3.0 RC2, now there is only one theme(blue). + -Use YUI Compressor to compress JavaScript and CSS files. + -In release version, one page only contains one JavaScript file(except for language file) and one CSS file. + -CSS introduced by FineUI will be inserted after html title tag, then custom defined styles can override FineUI default style. + +Alert will on top of all window controls. + -Because I can't modify the default z-index of Ext.Message(9000), I adjust the zseed property of box.window_default_group to 6000. + -Add 5px margin for all button(.x-btn button { margin: 0 5px !important; })。 + -Because dropdownlist is not editable and can't be empty, if SelectedIndex or SelectedValue is blank, then the first item will be selected. + -Update component Ext.ux.SimplePagingToolbar. + -Update examples. + + +This project's first version is released on 2008-04-11, the previous release history is in another document(release_history_cn.txt) under this folder. + + +Copyright 2008 30372245@qq.com, All rights reserved. diff --git a/FineUI_v6/FineUI/toolbox/Accordion.bmp b/FineUI_v6/FineUI/toolbox/Accordion.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e63f856bedada5e1fdafa77f1319423b7e3871a1 GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%gVd}|(PsE^>mb8_AUrmwfni@$ zEW`i*{~6vMnZvN6(4XP!n`aDXW~MQGczTavd7dxBwqgs0v-3+Bj`ycBTwl}8u%#@J z;o9MK3@5sx87^;~#;_&Nm|<6q7sICRB8F`h!3^KtzXt2SxTKn4O;G^D+H6gRFSidd z9BGSUIK6f{!^LII47)0W8BX=YFf7duVpvrk!LYr|f#FDBCc~ATb0F>>B}YSGGz4f8 z0!-*Yo|#2aKtMoRnwy(jMU06_jTH%~Ffqx23K>=|Fkoc|^Lc@M2_WD?=5ufW`O-{G zLaZWEB0zaCUjW2cRp5cC7iVHpVpS9sg_)-a;v)edpO2Ld4p>>3m^fM47#U^3fQ?m- fiHR3ko{x!17)d)TKNFLnx|9+Ga4PTv`Dg$Dm7rEm literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Button.bmp b/FineUI_v6/FineUI/toolbox/Button.bmp new file mode 100644 index 0000000000000000000000000000000000000000..405f89f9ee92fe628c271871046981ab2dd99503 GIT binary patch literal 824 zcmb7Cze~eF7(H=x5pi&Ka??p2oSb!Y6*vC^R~H9y_FoVj1wrZ{B`zX3L>D_)r4Xsc z{JLCny{2tqeRp4*p-Qn|-aX#;?%ffRZ*zNnnweS!FJa9N))ZSXzNWbuT0^7H`jf)G zIX~K2JlJ4kaJV&(7;Xli?5$i~oZUUu#-MV2dAz%fFb+Q4TW%O>1fd&%NgEE06Gk47 zs?`d@c!v)^@HqD(?(^8!tc7X0XB_O-8V*1&?8k8=5@7fZ*oY2=s5{LUr%Cxh2$4#J z!2=<68>cch0%oJ>0+dgbl1imYmG_gDEd{_#Tk8GG2Plu-c9ylX4lx1{V5Lnhz@I?` zP#%|edtDT^P@SG`NK*^P=K`QSj^{;@=LMd!kc5LWei0{<CzA58zke0-BVHmE@|c8I l+Zx&Wv#r|}!uZ9f`)hBHxBao@Hl7hHN9h0aHt8@k_5;<d1%v<q literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Calendar.bmp b/FineUI_v6/FineUI/toolbox/Calendar.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6c0cb0ba4340a50b909302d3bed18a1f43ca294f GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C*g3bJRP-MVPHtTVXFR=r0f>MiaK?ux z_kajuGF%y)0apfRAgc$OgBAG~-h?BF0$k=pECMRtdh|OG0T~bx^3-E>3{Vj67$Acf z_W;$vLx33f;8G8<ix?8(Uw9zH8EDRcTSSKXSF5^TE^mLasNrE>%9F`i&nIU->q~sr z5&5ho@L9drvr6Zur8W->&2Q(LUd=Q<mud)9|9}777gMwT-#_<hX3qZ=HUAeC|DTur ze`fOE$+2I1B44$Ie7SP?YK8ZiBDb?(^&rI$&i{XQ6Rf`a|Kj5RbF=@?NclSnqCWWZ i`8}VmojhF#RS$H}g9({H!3SOOSl#n+&qBC+7#ILm_CC=7 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/CheckBox.bmp b/FineUI_v6/FineUI/toolbox/CheckBox.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f5c398a8802c4d12f4e168b1b8f0492fb87c0666 GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4)~F#+h8P5Q22k<G&!0bk{rc_u z_a8rh{`~dp_n$w1|Ni~=@85qI0IES&|Ni4g{94e|zj^;2u0?U7BBm{9>R-Nj1JMFh z3_)mG(9}PB^$Ms3t{77bn)=7jp98f(lmQ(E*9f--P5r~CPk~y1%5XUhP5u4Hk0Dwh s4ny_}B#_b6-+lB5mljC8V5-NZ1rje<)#K5ErXI*8h~VjgBnATm0O1!1t^fc4 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/CheckBoxList.bmp b/FineUI_v6/FineUI/toolbox/CheckBoxList.bmp new file mode 100644 index 0000000000000000000000000000000000000000..96d507b89258ea71f2777f33414b8ddc718c38bc GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd44777@Jsc6E9jN#}7=RdH8xOCZ zziYwd4b$3|_twmBEt*-MJ+&$wZWN|^xD-|f+%a(Tu__~5kW}+A-9PHz!5O~{3;+Vy B03!eZ literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/ContentPanel.bmp b/FineUI_v6/FineUI/toolbox/ContentPanel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..167cf4c6a9c94780ef46f72746f540c065e0c806 GIT binary patch literal 824 zcmb7?yNeo86vih>nI@!4AF_m`$`&Dztx}~)k?r>n*gk7ie4~g4EF>VPpf-Xdh!zSy zKnx;?qG++HQUr~zkBKwB<~@@ybCYS36gkYjGko(q=ic+(`|8b$JCqU6F+aw*_iNmu z9vJ#<{J(#f3`4-AQ~C!ZLZMJF81(!7KA+Fy@wi+rhr?mF+if=6dm}6s3t&8vNMtgZ zG@H$Oz5ct*U*1-$mGH4xY_V9(W;0}gllPp=F%r8JnYp-{3O8Sc*%#<er<3rBL}I;O zFPF>td=6a|j^D0cUSFQJE}qcmClYgmEa+aZm+<Lydb8Q2QmJaS3SCoVRTfo|SNXky zwYD3XT|*B90))?Iv)k>KWm#nX<aK>|b@uu4*{6%A^xKn<uOBLhEp!+{_<TNpI2_FS zx*3|Lsfs2`SPMLCA$+k|<ar(``~4m|@aem=Yf}IGk*=w_qCk&Eql7P)%c3Zveyvs` zyt#t;0Ub6H9+)i4k|YU&0R3N)OeX*2kH;f+#c>>ZXBdW<44-?wp2_26RaJGn-Do72 z%Vjc|cs!2XhQndp4cv#-YBd}Vp_BTZP6zv}R4Qlz40<8$6O+FiF&d3vJK_8NKIseo zDT;z#%#_`3hjSq*u$}PZ@pv#8bi3VlyWMKF8jS`H8m5&>r9z=V(=;k0uv^0a*Gy4A E0NdsKWB>pF literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/DataList.bmp b/FineUI_v6/FineUI/toolbox/DataList.bmp new file mode 100644 index 0000000000000000000000000000000000000000..feb21768de19a3812d514aa11b235f626eded14c GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4R1`a5ac0jfyW%$Kw06(B+4!}) zPFU}M@%O^l-->R0QQ7&9W%9X_35)P(@tS`KSv|vyn|47l*@3p1epcx|7HQt*sh*}O z9>x#^G{<+rK@|1VuNHO9`1$(jkLUNlKfd+t{?#wHFMPgn>eJ<;sh%c4^#O~IqN=}E zI%&!O|NsB}{qy(t&%Zyu{`vax*T=VCZk~at_gj1%Mg7D}rBjyQzj*5UvAySZZ#=ef z*?|>v{(SlP_1-0*+kobWtUi-?=P$&+YWu$lu6$HFYc0@x2msph?-$6H?~iY0_*nwg zH|#k-@9m#;-~Mj-{eSbH|9uZWbS~R??-J1bePHvK9#}aC=&&Cz9%cnt1Jwgj-`+C~ z8}`<(-BY)G%k(`bZ#;hkGag~f&$rKVg6tsb;pEP_^$->JFP^>zcK`8>OAoG?0~GxI z>1}?f16(D90ap(-7nLducg9qIZ0&4Zs3h7QQ~k$R&)+<G@a)cwhgZ+vId>cwsu%Zd bJ+ou&@r}#MW4$od1D%8ip{XZ^%fJ8tZiyGA literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/DatePicker.bmp b/FineUI_v6/FineUI/toolbox/DatePicker.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9f6665bc757c15751ec521e442b68372a3b82a97 GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%I{-xww*)b~JiLtI>6U&5>)QVe zAo%(DJ%)_6xeO21v@pCnzl)*o(o}|!<^LI8oY~57W@Z}0@9$q2K0La?5I*BSL++0M z3|D67Gx$#U&+zlpdxnC|r40Z7|7SSX6~plK+Hr>0duKD;TvEl5vgAL5Q_Fvb>+Aa% zj?OA$DBb;^;q8&-3^^ML8Ge2H$nbpo6oz9x@eFTno@ID_c|Swi%>NAE-accvwP_;5 zr)PH=t}iTQc)4pD!;~wt8KPGIXK?QZy65;BhX3E+Gn8(vVo2QZpW$?097EKs{|v7$ z>;}6tXv%+v?5)KNr~Bg>insn}xU;mD;qshfhI?y!7%KMy?LWE-5-y|UXb6nZ5MaRo zGB!Ls#>UX#kY!=f5*AihXJzFR*HlzgRAyn36jl`lL46fXVPPQOTG-Uo(9qD-R8d7! zQH+I!U6@1EP{&Y|LlGzdlxJ7u<_5}hh=_>jt1z&zFe&Pb>WgxVif}53YC`z>AfTYY z#?1=Uuf)qJ$_P{eg2I+8EZV$MAYfu*Vs6gM!@?rLD`jUVARu6*%f$@k1Eu--h4iGQ fc?DTm<av>R77L5Gy@Z5>wl)(J6Fa-L2D*0vl3JfJ literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/DropDownList.bmp b/FineUI_v6/FineUI/toolbox/DropDownList.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ec050261c3b95b277e83cfaa688d78651525434f GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4RJ3z$J@E)=I8gC_Y~b_p4G?r> zVIPD6Qb|ZXP%+T$5G}~+VIBg}5ZfST0=Ym2ghW=4=^}`FWD;3D$Xp}<)DD!zL<HSW z(0sVVAS!`&0vQkz**$P&a0Wy@uJC~?gEQbRK@NYQ6%Bzh#3PWC@B)ZY2M!#7Fo;nP UR15(?EkO175t>s;P0S1o05CZYRsaA1 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/FileUpload.bmp b/FineUI_v6/FineUI/toolbox/FileUpload.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2d69197b8bea840b097baffb0e7f30f80c244c3e GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZVkXwlA8T>}iS>p{ay$f$D#~ zd-3DNgYOS-e7$|))3p;HFC2J(dMD5XT<U*+`S9!g%O5WuetUfL>z#|Aub=#M@em&M z|9<{ByL0{Vjmr+Mn!9K5)UWq0eZFxTm-^kyrvLx<@89pAf4+VG{qfDu*H6DcyYub- zRb1*1uAcM%|NpZ)*B#pgHUHP!XFs0Z$EE)Gro}+@5b*EM?>|4j{`vg=*V`9p>i5+~ zFAGowq9r~G`zpi1?q3Sj_3zK0zdyhI`SKB2{ppsZw|xnx3taB3n|f*Ue5mO#>dMhw zDPCsC>dzIq0oCt_H2{Y2jYFGY3ZXPaJ#ye*EC#9H6K@Dn57csH|2hbHZpTWXdSt~w z_JtDHS3U8YqV>?kF}W}1S6wf6d)OFszu4+vvhk8oomm0en97hv9!^aAy>-gZ36a<H k&5!3gAWPw5znGT&YgN<LGFMy*FvTBF%f=MM6k%Wh04-$-nE(I) literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Form.bmp b/FineUI_v6/FineUI/toolbox/Form.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2b949db759dc84edad61c4dd555f2730389cfe58 GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%D*#1T6a_Ind-jasKM)?<zMA38 z%ru6(n<g-P`}U1tPg@eht;LlLmzu&E-oJm(@c;jRh9h(87&cZ%G8{T|2(0!{Z#u)p z*+mR@mQ^uqYlvl7T@uW2cXcbnmANGhTWX^j4ot{r*fq12VSiUD(2Va4FLq31SX&*$ zu(c(b;l#vjh`UC~(GVC7fdL5tCNv-^ASK1lE-o%ED=Q)*BFQArhzuB@d_Hb4U<C0w zIXM|&d=Vx=E)d{@04`o8F)$xS!1z%0T;fa|TtNL?P(GV569*dzK=re+L-}AqAi>Tg egaV|PL}ieH1QRnWNP(D`AP~s&Fr)bnlM4XdK1#s= literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Grid.bmp b/FineUI_v6/FineUI/toolbox/Grid.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4ec4f5b59ab41c8c0e2441ec24bed7338526b2ef GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZTMlik+}HvuBoFahr5nyJy{O z{Mub7toOh8d*SPEMK`{v?0m;E`CQ3_MR>G$%|C>!o?*t#ye@oJ_%1kzqJH|-k_q$i zm>;nCD60Bv)&bGs_S(3R-{Rva>L*@Gs_HtrY3ZSL3-_;?w|B*?-OHx$Trze0qRBu6 zG$ds8nZ!GPA^ug{|4ne^qm-tJe?Gna{r1VP=Xdt6p8Ngwsc%;gd_BJ%qP}6z`FU^u zto!zN%kTf2|NQTJ@S$qr%)j41|M~Rh_uHpHTYf&g4Ak=V>H&y)px65Lo~c@~wPwZk zhSfX!H}2lPYx}vq8&B_Cb7I>{ki*sk9X5CG%2{yrKrM&XE%*lmSC8xjGXMVm_2>H+ zpqAh7Ko0x)=rXeUBO4dPl>fVad^dy*)B?2S_vg32-aZ9tK~{fk^Rg#5F5EqL^v;=s zH&5=retgfBBRei0*aCIfR*=Jx)t}tD0&f28GY8>ppq9VCfByac<<IB0$m&mRUj<hK zv<1!v+5%()9R>_BH1#L9uR6YEInW~q*3RFvV)l-u)3(f?xM6nps;O<uCNwPQt^%St IZKVth0G(14fdBvi literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/GroupPanel.bmp b/FineUI_v6/FineUI/toolbox/GroupPanel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..687483a7e2eb966f8385ffa05c2b631de3d801ac GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%D*#2;l!h>TdVY`LKM)?BThFks zBZcAanl^^t-##)N-@cmR#-d7wGc(f|Hq}Hi{Qv)-;rr*e4CiMRG2Goek>PM(2E)$g zc!s}!e=w}83}^WK>IuW0WmOCZCl-M9T$xwOuxnN;!;77h7=Hi!&hYc=2ZnENUNCHL zjAPi{n#gcsQVzsjqvU7^jE2B~ga8w%K!Ts2MNW>3i%SUPUI`|7Ze+lK#1|A4<Yr*v z1xo|jAOPco*it~iEyTpZ4dMv0vGMTm$Z*R-_-r7qj4&g&9FqvL@!Tv-A}D}`iB%FA Xh%&MB0TpnFi;MH}^2#%_6Y?GaA(~Hz literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/HiddenField.bmp b/FineUI_v6/FineUI/toolbox/HiddenField.bmp new file mode 100644 index 0000000000000000000000000000000000000000..528467151b0a05a4d5df625bab2dc3a3100cee2b GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZSy;(9XH_|Ns9dmIOMUB)|YQ z8Da&{7Pv)lHbe?a!pw&#Ly-b<P~8dQ<2D~8i>e-ECdKB%jm7VNh%z_{_YPb;R0_%c caK%6dR`tm4M^=oF4Kp8NAYqdBiIaf=0Q-SrG5`Po literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/HtmlEditor.bmp b/FineUI_v6/FineUI/toolbox/HtmlEditor.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9eeb66b0d0a73ef47f627b8270c7733f5b519375 GIT binary patch literal 824 zcmaiySxXd96vwA}3?h7pK0;8?Lm1Ih^icF*Aq4Xf8Tue;uDFfp*r+&-IjOneGS0Z~ z+qjGi<2LS$xh9H2mRW)ZeS`Zu-En-*%RPt7z5n02_x!n!!ya5QoQ?ZB-_mjYJT4h- zp6y@O=OI^vakin87^EUQZpz(Oo*g^oZvCA3cA~Gj*c9#UZL+6DjdwK^CcPQ$bXntH zdD<L#F~+Lgq;e<$yTYa@P~<9d6j@4TC{h(kig-ngQqiE1IZwAkQ3VxH3ZE2(V1+!z zd&mM4q(QPGL19gJ<+P<YK|OL>Xgtk-eqw%dY<hH*^6(%rbT9VaR`gwe<ek~qw=)&# zim^`D(zv@5+Mqc=QKzU;R6?1eSWyHY6!~BQGZdvnwwB}!Krj5izKuX@-kwJP<nWko z1O|{kq#HV*1scJL=(}`l0Yg;4kkX9ku1f1POh~Z)i<6wE`u*DHT#Kc{<2j?Kg(?*= zWU{|y%{R7)%po(vB#grdqQz;+3C5S<8Z0~fr44a`LtkWm=XTh?fL~-$2vE8R^lz>= zJF69hmv>$Zxl#H1qz!3CrU%<M7bd<68_24rkR_N0pFVX~+eVjC*M2^$9n?t8;Zc`< zl_k;BShg?hAlt|$vIZ-#gbW;?hSd$(fBcP_-VGwv2Zyu6UE9ku--T}?`y#t?POXcq zAj8L}#s-f@;^z0vR%>WzX=c31+g`on_l>t!Z7)xcG?i~HOb)q<H|D&3H6K@fqYbqc oX1CWr){|1O84=g35&b_eoLZS%|0g1SLoY5A2L)Og6dMfx045S8$^ZZW literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/HyperLink.bmp b/FineUI_v6/FineUI/toolbox/HyperLink.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8fa9a673bcc369da6f408db292162fd0913f2a61 GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4JajsZ0Y4(oSctAKH}*YSnsu>C z=X$gGmz(?Hf@g}AA?Q-A0h;+hEf=eG;EEx#uXl6-)nBSNMpF#oK3`S*bYTiy3ZfXO z9%waO5Salq94Px}ir<5Yo<Ib&4&;~;Rb(}2?1z)Q;ZC~VWCm3KbWs|b8e}d|@srt6 zKoO{8N>q?#v9d4M=mK>;nh^>#{9d0MRyD|iZ+7;)+0hMhd9gCGI4(BC*FeSB8nFi> Xrbglohv)@b@oaHAra5#FVPF6Nl!5FM literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Image.bmp b/FineUI_v6/FineUI/toolbox/Image.bmp new file mode 100644 index 0000000000000000000000000000000000000000..86016e9ecd7ed6b9bffade12179d38d0fcbcb835 GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4R5Uv~put_E-c7CEMWxP3sn$Wh z##Xx8TB6EAw9-_t!kE9@kf&Uqt4xmrV)DHFknRgJIxo&BJK7Pyy~J~6vdNr4rG7`T z4s+2Cb0Dc)Y36IC1JnXhzo;~N*Rw;*A8eX*eSYo9zSLb+erwW9=LE|4IRF(qN1EnE zdL{eW18sq*UtXQG<lg#=@2>&1^j?`=ezY@wTdBv2MD3|w{+`B@YVvz4vVh(NIt-$I zO>@@lC9Ock5G_E56&`E}-H?-*7qox%!p(Ch02QyB*bMXwME$1j;<u0Q&Yst_^!|nm z@2)Mqx1s)Ye?~>r`8}I1AKVU9{ASzCEz{b8-iN5)F{$SNpWh%YO@+(uZP@r|S4N!I zxplKs{q2G1#)g@{4=&n0y9XFz5cPX!wE)!v(aU=`fLeg)-L;c{@1OsB{qUa)JO7;8 z@cZbBLklMW0~w<J(1LD=dJy^J>%Y%$|Gj;3<>)1a;M4Mf$1ZMM57csM`BY%MK-3>w zHVL5~ro|xcO3}WbE<GSEKwB=Yodt|ai29SOrlF_@YcWi?zVpd{pcbGlK!@GjJRcbQ zIMx68ef`QCpcaGpD?o<<{c>;nVqk*7qaN8Wf1lj~Y5}G(xO$+IAPDFep!b0x1`K3i Yya1yT82i8k159JUWC>AE63M^-0OMfiE&u=k literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/ImageButton.bmp b/FineUI_v6/FineUI/toolbox/ImageButton.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c17fad390c7cc25f2aa5b5d77fb8ed4e9296f9cc GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4RCI3lvZfHF5*r3QsMbdWs0?T_ zknD&z*s^Z%(F@n`pl#bXw#DiL6$3S%I==tK+jlSDy?gZzN<tVQk@rCK9>UnWcN<VK z&<)RCzX1xq`S4+WVOW)gXr-BOg^56g5pTHxcbPtCnI6ZR_a9!r|8VX8BZz}vfB5k3 z<0l|mQW1CL=kZzhm*pR8bXXT_Rp+>3R)3iRCrI|w$6Jq{Le#(c`0?ZCFCV^qUfq}h zRJP~MvF_{hAc{*9Ldy+#K7RQEME9S*fT;iU?b{bH+SFbA_3=H3$vftCtnDtov8K1e znC~-K_VLTt5cNRr_a8riXy=sLpYPuQwS2g8=HQ+iT9L=E?$}*vDhQPN_VefSH}4?o zfrkJ3{p;uNUkB#3|M~V6sO9_1hh_=KcRu+KB&*Cte*OCW^Y`!9?>|D+1GWG8`}fbE zKS!5N`2YVuPzw<4IQ{{sc*pKr)m9Qf+24Qvy#MqCq8`Zo_wOGNpIkK!sO7-Cj-6BM zfPMjbe@S`V{DQE*U<IGPd;_Wnri44^_5;-eO~wO&3T~g<4^#|{;z?=dch4WdqZlal T;{H{jGI$aqKE08em>C!VnArla literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Label.bmp b/FineUI_v6/FineUI/toolbox/Label.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8ab432db6ee948276800a0074633e071edc95400 GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Ncv5TZke4jJia^7Hb@%SZ#+a2LW{ z%^)fy2p5DffXW2<d65+Z#XG7?fLbKQM9{<`TJjU4V*|aB&4HMo8WoBx2xkKg0V;5@ zHnTA?v^6yp<l_Z$nVFcd8V=FrXl@LbRgjhhs*exxgBys+nAX)C<n9O*huFo$$OzYt zsTiV6h@TIr#@ERfXt<@JE>>m8g4MaHRXHg@#Xx}HaELC5OMr@HB*l=;!NabtttHZM QxD`pE{&)<eofHED0KT2Re*gdg literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/LinkButton.bmp b/FineUI_v6/FineUI/toolbox/LinkButton.bmp new file mode 100644 index 0000000000000000000000000000000000000000..721d2e230271349cf60254b48a3fea7b1e91f7e5 GIT binary patch literal 824 zcmb7?u}i~16viWtE+P)jPHsA>gOjsvI*N<<7r44Oh_nBK;3x=E2Py4R1(8~m2C0@{ zq&98RyIdO5=B`QoE>}ZEEcSTs@xAZ;@;Jz?Z>~;i$yr8SKu!;GLYqr`S!SkGej9zQ zKW-Fn&X2a{57x91akw!H44Y9;c9*U$&I%=cL}acnk9QUU<HP&AoYf)?LYibym5>fa zP$jb23}D>h({^B*d)t47LtUG?x?!pd+pbHPC&OdJLrsKiVZvc*R55FccNk-B|NSAK z?q|NA>e@>QEyAc-iuZ!R4*~$~A)#8U@|5}?4O{WRI^C{W$fP?v-4Gh4^b-+;Vcj8$ z$8s)s+o^|~hk^qbR4!W8GFr|>D1=R!;<2O`Ma}11j1bh&MK4ksl^8mvBI;4kS3KG{ zj%6k%iX#{x6AKcp9D05L9xvgom_ytDdB6`F0A7nZ!1%?d`zzJQ{P6U*wu~~c^a=g{ Ky^Z^rHSG&1HXx<| literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/ListBox.bmp b/FineUI_v6/FineUI/toolbox/ListBox.bmp new file mode 100644 index 0000000000000000000000000000000000000000..938781b4897d26dee0445d0abd4a84f9057a4deb GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4rfBEfdg2k#B|ydhv4PLWH$c#l zg?$hPNF^clK*d0hLbMR09;g^-ID|x24+||24RIaZJ#YrHdQ2a{mBAUv>XFTdSn>VU sV>E=Uo^12s8sW}>Gl(%C=r*8w2uX~3Qo|o;IA;6;Eg}+;k&+o009!dM>i_@% literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Literal.bmp b/FineUI_v6/FineUI/toolbox/Literal.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1707aeb92af0f5bd26face725110efa5b515ac2e GIT binary patch literal 824 zcmb7?%SyvQ6ow-%-H0n6!6%R^MX8Dkr9~@VP{Dhvl~O9L7H_x~MbRgy3m?IS7X%-` zwWuJC)?U&}dPy?LWD-v@ZH3w_9L}5!=X~e<GnpB1*;*NMbc64L*<PJ3Os5$)Tt^$7 zwSdm(|FR?BB=F!5R>$|2+|dQ+_WWpgb~rRW7@TwjCi*wW>>KW0pUXxuqq#XW7z7h6 z6C@I`jLSSOW|e$O=DtuWE+yVk@&n+L$a1v+KANr(Rl^FA5s?J7QpBY^E@b3fQqFt= zzwYiik9vQ3y3&XaLW&`zf>4FWB@jx>*#zwEa^K&`8#=m9h^Asg2nniC!sWcea{*6Z zQ@+*#PGoM63JJyFl;ipCI&5be41%>1IFSZIngT*%Xl4k=SN7Yq#2Z^R2-bOX0VRe| zWNrjfY?8aVeW+a^!=|`DJS`$S3r<L-b3DNJk56=w&J~*Ty1u*Yh7?~CUS8ko{rPgm zia%WQKuVP4SnLYCgb-AT2wCxPzmUQziL)&24-2fS5WLv;pGCdYP9rPFTZ{DlG;L)B NE#9r=|F_^7<_AGjF5dtE literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Menu.bmp b/FineUI_v6/FineUI/toolbox/Menu.bmp new file mode 100644 index 0000000000000000000000000000000000000000..eb1164b3f828213ebb74101d1f33dd5342a5078a GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZR09Ggqu3h#)HA>i^>fK+~|Q zhgpk415LuE9+xGU>fbeG;z797!_7z2i%UJ4GB_7gJ=|oh3|#6_!UY&RFn~)vOdg%a tR1XxvkFdrUnz?Ak!nJ_Jf$0bdKs4f4k7hWKi$^_B3M+!UfjkBS0|2dE8|wf7 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/MenuButton.bmp b/FineUI_v6/FineUI/toolbox/MenuButton.bmp new file mode 100644 index 0000000000000000000000000000000000000000..eb1164b3f828213ebb74101d1f33dd5342a5078a GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZR09Ggqu3h#)HA>i^>fK+~|Q zhgpk415LuE9+xGU>fbeG;z797!_7z2i%UJ4GB_7gJ=|oh3|#6_!UY&RFn~)vOdg%a tR1XxvkFdrUnz?Ak!nJ_Jf$0bdKs4f4k7hWKi$^_B3M+!UfjkBS0|2dE8|wf7 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/MenuCheckBox.bmp b/FineUI_v6/FineUI/toolbox/MenuCheckBox.bmp new file mode 100644 index 0000000000000000000000000000000000000000..eb1164b3f828213ebb74101d1f33dd5342a5078a GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZR09Ggqu3h#)HA>i^>fK+~|Q zhgpk415LuE9+xGU>fbeG;z797!_7z2i%UJ4GB_7gJ=|oh3|#6_!UY&RFn~)vOdg%a tR1XxvkFdrUnz?Ak!nJ_Jf$0bdKs4f4k7hWKi$^_B3M+!UfjkBS0|2dE8|wf7 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/MenuHyperLink.bmp b/FineUI_v6/FineUI/toolbox/MenuHyperLink.bmp new file mode 100644 index 0000000000000000000000000000000000000000..eb1164b3f828213ebb74101d1f33dd5342a5078a GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZR09Ggqu3h#)HA>i^>fK+~|Q zhgpk415LuE9+xGU>fbeG;z797!_7z2i%UJ4GB_7gJ=|oh3|#6_!UY&RFn~)vOdg%a tR1XxvkFdrUnz?Ak!nJ_Jf$0bdKs4f4k7hWKi$^_B3M+!UfjkBS0|2dE8|wf7 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/MenuSeparator.bmp b/FineUI_v6/FineUI/toolbox/MenuSeparator.bmp new file mode 100644 index 0000000000000000000000000000000000000000..eb1164b3f828213ebb74101d1f33dd5342a5078a GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZR09Ggqu3h#)HA>i^>fK+~|Q zhgpk415LuE9+xGU>fbeG;z797!_7z2i%UJ4GB_7gJ=|oh3|#6_!UY&RFn~)vOdg%a tR1XxvkFdrUnz?Ak!nJ_Jf$0bdKs4f4k7hWKi$^_B3M+!UfjkBS0|2dE8|wf7 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/MenuText.bmp b/FineUI_v6/FineUI/toolbox/MenuText.bmp new file mode 100644 index 0000000000000000000000000000000000000000..eb1164b3f828213ebb74101d1f33dd5342a5078a GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZR09Ggqu3h#)HA>i^>fK+~|Q zhgpk415LuE9+xGU>fbeG;z797!_7z2i%UJ4GB_7gJ=|oh3|#6_!UY&RFn~)vOdg%a tR1XxvkFdrUnz?Ak!nJ_Jf$0bdKs4f4k7hWKi$^_B3M+!UfjkBS0|2dE8|wf7 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/NumberBox.bmp b/FineUI_v6/FineUI/toolbox/NumberBox.bmp new file mode 100644 index 0000000000000000000000000000000000000000..182731300ed03ccc00c3e622a4e4aebed414a7b1 GIT binary patch literal 1334 zcmeHHJ8pwO5Pj?22|ooBNaP$LC!j{DNkdCd<qOc{9vs4=ptYzdxqv0)#v&ytw<Hs= z6p_ZQ3*KsG=k1%_)l4z(A0c5vsDL+)ysHVAvmgN9nGGDj@@W)BXxkPeuhZcZ$6}9h z98s1fk|e<}3@C~MS(f4Ja-R0C>rmG<@;ryu--zQFX_}(%do)dhs;Z_tTI>1W)vp~` zJ8+jB*xZ0rOGsKkNv?`V3VhRmFGxuO(bnDlX1&-~PSyic=a19&nF1J(tOuM=Bzz*% hvY3N;5V-d2CY_(Q1-mDgb#DPBoduNqha2T>egGJqHrfCH literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/PageLoading.bmp b/FineUI_v6/FineUI/toolbox/PageLoading.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4d34944cd3cedce1f9dc358cce65ffdb90cb7be0 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`5H~O!IB)<c@gIyB{{IKD dfEWltLO@~_6f7?XgR12~K_H+V4YdbmF95ogezyPs literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/PageManager.bmp b/FineUI_v6/FineUI/toolbox/PageManager.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4d34944cd3cedce1f9dc358cce65ffdb90cb7be0 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`5H~O!IB)<c@gIyB{{IKD dfEWltLO@~_6f7?XgR12~K_H+V4YdbmF95ogezyPs literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Panel.bmp b/FineUI_v6/FineUI/toolbox/Panel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..687483a7e2eb966f8385ffa05c2b631de3d801ac GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%D*#2;l!h>TdVY`LKM)?BThFks zBZcAanl^^t-##)N-@cmR#-d7wGc(f|Hq}Hi{Qv)-;rr*e4CiMRG2Goek>PM(2E)$g zc!s}!e=w}83}^WK>IuW0WmOCZCl-M9T$xwOuxnN;!;77h7=Hi!&hYc=2ZnENUNCHL zjAPi{n#gcsQVzsjqvU7^jE2B~ga8w%K!Ts2MNW>3i%SUPUI`|7Ze+lK#1|A4<Yr*v z1xo|jAOPco*it~iEyTpZ4dMv0vGMTm$Z*R-_-r7qj4&g&9FqvL@!Tv-A}D}`iB%FA Xh%&MB0TpnFi;MH}^2#%_6Y?GaA(~Hz literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/PlaceHolder.bmp b/FineUI_v6/FineUI/toolbox/PlaceHolder.bmp new file mode 100644 index 0000000000000000000000000000000000000000..753a8dfa082bd9ea358ea939a8885a06fb7e7939 GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4B-D@|3RDjyYf}QN6a6aUy~|=e zN}}8f!=3X(9dm>2vjc20{jAb`Eg;H(<gDhR+n3J#|M&Ob@8AD^e*g3B^Y2gZf4zV8 z^YxSO&+mVGeCzA|D_3@}1u6q7o=}ng|36&IKcJSsU@d<>zyI|CsO9O8=l8E3*aB4i z<@SXPKg%h#IY9LgEkMD4|Nj5`^XKocAAi1m`3=<a{xwh#h`v3!{q@0Bpxb6N6hPDi zNuaBMQvd(|18VvA>*wF^UxD1~ClCC5^X%t~hu@#x$qllb(^>*okE8|Yn?FFsH_sjY z^X22Ok8ggxeg5<1!~8JE1)Y`1>fu^|if>&!{qOg$zdyeI{_^qn$G5-Uy(o-uS=?KT ztRChhkQh+Q?Te@W{r>s)$G1OUKmPvowlvy(`NT%JdSt~AL69w%z_$GS_V??j@_6r6 zQ(NIuKv}q6I0GmMMF0N$0)}%{lHa-+oj@s|2q?;M0EoT+{`{^>4MM~(4#f~*s8hiy z2dHJ;%&yhb+LljhTGCgyu&Zirdl}HiX?1y%sx$k_)4GcjI|^cf${>ji$e<l!U;qFg C{6vcY literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/RadioButton.bmp b/FineUI_v6/FineUI/toolbox/RadioButton.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e7303b2f553119330cd05ce211ba6c5889187868 GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4p6Jw$C5!qi8$wlpB#@2A>dQwq zH-spzosfU+<gRaDKi@pPXZ^%Npa@VLQx{NhQDf|-quaiH|Ni6W&!4}3{r>ak@87>S z&+J*&nuw_dXwLb=n?HX3{Q2uwOf5iJWGjH~T;84a=KcHkA3r{O_hQDGS*p`ir=Ohh z_VYW4EkK7M`vvH=6Z_V^eDemVW!|L)8Y{FF7by!)5}AHt2E<`NzqDt%!L0y>#{Gx) zpS^ko)Z)G0&*8AM*-lHPg-R;Z)FFNWdLO6;uD-u4>gcZ3kDosWYFTz?Wzf|yhr=%F zE3|+PgZKp)VjbCDaP<)PKYaQWsO8>^M?ft=TYwG&`UT>BU?3yAAE*%+0*805glK^{ z4B~xYhyeo`Eqs9LA>ogyW%JxdV7y?4KST@A9H7-ezW}`t3^8CJ14XbZM)u3%mIPpE QbQedUxf!m8BnATm0H*yBmjD0& literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/RadioButtonList.bmp b/FineUI_v6/FineUI/toolbox/RadioButtonList.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9dacd23535a09241c5e7fc873eed323e4d69b20f GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd44D{*Evz>G6fe6STMmtdDi`TFJ z{{0JNK-3>zJ%87N$s4A%E$^+F-&!=YK6`3aI@~CrvWHKf0=2-^!=<n?NOccZL+}Wa pYW@iHZ|12y-&KL|_#zm;d!HTxYJscA6Zk+WQo|p=X~?n+3;^ch1f>7~ literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/RegionPanel.bmp b/FineUI_v6/FineUI/toolbox/RegionPanel.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6c900f80aad6ae6026e539d2c334c693d2abad36 GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%8v;eAML9D3|Nox>1h1`XW!T@H z#&B}iT81_Gfeh#8lrX$LFpuHF`pFE3rW7;0+%uiwKyxg^%@vId^HMw*9&ew-u&%R` zVM}Q+!^MTw4EHv4Gd$Y2km1CHEQWhqr!X8|*2ge2)`{WC;pGf>SJX1xT~*KU=IAnp z<ypQAi}J%6c2tKkJlNdFuwz;?!?}Z-7%tB#V%XoF$Z&sc3&WGW^BLwOx-uN;NMhJf z7RvDY&;o|j(+U_Cr+G45U0ls@W@Z}0sU;l@TkE1Aej6o6Ltr!nNDcuebfBoBA}h<M zE+;Q2C?O#sz$D5D20Rdofk_*}(11`9OzaQ_RGB)HE`$$Nro+Sw;VVNZSteBo1FDRT zNf^SHf>4@F3J``ggfd{_hcKYpRG9dIKmi0)RaK>>S(wyhz<^(i0|>aen3N>>nVFe6 R#YGepgoN~2(Y=Sx2LL%-W~%@I literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/SimpleForm.bmp b/FineUI_v6/FineUI/toolbox/SimpleForm.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2b949db759dc84edad61c4dd555f2730389cfe58 GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%D*#1T6a_Ind-jasKM)?<zMA38 z%ru6(n<g-P`}U1tPg@eht;LlLmzu&E-oJm(@c;jRh9h(87&cZ%G8{T|2(0!{Z#u)p z*+mR@mQ^uqYlvl7T@uW2cXcbnmANGhTWX^j4ot{r*fq12VSiUD(2Va4FLq31SX&*$ zu(c(b;l#vjh`UC~(GVC7fdL5tCNv-^ASK1lE-o%ED=Q)*BFQArhzuB@d_Hb4U<C0w zIXM|&d=Vx=E)d{@04`o8F)$xS!1z%0T;fa|TtNL?P(GV569*dzK=re+L-}AqAi>Tg egaV|PL}ieH1QRnWNP(D`AP~s&Fr)bnlM4XdK1#s= literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/SplitButton.bmp b/FineUI_v6/FineUI/toolbox/SplitButton.bmp new file mode 100644 index 0000000000000000000000000000000000000000..405f89f9ee92fe628c271871046981ab2dd99503 GIT binary patch literal 824 zcmb7Cze~eF7(H=x5pi&Ka??p2oSb!Y6*vC^R~H9y_FoVj1wrZ{B`zX3L>D_)r4Xsc z{JLCny{2tqeRp4*p-Qn|-aX#;?%ffRZ*zNnnweS!FJa9N))ZSXzNWbuT0^7H`jf)G zIX~K2JlJ4kaJV&(7;Xli?5$i~oZUUu#-MV2dAz%fFb+Q4TW%O>1fd&%NgEE06Gk47 zs?`d@c!v)^@HqD(?(^8!tc7X0XB_O-8V*1&?8k8=5@7fZ*oY2=s5{LUr%Cxh2$4#J z!2=<68>cch0%oJ>0+dgbl1imYmG_gDEd{_#Tk8GG2Plu-c9ylX4lx1{V5Lnhz@I?` zP#%|edtDT^P@SG`NK*^P=K`QSj^{;@=LMd!kc5LWei0{<CzA58zke0-BVHmE@|c8I l+Zx&Wv#r|}!uZ9f`)hBHxBao@Hl7hHN9h0aHt8@k_5;<d1%v<q literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/TabStrip.bmp b/FineUI_v6/FineUI/toolbox/TabStrip.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7f295e10c8f5e5a713ddfdfef1e1929ad1b760ae GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%3j#$~76vjrzIvG9KM-zTG@0T1 z|Njh!`!X2LY?#3C|Mq@{m%A4;e7Spp;nbc@44<!^WcdE%Hp73Qns4{7GMw5xgW=1~ zGZ3>!$<YuP4S^vS0!#z|v`B&bi<K7zFt9QM0WXLE0bU?qK!6#c1jy$E@*%Pic|J~N zUKXGV5C*B|;e*OU`MkWS`a#Ab=?AGo00veL4h~jiz|GCg%Er#l&I~4)_<?f#j6nTd IU;@Lp0AUF)t^fc4 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Table.bmp b/FineUI_v6/FineUI/toolbox/Table.bmp new file mode 100644 index 0000000000000000000000000000000000000000..eae165053c10948a3b1763b65a3bfcb807a84023 GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4)@b{p$;qCk#2|=Efa-6aK6GyH z#?w33p4htb=%%HI)-Bw>X5QWvvvx0=zH`Y`paO`QaP|Md;P3BWKrMehz5V_6$*<>k z_OG7%{r0JER}XwWza6W3pr&(sHvIkm`Ol{}zu!Iu+Vb<^WuTU?R}TPf0Xi6N{)5Y> zt{>ZT<?xP+2eyJ8w&uh(u*22^9X5CG%2~UXO^2)BwR9T9JwWp6k)1#i=&(QEzW}xT zeg|^c&qtSmeu1msw{jL-{q^I!A#AW;*8Kkb_Sf5|5Wm3HA6_@_$&Cwl&mFyU=HShf z`>!A0bL9xoVOyXMgNE1wxcU>D7Q@ZIedZvX4b<}Y_s_rIzx?_978uBI^=Gy%hpPeF z0%rql0kVM(1BTd%tt(Qz%pl?OYE?G`y<FPza(>nG>3PrklAgAOJ+Ae7T;}ko$P$81 zB<aJ||39?o-+}pm_s;sWbK38%6Mk*z{<*s4$MV{5i^{*wE&Mt&>+{sqv#Ew~^>8a* mEo*zZu>QsDvgcEBK(@3;JZbcMQtkG*%noP^L_J9)0|NkuSsxGp literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/TextArea.bmp b/FineUI_v6/FineUI/toolbox/TextArea.bmp new file mode 100644 index 0000000000000000000000000000000000000000..022648fe168b9ccbf66e9177d5a5c4e6c8f7e8e7 GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%a{@){>+2bwJ-)~A9|-r%%whQd z|3AacwRH@iKYw8O{{1_{ix)2-dPm985Eu=CVHW~S1OO{DDqv+n0nDtxvW5YK!GHzG shXHnWHVzOUCIzCA<ylzR*`e|<H7N2p^s}J=W>!WNz|4vU2zZYP0OVyE)Bpeg literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/TextBox.bmp b/FineUI_v6/FineUI/toolbox/TextBox.bmp new file mode 100644 index 0000000000000000000000000000000000000000..50f94af451d05d6d04b21ad6d4120f05aa7fa32c GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C76%bR+z<>C_|Nd4rfBEfdg2k#B|ydhi31>&6sU&< z0MP&ck=YO~kVG~gr~u+92m>n@Sv{JW1l40z0Cx#Q7OVMiR{_;Pl)-hOsfVb9tH<P0 bQ9ZKZa5f(E;cAc>aP>e2k%)|x%)kHuX_X^7 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/TimePicker.bmp b/FineUI_v6/FineUI/toolbox/TimePicker.bmp new file mode 100644 index 0000000000000000000000000000000000000000..28e46ac2cd4ae330dd756e0f2495266e7d0226c3 GIT binary patch literal 1334 zcmeH@%?*M;5QQJ?&cc8PV-;3F0iH25Vh#3T1KjMu5@^7S97sHyaNxMk4rqcG?uKtO zn|brM**P2wf>KyuFWz>t2<e!JfL%Ts#NSA?EK9U)3oqw>J>zycp=la;?@`w^`u>Hg zsxS-#p50@dv)=0l)(!l{2I2*bonzb#8+4X20~%ND5~7GW1XL%E91(H$)sDeh@X51O ggoa5wNK2SF%?qRS0c+AgBB*0cKEs+H7QPq10ls}8R{#J2 literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Toolbar.bmp b/FineUI_v6/FineUI/toolbox/Toolbar.bmp new file mode 100644 index 0000000000000000000000000000000000000000..685bcc891ece0f7319990c0756062bf46b71d36f GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%vjauj<DD7)1L2FElNe4e>15d3 zp3Ly(*fNF>S9U@4jFO`vFd72GHUt={4A@vu0W%X5DD0SE6f+wOkj=!v1f_s{Rv-ZK cArz3$1_VGpgaYaZ83@z@q1c#F0j16d0C4mXQ~&?~ literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/ToolbarFill.bmp b/FineUI_v6/FineUI/toolbox/ToolbarFill.bmp new file mode 100644 index 0000000000000000000000000000000000000000..685bcc891ece0f7319990c0756062bf46b71d36f GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%vjauj<DD7)1L2FElNe4e>15d3 zp3Ly(*fNF>S9U@4jFO`vFd72GHUt={4A@vu0W%X5DD0SE6f+wOkj=!v1f_s{Rv-ZK cArz3$1_VGpgaYaZ83@z@q1c#F0j16d0C4mXQ~&?~ literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/ToolbarSeparator.bmp b/FineUI_v6/FineUI/toolbox/ToolbarSeparator.bmp new file mode 100644 index 0000000000000000000000000000000000000000..685bcc891ece0f7319990c0756062bf46b71d36f GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%vjauj<DD7)1L2FElNe4e>15d3 zp3Ly(*fNF>S9U@4jFO`vFd72GHUt={4A@vu0W%X5DD0SE6f+wOkj=!v1f_s{Rv-ZK cArz3$1_VGpgaYaZ83@z@q1c#F0j16d0C4mXQ~&?~ literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/ToolbarText.bmp b/FineUI_v6/FineUI/toolbox/ToolbarText.bmp new file mode 100644 index 0000000000000000000000000000000000000000..685bcc891ece0f7319990c0756062bf46b71d36f GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%vjauj<DD7)1L2FElNe4e>15d3 zp3Ly(*fNF>S9U@4jFO`vFd72GHUt={4A@vu0W%X5DD0SE6f+wOkj=!v1f_s{Rv-ZK cArz3$1_VGpgaYaZ83@z@q1c#F0j16d0C4mXQ~&?~ literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Tree.bmp b/FineUI_v6/FineUI/toolbox/Tree.bmp new file mode 100644 index 0000000000000000000000000000000000000000..dca125d66c0fc344a4dcb9e34d3366bbdd5d39a6 GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZTMcO7=8`AR^5<uyQuTng2j7 z5cTUOw=C<encrG6vo0H}2|)D_gjJSoK{A~E|3AXnYp1j<@2y$TT7t^~G;%iFIx^gk cE7+%2r2`S%WC(*s?kB_9$iYta)WX030NWMmo&W#< literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/TriggerBox.bmp b/FineUI_v6/FineUI/toolbox/TriggerBox.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d75c27bea88ebf95dca9a5c35b7b509a9e35d952 GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%ivmU0wPZ8g-#?w<KM;O+eV^gX znKKOk|Nm!re10{<v%Yl<*RNk^`1<uL!;4!78Ezik%<%frHHK}IY8f6JUCQwA;X{Te zPo6M*cyx&2$;C|!500&3xPM?C#I8|tGz3ONV9<vE6O{o62L}rj2mt{j2PX)yf&d#A x7aNezFCZWQ<_j_~2#SFCtPnmoFE6(+NIh7Vm6eB?nTL-BVICh4uv6K&OaOE#I41xA literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/TwinTriggerBox.bmp b/FineUI_v6/FineUI/toolbox/TwinTriggerBox.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d75c27bea88ebf95dca9a5c35b7b509a9e35d952 GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%ivmU0wPZ8g-#?w<KM;O+eV^gX znKKOk|Nm!re10{<v%Yl<*RNk^`1<uL!;4!78Ezik%<%frHHK}IY8f6JUCQwA;X{Te zPo6M*cyx&2$;C|!500&3xPM?C#I8|tGz3ONV9<vE6O{o62L}rj2mt{j2PX)yf&d#A x7aNezFCZWQ<_j_~2#SFCtPnmoFE6(+NIh7Vm6eB?nTL-BVICh4uv6K&OaOE#I41xA literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/UserControlConnector.bmp b/FineUI_v6/FineUI/toolbox/UserControlConnector.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4d34944cd3cedce1f9dc358cce65ffdb90cb7be0 GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`5H~O!IB)<c@gIyB{{IKD dfEWltLO@~_6f7?XgR12~K_H+V4YdbmF95ogezyPs literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/View.bmp b/FineUI_v6/FineUI/toolbox/View.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2d6f86310930ffcf04384eae193fc40211a3315a GIT binary patch literal 824 zcmZ?rwP0od12Z700mK4O%*Y@C7H0y=3voj*SO7@;XZTMyR1)P@819@O>W~v;n-yT4 z;b)odW1i||n(Sc=L1-?iO7y*Z?)dF9M{k}wbp7~&YsdCnIlSxA!5tU(Z9TttQ?iE% zT>XmPS|Gb2J>=olbANw)`}^(F@6Ydky?_1d&9fgbAAWy&_sZd&K)cY?x97(^yM687 zpFjV8{rvmm>z}Wmet!b$dim@1(;FubWCz*+)dMX8lB*{)0?FRel$Ve0{s)48|Ni~? z{rBhhKi|Ln`SS7ir?+>{pDYM-f~#LYr4`7YQkV1o#S@Tv2>AE+-*2$4Z=WAsJ6{&# z0aSDGz&0Scd1fb&oYPwR>Fq0+YB2rp|G&RLUB8~)xmJ@L0914N&@LdkeQrOHT-00h z_0z|%AKra_|Mt_HS07)$c>m(*yXTMJJbn1;(Y>b3aG;v&$MylqT?;1z$yHNYmrrb5 z+*iAxt8#8z+03S*Y4v%NtFtClr1z90cNWG2)c}JUNbXxU6G#$+Zl5~_RCZ|9y!|U? z?^`-!&*G^&=T8DUZ|m%y%`-YTOl?~?xp~b*Q0PI>y^E*dY+@J>uAIAj;S?whoIH5# h=$^|5cU;)F<?OBvXST07xn;%ijZ26z1dkd91^_Lr7+C-S literal 0 HcmV?d00001 diff --git a/FineUI_v6/FineUI/toolbox/Window.bmp b/FineUI_v6/FineUI/toolbox/Window.bmp new file mode 100644 index 0000000000000000000000000000000000000000..071bfb8cbbb46ac753b5094833bcec16fd6405d5 GIT binary patch literal 1334 zcmZ?rHDhG}12Yx|1`Qxf0E!tII3N;?3=Bft5X=B%8v;ewl!h>TdVY`L`1aKd|AFx0 znqG#ZbL$!Qb)+!d-93-t`>)>&yJxjB++Ewo@bl{jhBGtM7&g^JG5r4zRQ>%u!|C-i z7+&n0#BgI#CBvD+yBJO^>t#4UtBB#+hKUS2o8uWizk0%OxG#g@@82H`ceYJoczR?x z!@A0FhT{uc8SX5rVz{zz1H+F`Zy3J*_|9-}Vgb<1?+jPg^)p<VR|>Z4$h>BTLu=+T ze0%ePVS8g7!_Cc87<RWNGMru3#c=n)GKLeAav**iB}YSGGz3Tv0cK3VDaod*%gZYZ zGK&)^ZNP^B3_!jph${sKd@w$QE5#?PDJQ1}k>uv)R^;Q=<KPei@j*OAEk11)IA2Rk zf{{;Gm4ibbVLTt37?6(y*mO9QxC9YE8OT?VmX{Y&Qxg>xHDG0u=0E@qpyQ;GfE<v| WE`tCfK)$d(P=S~j3lInh1Ni`0ntYi6 literal 0 HcmV?d00001 diff --git a/FineUI_v6/Newtonsoft.Json/Net20/Newtonsoft.Json.dll b/FineUI_v6/Newtonsoft.Json/Net20/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..2024b03b53bf96f74c2bc94f27d0fbc776e51564 GIT binary patch literal 440320 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 Y&J)pB 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 VYl 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 literal 0 HcmV?d00001 diff --git a/FineUI_v6/Newtonsoft.Json/Net20/Newtonsoft.Json.xml b/FineUI_v6/Newtonsoft.Json/Net20/Newtonsoft.Json.xml new file mode 100644 index 0000000..f75ed9b --- /dev/null +++ b/FineUI_v6/Newtonsoft.Json/Net20/Newtonsoft.Json.xml @@ -0,0 +1,8968 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + <param name="writeChildren">A flag indicating whether the current token's children should be written.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the state of the JsonWriter, + </summary> + <param name="token">The JsonToken being written.</param> + <param name="value">The value being written.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Culture"> + <summary> + Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value">The Object ID value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T">The object type to convert.</typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The created object.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatFormatHandling"> + <summary> + Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.String"> + <summary> + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol"> + <summary> + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue"> + <summary> + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatParseHandling"> + <summary> + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Double"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection + and write values during serialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData"> + <summary> + Gets or sets a value that indicates whether to write extension data when serializing the object. + </summary> + <value> + <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData"> + <summary> + Gets or sets a value that indicates whether to read extension data when deserializing the object. + </summary> + <value> + <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter"> + <summary> + Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ITraceWriter"> + <summary> + Represents a trace writer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks"> + <summary> + Gets or sets all methods called immediately after deserialization of the object. + </summary> + <value>The methods called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks"> + <summary> + Gets or sets all methods called during deserialization of the object. + </summary> + <value>The methods called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks"> + <summary> + Gets or sets all methods called after serialization of the object graph. + </summary> + <value>The methods called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks"> + <summary> + Gets or sets all methods called before serialization of the object. + </summary> + <value>The methods called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks"> + <summary> + Gets or sets all method called when an error is thrown during the serialization of the object. + </summary> + <value>The methods called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"> + <summary> + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages"> + <summary> + Returns an enumeration of the most recent trace messages. + </summary> + <returns>An enumeration of the most recent trace messages.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString"> + <summary> + Returns a <see cref="T:System.String"/> of the most recent trace messages. + </summary> + <returns> + A <see cref="T:System.String"/> of the most recent trace messages. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="T:Newtonsoft.Json.StringEscapeHandling"> + <summary> + Specifies how strings are escaped when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.Default"> + <summary> + Only control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii"> + <summary> + All non-ASCII and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml"> + <summary> + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Enumerable"> + <summary> + Provides a set of static (Shared in Visual Basic) methods for + querying objects that implement <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.AsEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Empty``1"> + <summary> + Returns an empty <see cref="T:System.Collections.Generic.IEnumerable`1"/> that has the + specified type argument. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Cast``1(System.Collections.IEnumerable)"> + <summary> + Converts the elements of an <see cref="T:System.Collections.IEnumerable"/> to the + specified type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OfType``1(System.Collections.IEnumerable)"> + <summary> + Filters the elements of an <see cref="T:System.Collections.IEnumerable"/> based on a specified type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Range(System.Int32,System.Int32)"> + <summary> + Generates a sequence of integral numbers within a specified range. + </summary> + <param name="start">The value of the first integer in the sequence.</param> + <param name="count">The number of sequential integers to generate.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Repeat``1(``0,System.Int32)"> + <summary> + Generates a sequence that contains one repeated value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Filters a sequence of values based on a predicate. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Filters a sequence of values based on a predicate. + Each element's index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Projects each element of a sequence into a new form. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Select``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,``1})"> + <summary> + Projects each element of a sequence into a new form by + incorporating the element's index. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/> + and flattens the resulting sequences into one sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + and flattens the resulting sequences into one sequence. The + index of each source element is used in the projected form of + that element. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SelectMany``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Collections.Generic.IEnumerable{``1}},Newtonsoft.Json.Serialization.Func{``0,``1,``2})"> + <summary> + Projects each element of a sequence to an <see cref="T:System.Collections.Generic.IEnumerable`1"/>, + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. The index of + each source element is used in the intermediate projected form + of that element. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns elements from a sequence as long as a specified condition is true. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.TakeWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Returns elements from a sequence as long as a specified condition is true. + The element's index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of First operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the first element of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.First``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the first element in a sequence that satisfies a specified condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the first element of a sequence, or a default value if + the sequence contains no elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.FirstOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the first element of the sequence that satisfies a + condition or a default value if no such element is found. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of Last operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the last element of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Last``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the last element of a sequence that satisfies a + specified condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the last element of a sequence, or a default value if + the sequence contains no elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LastOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the last element of a sequence that satisfies a + condition or a default value if no such element is found. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0})"> + <summary> + Base implementation of Single operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the only element of a sequence, and throws an exception + if there is not exactly one element in the sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Single``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the only element of a sequence that satisfies a + specified condition, and throws an exception if more than one + such element exists. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the only element of a sequence, or a default value if + the sequence is empty; this method throws an exception if there + is more than one element in the sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SingleOrDefault``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns the only element of a sequence that satisfies a + specified condition or a default value if no such element + exists; this method throws an exception if more than one element + satisfies the condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAt``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns the element at a specified index in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ElementAtOrDefault``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns the element at a specified index in a sequence or a + default value if the index is out of range. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Reverse``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Inverts the order of the elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Take``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Returns a specified number of contiguous elements from the start + of a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Skip``1(System.Collections.Generic.IEnumerable{``0},System.Int32)"> + <summary> + Bypasses a specified number of elements in a sequence and then + returns the remaining elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SkipWhile``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32,System.Boolean})"> + <summary> + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. The element's + index is used in the logic of the predicate function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the number of elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns a number that represents how many elements in the + specified sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns an <see cref="T:System.Int64"/> that represents the total number + of elements in a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.LongCount``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Returns an <see cref="T:System.Int64"/> that represents how many elements + in a sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Concat``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Concatenates two sequences. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToList``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.List`1"/> from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToArray``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Creates an array from an <see cref="T:System.Collections.Generic.IEnumerable`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns distinct elements from a sequence by using the default + equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Distinct``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns distinct elements from a sequence by using a specified + <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function and a key comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key + and element selector functions. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToLookup``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function, a comparer and an element selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and compares the keys by using a specified + comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and projects the elements for each group by + using a specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2})"> + <summary> + Groups the elements of a sequence according to a key selector + function. The keys are compared by using a comparer and each + group's elements are projected by using a specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``0},``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The elements of each group are projected by using a + specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The keys are compared by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupBy``4(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,System.Collections.Generic.IEnumerable{``2},``3},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. Key values are compared by using a specified comparer, + and the elements of each group are projected by using a + specified function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,``0})"> + <summary> + Applies an accumulator function over a sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``2(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1})"> + <summary> + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Aggregate``3(System.Collections.Generic.IEnumerable{``0},``1,Newtonsoft.Json.Serialization.Func{``1,``0,``1},Newtonsoft.Json.Serialization.Func{``1,``2})"> + <summary> + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value, and the + specified function is used to select the result value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set union of two sequences by using the default + equality comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Union``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set union of two sequences by using a specified + <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the elements of the specified sequence or the type + parameter's default value in a singleton collection if the + sequence is empty. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.DefaultIfEmpty``1(System.Collections.Generic.IEnumerable{``0},``0)"> + <summary> + Returns the elements of the specified sequence or the specified + value in a singleton collection if the sequence is empty. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.All``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Determines whether all elements of a sequence satisfy a condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Determines whether a sequence contains any elements. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Any``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Boolean})"> + <summary> + Determines whether any element of a sequence satisfies a + condition. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0)"> + <summary> + Determines whether a sequence contains a specified element by + using the default equality comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Contains``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Determines whether a sequence contains a specified element by + using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Determines whether two sequences are equal by comparing the + elements by using the default equality comparer for their type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.SequenceEqual``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Determines whether two sequences are equal by comparing their + elements by using a specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``0,System.Boolean})"> + <summary> + Base implementation for Min/Max operator. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.MinMaxImpl``1(System.Collections.Generic.IEnumerable{System.Nullable{``0}},System.Nullable{``0},Newtonsoft.Json.Serialization.Func{System.Nullable{``0},System.Nullable{``0},System.Boolean})"> + <summary> + Base implementation for Min/Max operator for nullable types. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the minimum value in a generic sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Invokes a transform function on each element of a generic + sequence and returns the minimum resulting value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the maximum value in a generic sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Invokes a transform function on each element of a generic + sequence and returns the maximum resulting value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Renumerable``1(System.Collections.Generic.IEnumerator{``0})"> + <summary> + Makes an enumerator seen as enumerable once more. + </summary> + <remarks> + The supplied enumerator must have been started. The first element + returned is the element the enumerator was on when passed in. + DO NOT use this method if the caller must be a generator. It is + mostly safe among aggregate operations. + </remarks> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Sorts the elements of a sequence in ascending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderBy``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Sorts the elements of a sequence in ascending order by using a + specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Sorts the elements of a sequence in descending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.OrderByDescending``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Sorts the elements of a sequence in descending order by using a + specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + ascending order according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenBy``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + ascending order by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + descending order, according to a key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ThenByDescending``2(Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IComparer{``1})"> + <summary> + Performs a subsequent ordering of the elements in a sequence in + descending order by using a specified comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.IntersectExceptImpl``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0},System.Boolean)"> + <summary> + Base implementation for Intersect and Except operators. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set intersection of two sequences by using the + default equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Intersect``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set intersection of two sequences by using the + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Produces the set difference of two sequences by using the + default equality comparer to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Except``1(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Produces the set difference of two sequences by using the + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> to compare values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``2(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function and key comparer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to specified key + selector and element selector functions. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.ToDictionary``3(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,``1},Newtonsoft.Json.Serialization.Func{``0,``2},System.Collections.Generic.IEqualityComparer{``1})"> + <summary> + Creates a <see cref="T:System.Collections.Generic.Dictionary`2"/> from an + <see cref="T:System.Collections.Generic.IEnumerable`1"/> according to a specified key + selector function, a comparer, and an element selector function. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3})"> + <summary> + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Join``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,``1,``3},System.Collections.Generic.IEqualityComparer{``2})"> + <summary> + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. A + specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3})"> + <summary> + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.GroupJoin``4(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},Newtonsoft.Json.Serialization.Func{``0,``2},Newtonsoft.Json.Serialization.Func{``1,``2},Newtonsoft.Json.Serialization.Func{``0,System.Collections.Generic.IEnumerable{``1},``3},System.Collections.Generic.IEqualityComparer{``2})"> + <summary> + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. A specified <see cref="T:System.Collections.Generic.IEqualityComparer`1"/> + is used to compare keys. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int32})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int32"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int32})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int32})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int32"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int32"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int32"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Int32"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int32}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Int32"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int32}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Int32"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Int64})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Int64"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Int64})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Int64})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Int64"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Int64"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Int64"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Int64"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Int64}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Int64"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Int64}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Int64"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Single})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Single"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Single})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Single})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Single"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Single"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Single"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Single"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Single}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Single"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Single}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Single"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Double})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Double"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Double})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Double})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Double"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Double"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Double"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Double"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Double}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Double"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Double}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Double"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Decimal})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> + <summary> + Computes the sum of a sequence of nullable <see cref="T:System.Decimal"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Decimal})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Decimal})"> + <summary> + Computes the average of a sequence of nullable <see cref="T:System.Decimal"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Sum``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Computes the sum of a sequence of <see cref="T:System.Decimal"/> + values that are obtained by invoking a transform function on + each element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Average``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Computes the average of a sequence of <see cref="T:System.Decimal"/> values + that are obtained by invoking a transform function on each + element of the input sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Returns the minimum value in a sequence of nullable + <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Min``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the minimum nullable <see cref="T:System.Decimal"/> value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max(System.Collections.Generic.IEnumerable{System.Nullable{System.Decimal}})"> + <summary> + Returns the maximum value in a sequence of nullable + <see cref="T:System.Decimal"/> values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Enumerable.Max``1(System.Collections.Generic.IEnumerable{``0},Newtonsoft.Json.Serialization.Func{``0,System.Nullable{System.Decimal}})"> + <summary> + Invokes a transform function on each element of a sequence and + returns the maximum nullable <see cref="T:System.Decimal"/> value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"> + <summary> + Represents a collection of objects that have a common key. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2.Key"> + <summary> + Gets the key of the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IGrouping`2"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.ILookup`2"> + <summary> + Defines an indexer, size property, and Boolean search method for + data structures that map keys to <see cref="T:System.Collections.Generic.IEnumerable`1"/> + sequences of values. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"> + <summary> + Represents a sorted sequence. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1.CreateOrderedEnumerable``1(Newtonsoft.Json.Serialization.Func{`0,``0},System.Collections.Generic.IComparer{``0},System.Boolean)"> + <summary> + Performs a subsequent ordering on the elements of an + <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.IOrderedEnumerable`1"/> according to a key. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"> + <summary> + Represents a collection of keys each mapped to one or more values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Contains(`0)"> + <summary> + Determines whether a specified key is in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.ApplyResultSelector``1(Newtonsoft.Json.Serialization.Func{`0,System.Collections.Generic.IEnumerable{`1},``0})"> + <summary> + Applies a transform function to each key and its associated + values and returns the results. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.GetEnumerator"> + <summary> + Returns a generic enumerator that iterates through the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Count"> + <summary> + Gets the number of key/value collection pairs in the <see cref="T:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Utilities.LinqBridge.Lookup`2.Item(`0)"> + <summary> + Gets the collection of values indexed by the specified key. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.TagPosition(`0,System.Int32)"> + <remarks> + See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> + for why this method is needed and cannot be expressed as a + lambda at the call site. + </remarks> + </member> + <member name="M:Newtonsoft.Json.Utilities.LinqBridge.OrderedEnumerable`2.GetFirst(Newtonsoft.Json.Utilities.LinqBridge.Tuple{`0,System.Int32})"> + <remarks> + See <a href="http://code.google.com/p/linqbridge/issues/detail?id=11">issue #11</a> + for why this method is needed and cannot be expressed as a + lambda at the call site. + </remarks> + </member> + <member name="T:System.Runtime.CompilerServices.ExtensionAttribute"> + <remarks> + This attribute allows us to define extension methods without + requiring .NET Framework 3.5. For more information, see the section, + <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx#S7">Extension Methods in .NET Framework 2.0 Apps</a>, + of <a href="http://msdn.microsoft.com/en-us/magazine/cc163317.aspx">Basic Instincts: Extension Methods</a> + column in <a href="http://msdn.microsoft.com/msdnmag/">MSDN Magazine</a>, + issue <a href="http://msdn.microsoft.com/en-us/magazine/cc135410.aspx">Nov 2007</a>. + </remarks> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Path"> + <summary> + Gets the path of the JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/> + </example> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. <c>null</c> for objects and nullable typesl; <c>0</c> for integers, + decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by + placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="!:DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="!:DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" /> + </example> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimiter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string using formatting. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <param name="type"> + The type of the value being serialized. + This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string using formatting. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings"> + <summary> + Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>, + and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with + <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)"> + <summary> + Copies to. + </summary> + <param name="array">The array.</param> + <param name="arrayIndex">Index of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly"> + <summary> + Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. + </summary> + <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference. + </summary> + <param name="reference">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)"> + <summary> + Gets the resolved name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray"> + <summary> + Gets a value indicating whether the collection type is a multidimensional array. + </summary> + <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter"> + <summary> + Sets extension data for an object during deserialization. + </summary> + <param name="o">The object to set extension data on.</param> + <param name="key">The extension data key.</param> + <param name="value">The extension data value.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter"> + <summary> + Gets extension data for an object during serialization. + </summary> + <param name="o">The object to set extension data on.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute. + </summary> + <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation"> + <summary> + Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>. + </summary> + <value> + <c>true</c> if items are validated using their array position; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems"> + <summary> + Gets or sets a value indicating whether additional items are allowed. + </summary> + <value> + <c>true</c> if additional items are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems"> + <summary> + Gets or sets whether the array items must be unique. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends. + </summary> + <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter"> + <summary> + Gets or sets the extension data setter. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter"> + <summary> + Gets or sets the extension data getter. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + <typeparam name="T">The object type to create.</typeparam> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc> diff --git a/FineUI_v6/Newtonsoft.Json/Net35/Newtonsoft.Json.dll b/FineUI_v6/Newtonsoft.Json/Net35/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..a7dfbe06b340fad1464d63b9a1d66b9a6223e9c1 GIT binary patch literal 401920 zcmb@v37lO;mB;`3-q-gny`*1v=e=Ii=?+V{yrr`=VhCGAK}A_a!~~U1ML^)<dx>J2 zjsX!B!{&mD7&Q(csE7;dIPTjhBF1HAl#z(bxQ@Fs<2V}s-`}Zw-@Dz}_<#QYPVTF! zQ>RXyI(6#Qdh4EY_RSeTlgVUx{{Ht&=Hs~fTW7!f|Jh1(|Kun7Gao5@ec8vmp8oY^ zXI^x1YwC(-^rGhZmrXtY{L3$oHcnme!l~w_%cm~BeCkQ3J#*@^=mjsF?&~Wa5|cjt z#7yStU4CYE`MGB#xjmZkmi2V?WHKW`CX;v2T}R@d!oLnTlNm6-=lB*t{M+AF;(>2} zbwIh+y-KM1-*Mxh!_K@0y3dp!x@+1*;z&8?1({x)(;pXPmZZQ3^iH)|H`F}gr=${1 zZ+zjE8wvlU9G6RFh41v=6uD0~Tg~SKG~QHp{%6MY)A?Hm_tVW6UK)WYUd6M~n%V>J zgib2w`>f>3pLp{!-I+hX(#x#>pr0uiG?RJf)r8^e^r=i{YYf|;^Y+hQdfMuj1n>Oa zbC=g<{`|Y2yz8Mi-}H_rz2)1-JoxxOeB_<OPkHar69=FFKTjFmzT<s&&Hm}E!|vJq z$L4hJi=MdR)LTya(~ZZx;mgBgrQ45s@y~wq_44|Ye>HaO5x@E6ibI#Y_NuAF4qkH6 z%YXTb|LOYN<*zyMvQvL@XwT@*Z-4vM=biiKfBEcxfA)xPzT~Z2S6%X@w=MN%5ka<k zkmt{t=PWP0GLtEKm5@>dK#PiA?aj)KUQSdyuvvi<JU=91upBpsTg_y~S9WK<LL=$Q zWJ-Q?DZrtj(oki?iGxUD4(JY^Zv5|5m~1Ww`SZBn0{#acg?~!;skrH9hB$@S<F0uU z9)BZTc}2%u5JhAa&B9d>p)0}AaP3*8;pi#=Jq{%o-6RyT6wLwla?uU3KiK$IIF7@w z064gK_u?rEQ(7F-rUFov*2)OcEu?Pj*wtGauIC8CQ1SaNk8(unV%6VBgY<eGEZ<?R zd`VwkVho1LwUbNbXe-D=S%+52rdS*F!>fr4ui>W<zOV>Km6)T7<EWH1ZVHu4*7rfl zSb9G!m0_v8SC*(KZ>T%YtXm=oTqdt16O$Z#8&VJ>nVe#zYlVb`P~i+I7bE3Tl&%xf zs~u9Gvdep=yv3V<@k_Wks;sdMt=E8R#Yu=3Vxk30bjR(~O7z-Prp59lLp`OU#crA= zw!SV7-J#G>uNP7qL1m_Aus6J(ghRcxK?fU|DFAz&!Aia5&_}34J+*_A^edFUZ?G@i z1_}<kQ4G5bDQ2oCDSy9;)?ey(B|8W`8Cn$MEV}Vx6J;FikC0nnN|7K$H$pfm??7oF zMWhttloFgp%4pCl4N9o4Hk=@1fT`+8tQaG)Vhl=R^N|f;$fGgxs1th=X<gBzIbLC^ z;2P|<64{1#QuG#DU))^n!kBxREtv}*btcoxEa`f7s|z)t=`Qlao589NI_3%9LeL4p z&xY8>Se@dwL7JhJLFN)%T6xK@U+B%!TC$A+Z%S6<hPP7@bAn_oymERAG_ro#k6sU9 zhg^={fPcBmG6rR%Hv+3V?C4GS+qS_(KIm80SIOJ6LSR5j*@j=Kb&VGTe|>d)Wi~^U z`o_d=QNyv_`UTAXiU&buF5-C-e6HhBJ3Ef&gg7j5erUn-AK(l2Gu$=r#}nJFv7Xpa zEvnT^i_B2<R{9EF-mH?D)%6yn4uUwCE3EGU*BblRXzYt<?2BAu&sEm<1i9!6kaK7k z^7DqWV?*6Em;lpaMrWY*IP`5Rk{QaCx-094x=Y<&DKPsIVoZY=l5^P+9bjHaKj5<b zJXsEq<$%jFCXp?5Tejp9L8CfWUCKXyqcZ^M_CHi8<x7QzU#|69EtLw<tuP~wFbXmi zv3a-}Ku8e+N7&hmYNc8>!q)tXal74U%@3O}Uh28=;`J^;(Qz`_3mevkddow7r9Q9J zYYizbUJOy=XhV8SeU3!0Bk`CTh-)8F=BW21?c;ly6UJTpSY2+tnKEvb4p-@L8D5z? zCRZJ=d5C~d2QUwS;RIkF0F?w_9snZ=z&rpJ3!wJpWmckYsB6hD4rao)z(ILs0iT*` zt*cxgXg*6V|5g07==+MB;lxryg^Dv4k#n|swl^!c;SE=vFS-qM*N*Dsp?2iWj)D@s zjfkQbjZ2=#^3&+^uA<k^&faeXf@(km99rpTE+-u$sZu&R*n+Vyl7|E|K0V?*lZEMi z=NsMKRo>kN>&2jcn9Hzo!z#4AH($O<t~aZ^u9i2iPM}u9?uf6RT=<qQ^zsC6c8K7i zjbOPMJCnX3)$9FK30CyEfFEsl42f*@;do?Jo)drGSnC}`&WXG?I;RTqDs!q9uRN#9 zU<3u8#zRBcm3L8IhDRkYJPKgC)P0`cdK1jeStc%HSCHtPWRQ;au2TJ21=i2<qNPx( ztjEF$+7k?RStYM3;7RIur8iq9vJt|YJYEya><qn2wrz^8%M5)u(wzx5!>;j5)|yJB z>$SY<c*j=}L0hpqbza$EqOvmVEt29FYePwLQ;FS+t;$kGs<|RDR#Sm`bM)HMT9npn z7bu5xRgl4qsT5<;j(%0gT06ksEP0Po{j|4|w`8uQa!1n$t5NdG;p6cP`nwk&Lct4F zr>n(aeER#r<iO0)UPMP1xN*gVH#y+KHnM2F8{*qm&^3i?z=>lNZv6u>)nKxRF-O)> zE@cT9W-fDB)?@eP!#lvM4|$V4j*IRXx4WA6LMkGd+KSkzzB`4tnCx?%{BkZAulf6S z4H~bh$_pm@;UI{q234>5%&xe$gKgiTRitpqNOF1#aw<wrBWXDmVmZ;^tu0GFKk>rH z!D4;Xi%^oF$BA^gH(AP=JaSgx>3IdV?z*1Ohj)=nEht;Z-ba#xB`KK9Fe|}iX{I+$ zDPvv@M%LW~hpqRJZYW!8CT!3V1>+k|#Nya2l)AJDZ;6smkJna|sA$!n8`R!S;^-db zyqb>by&~03-lcBKywr_+?%t<-VvV`ZYyM3*);J_z8Nucgy?u#QGOZv}dajZ;mX>K+ z_m=OWdlS>yVCl?S$Nr`UO4V56Elro^eel0c5ozsHxb=QwOp>O3q8)4B#j!}=3f5k= z&v4Pc$;jy+s&_BM>cigBTqm!b%fV~DEh%=)m&S)3$(ZIDMQPq|6Wl#DPcj-uMhqTH z*rk26**h}I|>O{8V?O36qOX&EVO(~ORcL_3zzMF*0R;Uc4nwunC9L^P4>WR-In zc+IEziFw^;<1~U2(K|Z0>M-|cp^_7|p6QdEM$>ZIYx|VFNg9!Ayxq9MW7KX>as{m) z=iE(D?W&K(rB`6s6)?Jw;`P*GO3?=u@+J$NMjp3;|4X>vgK_aaNc}QsD0$;)zT0iU z+r9WO>L4H6m+|Rcu7zWQOO7RHaz8}wF%H(XD7&q6iQT5eo8uCw#B}ouEG*Vo_|$bS zZDBLvhap@)DDXmh{~-KpArllax4|~L38y?k%jMmCR(4-C8nY~$izT;wWK-HU*TwHq ztr;Kr&{5eR-I>#WX+UM&4FF@y)0?(Du8>w4&G(9-kBEP&RNdNg7h8XP8tY?VMfVG9 zY95xO@$EJZuadTBm4)1vvGp2D9tmT<>eKpzv6-9~QD9}=9_!UdT>o8kQT0OL!mEE< zWpQZOnj~XCFY`TUEfOt%4!z5I**P>N>lXv2S_nfkKwE;G#66kkDxT->=b;PE&?9G_ zkix0bU~HIH3F+u*ZR0LD5(g&>E<Boq`@*$`H`$+f7R8<shiT)Cto7t`AA{ej=Y?3i zppl*It#vJRNH)5wUKbBaJ`Nh)y`?;K_M?O<>*wTX?A)DsGW^0LW5PqB!$>bY4mX%S z$ZP&EQ99o$B-pl6z4u*hd%KssMKhZ@7n;Zrn&Pb(^yE&=0-};M)mB%ZVVs$%9Yp6O z`BWJoId`&{czR<`^J(4fZqD-W*n86n%!;eWVlc7cM0z~SLfI^Q#6t2UaWyorZ2CZt zozOu8(6V{y6TEEZ=ok-8ne6Kzig3VF3o6x->L}_w5X5{t>7_<J2YHof9q83l-IQWt zy5QH*Q&cBlo-<)3r%jq(4x3(T#)kI0iJ5r-FcNYA^8jEZ;sEBUdVYB%M0bO#^FB@9 zU0!%FuHQUE{C$neWN?o<6z6EgS+9jw73WZ9wFuGmy624A14%m8sgraENMiM~7@<(v zC6whw<U6-oG{bZ776VEZQm5vwie2I@JQKS|#4aoa)wOL)C6i-oB{xAI^T`~66xrVV zi43@{>ZA(E!^9}F@TrY^;d-bPYcpQ>Z1YsT@GSEz^O~0@)#nIr%Rx0&he4w!9-fwa zb`4Z|cJ(grgfqEnrVEAE-_=)VdjA1)a=jO-e!XxJzqH3$iM!4;LvBPPwYjXH*-08$ zZI@?k!-?I1^e{s=6Z3N1Tjk%uk2lu5O{`*j0_=-~fH4hUNRVN1!3$}Ofs0+zj_n7w zbf%xQcP42`RIv#G`X?fztrvq-^n&ngT=*8nxhKZtCAgkkJ+{P?eVF2<mMmBGCi@(n za-3c3A1R#8hyDwG(Fg2;7$^oK8%|V1WD03p7s1l$OV)s_GJPcBi#b7DCad6)nSuGG zf^Ul$of%|U?M?QE7em_$tWM?A&`H<eC*Z}679DhCW-+-f$t4mTotN7v1A&Fb*)L6( zpA~N#Rpy1A{3w^!9G*(YQf|vYQ;8F4=T^Tb;691x44&O7S8&0yBuzhS{uiJ#19g9- z)>UB^t|nXe$7)@pJyabnH^^B<_OckEie!$Ls>m|^$E;dp_*~*7N}5}?uh8(y)xxY* z_J*NsVHU2krR<7EVHRGpW5_IgIti99NImAjvG9{*Gf(xx=YU;jFmZ?kZPOSp+yKmF zNQ}!ZWKlD4nT$?nC;MwipXm~lC6z?=d3l?FQ!5P(Y%Bvm_UFx-@v`6OpQvqC1wM)6 z;09^rz2P|(RHfe&`%_@M=rdfjAAMQ`d<Q(0b|N<8mirl^#Dn@ht=m?pTc5pwo_NU? zEy%3nIgRHfJa6FH!Sh}o$Y%bX=LjnHSf0yxuHsn->~*-e@!T6fYd(p`3tvFalw}0& zD>D<`(qP*i8Z2H77a_y+)a0z%j+AMjS*C44(%4-q@9}b`91Ks}%2D-3Oz30#R3Avv zlAi~0t8jw7mcl%0gq=Ay21yzaeijbdXPPXQvfFM?2DwCDNTe2l!*2ScA&kvQ0`!)8 z+a2*JBEe{6YL!w@4nHS4x!R(^z-^@DYS~gSlw<H*%5_H1FyhuY$l)9jMET7vG{1}* zmGaIhgr66=A`&VU<D$f-uwvE#I(w5HgBMw*DziTm+a=rX>=X%@3Y7viA0W@>clhz$ z#)eFT+t|=}^l%DCts+rXLD31UCpR*~j?R%}(}*ia7Foh|Iv3a+2jP(J`9Oz@<(_hH zzOTk=B|U4laA<{Xx$NzQsjbjoL9a3mG?LODI+QK1{9YlyVW^u$`1L(8%HxB^5#bkz zcLd6;%+Jy{XUowSB_*~XE9+zZH*hIveTj&wSEy_V&xeJf+`QzV&m)kh=bX~$y7gs} z6=_C}Og{Q&!plqA5ZJKdkWzOkx1q9utxFZ7WK`rU=fkgnw`TP3fB$>T@j#oUz~&Xz za_^eI?AEym+1urmdn_f_z%kD-KRgd^lMYxCSx&c2njlkzy>YeUMzR{560V=yV8YCA zSlNxgmWx9y*GjgI;d~+bDinvXnvI@jZ=Tid2MBM@m9p%dWb^A4<ImLQiHfu-NhfkI zb;klOWfKVpK_llo`OPE1LhL*exwdq3v2@vjLAuLIG?$cgEnP~wHLu*8^N$}y#<579 zEYU-qr(i9=+{57A6*ageyg-7?H3EcMtQB*WY0aXFwQNvc@o>%$Hq3Z_RSN4<AE!e@ zfBqH#*~%>|8G-v-YO2~>R`)uepd&!*ZK!;Ljsk78q4Ehj7LVas?2q>WR2XgKZ3W^s z@&s|hX)H0JSzPorYK10s!(BApIZ2;E`O>s~e-H#<V`<pe9c&)nLk>2tZ}^5_bRz0& z4z*6yUqAOGWpW1dtWGE5M>~aS`g#c*PaxwFV;ezEzT);^t7PRMJ-PA}_9}CGt}^ul zbGJ%(E|NWnsYeCOSEhbz?p8_8MfMfSQ@<0iP?`FZxmzVb2G#Dcg+F(Kg3KdMl&d`< z^8h$00hotT`;{@j*$g_b0UVa)$so0EK^54?EVo{XN886ikd1DZ6Md63ER9}HpjsTQ zp5#(Q-vYdi@{MaYuu+jGd#!H+oD)GWe2G8^@hOD-=sQIC36U`o5j^@A5uvC?<mEAu ze-#l$$3!?)B4U*5sRCx_PR3Dr6_lHVpQf<NZyq9^o&e0lX_JxgDpAVnV1%YCv!^5& z<^f|o!FW}SacY8L9+EI3aJiW0x`a6=y6`ndKMq_k8vT<!%IWkZnRx&_BLSEvshn~8 zln+ujlhn<Yi$Kv)np)Ak<=cA9ow%)cCj#}t?;@%2So+@Rd-z!EK99BPhw<K_=)NFg zlu|6LJh`Aw`T*1H9x_cHvb4Eatq|m+??a=OV{cd<=x@PkyqT@sEL*u*x0M@2j{rp* zZ2shBR%I^R?)EaZRxt>@Day0-hLu!xF(^+KZx|v6+QejGd#<9N5&ewnXG}li`dOl% z3H>b9&tyTrJ7`)iIjv@7d%nV>#Cavoj}aQ@S;8~Hql9@&nBNhM#0hCpW7`WA9wjU& zVPTBWIL{KE2_7XRKmG0qM&pFC{^cdxF~<5);!;+rOW832#`UvAKNI>9iBi^Rl(IX5 zv4jY9QLb#Kzf^qph`givQNc^yDtW0}MW@Q_*XVRRI^8>h@q`X@kP7L7kr94INBN-; zY;lb9vt)vw3H?}VmUl%e*byvAQs?NLNu5*boKokMI;Ye*rOqj}3BKecUqbW~N$Pwl zUm=Z2zGR{=<;O^xSNgot=at^%Uvd>tq6W5_M!%kBvGqk#f0{unX$I!OmU=c}_RTgi zVoLUf!}pV_p4FzM+ZXjS7ocy;4DZF@6@wFt0Qz})d4l-K<LXhIo-B{_yVhUkM1a<O z#;W7hCCpJSq`UWKMQWS0)8>G~VUKn;w|G}w0^IFHCxeSwap(4iT|avnWXYC&>AfI} z?$~t2Ww1os(t?c4-<B4|h1=4iwP0IXXvwxTBD|EK**)_BfDs2U4*-m}1DFRuB*0os zr957=1IFp<iMS%cG!FnwuS;s46TI0bfccx?f>b{pcSrHowpe7<M`gqjV=SsFccx)) zQf{nsnv^~cOzWHq%wOlcHzh}wEKJ<qtni|DQkTi*wg7JZ@_gifkm-Y9jD*F69V;lW zTEno%c<KO?eP<!>E%IGt!d8ZH<~E#D8^=oIc9F5%pHqRBdzDJ~H~Cm74FBRlBO?iD zBms?%CZJIVqQ?sV&!zLDkIHi-t8P;F@UsfB3JB$YlJ_jXnOeuo#!%T<jq%iGd|Oj* zWEU4}lg=M9MrQEtCtLotobw{UAln^&QgogEUPHS$xJ`pKxj~3_0qn*d;9+o`c@7V% zkh#Arlc6DJ;4`xre~srPo@ekpm*+)1I{l(Eo8RVH^Fw|-Z4d=(esA6n$@^2hzHN8e zB%s)zt&auG>u8E&;VvqGH3mQYlrU`~okER1BIunWm4-@yYi{m98~$*O!Y=`AIYfUH zg1W6ZnVW=POI{kz1#8Z1bJUZw%~W(RcSi$BsA~<@Xx5+GbO&LJkSF@KBD5`;+jLJ7 zA&*8$!5UAQ<y=13DIY`sPXsrQ^REk+!A}Bp2^cIEHGB%zpaBT*tMVd6ybs7r{&*QO z1Z!?H?}z2R$-MW=OUYshZ(1SVhT=@`P)MD6P<z2VQ9P;~|6TB>$M8L5_@H8^<5)XF z75z@2@#f9coYOnod}#gy;qVHED4UtVIK_+A^3x>HS*|W-HvQdo>gX^aYhUrVzyCef zN2%8#rjLr@I8gIjP>W5nqcSl);WeiV^YTm^ZddVl+(}W3fh|+S`RtY2<RX##)V|4a zkXM2+{ydHMlf8%Zo&pWV^)R+cK|p;P`j_DDXP?5)oCw~4%4|DYv}hw$aL`O`v8!sf zHC4?xs$%-Cvx{1vSP6Ez^e1zMNo&-s%-qUvdFAiz{M1o<&7&KrI?7sMvadSXU!7b8 z-FNPlE?AnQm(lA(;k8^$S!#bKTd}oy<v6mTC)Zm$D3{;BG+XAkU`Kt-aQZVreq?>I zmd~?ZkY~ziHT)eijBB_&lwET#Sz!#{2Q4l4u-fGM&B_cVQ&VugUuA{^U)G;av+m-$ zS`fY@1dbPeQLb53E!=W=(QRz0{#02#Ji|P-L+GQFxON0f^5&@}o`d4ftTyU3{{oMt zcw6lgG?tiOhK0615FCFpGjO_7_fN9w&U_B~%aGL;jeGpt9FuQkGpaDN+G|er&`Pd` zl-qPNL*-CxC}LsT!HctUaih~5niZSl(;R%3XJV%4k55zbFQ-IvqKh+;{j<Sc8jiuq zGd4{xZ;7WDJI|8oUVn^j27_vc%j6iCMCj&No!bo=`Ffp?F7U5{ob82Jy+H7<$n`Z( zH^hQNJjk1P44$P4PV6D0Vgg#2p1A$c?hqJo1VHcj;)ER%n-{s$Z!FrGa#cM5x5ykm zq;e?whlJ)u|47l_NTPqdF#0Eo-kC)I$HM5JD*BsA^v@PX|6I}PLoDxKER6o8qScvL z^sg31)5Ex~BeqvhKnItbZQ&&6uZ7(+*yRp%=W4ycegn)7qx8n7=H`|3w<5=kUFOeh zn&@Gf-5F8r{~q*yzh8QP5Iy?4dGx}B-XHfu?@#-s_g|v-Zwu%hp3wX6z0mug{nGoh z=rP5f#~)>P<^A8i&|}cIANl>C=rK`uwMB!OuSg6Xi#Ecr%A|$OkN&%&t@Du@vJyK# zx(k4H=9Zcf$NXqt(T^l~vl}%(x?9l<x7geEJ9R!;a*gIf4qyae)Z5J>X>%8(u>J6> zoP_a1glap%u&AN1AHumC6H^6tj8?{GsjSoo1aN)H)3VrK$yQ4hY%rpyHtZb4o#9!> zb3V`IJU8*&&hsgr2Y68Y43%Z)HkWs0GEe5wC~gzaH9YU;xsT_YJiB=Q&eMzGZ}6<; zc@ED-Jg?=smFHtTU*!1@o<Hym(G5@WG<eqXtT~1sFMG#b8bF!CdD(iO3%7Czs#erN zO1jzcQV`LG>7ldkWfTqM2nd@JbhYvhJGXoBk;2YJSO~*@uV|aHIBbPm1&5vAz4&Nh z=c8Z7*z}KGu4y`Kg<C9#i<83c#g7+uA;Q=gZHDY!uHiXsg<CxiySRJt8etbBjFDl# zTi9m*9Jaz{B%s|BzYfw9F-$e=w+q`Ejl)*B)$3^Y?q0lBw0k2gnPJ~6Y%`t?Tj5rp z!|t;=*Ek32AC0l^6t>w?hplj{-(mOfUc6eg`=cMm*o=m|oN0B~3bz(H>_xj5qg3O( z{P3d~`yOGNrFGZ}w+0;c!0yFI2zwy<ag2S3u+8u~Y=v7Thh5se_;JE6Mc95T<+QM^ z={jtM?SvQ-9E=Zt4MtdN!(Jim@4JBXL}5F=3-(ZaJa;I<d>eK{*bjHG6}BUnU=QzJ zOfwqi6*F3hVI!h0X9gT63b#0JCq3bnwPS?6IQmVDjflFORdCn}w}u>cdH3RDg<Xz* z>##Q>qOJ&wuZ--ZQ}p#Xa1e+#KVZD7F<UjeX#nK<S=o(p8JItS<><*pU&5(O=beX5 z<U@N?urCl<EAD(NDQw}hFDTfMDJo+b*`3VuN}JgpmUpoR!RD8G&F$@RmA!Ug2SMBr zs*1hP7#4nPT;4fBMuTsU2q*BL!1Gj|)A#YL2Yw#UMXC7O<;>aLG+&F(e=|Y&@x(v7 zNo8mZG&l6le}%${&8-D^GVzGg4Xm)DHsnec7TDzdi_wgi5Sm|rRBM>3*({6u1;w4= z2IamTIAbH^D+02F5RcJ(H$=;ZSQeeoaU(YetzPKY7yIEoOxrY1`Ub?~fhPui+)-NX z&AtLVu8Fi3EG*zh2rsDK=!JLV&OfWf8bPt;1D;c|>gELJus(*qUn3{hb2`xpb$W%M zx}73@5sw$rAmh0V$MG#oZ+5G=2!wZ}*L)n*Vpa+9DoQH!)qRCd_QDT|d~2595EG%j zjPO1Ky|fKF4lX__m_K)oN^rdwen7$Sjr{6lkjkZ#K_-@NfK?@-bt%c!N^&xbQ1V2V z5$iy#!DU-l5j4cAor!oYnxsF6%%NLLw5bTBKIsDX?y5H{M*OHra*jqAS8;R?xPJ69 zG2vdy8=bB>&zOz~=K7QQhP^cEHnw#_FPUFBhT(gw_?AxnL9|ZrLK+O2F(Aj>sf6JJ z23X?4*Mq5M?>CAaB-(=QE4d<`4a!4G<J%Ev#^XlmUVn;N(<_cd-?qVBo00Gv4)<Q# zOoA&CI~`bkz~rDK@o9e<B=l!wp1decMuTj!R4<U=p9Pt3Ik3!q#ZeJdrX6IN^%PW{ zH&AulOC7El(TEtRy4*B>|LVZ+Pl07`4xwHL8Rw8tBZuK4gE>^97&4jGj^;v1sVjxL zy3sUsjSK*5RFHthw>kpA4ZtzquLr8G$M?eRICffjpbH#zLJZ?f_9}*Y9Kh;r60j)# z&cNl?bxJH<u43B4M+Aj)-c~4%rQ)t5PQyszc9*UD_#kCVm+2BP)JdS73!@(P?R_#c z2L6o~Pxelu3*JDd5*JJ^Cmi$J{pN8XIUBM7CEI#kn{Q^huZ)#>&OD!YE7p7DI?y~7 zdh_0G3mYnVakyHn=s)w_D=C-jL)?A^hL1A?EUl`2&;y2RNKy0y*YCN$<_zk-t}(84 zM$OlV>(9~X>ivF*>8tVT`3mLZZ^E#2)ff49$YqWejv(i1^W#b&WpM<oH*1}%{Rz>} zW*&t;RZl;7jV!mHtp(YTmzjzr7>6xR!7s~(S1YdKH_N4%TGpM9yg-D8F&9D|nPGW2 zTnjfnwRLgo!p!2-Ix6pkF#hGR|1!UMc0$Twrp|#I(I8dSp`daDvg%?FF1Mo)j;Ub5 zPL<O-^_kvWi*?lEHbJU>^VbRGG?Oap7RrhWm+UQ{V(kK#b5AaQ!RN_DGxpJIbD13P z_l(sh1IN5;ZS+s^>pfv$Z}*VbDT8hCN(2i_;npV`xBBj-9xK^L{Z!F(BBE20={|qw zaSVK1v1}<2wK-Dtt9ON817j;xR~tV>NsHalR>Z&QCd_tE>qL-xeOoFIq9sTpn&5}+ z-5K^<&w}%f_e+9)uEBYgr9{<wbIuc8mt&b*y;R;WbVn;8l<e4kao6Hfb`xsWr5P4m zx83Txi{H0)7*uuc)k8biU8<v=(x>i>`k|HLai@5+f=u^i!%1>9u4~<`Df~raI9^v> zUOUb4?4<1mg3G|_%@5mNS6|NGDfW$AzCRnSf=Me-Z=uoa(&nRsNZ|y&+|}&Z^m~Hp zNgYP~=wMLP5>2Gs8<EX0Bx2`TGF1liWa>v0fx`@kkSLa>t(+$U{TK;ik>{gBg~UWM z#_X=GM_4BJe*~?sJ9-&)Rhg+E{lmbj9~FDH@ZM;Ve%9*caQs#;@^tE@+mDf>_dx`@ zC~~p!4l1YHRSpZ3R8EktoVW_to<`5ssYO;XLChtHAEta5B=;`y>6sVa@9NQ`8GL+K zQm5I>ACb{&WYoRMWE3=}vYqN^*RJBI-72idwqtB&ByK>iO4;t|RM27My?o7$kPf0c z5p7*~Zb}Ofui*tI+I)mbEjE_A+6|wG5^!EYLeCdk(>OAP#a!MI(0-#yS1R4fSIu;6 z`fWMs5XMuLn~PR2#Hbv7A%a6VT8DoLOfI7Qp1pTaB!o56TT(j3r`<1e<v%L*U}-Y7 z$M4i&!}PYgQ$vH;`__(ELxUKq{?&QiiPw`lVqT!T)6I8ad0I2@z1ij@$B-MHXS|n( z)z*81*@%rN4&H5Bhf(2h+Cf94G2`E#^&K?Yfl4_qO+|RdK%8BXx8LK|@=Jebn?2bn z>ZN0+{GHe($GYMeuyo=&Bs7*`ER|u_M}NaGUA@=o)S~SbIj?nd=)!$eliz#_44Y}9 zQ#=(!n;!bj)7#*jl5)=Eag;NTJUfZZ)emzt^<wY;=IJvFe%_F3!_ZU4(I3dBhLWlW zj;-2Hy^w_<R+>yxW`<HPIr%ai#d^7UA$ho7HPxXqdopcB&^w5Cf_D9VHp2iv^EfNF zOra~hD__X_TP%So&$zYNC?`5iU@K}0!>P6*u$ljONcGZ{iklP_DmNe9MZHGP=#UOy z%3Qd*+HZbd*cw8#t5$vE_3(G3__GQq22S)0NQymyWe~~Vo9c7=;z}wsa)w;%DY!)K z{)97=+3+TEGP~sqQLGBlDk+7SPa~>$ZjCRSVbqv;yva@Dli0AJ-ld>H$^W9V#DkFZ z;DvR8qr`5$95Eg#_T?+)4rPajx`&4lvssne`6+Q~hsXFIcYDagF%rTom@tRBYgJIh zd5pr)#^`{8+$8WJQzqn?WRY}4x8_D{2s6YX7|z-5;3y0yYf5=Hn4yfaGn7*=eU$uo zEasz`ZY&mrpP}^i@gV$|+@T;knquulLtUfW-KBdfl73CJYS6+O(XTDWTowII!x|>! z>U}vgw?TxRX4Du5G-7vW5|1UF#-)z&$<p*x^Yr0F*{w-*#yC#HV{?5FZN3=D46`!e z?^Ld4NnkBuOnRod%v$3MDRp)DDtNgdyg-RLV$dBvU%sV&_S`J#Wj8dg7$n_r5vz6# zg|CF?gH!KipeX)0Q_ob$MUAwhwk?ce;*%u1xg8fY-`MuYB*xlkZ)r#QS!;JeL_a3= zG`o8l?$Pj-Y8WV~SualRHg6|&jTR)g)1k+doWT;>`(iY?9kg!nRMc%4jxN`RT+{fn ztDTAl-2K_`Lh%z<SYam5ApC^}X?_xNu6e*~HuDa6rJtZ~mr&o<C$pKjBH}t3T6rbM z;g;j^_68imj@IGpV>`7l6qGrCe^x1A-0%c|8VX8{Cofys&+o<4W%;K^Y7N}h^a#IK z@^1VjTbt)G{;Y85P3|I&wGGI_=yD8K=e*VC7`D8g;mqoHuol-k0s2l4{{>#rMe1AI zO(&pSYd!$Tm9nqEt5WKN)fc~ohwbO-7ujGU)uQ9UgX~1GI1xnNsv>T{{b@<m&d6Im z#Bl?IT`ZHZBvaEsqgXq_kJPSfbu&CqZxal1L)pP>_#|+2G9ibbv3SuH#TkgTCoz^t zGeP^1_AhK7%r=>Nx|37pp=7GJ&*3sHNX-?q8ySbQ2->_8KBAMzk8_b$J0Tkx?5V|} z$;M0`B~mX}^#Zq^c{#e#o2%F{XfsEX^|!Mvz{Lz!-?d{4rR;4H?=Df(`BL{_5S@&F zc_}!w;V-A^S-rX#67>SN_}qsz8VX1tV-{~^7jC?G^(UM6z*r%CnyBP_H0SGPVW>vt z2+xN3<5eEBbH#avJ62<xb=r*dK(o%t!n$`MpLD(F?Oqr6%5qOo&kqk39{CA4oTpLY zhqC#}dh~QyTReScJ{AOb`;;Y!q6vaKj4<U>yqOThqG0Yr3qWf_-rS+EoGH|~fKoT5 z{jQakS6Wouz8d1l8&+SgPzg_w2nxGi<O(*C%!h6CkPCOxDHHqDUCW2^e)B$Q)zzrA zD^2)P#GAD}e0qxK)4y!?o7r+3M+20OHFgcXR7l=OJU;VKU)S;+dLsKdMEPYuJ%2Ex zp;U1>_315V2^;gQu?Fo<^C32XGV6pl%ZMN=WX4IwwP+Aaivk@w6od>bI4PG#sOLFm z@yJ79g=Y|HKP`qNnhG$oK?%x3`8A}-(BkvA(LX;6Xm4)kCzEziiOy2OfCjf^8~HR! z!@Gl*AnVq8;9CVUxUQh9=_aw-p^e;fM~7wo!K{_4zNGo)L_h`KGBNqJo&%B10rRNm z;-U9lFV!#QZoK&T7t=W7!UWOth~1S(v(Lfv{h-RF9WXecK5<#*`+u{;F0{$6%qT_K zS6}@Js!b=`&xOXEq!f3|_jDF}vYS2&-FjcTC#W|62<!3UjM_<)Jf48W+HHa{ee5sH z%%p5r>pXHQ2EDsZ?D3l`Ds2UknYRIIF43M=C$g<Qv9jF-*G`A>ahdh@;^JCnsdNaF zC64zrS?aVkr=Gosf@;-w&O89#n*huMfaOkyVIBbQPXOjIxsFk0tUdb2#3`$bq<*Ez zE-xwKWmHgP#oo6q&^aM6Ht4dmzb?&P2TCJ^cA6(zKJSUsya3{HK6IZhA9~i}oDkY+ zo@8lQ3Nqea)Jbzuk_O{goD+h^JtiDBO61ZnUx_{o{A#&cA%9H_c(GCoaH%}YS>Tri ziG3KYBCkIHdn@PzUbeN(C7Zoh*+}N*L8A1L4qzVkZ7kzTcnb;G2zrCkT@U{K;E~&# z3D138{>64r06PM#YH&1`y6`eDq%Kf>>O$!4!(~_q8^&oUhdy2bcjZ-dvfc=N5iPd3 zoV%?=#syd<3(_$kRZP>+n#FcRb=n)5?)JEHixbum);kTFO`k~qtrpna@<69o?5!=z zM{Lp;S>g=BTj4+NmP3BAtC+77fIAwljnqWPwcS4Eqc&JzucSNkHsJcphA)Ls^fG=L zE3($*AzW7u1NOOq4K5Ya54-KapaNIRSi7}QjX(!Hul_hM`fu2(H?qwzLGhyh0c3j@ zUi9b0>+V-@>E`EDy-gQbpe;pacOs(Au59xKiI*2z{t^CBrHymgrYiGv%A-1Cn4dWb znfc+{$i|Cat`eRS=uI6q^4yqJxWdV9!n$~ke75y(o~FUsjS5qqPEw}bq!s<?oyy7D zzk=wRaiI2BfF6s4yqCC{+{ow*b_SLE>_5RIChjW0ao+2|b^TCyHz>@Nw@|3o92lEX z$oB#(Zutbsc$a7kz{cWiJ?~}x@D5^F<>Hmd58$g_;)Smu+GU{~G-VZSRYte^Q2mpr zUTst@s?K3T<0iUBII+BZtU6~u#Jk0+{U=;F2)CR?uT+W)V~hdM*lS%2a84ANQ*T5K zyy)wa)HxpO_$o!#I98*5m6HEvuS^}BW{Um5BzPT3WF*9>?yT^2M%~HHlg)4ggrXBy zEE4#Btx|A%p4jRX_<EqroqqUs6#FSEuj8`FLCFR5daQg*6D9sSFCQ4SWzMBmRGD0G z8W)iDM21zW5*77zV&Klb7PT#Zm8~iZR@{8KBiiWB4nG6Iy9&xWd9$0^(V^%DC7KVq zQ6TJupJ5E4-FC({Gpw0AGDY90^#qOXTmxv(V43eGl5nG6HP>L_DG4~Ai=3wZgXm_^ znDU%Dn3LUPl*0Pa>+uZw##%#z!(C4Uh&e4<-7`&cZZ``751|Ll2jxU3)36-=IMm(< ze&g<4{e!vP<)>rgqAnS$O0|@%rJtI4&fWGlN@hBI6UbZD64YT}=&X~asLsBdhjOdU zuf#o>^1Jg0SwbF<+<=Fn66bSA?2gRIfok)wY8k`O+dR(uuQwC>G^K5HRa<Wcs&49& zRA-OgQYl9CI1FjeD7dxkofy>Kd~_SY#zA>rE4HCvK4|7gGgsuwyf{J3E~b2L{Inn< zyq#Ft=(pn*oY}r}*KlDkI}Gvtug7Fcr?@ef$I0n)X3e~1kjIq>PB!Rki9E~$;K2l7 z9so={oW#rnfI+GQm<PZ&5`cLw@n*jafIB~0+hKD~0SCh7%>HvaN&yE_)K}6`3OJCW zzM76wz=0I?KpgcB<)wfF>7>9{sfFmBz{@MOm}}v3^ezD5hc&`{X^gT1i1Yg4kCf)! z07T${1q2jcK)_HO0eKe?_}T&j3NIjFD2{-<3kW>8fPlga2pEbZAnyVKUl)OY=*U3f zaztOyk%6JyX)=)44}YvQcS#0RE*k4<+dKfinE=egc)-sbO*7PAvbP(e%<=J(@Usw8 zi$LIWpHcO2paVbe#)O~3b@zkLeaXdWn{@6|@_Vy#>iIpE^5#D0qUD627jbXa{9j`x zIQQvPq-GIwpB2CmcG3gHi|TnUO8Gny)i~ze$-tbopUS+LMk;1(Ud&rlF{AThrc*KF z^I}${VwS`)W#^h5W?e6XS)(tNj@MT?H+m0M(NkNLi|Ftf9WWmF96OG=_OLBiCqNYx zzfULS#%sfw@fB{oCi~u@t7av-a{vFNtClRfa{s^6U56Y_F*(S1a7~(7l;|Fl1M5oa zwmX6#{64~spV2RH0^+Q8zYy=Q4reA-xjsSj^P{1Cs?nCQsB`8?ZuEXfI~Uy>lkSeb z)DiN}cNNn@PGr1frIT@DPqlwL3H{TI{&#)GZf@h9*Kf1i7>#%B2%-;=0iy}^J7eIU z4sPo~RF&%;=9DDZ9ekZ&>$7C9p35w?`l)W)DRZ>HC)#dBJVm?0o2m=xKST5%is>sE z^uHncUv%_mzeVw@KV?cIk7vQU?ki9*`V0-s+OBOAIpEy4m4ca$xmbk6<*1G`73Lv= zHAn|A4}gD70OkSkZwbIWk_qM01wJ~f^L;Y+!_#Qj+#h@_x1$s0^)KfMkMd#d=Q04n z>|Kxvf9d@1k^euP|8DtzgI|{Hdr4mAxzI_LGkU)lZtFg(W$wE|akAbFAJ2r3@f+0A zSq}_92nJ{Ln<vS-T}^WfKLlh)u42=g9k~&I8_LzyyixHdS=4A8HJ06x3qK5~=*=pR z=p*>2e$JSGHMe#c<bEK_ou9)51jKU8kLGe`!Vga}mvf0e23~J%ijmaE@o_o%6*%Qp zj6MGm&vMLyO(%)}1mVWN(L%i4<+Ix@B%bCueICp-j(6?kH}3v2bmC!{^{lY1e}cl? z_Z9YL<+T1Ki+%lf0cQ1E(Mz9fkh$3Q{88(#%i#T4s?%A~vppXK;gSkcF6*wLK+`Mq z+~KouoZyGV9T0!8gMavA!Dob*&?nmi)5okN__fD^|LhKa{juP$@8Hwv?1LYKYZ6=v zh9qqPEKVm-Qh<}8it!_a(uo>R2bQD*6Y0Pc6i_{M*{=MCHeZ{LqKBs?qFtJw+q`NY zIGP3qHf6VUpAqVH4>}G<bNQ-|e%}m^{@f8&RPPZ=kXF4PDD2J3ajLgVfLZ-I)pLG7 z!WaY*R)FcVBK_!g0p6Yh+#$f7DZq9C-jM<@B4F6WkEE<DojzZakVL$Y7mL0f1jkwl zRBa<*0^11Y_d_`y1e$gm!Ti3K22u#WNFkWt59M?yU^3ej%<oP&b`XA-LNLEOS=d3K z1-2=e-yK`*Akfa+2<CT37CQ)-{x*X7-7!vv)+T#<Th__RdF|k8JNB#X)OLQr9c%3n zrw3{iH@`bM+Cf16Z3OeXLy{c?W+-h0^Se{99fX}J1oOKyt{sFwq!7#>AIfc4^!HK- z=J!K69SZb)Z63_;POo+lm{+wC%<oR~b`a3wHiG%xdCv~QH&O`Z_w4|02Z5n_n}YfM zP)-No_bCMPy91*g1Ul?C1@rr%oDRaDQV8bvLpdFUKc*1O?}u{Q%J89fyd4{J$HUvP zAMV7OSN8#@h<~IV?MLSKwR_beet$dOUf%UW0Xn>Wv>ol+X&FsYgm8V_-m}riIv8;v zMoBdNzBYnwUc000ZT3Idi8XJi-%kEazT46@zaPr!ATSwkBbeV0<+SO4pdD}TcezvY ztfjeDcyA|GUUjp43+?ZJFXFy{M+1?8!!nt7vb41Bghe)|`?HYvo47%<qeFK-%+OKm z8pW;ujn!+uo<WZ7J8%6T1#fQ$NtbQDrycxX1wY;n{zbtD+QI)*@X>bguL}OT9sHYu zyW7Ft3I=0IzJFJ6upP{F5u9oVyA)jA4tfe6*$(;&9@h?L6?{rN*iEqd2f82>nE9#| zbMC+7=VJt{N7a{lTg3U~nc=YtF7mdB^Kgv<cIXtjX<ke}V}G9SUG+<091X@%w*X^R zP=I4!h2QhHNQUbt8;;yY0FvT*@2X!Z(J>->E-4gRd6si0dslK%z!r(Oo$zP?5-<t> zvz>4`2^Cs7;ar!oBNBd!`rPelMX$`7GiS?>QeHX$!7F;|;oVp`U~+l3#sU7x-c`SD zlV<f%fyt2-++}d`7FE~!$+fN!T-tT=7S$Nc{HC4a7;jdA$zxWmR=ldPonlH5)gmc= z+fKo_Pl3r}Rx_mV4?TH{Dt7&u;7(4voG#}jaeB9Gxma7_&8o`$lWiw|awRXqmshXg zCY_bKy;4Y%#j|tk4PAHIK(Dg?(B3oi-mI#3MK+jN{mEcr#du)r*oRt@Ez<XiV8a{F zwshKD(R%U#GI<U%VXH=Ik3sNk@LKkkI|oC~p6(7NH*+m&We!WnTyXtB*BUyqj6cHN zbCx470c??OQs&=-;_8}r#}$}-{>r0yL2I(+ZcZL1;UUU|hYRIK9L+6KW$4xhc#Yn2 zNgy#}s+*)zRvHWZ#JN9Jib<~)=eyRMRe*d~!XY#d@1QQ7kID=GF>1G=#+k)ujc$a+ z=SnuCNlshRqM>4_RudKHWS)Qys;XkhNE^b;$Z$s6kiK%T@`zxvxMD>)x3ZSQv%H*N zc~BnDM7gkXw18(g3j&qQPhLNT^=DS9+47lAmwnCs-MxHmDI9lT-pF@E`3{lqBIR3* zb4h4lo=AHjO-yI6Y^NtrCD}HkdG1Np$<D&$#Oq{pv@vd!{xre}kEiW%1F~A6n-86W zu07Aj;W@ClP;d?Q25qx6vx1ovd-FO`F&Vm}J<C8jmj}r7bj0s-oE|Z;vO8p+h`Z(n zemtWPtYU{k1nFl)F>q&@`n>Qs7%6Bapvb+rCx|ygp#4;OY8N#xr4adT47$7Q77W{3 z-JH-ocyBa$Z_tRc)NfQ1a$J-+n&WWjXZK3+&=_q_+&TJ=xY_69f5R=7`_HvI&b8Ze zMYPtA88>Fmk!<JD_a~pjow|qfI^^?ERprQ4q2<2X>3axW*OO_HQ|t1T^-RV~*?`+P z`f6*MgX3ITk=;Wy^D^3_AgkYAXq1~TC26oQWu9%hFB6f7ShbbQ+mSP_=x`$Kb}JK~ zgCW~3ZI@MRU+n)%CD`Y1*b(ceMUIsm4}35met{6z@4S_&?9JED3pUN69DRj)wUCc@ zK-Vq?Gkeq`ew)966U!{`j___{Cbv0TU)DTfNfO}>Or;Ky7|!re?h(4OOzsYiEQYed zrY+<%)E#V^mCM#o{W!LNdbA6aU3plRBPrJ=BoU_)rE(Otw?mENMcL?D(iCegPV=wh zSX@lu5K;KfektraM`x3qz&4=abS2sPVa=5jaY^F1eU@j}QpEQ~#JBc-)R0w{{O&Ra zFy5cy6ilxAge4RXJ{R$D!Y6Y+Pd|SBowKEvs%#Wn|IC`!R{0H}6`%qEvmE9DSM%}- z-1DTf;YngPXcRoA+s<!J<M+B3#GfAUxZ+3sx$UE2i}V`RY)?YdJOGLbz&y_8{ER%# zZ|Bju-1RJS)CU4<`uH5@&+U^DMLS_Y6It^vlCeQWVRdMDeGvUKQd!Lzb8a=n*bA-} zQ@^qhJq=1az{te|KB-p3kM(aGlI=jgjt2pbN90n+BlI4PHjCZrR;^ypr}Ow`NHi+) zLC(%ga9NC0#g0gXUxA3jRwK<jwvK-$W8j>d*|!&3wf?jUR$z(s9!Z^6cM*!<PCz-3 z7d^~jGAx7Q8A<r%=obK-P03nO{$HeTr`G!CG30##d4~^*Wj18U<%f*Dxkr5VQQXPh zGu);>C$GmBy2`D8b8EY^KLRqRA6qrv36!-L&)$%ByeJ9x^+~>ZRLI(CoLezco~1YC znfoz_wFV<5dFFn=4<i_1u{YdCS6m0(;WoZzy`56<X|IRieY35+8i1FNucUeyR$GRh z^3ADu#%n1q`{eGVRB?fTC$f3|0@?hO#FEW_;Ks6%*U9Dwv21<@WKKUOo9`yF*#uoD z8zo7}<~YgbxfIq&%_^mpwf+>OVxdz}-Z|z?PEhj9{e&L`r6eXOOY6-lE^4E@a4aaL zm?tO$bOdD-Qi4)hosN0>W{AGAQbJa7DdPgBWX0TWo*w;*^pe#tabsD@>tyw_SXTcD zWKKUOt49-Awc4^$l9a5Dl&sE1Rz`|R2GJ(0=(&>7uL+tm$usv0evpw+O-6AV#W@+t z$F#zJMQP?srcz2bPf`ZxNXqD>B&CwNJr>DHazIXT3FE?D-n=z2?_PKtn&~=~=SXWW zZ$7-wxLCfj<0nBE+iE?AefzRj-9OcR=Qy_I8)S^pj?O`9+Zd6I>-(0q);9&-AJyyj zW2GL!C@tsK$9>u{Kl-8U)>^MpzM+C$2wzC<yesM3-G(oe{#=b{Z1JC$6SU;t!~3>x z(}F@S8$BOvw};TXi<M#g^lHWLC+8nM?sS-}x;--WTXkf1p=5?hW#*flFWN*F9>;Aq z%C%!30~v4A2?RI_^<~fQS#ZPTy<%ENvh5nB{UEtlKgylQ>RZA-<hOWcNtQD>2AC{P z^AS8nP4+M{*Vk++b~flq318ubL{gCcU<+fMY&qnHnxHY>99bF<1o$wEDC@0#cjPLF zek6c|6#hWDYi_7ny_GXXuac&>{s8pcrGdPdDdKh+3H`hLHaM%7UBF&Ia9Mv_T9W4F zQFyWMA1346i{R-+CVP7!fL1%6t8(!^L^}oMMsC87p}>tI8%cJ3PJUjt5`i5q-KSg! z(sH=-0CI4JyEc)l=9QEK{joBzVzr<Q5^}o?KRN($C*;wTkaYvscaWs}l9-DitM)g{ z_7L!g#F?8%+zW3PcX&Hw|GXVY0i1kAB$4lYl~Bw)l^A!tEl`R0JC`XPZR>@La=c47 zF6r>Td=K7LX>GY4GP(c8;CL62gm+hs?~`u4KdDRQ`QlEVkK2EqFL+FOipcytuT!2S zH4e2)<#}l*&!hIpvz#vHj>nXzh|JIPU!*}y8C{-FBF}}kU|t*e{sFRa!h2;Rw*%4} znc9E#IC}s3nE5;NG12?C{n3+H+qU#TVs-pUh>y*Ny#6uqclTqK--C~d-gguJq*Ir5 zbZTl3otoEn4piB$?TE;Hol^C?FIFace0e9&$L~MS11W^dQ$*(HDHXB%%-U@y>g2g* z|9KurX<VKnGCxnLk==^c&hv^+o@@7?=YbT#<tZZb^OS1XZE2P#HeBzkCw<J(`_J=0 z%Hr}Akv;Q#kzFm9^v{g7^u7vn`c9WTZ_M!6y0hU_ccx2B)Sb=ip&wO4Ag@G^7}qCd zUA_OZ9;mZ+WfhV6WxZDN?N7Itjh#G?*ngh+W&1Z~E>97epXc|aN3^`hXhROvrFA;6 zwq9=PlwsBW%W%?TDuam3FT=wsLtjz`*_oGi@|@X!p4UF6JVj)Fp8u{q8Tvj(xgDrm zc5+iEY;rqb-*uqscJx%aMvrzH&nN7BZ>Ql5ru*^FA4nD?cCBX9K?tPI%AtnZcEh&L zpv`YTj|dRAp97ZXKvnO`ql$iP@;OkoI(n)^qj%H3<TH})ka;!2E#&TFax-tv;c}1= z>?Wdlf{W)XCb(*I-(=19Y)yDe*}I`MTPGcetvxEMwMzw$s}eiZ)rcob9j049=%Cyo z6qD0E@ba=w+hPfB!Ms9@wa32)V$9hj5lPyX)2n3GCcceTy99C`zZJ*)0)Bb_-Ax3= zuuJ6Z_XT^A;c!}pTMr~dEWlo*6h5e{F5*mug2Jo6cs2R4hL`jg$L=8~W!{$4fiib; z5|Or?jGaA%VC=MoARN08)4k`uPaD8iMTeKqA3zX|jt!tQ*^5Y8k9HKtZrx-dz4a~3 z1P8?I{x*9BjFtM!TMx!ijWiPIC2gq20uD+-&B9#(YDqdxYugxyqyw5$wPQ5dae;%p zn0!0;HiSH;+IZyg&6qd!(rrrWKHGtY#H-iYR4@$++X0Q%+5vS}?EqC02gu?ZN{hQQ zcE2sR%^497#SxYX;eUz4|0<VEr4f!ak>81dYEB6-V$C+T!CkhW@^a~<Eu86n*B`2; zc&F3W<;2M?Y!%p=7IU@CX5lvfB7OK8t2lmhcj9f`1zwNOeapHfDi__M&7}0fZ(HAY zXJwaUN)5NJwVFHrKo37EM)d-!dCvBBo(ISFwqN)OqV7;I={Hzp%gn+@xP+8zSsTu9 z1*jc!<|Bq1PNdH56NlR7De-jkP}`X&@JQV?RD3PZ9M8LW-o&$k=M<iQ<as~OH+jCq z^9!Cwc)GeWng7Ba!(}X%c^Z$l{hrVBY@QjO!+5UYc`47kc;3WwBaasK*1U%wFMKgY zF|B3k=wkVAhcy0|$d7o(@o$p<E(gC#eyKe0m&yNL2cMN+4Fvd0<$t?_zg&K49q^X? zEE<UZX8EOn_&3T=83n&m{wW7<%KvT$zgm9jC^*;2&+?4$x5zK$$A78(cRKhr@=J|@ zzgqs=9Q+mXt9<~!7XOR4(N~Dj6^c+3#Q#eCm)gCR1h|bg*rtYxf2;frm*6t_)wF@n z$v^Gjm&>nK4*U}N*#}bwufmUWy+Bfa{9Ki7%qyD9a1^~wpkrP1>*SYp)Ek(llb;mQ zIVn}-Jsd!7UDP`7;V8vb=ou%il7`?~3`ZO|ON)Z`q?dN}*~j=Dlfg{SglhvnduHzf zu0JpJu^hYZrZF7f>cl5)mmEy9bDy-exC-Aw4o_3_bhkx~C_L8*>$COYqn+@m!n|~s z;D;2Q>qOiQQ_ehi&5M-D)tL-0JdYEdy5PZbhDYrsp#*9`C9m}(>_uw}E8E<O{29bU zZ%aJ|^~HguAD`xmoJZS?=ddW@rzF@d?5z5B6q;B6FgO3h2Doo8Cx@R?{Dr({{~Fks zV+_w1^qilzm*qCks{{*gCYEpQTqU3dSdrE``53&>=-Gc1nrxadbtVb#Tku+coW>J{ zz2PnAyXN7S#f|#!0qC;VUh-S(0I_$Qjh?7DO7s=yMo&#}dBsL|Zk3kYaE&d*^9i<~ zGO;}vS-L$K9pBEE)%v#cS+v6TV5^qO9UAAYmhf%42|g{ilrPJT>%($=@rUKMY9VC8 zsBx{-5<Vg~!AInl@(sChJ|PEMUexkSCi}PNx3XlHo$N7WF0GvG<;!tP_;TC?AC6nf zcjLzSZX78J`eIvQf)so@ZjpUDuEcL~a$tL5tL6aXM!~)yx0KJqRrpRCUy$qLcNBc? z(IIImyH&%xF^8(}#DUr^)NVuV9-S=V->R`qjKnD$Aq7GT42iGR4dCCZK}Vb^JKOqf zout7YH|UZFAAD2xxvg3fi>c{GD@w?n8X)CIK;qkOAmz7e{vT5-ln?{V7KBs~5}(im zsi2SG6}D<XuUn>{N%gVAij~(l8%G5_71h*y#&??{52%9Ia_Our-;%H$l)+xw3CjMZ zV(%b0(TSB2jDuXa?5?%#b<ql|Q{X;Zqm2f}WEG<k?BpUBbB^cpj{c8neGSg#anxp@ zLqTSYFCiEOwb!h^6`k3tHo=uDyBD92$>ZIiA5fSWNo`u~=0fRrym@4=7<l$ha}fSi z1uw?$t#gL~y)H(A_jbFp!t?8LxlNRC-CJDsh6YLlTx{A0O?9xe$IK0}|9;#F((C!x z7<MY{<<&eN;rSiUnh_%XO_F0{B<tJ(-@a|dg#qpxS5v+l>1$<ts5HnyqO0-Qx2eOQ zXcXhym#vgu5^s=R6`}NUF+bVx-&L%b&b6X5ILHl3Mn}Q$Ka9?NJWbz<F_Qc}K`#8M z;kks`#p#XX<?kEx3gOQTVUxP8`da@ExkK4({CO*PWB$<4;E=62an&1lmKqa}il^?u zEVujo+$h*~)=&_qEXFBwwZTCyyK5&2>B#w@1J?!pLaDMgg<{)q{UK}{&H>u&8)yhw z9E36q6-xOA)mGwr?7R=2FBQV3wyv|Aq;e#@wUf{$enaG}sG*+0VyQ<jk0}=${P#4u zfHBF%2Kz(3S?BhJzXFkuDSQz2_)3DD=s#Ur=`0!L4{fKtL!hDltaBF)_LmlgzZP=y zWRN`DvuvJ&*UIg}wzud$-evt%9sRmSdhcX&9T{@Lgvm*MRox{Nv~Hb4PA|LZ&9T<k zq!!#8-?Aojkhj!%P)YiM-#}A;e#4(c$?THP8S}cizB*k~t4%TzjWzxz4XYX}{Y@H< zH9~)rhH;IlM7{k@_bQBfzF%(M-=yJO-CKeJceQ<{y5N{9gQI~_-J1Z%bjqLX#jDXz z-Fa25c>96Mpx`awRh{8ogjbb?cL1*hjki>7zA+JJ`o3mU7}xL9b!J|PJQroc-y*Aq zx3r3v7Rw8ze9|dcszbYdGx-=;U5Yek&5+{Cu0lY4>64*D1EY@?&@SL~UU&Z^qUByq z#{+f5Hz*yI*6+#587?!=v9Z=%Hk-*~GF}DEZ2idWjTe_!t#lOYAx9#Vi@Sg9KE`Bh z*>Ve`gW6cnt{twrJnTYd*{yD#Q+Qs$^IaZI0FLK5iKmx}LBg36aL-IVYc3@aQ%;x4 zH2sf^i>mvIe9$7@UEIFC?vtQ8b(J}aza(O%aSAXPlk0r!k5Z_x&cwB&r9JW2KU}ob zsNRlN$bCvAk;>I%7pjT4RQuxk>!~6+K4tOj<9`VwrjzZQ6mp*mnU~X}O7-t4VzvzC zZX(}r-uCrAS8>iDbiUrFK27@Sr}V5`<D|4H!ylxxsf3XL!TFq+@TY4I?wjV$jJuFa z=UeLVVH&tQ_+P0W>DzgC-}RBMolKJNh2(2dNr%c&!XW&aOaoJlKa!m;OELY&{G`~@ z#S8{+f40>)mJaFqsqjxE4Sy{<%e`UW`N&W0iuRqM){=HLkH99BnoIlY1-%1*pNPeI z8ex~7>d`ut_@*<rfk4Ce`5NWM6LdmEBcWJmE^T0vsJ_(j_aUe1y>W5crA+M9K*9n2 zd@=klNrb`l#VQ%DX2Nnc^OdWau3XJ*<!UA?S2I_+nyJdw%v7#sq8M>E^OVPCnu^iP zQm$r_w(6iY2J@KVr+Oy)+`vfh4l_&A-RFBd%i~3?7{q6IT3sAJ?cFupdDVUXk)HUT z>%q+8!`!@2=X;i~a(?<8^i;DRJLbpLvNFV4V!^~scI>9=*Yqm&-2tnbqFZm=c^+op zt(#a2{%>S@hhVYYWf8#L&y-5P=?OMP;p;8~%jbVYU{*N?(fvrrT`<e(pmaj%1eeHl zbYq~4F_mS^bk3HM!hVhsnP?X!9_CRFQc667iDxMB3@4t&iKm=+7|OcjBZ+4;@i2mQ zQOsPOXNf#?JyQ~)ZYnbmV`+6?fwyGt3!KQdkDlmtd2hmnNw6$QV4mwqU<jjzKu8Nt z;S#Eh^LSqrjdsl)hY*vRJ4jS?cKj^l&Y~0T@(@6cvbW__JESLsXaXkZ1b4BtPTuP+ z?h1>|Get}C^kxn7S-|6-`7U%LXq`uIwwb!sx|;qPjf`$6>{6c3CVai+dGMZjE>)g_ zd$aoWqyL3;kMi8{nDS&LV_}|1?NCUWn9T!Vc>*vGQ>?#`4dOdQlFNq6rSqDzv-p*H zo$Su0yQNbFf1}(YUuw|c$m4Sp8|6k%);eE}`?X-w9ppznxm#OyUiJ@7GW$gqb!ca~ zK=S{{ak&r_e+=>4Boh~31fwhZD;SN#c!hx_JZ=%4ljB{bU#H7|lV}1C?Cr*rGi@>A z-3Dl{4Ul(2SNV#njLem?w1}dSh{8OwPiUOJVk8&MOyZME`DR&E%vPK34n5szb<tsz z`D&<c2HPTO*OV!wOgAWR_n8CQhu5=fq}aR`e5X7%Dh^sVkkRIx-RnV;On-l7M7jcR zM<l$Nhqz=N<wnt+eH_tRAIW&_b(Ai=>Wo?*o;e|?tn-T$9<A!ts_tu4)P&{}jpjKq z%@<Ihcx~o|l9*^-h-Xd+?KC%8n&-u7{0<-4gpY3VA%u3Cn=Q?A<1|4hO)g2ph_N^) zgm#)+EDfhvt-OU!nqrcsM`?u6PV;(8vms8?+ey=xr0G{0AxIA{kSkMUo|LTLV06xo z=`8Bd8A#}qL`Mkiyq{!g&X3c)s3XgZ5?Nj>Sqh<@=8cwSeVk^nlh06+&#>|lLOTs} zc=X`BIL+ctnsSn+qBKHK8J{m#Wi$@}YS{tI1Aw}A0P_H#&K<x!04R(Dm?xGKW-D{6 z@p3NF(n%Hyio9R(RACbwP52oTKSHXW;LV<es}C|X@1aeo0nZ77>3+5l$c!<3`)v5* z$%C=K`)1}_Xuai?1t_CV#adUnKG1wtW_~y6&nY?7Fwb^w+N~|V+4y9u!1x>&pEk`5 zmn1y00#ck4LR-#chn$}tr&-!bGnu5BQW_z&)4bKvoD!#5W@$zxi-VFh2P=&b+G!YY zkq@gb#@iv5rlK^5CTW%{jS$*t-eze|i_;utX>3h3Owt^#G(u>nVd_afr^jikoiw#1 zO<ie(&`!hbmo(3a(=<A1rjs-)ltu`u+cR+OV;d(6Af*$;?0x!f)@K5gzWj=6jOzjA zboM5%HX?-T*{_fy*@rOQN3OOS)sy45FIo%-i{aB{)?9z0_5bb0?`5K|<K5vZa5iF) zJ=UfL&F4a<1GQq1oB2V~Pwg$;%>L4Gkp@jVYgebU&F2EN2D@UzV#uQtU}&WaHxopy z<hKJ1H*`nlES7<O{|ItLW|tDMGI{p?%{#12!iXLR0{1i;dUPa#cwTFfk0)$tjl76N z|0L;X{P7m%<L@*&f;Yx0H@pg==q1ZC-)RQKHP)>)5MUP2PFWvJ1)`&rU9jbHkQ1a& zLB9PtY?`U<@%49QGW61!HT2NDk=dq}B>Dh}=t2Li9&}hkrq)_07nvIn5gm=6_xP9w zWw?p_7(!eSUF3qN`ZDLn6h&pwi;e|>Yh3ctad>i3uMp34Zgjjz6>8Ibx^x|0Zk;q< zETylPQj2;Av{>&82K|uTgQ5`udyCZatGjwj1-_6|h$x1xk+t$K$wkA;V>lP}%jJT6 z^SGq${@Jxp<Yg>U=SiJhLR+;$>UGghDT`~Euw=MqT&2`i`q3aH8%N;D<2i~pu8#@G zZ<&{md#xa>KN_qYJt^Ut_XHiRe)7BotBy_w<MMwH$yGM2;_c2javr=xl-RP0Siv(O zPrs#**Oj(tf?9jDD=pPPQA}2)Y}KiWEeJHv3X`#qs{m<@tq-`D4;W4qH}gqi1~h-j z9Np;ZrI7gV%6##~iT{SK2RC>IA7aaF1M%-d5WG|2_N<r`*Zk(TBpY{KkL{lZd%Iz` z$IG#irzYw!9a8JJY{rGJhPT8nFoVhLP(HKHp71UO<DsXk{LkR0>TiC%yIsmpZ4~-* zG5}udMCxWv%~CzuC33HKn|Sq}=BME_eh1H=Qye#tsSOHMsjcm2b&qG}-Q=(PIN2tJ zGuh0OAY6YO7j?rz>&XOwJq0Ixt3GS9#A}uhkHsBqyIK=az2V`9*SUge9cC+Z|G~;- zwo3NME_Chzj+wAY@R7LbM`QU>o++Ngc&2%3M@$YF2i3_b=Z-mN#5on`EOpN0I_K&e z4&p0keGGF;>)&G|iWab@5xxm#-56Ez@I)OLuSjOkc;<6Sd~I*>HWzT|G4*?<XKt3H zukS5>eJ8$=j^7?Lg*@CX3oZ}IbKG`ntQ-|Pukl3|zV0wOs_4cst;4B4zSrn<BU(nt zR3IiP8sTR|chD=dgN{5}pXMjLhMyG9P*17nMAgl~(3b%|f#(%G^ck56U_ZwFCC`yv z89Na15H6#!%m8s0;(n0luW?wgH6#3Z;oFssW$Wz@{z17vRVp?`rH9M->G3ML6hqFc zg|~u;rp`<J?mZLtdL#M$CmtQ%S9~g`v?=8(aCS0eNBh{{c^7#SG&BD5N1jgcO1)U8 zUT2*gg9)Fml*YRAx*n*nR$@=Y40G0FH|uth>~kc4`Uvy$OsNl&eQA>1pR9`7gH}JZ z`eP&Sv3ayzwE7cT?-#9pX!So9T8p5y$k7TszD@8p(OQ(yVrs#50JIi87Fq+)8gR67 z9@|s5iPk_uYq4kzKx^Q!&?-Tz<Y?tRzEJU2(JCdhzKRBxO3*6BwDwVrgHRcCR0<yZ zUT+qa!I%m?>L4Tr6Lwxn<nk&)SC1MCz0<i4L2Ag6Dte`2_!f~G>W~_O)X@G&waK^Z zwCcXZR_%I$Y|{F!$(JSl)7@Rm9!UKE)wQhb`YJE;1aH{|iT?&~*}aMXd)~6YB>qW% z>9Ky?=Uw72eU0-U=|yAM1ozED`h|$q0o{g|hU&Wz%=9vMBHVaL_%vF;Q1_ajQ+I>i zA)3!tP^A8LWQGq#eHc%jGa(uQly`efpn7tRl`Ps2W-Dw9;>g;!Htq&sEq<#&1`iLS z*&lTigt?JX_){q}6n+};+NL7y=vnj$FdUx4Do39n&OsvPjKSIyK~7N^JDSywn6w>N z>kWpDO0Ir+5Pb}C`H(I(2oHvh`pH~f+3w}6IF$|7-@C;X8}@FwA}P&1?a~Nj@bC~> zGWCfu@rdDjam{_`X-6C{NeH~RO+cV6`f=je3cl|QMo>GK)7EBz3RX$=)0`XgeJB|= zjtQ?O8+!$nFVFCiBfW*{URSjjP`&1jNwK&BfHAOpleb`;Lf$OeTWAQWZ#+`Zr&G^s zd);*n-Mh=Lq<3|iUClh<2<t!1_FoFOzd_2TZ1_<f`*I<Ra<*UBPgsA`Y#2TRlG;-_ z2>%)Q>3CU(>dvqR#mFokleppBCy@?28JmMGD1g(S_eo$J;3#et$l&2}1hA!*V7y-# zX9`0ggNO8^wU7}&O`n8O{;QUI&2J?Fu@CFyqO*vwkLxTP*K}t-2XF70&zm%zMcOQl zN3W1**`R)sK8`9#U!HNl))ZD1@FYtLhk4B-tL+igyIGTS*xRNwn7XSynBrsQ(6A3a z8QG`u)teZ`y&r>tQC?BNlcIe4Ldv4CkaG0`8}a#*>%u$W-;QL3+wfJ-aS=-w!r_d% zSxG(Kos^&N$Ink3H#QdG-D}Q><-Zy6>P1oG|H<y-TYSn-U~aMJ>_sdbccM${EqwdC zx0VRUVJ_s}kN%|e-RNa37rWI)U)r+>zVgNO_o9q&a&6&2`2{J;Lfw;cfVAqT`H|e{ z*=WL0zIHfsto3+xd_dE=#)#Maa+^{vRbwDp1A1uw+$_FZ`PZ2v4|X<OdVT}4yr(V8 zv3<)DG5$3c<1eILo0d>eLF`DS+nZcP;lg@HY@O(|I`OgLpnl|@$s44;>VT>LLY94~ zafb;(QcSFXOi!c3L?=4U#BLHfCOYvCV|T^G#Rp9NXHr{>FfLAuUnaj6xm?O|LPbg~ z7>^d87rqmP#=`I&LR#FP+oZ!|SrTx_j`<FEvO!wQ_z3QMsT((MJ&GouEHhY7w~n>G z7;vcT8`ei3BD2(Zv8Q%H&TKVyi;G<}?XI65*mSq?l)z@!^|5)=Vh6No_-d@u>C>?w zQ%I=}$n14|tNE?zbJwx19i6%SZnxJcU3(N=dtY1EM)s|1)_d4NfCXB26ibLyzf(Nd zbT`lxE<I9>SaqSci<p0#upNZcCg%NU;>l*ugrIwjFk?n>Mg}cK@%R;qM(vlPlxZkO zb63)%ScoLZiBkh}+-b1js2@?lm!kf_Lh2o*?5KqwnbN{9QZb4>rQ%>uo8O)^#Y0vu z;CJs7O;>vddo5}G#8@GR`Ud+<d&762PkeM$I?QHO^8*X1D*Ybnd!*<2&k4__V*Il= z=nE##!OM6?e?K{9x2FB{v01&plest12REmb)poW22+O1FK-x-{dfq^HlN8%4bq1<L z&r>G0Qq?$^k7$NFjNeAZYx=9&0_ZFZIC?>JA87iHif7lYeLy_8wYLH1X7y%5Q5Qq{ zZmI2P=SJrOHiO(-8+PWHGuLi)EnDf?RgNw1PtqS|Dp%uuOOFeDrk>&2!*TBLf<HNB z&7j&254iAO{OAwJ)|L|Z1{O;mjl;d>N0UOiSRL8-?6xv5W&U+VhV7+|AYayy;yM3; z?t<33LyV)P>b>3ty$23^#zA%3*8H~Gf+;IIFN2URiJJ$&l?lK+0A8K|%mZL^0x%DN z*#ux709Pdd^8nZ+0Pag;cca{*eHJR2Md-U%*c<zc*V6qt;c?DZ$-OL-{?DKat@EhX z@Nf;w(9PPGIU;R-@L5GZpUABO8GOr@B=U2Le1RebGI+?kOl?jq`6Dxr&u)1|g8O;l zYH4AsKnAywHTql$KSHF}VwIv8ejIQ0NXDYJO#3@Dz(%H8!>!smz~{#0v4iYdE^Y+$ zxSTg|io0cNlH(VY<3-9*AcKbu6^_kZS2&hxg4V^t5Xj&m%Uzsd;5@}CI-IiFog|7r ztUzj4`E}r14V#DUkZk~LI|Pg8jtjk)@#CDp+AU#_VbOMo$Px;|x|pB&0_C|69nHEE zg-^-aDOJu(iS*>axswCatY=$b-MN$NX7Y?~uO|~mxt(lnhs_Hgq(FATf3f!B_^c}Q zRxq;VUdnyavv)Z3m4Lm|docnk*2bH`>e!xS!&%DamUQjA;(So}>zFNf9*~`z4D%UQ zQtaE!{~y2eIWSYrbv`pbQ+A&%G!fZNG49P12So$4nl@ROUgkGHm~iWWsTV5j%h4`{ zO}u*ZA?tO;dN=1$hv((?L?;l7ZY<@(RaK{xvJ<BcJrx}b`FZfm+VBIC;9Z)cd#`3b z3Es(x;U{}jTTzlZRiLL&iy~?DAD-?a$$Y4zJ0r2~#2P}uJSwVKTOI4dq|*fr9xs8q zjo-FW^cbzDdGHL&)vijL*X6mim;qQo?e3Igmr$#YyEEg|@rT=W-0=CnZ`OUYy8YG4 zWt`$5^TvU`<T^StlBx^Kb<DoS-8jr|J_mlntKl$Ji4NO+MK7*OEz2%<C=;stpX?=> zsjK_arK4~Miz$pr!)~~YKN=j<m|P?x>yOwo?-Y?BrIo$;lrH97WnwI>rZ{PGB?Vxw z??$zF?6tXU5z39OpdPeEXn~g~z*cJbV;RBiF_eRL#gH~!!&Y-;SkP(-uo6JHO2#VI z1^gN>(~pZL%ly;1fG>IX*GBw}r%=>ZjunWizwuQ07n#4cOZl`jd^paK6MpQ~^6@Fh zm4e}Fmp@mO1+7g2%q+}*4f)?s{w~#~U1Zb1a9P1#N(wIfwZKNjL@xuv9gxZ;aK%l8 za3wJ;e;KYHy<8#Fb((hOqblD<dH|1skthd_{${Y2`)xVSDv?f`seDMDwX7_ouvxi& zbQQ6#<ZTcq5*LED><N0so}jI5&>1oLY<F~Z8+d90jIL?J+L^vmAgh!P+O=)iyfP=O zzbc`^395)I{q*$_^&t!zO*ZZ9uInIn$B5Us$cXcqaqUVR7Ia*s1a`9o22I%*cF*R^ zU6Db=^@xG1%GW?}xoS)ie)L*`Y2n`@T2!vw=z2vaf!8TOI>q?Wwsh1D^P+B4sMC;M zFN!oIb0H=-x=A?2VeZ?zIrb5-@GXQlkG0GJK*BeOfQ~Gf=QwXTTuggFUzVv^^m8Jg z7i6dKN3R#HB=80Wj&w18^u~15o90E`8b_5OvGEzGyR|Xpp)o{5?n7R9xH5P%s9W9$ zKQ`K00jR|WesQZn1`k=*iyQhiahkV+U@gayP|y)&eAJcUJd^!-o6aC--qhPDx3x;S zdYjk*Gnm}gvmHzv3QumU>R=qUF__%e(;V!XF-&gj2@ZB<43pbB$-&sAv$S$sryHzg zg+J95z>gk5d7|6kTWvNpF^NeNlQBREq}L4BG9Qyo32TsHyO23k5WS6r^$N!sI>FXK zinyH!joDgn$K$djust1kM>_ET(Doj1a#q#<|LpV3JX5wLTQalRKqdr89(HDykfm%A zO6X0hf&}SJnm#y_pt6||#EKCGtO%AURzv|&vA3@sT`ZtdRQy`7V(;<){+#<fQ+5;a z`+L3qd1dFh_uPBWz4zR6&pr3t))mtBtoGBH##<CoSlMWvZoE}KBf}AXxK*CF>Bk6Y zW%X>$bV%|kT(3cw0rBnK@s4pR(~a8%H@c{QY3+G#x=cqb+TH5?4$`@HZ+YVq2oGlG z)JK&61}$3Xtc6P!M8?VQBry!&hZCw(LUlD|n>m556&>G2Trs*le)MknD1!yHd9USl zyq91UBXnUrTo~UIW0c2_-Wy}Ipf<*qw;Q8aunXfc!g#xIkg0jz7o(TQkM4+rjIYFm zU8zq{>i5S9<nf~q$ae&XdKGjhp6ISQ5M}^I1&h-zbIaRZW_2&i)p4`hM{DZ$+W2+8 zjbGuZ<c1|md8#WQ8XQwR=2=kmL4ccHlZb}1iPyLX&}M-Q9_}O2uy0E~Kn>xHJ|t{3 zpFDo_Vfm<>1$_iht8#6KRSq+Sr3mj;q>m~Yvhr4PQ%#!Y0Pv;+U=9FpP5|bh-v+jy zfn^}QH~UNq!8!=o8XxDU*TZ;wF)%N@fZv*^kM@S;g7aH~U?>cq)fIjx;p30_8%}_x z)jof{zK+`dhGS!xzHUsfKZM@qF6w+k3c+uCb-xPjKSp^*3cjvukG_rkDNW8NdmAm- zBNlyv!et}gvI}<atv%wl<OI<tfd<j1_#IAH>X_I*jkAxp4Ef}u2PMWntH4Y}w|{>Q zXMa9=7;t^TKB$i$qy*L7^3it$IY|&!=P}`=9Vj31wp|c?o@Aspi}k%&tTQZFX56w4 zIsOl!wHI+ccY0g#bsg(HJq-FDFI*gZn_K45iHWN}o*JO4COgmMYjVZPQ(ftIl)}oz z!?xWetqm{?3lx2UJS#mToGsVPs5TVT&!q4UL-<7knQEy{PDe<meo9{8ME4YBZHvhu zpu_mn($nSqNj*dnwm;O-)PWuT1YQSrQ3w1S+?6ZiVxHR~=wSVxc4-dKZo>M#0Q3~` zC2)?t)jeMS1fcQyL;6iZ#_PYH8}D}(?;rMC*;i@yv)>c=b@kbDj5rQ{F1WeTYduHG z_Y=c4F&B9lDO+W<Gx5IOG1oiA&_%4G9ekm4Zh8xy#)kZjl(_LFNV-`dgNOT3Z3H-1 z6Nx``Bqn~lT5CUp%)LGVPMwx4@T@}RfOPZ#(X!Fk0Q7meOn50c`vWY((S3kw^Nq>5 zvp&yK<JW-<rgM(pOQ-d+zh0@MZvbC;4^ut9!-c6EDfv(#yk9<9^1mqudkCX%;V4ZG zu_K`veH(Xp8JY2JvR~5nK<-WOlaR~+&)E}LIhyp}QTp6~9!F(y=0i50yo=u=+xAA4 zhTV5Umnm8rj*Oqi>DYXn;mSw+=x$<Dq6dhy`aEq!8yG5VE3#{~wE{{j%@@O+nYzvE zv3`(PY|e7*%0n(3|FFihc4NOzCiM+JmHMP)!*HhYb4G5}GTl_f!NA2APpfjJb%%?q zOCk+yo&2o@f&S#j8fcqy<j)W<fh#PDhYFIKVvjy==)^gQQkO%iaj0rp8d0mqB?V9e z4Q6Wd26+baaf)dCqHTmBy{b~(y)&LQWN|N!L?p<I4tK_cRuZ)>x^k7HX%UGoBwe>a zsO}kb2n~s@T6WVd^n(fmm-;_D48);*8D4ZSDHdCQ@9184quEFNq;8Hq-HTP7r3s%8 z1;SNSsCHrkZ*gX6a{o?P(Rkg2&BDp0NllHB;~*2PGD=NhKHxbK*OD!KwM7X?ga}uQ zjI2_8nFN)mx*>^&Gs-O@TK~;ku9=c?C=A*Udpf*EP3uATwUQ7|ZR*R$6l9|BLEvTM z1L;+qKS;GoY{mQo5qJ&Up_<hK3lq3v)?4zW+S8q&9neZ(V@_K{^^o`WTcNu!qFI7_ z{kbsdaC&=9=V*jHDX7(Klo<8vA44L#&K-xCT@ZI~XRP}=V<{ww)!!NGN1d@0VzC@K z$LoJ1G$D=p=WH46&PjQxzokw+AzAAU?6M&C+98k4P}n<({h_U!6h?YS`esbM_%2MI zjyR%KsP3JfIa%^wpo!7+j8r@4>8-EZFR_<3zEAu1=WUwRo9&yCLSnIEEPJG9o|1qj zdh3t16Fx*jUG~xVE7c%rw(93<gY{FVQdguq1|3)A5^1**;szowJf}smA<xfZKolSd zui&>rEzK}S09$IF3#g;;lWcGP3mMu}Y`yAa+mauqFoT)#tbt`)2<+Vb5HuS|?_OB- zCOT74*Dz@Uw6;fJ<E-=S8`#k4JckB#jj7IaV&&q249W#6i`$YAaan#4J;V=vqB{i1 zyMvJ5?l9zuj*ztD#)SjvqI;(4pvis|fB^~F4G<x=5|2&}2nswC)&-8^WQ=$yHX0k4 zg{MAkbvLAJ=-p#gi}?OPCR|U-0*D((<=%m`=^?U{7OE!=@WSU>7zo>9tJ?iJi)qjA zsLxaj>0Cbg6Q!>(CJ*Q}m`7-VeDr5P!<o$bv+027f*C8|Ksucz&nxi^2N{M&qhAm` zDh?`C&SG@@ft*@>{UHvQ7dN%I!WYvqoX?L4cKPm{K*>F4xhKI^21Fbqv+@V~W2CCR z!414`X$`z_XUb13OH8mkJICUQkvOa{5nFJ}^Cyc8uS`Rq1IkV=h-3Cn_QVZT?w?pR z;07&g8n!@+hXFZJ>c;xFr!Jf4#(J%%egpRWOuK*QCp(EB<J~z~L@>j0s4WZOkEvK3 zytq5~#R~r4c5u1S9sUD_|D+>){^V}4h58x={g9tRz{c&L5-0qJj<5c#BeqE(zy5K! zYPOxb!`7UrF~=lo3_T%jJqtcnA7zM1eU^HU45u5vkPd@xkZCH`U}oAPi$U2P>3nIZ zXlw+_W*rw5`zl38W)~$JMi5)?&NwMjEyN8pF!^21MiR!cdhR}HSgc8An+BW6+8`XR zVL%;Bqp@VR1;3QW@^dO}Y`;Gt?A&!JHGj|=C8E*(`RO`i@f9}C)eppF9l_Yo-*6dy zp&I%Y7zN~8TSWY$6kn4q2N%=2?jnA8i2nOI=+gKF*`q5Lsf|hg{F=`al<?e|d)l7D zns>E4JFmH=<zBo7^JbD_{+erBo`q{z<xNd#L$1Roy>)D2U@%|qUsF|3#e&*GAaDI~ zbsylolTo6~aAB}e-fiMYe%G%3739b}`N3X~Sd3er;mN5y65*Fr$kPsu=Rt^7|4Ve# zRp8RXroJ;bb%zid&ZHf!G|Mxk{ZgKOTCju;U70_W<58&B!?dN-!k6+%*Uy5$gSjmV zw&BQRMD4*j@ZoGwzgTgzHUV>4sF>-&tn;XBT#jRN$-GS?<BC+4^C;V{{FO_6EHqvT z7Dr0AYS*55WorYxC*}yU`g*oO#%qp$r^25%IbGLu&br1b0I3lh)2D90*+GHbhcng7 z1~aCvxB+T0KB*<nw>v(mAI?{;927S}2Z};v?Ob3lhf`c*b;P7&)!%M45(jjR=xSFE z@;jF7Uwb;Unsk6F{X3YrKa-EgM+Pa!2^~nI-)n$KYrt@WsGIX+3(^IOObkpTV`R!$ zb5*hf>F8IGKc3N7^9;s+07WI2W_j<AxO(l5xaZO2<1I16u-XzcCTG~3kotn;On>87 z5;I^?capeS=pMv+kP>Kulp*F|rrhtI^&7yazo~*8X;a+G`N`q5=^zZNtJWmL>R_ju z&{PRpBvn?Ulb7>mrbHEWpH?uVuSAtSjcLU16jecKEwfCHIY>IKdM8eD*DSy!RKCVR zr)|Nn69Ltq4<(*BHRQxo<@s~-sa)9641JY8#b91*WpE{}9vZjkyvfHZ`!Q&{1op~B z^eggqO;*`yyngfkJK}VQVr<QgFu6m!`Xx9Kn39)=QW5?0&8RdM{hFq&u5gdOE}G1z zZIX5pdv_K&6=*f2_IGmOJGnO!2~CfjRKzmaVY<*1Z~R7o(_0hkL=&<(>x4iC*Y$;! z@%Oa#WZ&t@Y!zy2y=|CYLXy?XmOOT)1$CzWoPg$L&xM_-e=nFh#rpw$mh_}KRZlzh zG;ha0{vmJrF20<Nv5>}bG*wd&2yY?9=vY9`J$@dS2?!0B2^coNw66Jnq0w0IZ|L<! zn36bmxH$T7JqcArA9<BN)6DPFqmxH^8}BA8{4m3HEnj>EMuwh3WqAy}2Wag4P}`}v z;cwK%yfUiF6g3@p_!ds?>Y{Heeg;;wJqNvBIiIyiSXSrhB8xdus309FT|K~IS!C}s zjyTUwlj+g^O4h~b&*i;vnEWsnW+6ru<n!5n;fhes=eqJa#`8x{PiIC?A4rd$9{!dB zn+}oD-LCe=s5dRjUw;WVEgGTLT^?M%>&<V_zk3fleIM@5d7tR!!niweuZ1p!gE)6F z8@@pF+<jW)kK<ZX@CuxfJ==6xl$XO;yp?-(xcKo!B$QsDeFjG&E|`<ErhF&ybX}N> z%hR)QDNE}PV#b>CtL)Wq<sOYom_Cgm><N>3#!&32QG{Z)n8b8t%o?Xny#y>>RqM+M zLlSpo)x3tOKUds~hHyn!ZSuvO!<9E&m7R&OJ*vd9c1)FA2UV`W#1&^<X&r}2r>&R7 zd5UyM{@+nK-q76L8e}kYnkB|gl%+R`UP%!Zy?86rI^I53aeZnf*vdS@D}0IQZTscY zc2CFYv*_KKVjb_N7JEGgsdd&)yttXm<}e}#D}Rv<_N0AE+@e%$svCI`TdDNQBkxb+ zaL+hu+k!2E?iGJm#^1^KyLbHEQ(xnOhiI4uRwj&ldc&<>Eydrb7%uhA$A5AsaH5(! z@sHuJJeMcaR9P>4t^2%&PxYO==~gU;FP8hM6!ume%Q_jZ-Oe|a_nc&o{T5=7sQy=^ zcX$mWW<qF@>LzVTbZ>pSOJm{L`il-oV(Ma^U`vM5IsM+<?kZmAKvU`~R!^Y;r#>*P zK7AwXq)<76-D!cFq+yo(S1jau%?ZvtmkVoHp-7p+$x2eH@-3W8*Pz}BwtNjs8*-d6 zaX{r>*YcbSp1gyf0(<XXNNs9w^#a!~>vtzb^=DTkiBc>XvDj|<<Y~x5%xguzNos;= zxo51{8!dPFiW0v|*W5wd$h!ueB{g*&T^`?_YhLHTXRLw3sVUBm2z=3sL4MDhSRwbs ziBo4d@UthT0Mys9f=FEc_7|Kl^XJsmet4uFEFKP~&WzpVJf0I152o#@LlaLQ9tJE+ zQtrpIN8&jH&rW!#hUptq^Wu<%65)*yQwHSlE(zkkCI4d7A<^v=1K^ziSG@&yaX9OZ zIx?<$0sbxqDxWd=oK8ULw42HsCVA|2I2Vsyqo=vX>dvmVQ=CPTZw`}uCF{zN%Oe)T zt0^9nufZHAlENGC#O#&CLOWl5j=Gg`9UI3)wxn|Pc?ZT^Tt5!iV8$_swDS&L?#d@f z@(KE;*8B^+@PjLQDZHhXePOEH6&Aj+BPgvP$3UfZH~DM-_)oNcI5(S{)b)hotSsWF z@e#(~rbg|`zU?9exxMD+U8G!)TNj-mT_GPmjZZNj9mA)cuA{2sSD`rXrB~909>Y<_ zCFP2!<4NQ8+&q<bV_k938*>d=UE`uV+Kn~P!@1C4iBIPXe~+XN|Dc~g^3#_q#0@#- z8WLruev*i5(!lU@uOhtlHQ{${;gGxj&->~}93Z~Q7OnT#bL-45QkT(o=f&UIZu$Sy zpVIB<Z%64W=VZ&LtvMIW+48yT4i7-F7SHznvgPNknIep5HEr;r4JSv{kO_M^Nwj)| zIP3|F`J}`3VyEP>QKeJyGevFNg3r*0Opi&YHbS>&7~Rx(j(RugijeXiE7oQao6EAr z3Cf*ccQ|4=^+W!o8fs>uKaBCIDa~H8<t1yrg@<%&UL)WW=Gk+_f^50E=55Zi<|c(a zV4gE4)@94hiT$V0GP_iX$s)sw#O&&eshn5tYicB8T<Fq7r;b%%7s%s2JdK?UHnZRZ zJAlti;K?A>oldhJM&fR4Q{QA_K?&6%r@kP!b-<~Q;S9n*!LV#4>B2Mh7R9RHnaG3q z(QlnHa4f97J3oR7+iwTg1e2{MxRRI{ckFq9m+>{B{X!fx!Nld+@}3h%iLjMQ!?BKQ zQ@tqc2CrLZ*QoOHgmT^GhK>nc;_99)n!D;gZ4UXT4hFOX3M{jPuY+WXt}6CG6{Wv+ z@m+bT?q*#+S?(@M&>PP@I2Q+!%E4@dd_9ipeDo_fCkfx6fY7V2J}A*1I#JIVo?TaH z&oTPi%1lRz%Bv?pdE<YFva8j-v3MqtwHb>SzMArt#!vObKf@!KWy)ty1b%rpd!^Lr z@1KPxU!N_*;x5U3>XQd{HRysw8+p*HFJGI8!&u12Lsifr>6r|4RE$}BOu=qSS6-Gi zCaz_&<<;CO8Vgcaif(lE8<guc2!iZv>bm-{N-7)k>^APpm5*N0%pqI$$Q9Rono8#q z@v;jkiu~;z{}uR7?a5EByu?{dvUtY$`-ml5zV2}8voGiG*9alBe*4PJ3_P_s_8-fa zOxFzXo%*49E?TiXS3Z8t9}Uej9B%0}pX86r%ZPr_#Klt|G}p5yF3OeHJKN0RBuE={ zdX2tQY{%>tUjvEw%E0uq``XkKk_8-DGG_3?x5wXix^F2S9N8Y*ZYwkz#PJ5{(zg+< za&WeMp*(MrXK%0m@1z+z6U|Yqz53SSgh|x1-xKHj?(UqqN46{H^3lrbUCN40NN<i4 z#X5cX4(IP?{8A!SyTPN|2bWvIx!kvd7%ed!i=o@4<Tx?(Ryn)!nYtd(4#ZHyf|w>3 zYK5R&lc<?c_2O!^DLF?(Kf5~<x`ieh;b!XZ&e<FWU+CYgcqJ~FAx^d2N!FWK78#fo zu@j-jgI9oShQ3qOo|R@->b@NBB~0`&k(pS-#Ac#a*}qFL^e2-3h*F_)NOwM!l>}<& zs_fw?SlNZHHId7?k!z^bJ1f3dVr$K2zv^W*>vjG5rLg?{>euxR2g6cZLAUC1b%WM) zP{iq;=k?`km}WGOb~WXV@^~`!U9a908uw<1(REfKrmiF7oXO4V{8{C@896e^UU}un z<twgkXXc>ryaZ^RQaL)VVkrT4aZP1BR}Lppehp8B+k);_nXW;&<z@@FL?&iC#o-)- zlv*L49Jf2vP32JINeg#ZyUxj{tAuU<@fPM|OI3Z%AqmkmAD(1B{7toq8x1=;@lCDC zad;Cg6_*}sn5x=26$rvl(=(uO+niV0*24)|_Cl3cOkUav-|LLnH_N=I+1JFxK|2n- zaAN6>0}tQU!-huXm~oc7(ppwkI2^_1uJQ_ZlSN<UIc)hm*dgh#5o#V;e;G7cWcJ-! zVK7)6{)M5o!lEqiPROa{8#|5MSE+8l6fxAyliy*E<YMpKKlLRO^Rm>8t!1aA$}|>) ze+6lIMdNRL!oTxlF9G#c)>FbG=9ZAP<?a&Z7Ki^J6(!73LOErt2>;o}G}q86lfaVS zQUYVn@L#RCi~Fb8fuVv82hT3AxOAO8|ItU;`vlHZ51CscZb|AcQE#h6y>W?JSXjwO zJt@&R8T<fb8}1+MFHLgwP%E{yWB<a*W9JrPz?&Y0uBFL^g9F>GS!HN&z}0q}YI_?N zqrS!cm8rr0(Mb*&zfv7RJ#`N1j)}Hc|68lS#9b*i^*X!RdT7M_WwyP$6q~xbb(r$F zdhvdTCi!;uwkPSu*6WbzQ;&(9oe5Ek3M+UgW}=K^&HD(pYgdqOX57h<>6$6+DCrWT zqp=uWeWOC^H>gZbl6Fat%9Y)6(~Heg)w8<FfW_{(M7%ix5nxbl&-%NOXbCbAxg0N$ z9ilR8T+6N+mFmA}Zqvx#?i#|*bv~8iBf{8-XSZUM*2QKsjHIk!v2XhJ*3c20b`z^` z2P3N{2$dm%ZDUlwu=0Cx`JC5T3(QvQrw#`HDTY6ME9KN-Ds;2hlBs*-<7&HF-xR)$ zNVV=(*R?P480e>N0N=O4=c7pMv0@L7QMw7TW@Gw0H~y15V1zxLXcGrjP6^6;u0WVo zClE?|a@_2&pnRtEkmlrS$`G@gm93-3lB(n6?wLK5ala6|@{<E4%H+Gzn_3jdw|blI zgH$#uSLb=<Ldo9hNk)xFS`2cXx9J<Lh<UHvYuXp)*V17L4-sXiGm2Bth;nQz3fX<V z6-C(<caR-)(7Pmu^3^|Y(>Ghmn3*^MfG`5FyZq8yysL}(#J{b_Cl$EAmGvxq_iqnh z`S7{;uI|EjAu(K!nT79L+rxMFTzr4+F5hok_#W^=xDF;~#Y*Q(Y*B*cCi_Mh;~AK> zI46+4(TTE_6-v6LU3Tvpt$c^rP@HNjb)4!l`Qh0@(K;PC_!J54z=1iWpSk;F;ZL}i z`HS5rn<q1&VP_3fDjj$58@)K1ieUE*%H&TUA`QDcEKOfKO@ESRKxq`Am4@~t&4=PN zT%4Tbb0JR4hpUncO+{#>d6lL4aGWM+=fmXArO7EDMQEi#zb2oL#A&!~ImzeZBp>dS zEHo9NmF5sjb8npHmq>`12InVfuo@PciqJ}fk&Apj8mFP8Nt)N=wEAeDM^h16X|A_4 zAB)qll9Ht9N$TUNK8m0wL(6haW)A3{w3(yjCt^H1q@^OX@^*A#)@p6GL%JwJD~+Se z$Ky0Rq>CbGIhrlFcAijQmVQ4AOSZr-@TS=s#NK?w=Vx#<o+ZPwKrTS_{k-s;<rnwt zt?zOK-LVNC-41VX!v9C%*ZY`$=KJO4Y}wq<8B3vF_yd>e^yd^;=WEPC;x8lsb4bQ` zskKgUuxRvdx{+4UM~>`RL037w^3tYZE;W_VD=#sO-l&x-&X2>AiW@O76}Y7|e82VP zSI50sLF&2|g=aMi^jqfd|579a*2l>;@?6O1XlF<;nuI*yEnL_cGLfWlIJh{A^fA7v zB+P8LzP<T_Y_Tzjts_3w_QX#7?Z#haGETRDD_smIw6c!@YuhpEhvD|yTZu-(Ufo4} z9WDP4RSh%0C>B0Wi@4O~)se4Cn*6+wjP);$o@NN@Oi?+|C9l%StR1ZNExiLI6;>WQ zjFjXEa~fkjilLISjZXG?o48^v-TWe{k(p}Y@=`&$sV;$T;@Z2|O*u8!KAJD<0dbMS zE8$N^_VBgVm}1n^3zgl1av@Ap)40(+<Hl?w1IXgDuu=$$E50i+t;&_FjxdRLiSu%X zSD~(^cI@r<WWzH%48hx!p^eLUek`U3+!up27UMB6heQ8qh3i0d9or-<s$U!EM&fbn znHp^TE-&n%IpY#I3ei<XFGoXfBQu?Jc$9{sL%f|`&i<vLN2(6MvmM~TR*X4*UkR@B z7RMMoz4pdf_zg-?466h#b`^PSUQhTliCG@y{j%tgBmw?&;GGFeoe6h@d(Up%kM98Y zFXrIxNO%^COkD7ADfsXi)t{Uqq;zdS2iR39^RrXNq??24)TH8mxOck>+OPU0_>)bF zgL*zu4B}(^;}iZ9Sv$W6tDrpm6si}v<}D&I)Qq<N<r?|c7~<=i;RD#6n1#MSWmxjU zTa>()2H$Qf*Gq+s$IS!vbH_XmZAZ_Y7ng*qg@h1|ChkSEJNmfZl0A_+>7U<jcOHW@ z_MaV}t3qHJzvy3oN%U;0?EFzA=j^zQae-{;ZY~kitCK>{dr}HHf>iU+XA3l~h*00A zGJG(~73^K|(f_}wb{Q?wA@VzjJbq=Hvm7|ww}ZdthE8>aeu!5%1L{z1b+Q(h#<*5@ z#OAbpiY;i4xb@4Eu^|>39mT8HlQ6F8_rrhF?wyhJa+ny0i!I7)-8MCOX(K;%6m7&p zAoeQBBfog*%26KwyL82nLxBClKka@eFBQm5=AM6H0q36V?J(h5bG#RXCTU~?(_G8s zxWfs$eYS@#yimN(!jbDE+0tpd_pVch<-(<Bop%4N`kuifQN>FqA9i`Un8mE)f3%J- zs~S>6%)v19a&6fI5N?r!omuJd6)o5GavhSuyiAy($_x?_IwjAXg?;iK&so6m4aC&* zR9>SX7&(0<$;li5zM25c0pM#1z#RWoSzgdlmLW3o*pWG4-%L1P8B>9gaG_i$dv?c{ zyB40ZjtK~zMQ?T=IeG)Pl6zit)U&JSu_D@I$vn`^A-|xvl9nMmo#Eheqa+lRGb>>- zwu!zaHFL9lmwCm7VL8r2XG+kCQxA$y(kAZM?H%4u^RXbZ)Y?BAP||DYmtg^L3+k>a z>bzkvmz;5$pIW}3yHjl`CfZ#(@?yDHZzvANc`&ngd7$*fdCVh^7SwG`ob__HJ7<wg zE#EV~x6R{e2+fekZCb7~_&Mqwu2H@#z54UigN~qUj<24VigU?}Fl}$4+uPgi?d$gT zcY6oqy~w+KUaG#4oE)X*0SuvSFn+yv`HsTas2kQ4=g;ZV#C$KDPa@4o2le&*aW;O= z=Zsun%F1|sGuX%79v45}>Ox;Hu*tM5>!DWGFZOm2(#m*SoEa+>miaDzc_MlWNEdLZ zq<nbnWFhrJ=bWHae*LAY<^jt3A}@(Q;dvM>+97S)4pW{EQjf@ce5)ZAsI+^D2+No- zn7nno@7rDfL-5K-f%>Tt9chcCD7d{~LA)i*$YALuk;hM-m)cgG#Dr<=<A?hTcpjIk zn0$`OsoW%ynQ(SSGc1<Crb`PnU7BCNp4{s{<)>js_@(O|4WGJwH%#KRS9MTqD09!a z7k-(6Q#(9H*B!nLj>o2*l0A9n_`65^-6#HH!?5t<;_tfnD@|YNo)dqY@%Lr%SGzzI z{?_>WsrW0)rr=+Vzdw$@^m01{tgw6en?gfNdA1MS^%n0o6pJ3ys>Z$B&{}#-H^cp2 zxhF+0?>07%^@Piuo2+`m<<5=z*%R*W+_%cT(z)-DJ9O@M$i0Vi-z@jIbH7LKigTl9 z_1Kl3<TWApVh69uEyZm-rn6ln7cOz3D;2trx$TwVaFv6L5yJiCuD_`_W+KnM0jvEX zZmx__90?CqB$LartH@I=g1I@2CVbzcG3k+dS9S%5=LZ_kvy%$x=qY@&%-w?o3uz6@ zI8Sq?!^0dJyF*sv^7p}$3EvE~umnXQ)xh-6<}BmzMhOn*2Cwg+lJ)1)(Hj}U0(Qnm z?;-l5g?u%L--XE;<Hq;8?w%ToWiF3_j)cc6Lwgo9b|GKQwUmBvpf=1iJRGF&Qslk? z&hlo?(U}_LGjHo22ZGz=AMb_>iGxeW_%CT<IV=9Y)cqm#mG<+IUgI%D2@h$D8eG49 zGoM;ETZ-O*BO5d}Ni&V!iO03giE`<^yCcB$uyA!Da0&Xd9G>1v%$z%c!OftHAmbuT zAAeUjwkzd2Zv>@{-MF$KwQNm$>^fPQk&nh=+3y}9zs58rqNz)-DA9Y^a2{;Uw)rHJ z+Ld^ZCh>Hg!G**ZZ@2_(GYPilTmm)5DRIq;;i)b&<s~|`^P>Lef`coz&gbK`5AJpq zK`plaDb#}|ErzGH(5`c6tq%XkvOS}P<P3-8$;)=Kx|>*NZrKzBF?A=@k<?HB>`dKe zS<~w`9F@9avxf2dt#V0{*54_Y=H&H{$tC-9{XV&5*{=UcF4>U9%TKNzTF*XT^_Z=3 zT_E5w(%77i#cfOHB=z-ElGZ;EpH2UcygJ_YT1@ZYZ7)H2+iNYIY0leTv(rs7`B=ZB zbkyPwW&3QOH&|b!$K@WUhK*6gfsA=Sb~T;;k-qIXdmh~p$HLH9f2cUpp3MQ^J1$Xi zW!fLxtJknMM(B4!Y+=NCpdF_)JC21B=fQTIg|p*W7;(Pajx#ztj)f8Dd+j)L^0F}E za9C0mRhj3+u`uF1+>SG+JQhZr@3-U3DUXE_=aF`tIeA&wrQY<T#HsaqjYTw4QyvF` z`=)=O<VSeEZd?sd;SSiQK?p&(xt1_TVuya6@zehjrZ<!p!4<LHd?%b{1K$}(QxRG= zWu`Ll;7{T-i`!|+Ntz`}qX?}us4JxTX`F_=U*xl$Hvtu)m4;!NG(U^e>}F}U^CqAo zw9=p|kmm6?&A6qpwU7!<t4|e2QxRHe7}rSi^El1&cA79rvxm|sLMshw1!;Z}r>V8m zOeAU8%2sG9f^NC}E#L0<9tGhv$`f&fU&awO9V37`j38>!U+Ig?^iuoL|1;$4tEp&& z|Kc4;B_@|&$2dCQAN&n4A==@ZfFdw$*{H9@()c5r`(=FfFTTIC*i>KQY>T=JAN2@6 zVtPK}Yd-3de8j<g)X_bABC{!O^fsO4VW*YM@QeUfd9Q<i#~N=;<e+D7>i!Tqgtq`I zcszZFJrk$Xk6aypr0|^-ZkG#jE6YNp7mCfT+rjgu?cqtMxGl_VOMY~$&PAdeS85Zi zQ19eLS1UUQ527(JM~nE0*QXUb+6n*42mFoaQmOEn2spN9`_TysdNzsuji)Jq+izUJ zNeZ~a0!~-Jyd>Z_1=KCzECpPUpgLFq>n-3+1+bmop*mCnS6aXs3ecjPWzMQW5N))8 zXDC1`g%)t60-k39>lC2nKnplp0asbTISN>i1Uyv%n=IgL1&k&EXDi@Z3wWvm#9cx) zEnict<VR-`$I#0WU8u;>DG5xD=o*7PJ%Py)U2L#*2~3XYa)Ui1fyohFD%i$jmAS;3 zWiFq|Fn{Ay6d;*p0rHuk@;4r*00|}wkgq9e<ZnD)0g^rzAYW4=$De*WzZgM$d(E|J z9ohk{SNj`JP(q0lODLbo5P#!|3Xp8F0QpQH`5RACfP{$!$Y&D7w>L!%cCug+4gT~g z{95);6U=(L1G?_Mnsr~PtZWZ}B2rn?(c9!gmiVb<^xwxMOWM!&rR&dU1a~imH$Kj- z^6a%pN1xDR)~2zT=G(?<-m^Tvt*eIuIhEXUdza<rbk_CsC1!t}`Hf(MR!yqQ+}Dqm zpczMhfWd3S&QoALNl~I*2$40L2`KwZ)Gn^6j`E{nf`++)T0pi`=^cfoP;jyjhnmxN znU$)Ghj_zAal>5!`Z1E7)pbXN+}pOGZphWPuDL<JK*%YlfV?xOClz*g$a^hL3pssT zal>T}xgl9B<V7L(w=Gz2$TjY`mIpandoawQ4FTCj)yKmM8l@<Czr|@G_g&mjLl-4C zBxNBV6>?sOg>Y=<m6WeO#g7&WFFUQo62tR`25hVtnrENM1^BhpjbER57hZ`AkX$<M zG_r&dvy8xtE~5>r1MVAr1oPh5o=i6bzwtNRY~3?P(SE$a%<eUB8RpFB^(2Wt1>3L% zFH_ysr5&rkM9ii2Hm)}KJBjU@gOTW7oV?`3E+5y%u3h_Cy9hfP$2AC0FYKVIqa;v2 zY>^`-1DC0#tqOx#tgpV!VbkI5;>dA&LMD2joLubdLNcM|v=%htg6JQbV^n<Jr7*sI zf6_UIQri|p)|%3aoRFb4(N=<Cc9jaq#=ShZ!bpdrH47G})tcP5ptzwFD_YZ#EKzG} zek~@y!jMaSa)Juvs5QYbR%`)>`v!a2dnaWJ<b4*Wg&ZbV+)x@A$PLLZLXN^>Oun5S z^d=$4)NVa!V6Yz!iF?pMcMpQe6?bkAdb5zj<P9si6eTD3DEZrjoc*~14$mK)H#9$# zT1Cm{Tbx$OVRFR{rE5`gL$XvQf4h*w<QojRG%6<|LH-sYkM*$OA>Pd!3Z;L6e8}Ro zkTdEiZYZS;<c4HdA%81S?zf92(egwRX<5rjBKn0qylWMUqIX#e7C)rARhRn_Rw8^7 z|LzV;QV7IjPYxQrLlJh|lh|=XSMeIZR+nMl=wR0Mq)hZ1AcNU<7y6%87vjNPQgw8p zSb68p3|t-D<T%K>QwJNgI+^D>nQK4SX4aiL2=9muG#$1m7FV857Fg}*=eRSGXfw_P zMKeTAQ1)U#w&|h+p?}-l#ScHA-X@(^bK0NKzr5;hXjUc9X;Zvf9j!z#Xe+uYRi4wQ zemEi>RO1(tTz6~I_HHg*%>{7hZZxS(yxWTBz$|(vO?L14<4M=`Mz#fqpvE<JCt`Rg zuJF?;Nju4d^3G0j*mjcekjPPbg5#T==r{dd6(1y*&x5D2j9fMgWbp8C<#z->numl~ z9^%|(e7Q&YqV|Uv<zxyQaSmqUM+;#3|8nX~a%@)Z3T;3u<w|4rz5InrIvZjT9@9!A z8{f}J6MhZJ8{Nl`H@yeNVo(0`IN$O%ofd1#>9PJ<Y#{Ks3&oqR@@>}m!95}Oo^s2; z0rd-J_uA5vO8wm0K*@WvcFHkBhG?*MPDfuFDRltfDb$sex4`8zEyNwQ@C*>aE`{bw zeweZd<y5cIc+&z!?0PS3Sxd7v_g0K)m1i{!#~xV$HqfqKbp^5ITQ6UDEM#czqu8T{ zuT*&C`$`aFmvuUhuQz?{893%3h339Wve1%n=*F9tKl-vl_EU&Atxt%BE5<$+V}JDO zI8~fv69a7RQ(ibl^vWS|R<7jHIx=jo61r*q(#f5p1MQ*&Z5Wq0ri9S0{)rt&Tustq z;ZY7Sufg?jFn;h(Y_FzX`gbkV(_hwkQ%ojB3@(EII(5<gzn-nllZ1XGg4_MHYC%%X z`5Sj}db3<;gEnXTkMynNmA~rvupBDV!{a?5)xEpkK`wg_3+--4IX8Q)RE{l}?-z|< z)p`ZOc(Bc<O|dB#GbAh{CeR)%V+P8nFxQZd+6uFVvM|XOw4>DH)UCX&u|J97<mLf< z1HXBoK3bnUj^aBJz)DaoHN*;A&QjTC%YoyG-61+o!0Y6Zm)f7aele?`9YikbXKVS! z{Y*~R&zQbhKRbkPlPR0)TZiGGZ+WTPz{lK)c2N@g7J7(L{A#`z^2b4;1x-UYt<+te zNdVWGNT$xDc$HOfnEck0nnx(ao7TsAmE${Rg6b@aUn)Ghdz>^*XYBk@FFcA+$8^jO z#dH)$Hf!<SEw{KfhS!9vi`SMCPBr2>8Lx?d5?&h@_XzjHAapkH(UdpV;u+za%`--T z4xSOojb|*tsw=**YPa}8t6;x!d~po%#TQK3X#n8559c?0f30$EIR`GN6*M>a0IuA) zgKUteIyIw@S(s-AD6qLEmUck<ThKn2@HVALkQ_pLBDkydeU6D2gIXMjdRUlI-iFg2 zbZM}zQ@ARK9)meu{@j5qkHgu{6%&VE7pg9F!IU1oO!?-=v-S`TH`6MeTjB}-j3jU< zknAUlp<m$HP5K+|Bn^8=*6Ta&HSQ<kmb2y7T|!LK(tfxX+SK}IP|K$L9RX%t?hg24 zJH;7FA-|<?0hXd2Kw+LrA>BJ{2hbk03HwLB$|&jAFBHMPN+taWb}IB%2C^odIWQmn zlo;`&gTLt95|Hqyq{7%rx2|%dH%;}^)kXD7k|y9D6foLZ68AVg415u_L|1V-2P>BF zugc6>Iny~X(6Ap;>p;6v&L=Ef<RE+@{YN=SH94MWkLDO^1wcN|S9cyv6&9s(BugFW zMPH%l(H9{z&k|dH#{>Tz_<YY^Qnv_PHmG<sqGD$4S4ShbrEn2zOh{esf3Qz<3<Q)h zS63D0T>O;}mymjfAv{Tqop@LgX?YshqV#}(i}qB7s9!i4_j}6I?r+|7kWQr~<1&0> z87C()Zn)UU^~#9gO=p2L^<(-&4^WeFi|LV0#wiIhP9u;0Afg_pv+t+*P7zDGgJE{) ztZ>%+P43B+jZ=Ykod{A*AU9y=6zEOs(@e`fY7x-{whE_97Dw3dd?3xdVomF}dM*KS zMA8afW_=1>XgDf+5-h*ViR*rqlRhq|u{ftk*Tf0p*d|6l?}Y{E5Es=(^uz4nd>*J1 zt^qC+uAO800%)ecjxk-;>XNf4Ch;Cu(ZuAeL^G+n{us|4-M2fQt8_M=t3b(kzAELd zaant*C8^yGYsq>mLwhK<hHA4(Q(R(V*#fM2B$ln2D3%+_U6=@}Fe9vm8Sf2Jc<~-% zdCXNYL%qr00L%1LclI~1#?Vt+;G0TZ>-RS>-Ygo~<}(T8tjzb>eK^v1P(p?4ve-Qm z9ijfQ!1pG&4)`g!*@7G%#n+$A`O(oh*qy~<oN=1J=`VEK@M+c=Bn$4LJb$ph={Qln zaj*IH`w=AdNBC*Hl4?Pa``{dp?KR)yJKyuQS4#bt``4_K>L~%=fm~O{)MDXDC|632 zL_Z+~hLs~J6YmS1#0QHBi?AmMkhM>?nq`4kK`{ceexO`R6jl4ZlHWL)ZXL~l%8hfr z?tDxAQFSQp8JB#&W0R717HVZ2dVVW3u2)A<3)`z&Zzq=0I<^+Yl|L=19(Outkyoln zuA0qdUFAlssyu#fRUNV5gf5GqYpYhHUA2;o!lveQ3_tunRb`JhcX@GpJ8qqrVvkLm zya^rt_Ww?Y4s3eY=6}hC3&@jZFUHNzwP4nU|Bp0En%+^zwX`*Tn{cz5erJdT`NS}@ zsF?7>SQq8!DDbq@N;l3L*IM1;5tci#HUHT@(s;amxO2R9bdJiMtyNsm&4X?X#9p!5 zjmPR&i{tk5t9jQ$y$R?UH>L;A|3D0kMbDadftfGWj(QXMdcJ=WKQkM?N4$CsMZPL6 z?*0tk`hzY0#T>*6MqwqJ+Is8#Pe~@uUf9c&-i4*tX~nn|#5U_TJ^CsOaz>9{KbsCt zi=GB9nJMBs{(rpP{T%0|cDXjGr<dB5vR*`4J)5_pE0luhSelE&>=}Fhm159!^}5CP z{rcaRwlp3^8k^jue&cbm)@as5HtU(<^3K*qBK8)<C6;L7_Q1zQxNaZ^1q9@5WD;(4 zJfE`tS!GLy-xWh2m1dcVdmeqX4it7h__6@&>Zv&UyezM32n$<ldjZ<u_SmD#c(fDU z%&tyvzu5x9Ul5f`$Mc!!A!Qxw`D3Z2`|Bz@Ob1SUV-Q|{Fr)Ff??g5)0KG%j7B<rU zkaXx%QuMG!nAh}^bm{`qqW~e!;UYbGzno8v2Ma%&(8^IM!W7YYF&E7ATd=ug+}O7l zNpi=><lTM})6X!Hrv9S*>gOr8X{7FzTsGruxQ60a7iQP%8-1O^SNpOacX(%Q;NhxX zBpGW9gN4I~DED;?b$juZ`g10KJLCTt-%I&2u66xAhQ9~6#`z`uy_CNs&eVkjG@eU# z()m6OvmjnYt6cAtaCH`8ip9QE;{f9J=i|6}i<|GAI&gN}8i0=bT^oClOqVm$=9UXz zWiy!Wo$_X<MTw2mT5IaIyEs2=hDtT{jaCfXN)|ps!M77l=AMyqq4AaN2fxgMdv_3A zc~(dHwPewFNOj<zfVeR0n>3YKV1wvr1#v*XRv_HU$jSXY&hyB6Fxy*MQokr+5!aON z7?thhV|BG~ReU$?AGn7E{?wdad#NO!X33KIu`FTUayQ7&O~lC0JH?0wZ6_}WQag=1 zIWlIK*~&K9W44aJs?X{v>|g@}Ko3HNnjJ$g9Un2%q6S1;;wZY#hq=)PMg>NXD$thg zOu`D()x`vOtQF_Saute}@)5Z=A+$!uXLa8C3?y<k$<sZ0**0PtRwrmnI@Rhr@ak5u z<<at*lxG8lkLXb9xa8!_{{vfzRD@+#7!CC8`mnweCv@Y6)z8WvPj5`=60R3}(|<x! z;yT@p`Zk^i+1L_?U|;4!#$~VeZ3is+!eHZ6f;8d$1{nqsE7XPBqI&v-E~(+>k(fyX zX6}mORMT?(yd>Vt!LXd0<s0X8#5MWH)lEjQtj-F%|FQKh{!sKFQT|00UUnp+k!LB} z$W9~E)>F+`q6<98U52$cOP!T5SM}sO&2paYHu<Z*OWA&6j>19|V4DCp6~Rrw$2WC? z{P1f~0OnW<T9-;x4nw^5*rf!8=Y+%fjh!ju+5G7oPz=A!xRqpT`aYsN^>@kE4bxBv zR%U%uMG7n*yMCN&_Ji=7YH!`7+*qazO^-Q}wEs|Amn8Zig4Qz&FE2xfvhem*=DAL1 zOWfzvW8$Iv@y<S%yzA@w-J;Z@eO<r%P3M5T;cav^n*On*NqNA5%DAR)N)UMdZHnW1 z*zdQO_KhdTY_p@ZvD(9HsG>onhV;TGsQS5x1?a`yelfi~8&+zIJU93ad-Y>Z0{JL$ zuX3<uF3O^bC!Ay9#4g+yrAXJn3l7$nWl2iL)xh>=o8V_sZv&l)erWp}&~vQCub+J~ zcr*~wnC#Gy8DUyqvqp;FP8aYj2lT^Jm`|Cx!P#41>~FXWQCa2Q9wqW`lh37(b)f{E zvGO4yDoCZlu8+dzGlUmD{-^lYXyW!u{!=n>`d>gh_Dh~ebFg1hQ1(kc9VB!1OU_Pb z_No6O-M=iqZQc2yP$@q_$?vr7<u^N><+r1B^vMq)RGO-6+$WFk1i3z`ZXB*vuehi) z(7IhB-L0=l=iX+0O#@(jU4~IIu;1t&G8;cD&6_Nyqb@>=(HeT_R5;_m8^G~z;h3YV zPCU7;>YI{Oz!H}>7kcJ>lsjv`uCJ4$E0MwGdC^^39^9qQQ?8D2U6Q$K@K&lSWYLBE z#1qG1Z!DfbbWBKClXDR-63GxK2kMJ7h37=*a2@StV*rYqt;5-n=K@)EwGu50tO6uA zm2X_ua?ou0HwbK9a6P^T`<@D$1u}Sey13YkZf<RJ3jFAVU9>dg22Hc5zS~pd8qXCL zL3o_XtZ{19f5dU$f54Frj~5csYd*~c4(3%^E`M69YlqT~#3v);fvYER{nVauTxjbe zU?5FL-w-xvE3(2hjYs%8CBU~fk^bW3mw3=???;*|%3iD@{0C81k|_JOBJEg|nZCPy z`K9`<RCTGZ+skhosCXIT1j-CkYCch25X3w9`-1upcTEbEg-yaYAqK;fRbQjW8gSWq ztsk<L5Q0_raFe{!#FF~er^Ll{pe-+uBG5hu5|}dT@JMg;#Siu%s4bJnec>!gNjBqy z-7S;5{(3gxl@G-af-xG8g{P=c$s8a3oH?={7;iNcilU|{<LR-9BOFIZ=YXWY!V{gE z_`7cDIwXVpql^^QeAd$RJ<5f_n*h|l-FYTtWSmoY(9-PO%Tp_!?#9mJGg1yzoRcyq zj=1SNv-u9T&?W)(H$Qrp#7^A%qPyjBJZTd}wNX-hS-FGgT&NJ=+2h_07T>nxWb9D~ z6bMz6Hy*|sTPgHamwFuby^$*NxrtAkKQ&zanii!$x%s-`i(|LCfN~bbI61aP(?P(U z@{P_<Zi~47k{uW#uD@ii6~eW!8mF(ar&D5F<M>!2UdejqBG*c;aT@0m@ftxp>=R$^ zRC1uHYojw#+&xvG*epO`tHt`FHifbYfui%kwX7tvNcC{_d>`?h4SxW`ZM;sYN$gAb zdlr9FFt%*>3dTG>k59V_%|Ss+7Fao&VENk&*PQPX>0`3ln>MHDZ8dB1`khSrLLRSI zT0RbsG39$WS=chE4<sgatFw&aZ-0BshAmu)DsA(%rG%^BdDB9={q;)W-objM@NE(4 zv09j(jZP#)W(aQ=Q^szqHnV1}GkGbxjP4yBEH>tYUCWcA8pko5B2yi5U-qtDK#N2d z@}n@R7Yfstu!|J-Oog$VBsx~e!K=CAK78A@C$?YOZVBGF)Vg4;cgBMyY)%4e3uI^1 z#@$gh;gB4W?IA-MM;aHC1={EZv`JrOSuQ#se=qyktW)t(rwT7ti``5YjxHgXSk^Y* z>}13sUK1Ngtz7H)aBS11D!%44dcFR#wnzR=m&+f20HFM_qLv;njJD=1^0)OPt>ZNf z)S(|;MZu&WwFBqsM<diVP+#6asWlhro_IV@C^UvWCyqCF;Cfub{yz*{qZ+vOIrTpe zTr%oxf8ZkDWbDdP&hD|RNwWWT?AolV*w`f<q-*Rl&2N-}>*1uBI~uq|B-26K;}&{6 zi&|{&vL*_mXVG-s<CfYbdNyE<TXz$Ee7m!(!=4_~Xs+_}q_eDFK3Up$mWA599czfQ zL`d(QZ9TC*H4l0{U$VmHnL1aYd8Sz+{x4>fM7Hv%{H_qeuYazO3da+w9<j6EWTU@L z-B*Z8B*1KFUsM<SPR8H8<1cEN8^aEzjOVC~cI8-=>*j^ZRy|>A#GHpWm=JfrNsNFz zR)p~8PS0ELl#pnhPnjST#D8bTJj1+OMV(|j#~YQD#c!ktSqugK!~pv|wel97$<HJ& zFWE9&5>>+v@bJx+Wngtpis5qRfUI3!C-aXL&lOwau5{3|C__$t)%dlw_K8R{nSxqv z$0sXG%l!@3HVWhAf%rSmeYFAi9*v^o^%J>7+2Jwmtp3u|Xp1YD++OACtG$crBfi<( z(1&wq8*#})m6i+qML^n2lx^uI>KA$SQ$M_wSYnndC`xr_57%>WSq0;kZY3tRHH7j` zr#`@FajoU81p%w)AZRu6_VXtdX=nc6k(8R9iE`=^{+Qs|b%wX`y_diH`1>J$ECbpz zWFcs$4&aBo9`_U9c<w6aac^PlA9Is68;;|9`WE>%fY?|OgLa+^T09q2&Tj`+*bc0B zJ22k6KZJ62=31UV7q-(}P<e1WFwQl1;Cn0W5?7`Ce-D|%IiGHE&Prz|bqA&)y2j&> zFO$o-Uz*Al-a-N3C*yE?Z(g=swvNcy^?yo(q3{2k1|yTwaHUHczGV}TeVKs=c-bK2 z?pmw=MzxA%lOn>Z8AU)Qy<5Cv(&+ti9pi-`;Op7sD||0?8-Fdk4~WbwNPbg^^=z2{ ze)Kbx%LLU=>HLD4R50w$uS>QK?v}%JC0%zkWvNlev$YVHrS7dUTcB@7EC-~px2rq~ z{E!m(wk+TRnVHy%MLN7oacC#qYe}ECe{oT&?(6L3UB%L#&RNCM$;|9Bw-KRf<dl`> z_af3ET-TrijBp*8We4CZ4$$WSrxNw6u8ckGtlp^&Wh(+Dw`G$>4tgnGdN)v=JG7Mo z?g6?})exGmThNxbq3Z42hJM3A@92ikIOsdNq4zr|%Z{BGzUiRv0lK)2_gfB%)JdSH zQ-*Il=q*6GbgNag?>O-7-H0D>(D${WChwQf5(st4(g%sb6&*b``45W>zu4zH>-=4Z z;?_0_QQ~_J`rdBn_Z_qbG_J>u#C-_ptQ)!fEfd7y_9-jBs`ao-%COr49|8CY19S0J zE8?RrBI9*WQcR_P#DQ0KfR+AtE`8jFXuDbZg|yzBzE?WGsZhlgn%i4=(NrxPpVMaB zFrChJrF1YN8!Cj%5_9iMF<EB8<<?CSi@#z~l-S}gvs%+~Kg6#F4aO7gcriPI^^>Q% zZjzc6*s)DQW4*TB=xYWKFJcpU;1$!MR-s(LtO$pRg*Vl`b+INma}A@w>?M>Z3;%*E zXSG~^%74T|Ns7+QIqp*UC>l?OT)GgZBHB-L1{Dw8hxH4Q%9$y*w|+6BdKJc6Ya~YN z&NY%)(i*{+$%-ONS|XDe3hiG!llf1Hy?9+8(d*XZD?z%Uc~EGkI*m#0e4yzzuGsc; zy`uni$?IU?`Lr3TokSKJrLA)D!h|@W<`;P_)R@7oYQ{XcQKgjbGiRORdNss<m?Mp8 zj`YK%wVr&PLW{fGpDrQtpQq_Cw^KBSG$E%*(y7#D1<KYKvT1k80=Y?L8%M90zMjZw z`tX0j8cbWN1kEwt^e|Z1jzxs1E~V1pLxD<hf?=>RV)z;jf|`nII2Ux`Ob3SKr1Xi= zdZKC18f`pc`Kf$bKR$|YpJ><K?CsZYI6WDJqkCwP#!DF(bV>Ggd>Ohiz&;<Bvt8Ey z+IfRjJl|fLT6BP$ZzD@MvF4Wl%mIKyY7Sry034ll0CPZtmrGgDAhtygW6W2yT-VF> z0x_##T!;1x=%*{lern%L_;bDzVw`4kXw3m&Ndhnj0M2r{80G-5Gy#|cz^)0v8~}Dp z0OkO&djc>AfMp558~~Ol0CNBc6M#7Ya6ZkI!yEuO$m;;+08mK)<^aICO&7x)06607 z0OkO|sWk^M2Y@{jfH?rr{w{_&0I>Pm0n7nlWdbk<0M?LP408bBsT~I}2Y`JNfH`iA z%~a*9!#}8bO5p-HnomieV)#3?Rm_VFTB&~V_F}?VHDtFB2FZb3bR~{nc9$;!9-DdC zh@GqAVOn9Q1)ROHKQ*@8@tx!i_0|LgMJ{@RY-&slmvQ>7bwL5*MDFt$)hj)vNJSy) z@A>%A3L<J{mr<lpOP8;%Wbr(ga-1DmJ-q0T7H@Cjg%>k_i~i)2|JlI%3j9og|Kh-Z zHSm<cmk9hf2mZT(SGU0baNvI$c>fmoUk<#Dk7{us0eu`>#YkF^P~<d0s}}!uQL#W; z)U`zI=PYYGs^5y*qbBeokB=W6qRgx!z5}NXe3-yik&FWm@u{(y^(X>FwP6Py;lp{o z=u`t2BWq<ZD#qZa#9(W6FB*-J93LZDh~JM+$5+KBIHpie`dtL=qeXZe$VCVbM<RvK zV0mj9W#7pXo<YLlG=~YTwIE0qw;Jo5XlIMCQkZx5q9DdBsTpMrvp^gSBtm$Gkj8RW zyf{z1)2I-kxi3uZaoJV4RK6+sbUPM@w=7^<kT4{y05|L2!NXz9`K0%&EB$DK0F#*o zw@X<5(kr$yh-<e~F};=dA<rc9@Bm?`EQrI{(xkAA19K9IOoC{dY}tGp`!?bm_iMRy zV>M|jSq9PlabW*d>}=E|oShOUQon4pf{<`met<m9AS)9Hvmwz)d;Uk+f9JgPHIj$B z6UjFGJ7{z@z?I)mN5?2dKhJlYD_l;rbaZkHC|9`5faeIfUpms)y7h2S8RVR&IyMM6 zT~D-L0ND8owVyuPH^@FCyw<z3k`JzbFYH;oUr!%iXq@IG7)rX)c$FV*232o`J*C&+ zpvrXY7vSP^EuU~VGT7dp(l+iwDvZx?B==zr2{(wM7lJ{@(1VN>G<p$!;}hS`x(zE{ zv^P0KFD4|d%hUQCARWB~2y+IPk{x;-(RhnqzHG$!N+X(wCVQEDC;OPK_9Zm!vfK}+ z15UMps|0kkxC&B@P!7%!((YP1X0V3cq)v(5!ZJVT<Q5u4FDDQo2Q1oxliioA=`ydt ziCMP*xYipquE!ho;&C7Z;46W6d|$=a*gd)d7b$P#Q~SiD1DvTYex4G!mZM*_a>$TF z#&Y10QD0{c{g#73h%uLgH#>(+JBLhn4o1(L$R3ue4F%z=arOsMF3w@KWJum}5Xj5B zVjl>Y$gfecze2HtZN)Ek6kCMHvKTjkOEM3bABp-dL@pOHh)eCzgVDv~LEIy+P7R1h zz0}RABY%{*|Cw67Z;!#R>=Y^;VkF);<wsQz%Hr`_iYG;86-_F2sA&!W)XD+O0bor6 zFb9DB6M#7Y9FPFa0RR#>9OeLUPy#Rq<(K|?BHsn#E4SL@BojN}{jEXcbrdh$ld^h^ z*UPzA+c{~@Hwe0qoL*>5DESuF_`%+kNnO{C+c9b@hxFFK2}R7Wm5#g|+cs`)<><J~ z0W4qFlNxVq<?eb?s6IrKTEnU9%q<l(Zmd!9*lTeSvTD4bcTRQRH2W#+Uw!3R>I!eu zT4-f^FAgMj;}&w-ERexNPPA1v9h}5CNHLh$6gCTF@bEQSzdA<}|6KhXE3-Z=a0n5s zoy~!@NmB~1@n%)zU{@^1BgeBfj^cUKBWV6(wsg);spx{)FgNegJPy;vV57+NfMf7Y zrSihHV9ag{N}4mgMOmCjS+F>BIdvQ~Ix9$KIu*&UFYixg2!8WWO6{eahpF&(mlK1t z{d0w^9_vjj%=w~2$+bG=O)Hh{J#fzY2Lmp$HDj3t#j(xW<l^3`Ng-2$BSZ+3|1W2; zwItcwF=4T+B9-5d-b$rvNJQlxgSG<d%sbBf%}jV)j^QyR#l)uK)o(NKZcw!ge5ZjY zW`n<MU}>0J_C=O-C3(og!tI9r+QP=S8}<(it9FGs<y88g)E%sr^{-^%$(U?XT&3_G zMOb*W(Lp*H?}xiO&3ncyIx94i*{rgg??&&P=0tS?;o*i(x?Bt0s@doi+Cpa<LV~Ux z)prVm&?Tf^2Oi(ll<>$7aAaWVDh^D&Izn%<P-)LwSby%O_}eT@D)ij2yDdyw^xT&E zj)h5Wo*VWT3zN#fWy$RPde2Y=r1#GaD_fW}?73lkS(w!9xnYM|m?jN#>+lQ<JCCp~ zMmuo6iec)kI5}3TFN$0A5)yTEvgj_F-9@o8Ij8|+?74TRa$J(4-2-ZdndBtKBdBLs z0q~l7=Hl7<svn(2d8*uaV%?{a<mTXW5VFQa^x+J8fpPK@uYN5_T)a3iV3h7)Whs!W zUXFC}oh~U=w73`VTUv&%X=iAfrb0`TT#Rm!i%y#r*Hw^7CV(6PEV5>syx=~M{rEQD z<bhj7#cN9G)Xr0~wJb&Sg7Q>tetjr+&?%j>@Bsb1<S>76c4$2zO0H^fY5%~Vf9 zRhPVTJFqgb0=rAB!0O5s>94M}5-nB*ip%q0=gFveTNb#To?J@R4s-Kh?W_0*@KMQ0 z)A4H@g3{!z)-xWH?Y1`AEMTpRSlz{aP2Vr>H4GUwN9Z79jG#k|YYhr1-AP=VSFDIp ziO6=gS|mm-HWJ4*>N;B;qqtk>T%BH;8r$mXgpIA^jFzAJ6!lw3{bt???agXyH;D7{ z2boj{8*k^+m&-)A@y!(~6PfUQjnGUa-57o>RBgP2z|8^~JmlO@CA`oE#OR#_K`llw zwO3&N(j>217Nd6&6uuCuME9wrY3orz^lrfYmEnB!9vr>tY&%N4t?ehB+uG7@b3)v9 zuS}KiaP>SUQyoZ{BoqB!8C>Lre@9vH>vz&-$vPQ_vdw63U-q`?8$FI4KpWl6^InR< zwiXt)*o_pP%LU$2H#iCD)D3e0I5`2B1He-gfH?p>Edj)iVt5Y3W2L~UD&>*zH2j!% z&eF$ko~Zbzdei!H*ZXnudea;<<VB|#n)Nq3u-`N|f)$>9K5aTCp5@$~hBtTaZiqKR zSRCR8=hq8=crL$vxoU4N%Y^54Dp@-ME`2`G!lvWNWcT58coOtVV%D;a_YtcS<QjMI z?a#9S`hFZt3(h0aqd6wxXA!@B|AfcN+#XRXM{!b^>tBKGMt0N=rz`K9kP3?^uNR)F z+_@_IRH)45^81H3k!I5=l*Sasmk`|e0C{c}$l&2cVzy`U)7Q9D#mbJZVQ)~%51$5( zVQx<gpH3===+p$!OIwHp+N7U0qTx&~x(igph00aj6?V6r&}$uOY9oWe%<DB<`7V?! zMIR)rcFJIe>GnN1s|DUWjXs2{vUU)Q5T)t>)$}|lVAlOR!Nu(8<PhKwQq{4^T!Mj| zKMbPPS8)oRNmgN75j`WB8`eJz3lC+(Pm`v4LEhUIT$t3TU620CF>ytDE6cek&nm)w zR@z|Fqq9`i!NGj=5mkX)b5?GmDc9NzS@w2jnb#c6<ns-w>lV4Wn8(FJdtdL|T4RxY zeJAnVh7Ck!U7`|1_ku0_u!_0Zd7?G&NVE?>^}#dghb#ay)h>?PTaoD$_5hu=8}u7@ zAsHm)B5LM1qZdp6XV{9DHU5aU5+R6g<JWWWAbP8$$<-tXFNMes8lDIv!03HJZklY< z(c9Z8!b^zTpRex1&FSwkbnjFkr|*O|x-7v|d8WfXI=Lu34|LV12dqNeO`OI@sbKUy zjOmp_gXp__*<>AkU*E~NSmC9hk+F(w82E2*=QD^&sym}3$upG%8y3j0VO@+5y<K+M z-JtPe=wr-Y2)y#X(Z@vM%T!<aKHl=#9yknTsj~Gg@fXi(%%2E?G2Kw%&9EZsM1IjR zvVh?hqV;BH#u6q+RerIWZ*?wOMWYpO?styT&BN*Z%o~zu(XIqmIfgoOaDvr=co?(3 zK@EKk4edprQ1LcVAJ3iod?&aYTB*3o&9^jXUZV2)VVzi;o}P5sm*H!ClGK|8GI)47 zl`aIEPD|okr#L1b1TuK|EaLQL5!r6`r@1q8%+xN*W4g#>&W|`s#YyVgLY~6JAAOok z3f^={VS%1d!LtBQb$-U37vqHOhcTqiXJ6Gq;KArCJjlR(@9C}CQf6y5`V1JBsl76( z72D6t7KF!0JW@&$b6LD4Tt7rVw>kdR^o6Br>xIlEhY{S*w)!%hvbeMTW@0DjoK_kv zwA%#!Q$saXpN>WjU#KSDeTE+FMBC^qsyMk}v$vSvI@ntp#Fp9{eU^IlX6r|tmAWF1 z&^Oqp2z?fzFZvu2VB11?KAptQ?^c?kaSO6DHE4>mF(eyBf{5-hgcGP&2qel57PbXr znn!<$h8+%OUX`#`oI5WaEBAiOz2Azb<D=2%DMt7luyA<Pl?Cx;SVeMST_mhu6IS{< zyUn$S6w!T$_03ns{(STS{OnwrsU#UYk&i5teFv2(1vLl#^4`%G$Z`{Rh`E94<zmDy z0@^H)!NWS`2^;*dvG+>^={E5bp`_#f7&e(hG5Rv0<NnO2lg5}l)E~3<fW>CCL&QcO zc&*bj+UZ%?>50A~eB9J08NCZ--p$H9VrA|sQ9Jk6y?#yN@2>dKSHXhaQysXm6LjfC zKov0@o~GgN=Du9?H9~4K-=>{ADiaIgIzJ!%3VP(C`-m{%jr8YhITxc^^zymray5g* zV@~s;#UvVJbG*C5l&$!0F&p+U_SQ$~56jda77>T*9SmXgYm##jLE7?9M_(rsD`XK{ z>k9~jpnuY*6#a#dzv^bNFmC(^k4s~>L~2<^ph_GRJ*G54^cz0fA>^AY`mKXL(Sphq z{Z7#7m#XzgeETxm_|e}L_78;x(=Q=VW(OuX47a}dD+2TYXn6cI6@?uCO@h{{6Qz=$ zm~QE*!CuOOR4SFNhmS4Y<Q-B25H%eZgtV8R$a7JBMb%`nFODhzQ8Qt`q7Eo(+C|MM zs-}(?kd??H08xXGqwIyoMJhnxqGlB}iyjihSOp+zHp~iZPFQm;YF<%uLpi&8TUZ4k zYA(E3ST7OQf})Nu_5E-i;$wVeEJY+CkcaMml;z?@(*nX1h=h_c;0M!eg-S=Cr`uL` zjRU3q^=7Lh*=PoasP_3KM><7fdB8A4&r$<@L6A*cIKvgrp8=2Eg&BQG(C9P#mcmU4 zNA9mNU-&6W%6+xMpuq6iLZRWGZL|hZcx`^{xf&0LYAQYKQ6`S($5~uKD)q;#jYVwo z<Zg$d)KJfmH>7(#pF=R$6Zp~BNEC$YAwX8%uj0*`7j=e<r|{;?o0k{ULy$KweTm}U zhaa6BU5pE(w61nHoWBQoaquQHa?${w0eyp!lj6}fx*u8%=ck@SL~d*TCceT*??~TB z|HyEfTUi72i*G4Pp*Y+-wU$_eg~8sN)m5W!17A(+q(%_Ifk_LbZ!nmf`Ew$%#3@ax zR$ZJ<pQv4M4K)7(TP)CiAEU6*cfc{IwJcKoB}tWQrOISFQe|ePV%dvSe@#;5lT^D5 zqz5{4!_%Ezza{)zl5jAcq+B|X8R*OrPj^a$mh!wO85{;P?WDm#;0pU@RS^$Kf2=w_ zV0C1W>_x^gz77_yzvQ5MxI7YqKPVbriyQ4bzpeOiOW_|+9c;Qcx)JjDg;4qJ{MmvC ze#v#|8RL?T-vtLZgH#4Ec6<+aHoO-mq$~7iXQZas*fIGSIx2x$OYl>>lD49L)p(fJ zNp$YO+kIR1MF7kIAKfpWbYsYT;#V#HCpzPU%bk^}S=i3n_!8^yZoj+IO<34iS6HH( z@mA|1#%J#9l>()_f)pxGYEMhEurrPI)bidVP7&zO7iXrDx^2yuW>&R5Bhf=3qyBp| zc4E-)%b8TkI(0zV1-Wg(&Qb>+CSEkE%{ex{ySlI)7`hxMQPWkI$0!$B4*KD>kQd$T zDoBA6;YS;Aj0ZOBF#ko)e-bFnzux&zPW%n?w^g)>p`h)F9-&Z{>`Iqx9l4p`lFhKc z+_h-nv~3k2&R`=6Eavl+(hHx#r#3c&S~Mrca~<w!mx5JhOTiIQeI0*|P~W|vg%^HF zv;cEZa)zWLZ;E=UBMH~P85-H)_pC&<vghtUtaOCfy@#&ABkj7n1nzb)<7q5Ssg;)J zw_Kk41{?kf`r1UW;a~bLb4Q_OumQL{Cq{yfDaoUv9rF)wM#`)){=`s+#}StZMe$lD zbuWEtQu%SD#AfzPh%(jv>YqhRv+2v2>FTWDd0PV%{eTA-Tl1N%!9uONy_@!N8XbbB zx~hKU*<EST;DDpLF;(bFon7ehSX4W;7yUq`Us``4LBNiUR%Yq&U9Eh$v4fa1+gerJ zrGD8t+nH~<Yb$N4m2S(d$);c3i`QL8Co6vOX49zJy=SuImtxp!5+S$d23n>5lOzX6 z5}vN=DBadv$=jM6ZR6RRTR77~z!O*PYWmeNGRMw5H}i=~{q}RWQ;#;<4k8Ss(;OkC zWNOEQ`JO=E^umuoC3fwH_vp*}t1>%`TT|Abah@hIl89>0=tt0yMs>4N+VL^`4xf9! zgpS4@$)D08v@POQ%w=odf^nR$$4Nxl-Cjz*dy9WqO;kiS0@N=f8~3P~A8XCdwv?$X zLiv(Orq5%?$Th@ARnBJfrT`OUW|)T=2w1akTYj>ePM4Oc8?CpHr14`AY!=Ai;gtyT z@VWd*pN?(6yQjES*M<t6Q(#`7f(p>)RMK;)S7V9fDw|&#mslsW{+_kFyY?kstZTao zr|H_LMdHKgC#2Vs@MgZzFZuDL1DyheU4(S3f2T($mIi({yn!}wnz)bU@UJ8YZxl#c zIippnQ%eVLc&+gEp%Q`@BQQQEi~Q8RwAy}@jctok^9tz=htiC_y3mP3(BUb-`YPT? zU)n5iBCB7D{sw}4btoTwhBr8{%GsAio6%f#C>Q;N8dbUIM_+(`MwUZnBO3o~D&S|L z$8i^jGx_Qset!C6SdvU*$Nf=Rm3~Gj?tA2xCS4lNRL;*;&+)nL38dO;)>CRL`hb51 zcmY@A=iPe|gZWCY12$l!f<u^#ey)=7X2G@vm%?R(*k4O+b)8JovTIao?9j%nSE)f0 zEGZRtlA9cdgMmzGVx%~n<!<;|dN8YfXMdoql_3Fm5dwjmz<i7$nyQ)pZF8M&h~_!z za2ou&l?fe_Y4zij&n7v3zSf7$Z~^AcMT5PSAV2*<(Lxgt3+mgp;0OivDd<BA(k#M) z`nN5>R=Q}gUqK&MkY)`QG_Y*}L(8JU0R??TL7F94(7bI6_Epe41tGiBHZQWE`Ek&E z1$|sW3oKPNmyh00`)iuo>zv^#_&*v>kPgPB98}6rDCNQ=Xechqkb*v`pb|j?LGff~ zV=gZ_yS!vF4J)6Vui9rIGwS@9*#(Z-uw{%oj}5+PAb!#0kZC=)-2y9HAM{ga&{wC_ z2N$EBu>DEhu6`c^#dR}#X>}7Om$cbk7?XzrHx>wo8}6_(WliDXF(aC-sqEOdP?o;) z3(&QSatvFGRTMLZ#f6Y=_*%+<MQO0HL}lRl84{(fm)CzyNvsSJg_HqpryT_Uk~CI2 zvs%rxOULDFap4xLa8>|Hw@XsGXaE8SnW71bD!P`;N<kzeQZ%2S@q(`{AJ$8aW?l;B zPpziBrG^$)Hfz<UfqFvzji*cf{uN~j?4ickxqlnVgeHl=7R1E)jJEUawv$<F9AUGj zj&?uQW-XhHpXb+m&WAEzMYvJ6Uz1_;H~eTpNncwMZF!i(#p8^-j|}TLc1er(TOw<) zd4lhjwQza|T-$4ZC;08a8^6cZ!iW+hPxuD~|CnGr&-o$WE&A#9EM>LH7NHjN1O(;P z1yRj2s0Djc&a}#S)AG851k(bU^W5>X{0%pv64>E5|28?pH$rgT+oc5adh9bf-?Kz` zm6pXHR4vBnbn0ES6Qm!Umzq9@5MJ_~K9_H=TcHlZKT`U>Ty6jGPdK7K^V6RnM*L<g zyD;g>VthtA{{=7$Cseqa8BDX?d5~KVWdR%vFdRLYs}<`RHN`c=2;5~JXLF3@D(*G? zD@kQwukBPnG>O8^e8T7yC5t$ifkPQ;c$nCmKAZA!F~(b{X7o4Wadp?5#A9ax=h}RR z<XiAI{!UQiAN(|xzzhGWsG_Ut30+l9?xC@2yHgqFj7hA}7%FF*+OKX?Th8!pqV_u+ z8ptc;juOM3Q4*LC7!0c47_Tz=;d@BPL6h6{VYGOczM1e2p<|KqJkr=UDsuohKLMBn zzy%4w8~`p%0OkO2Q35arfM+HEa{zc&0x$=FXD0x20EiNRIRIRd0L%g4ISIfV0O|?A z9PpQP!4cn{yU=>VZ|Sn!P4PKwJnUYRu_pQ#Z4-V-6bSF(w|W5qpCTZ<j?NI?rGQeC zJ(+1U0XvymGE=NH-tbN$Y|WY7xp@h>m$<>-A>z?);fc19L1~+Z0Vw<+k*5$vshQD4 zJo`2WTJ;Lb>d!1lpx#E|a;q*2*yAH#Y}L0SRr;t*tAKtR9ldRa{bTVh^`BLBt%%hj zuH7?Nc)IHKan;M8VW4(33SR=$s#z*baYAHAh2hlnoWgXJ+ZGXOL;lQ23$ZOLESp0- z=Ib%>@<zPS$~vcvkh2tiL}bG{L!sER<_e7P)0)((?*ZmQKE@~3rCf6v+1oMQ!p0tR zN+9u(lmS7ag^e8)!gs5e72g&v+n6U8dRc394lNmn6s@SGLgj?HxoJ0gTw~TZl$%Q$ zGncES7k-SoI?b(6$#W}Z3=hJOs>NJeaw5YurCt?iUJP$|)B5G972|2GRkWz|QsUI$ zMPu%HUU)Znm<Kt$w#M`TBs|c@oXbG6`aPoP%vU8~zKhV@0k2<bxr#5_xfv7HxKYB` zm0_&VL91Qc-0e`#<^U!jE+uPi!tP>OD+TQEw<QdYuW9^`O*bm8H?7}z2~E<Rt+mis z)}!@bp$_p_b1s!S$m)1G(Q8M=bYNbn4qPeBXclPoEwt;?s(RAHTiM%+l`whJ`nC1K z_3G1-pVt5}`DqRSFGv990B~&rFb9AaCIE8)cu@i{2Y?qR0COPMg48;?Df&uFt}QaT z=C{{vy^T#$IVr-yae3m70*PC`(#=#$lB%81b(zz=*^7ZRS%7UVyS1awR`znKWxEbv z4ztC`SfzFZl}P$&mq_9)L$=BzK8{%zB@yElJ#|YpIN2oK(nQun>Hsq>w6XZsQYO=v z@Ougk!f)x54ZovL_-%eUsp=eNf@*Gr2Hv!Ot4reiTMM47#Hh1yw!UQOU>zGjuH}2M z@y^wxtDWi1d_CzLuE<z)yzrZ3hEd05#yYO`@J*JTep|fcD9@0gCAos*=U6irdT(04 zF+W3ZA6gqTvq1`GmfrL<%5#X7XERZ2Yi7674vW*u&Dd9oy=nbA_7!EtzFUA8`<es5 zbpmkgzA1+n{+NoIo%dwQaj2C;0oYiI&6g`G<E6eXVJ|0QmZ4QaKos!s&srrK3d(0s z^atg&+-nl2vGXz62qm(x@_v<q>5wahIRIRr0L%g4l?lKc0A7^<%mLtr1YiyTHzojc z0Jtdum;=D86M#7Yye0vd1Hfw&fH?rXE&-SWz{><U5GuSB2V^rp$8qJYjd-D^*E}3* z-|($)+<2VE_|4g8u9vOJRtTm3r$jX@kvMyB>aDW289~%~eNqN<0C+<JFb9B}6M#7Y zyfFco1Hdf_z#IT>O#tQq@TLS{4ghaX0OkPjmIPo9jQUznRRQ0c1egQB)&yV<0B=hG z<^b^a1Yi#6C#GVl&mk>FAJ&Gx*k?Nn$;WN*;KciDV7Kt!^f2GHza?A!ZWGSMZkZPz zPNy{3$;QPjO+^iPFsZOg=1o8Py_%_qE%Pp<hmb;v<2?rNL)LgemKA#|2m8_gD(<Sl zefM&H=W_;TEgZzr9oR*2flPt9HS^YF3gYtfrd8ICc?b%hPlh(0`Szy5VOH+3a2KY* zOuh4-zbJNd^;pRBABCE`V9$Bj3dwUGAdsE%c&f+*cQ8FRInT5A2|=RcPTW!u@-ztB zFURr`@52<hPv0$+yBh}6+4kjvk9O|Dbe9Xdy{2QSWoz9YOxp3zq#exx;I0H<4ghy2 z0CNENU;;1)fO`^vIRJbp0hj{-yK$VnFb9B-Bmi>&z+~uRm;=B^6M#7Yd@KQ&1Hi`< zfH?qsA_15Kz$X)cIRJbr0hj~8rxSoV0DL9^m;=CP6M#7Yd@cc)1Hk7KfH?sCPXaIp zfG;Efa{%~a0x$=FFC_qT0QhnOFb9CIBmi>&_-X<$2Y|070CNDiF9DbXz}FLiIRJbk z0hj{-nwDz@a{#zM0hj~8Hxqz40DM3IzTZj$%mLur3BVk(Rn_3@Bh)WKo)?nor2f1M znEmr&P@yR_@f5feJ{^8%oIg$`q?KOd5Ow}%$)hpfOYIJxBZa4Z_o-jsC{$lXVEc^* zQQ3MIJ-0J`)K0HET92~yXRS^QL5;@{O7ZojzROI4+_HX-OKN#9Bkj?o?Kmcs?#Mgc zIE=z7b9a=-(kv&<F{Cj&M+3{WtX<#1%-NeQ*(0_nMOTnV;BGleOaXQ_s`(uerok&o zh312D`ppMK*hg`ESN>^5@T0AWQ*T;9U8jMR#GRe;BVG@3?{clAJRHkn3=;;DSswOl z`{8+Ohu4Jk+MNQzjk5hIrVSQybhN`$M2nCfr}ftj>_+mM-y;Sh^(tz_b?o8u`7X<j zzt#`A;IUA@o_4B#fnCoLS2`Bzua@^_e$4y-vGyhab`@3r|Lc42TYE{r?#_Fi&ho;N z<kIhThoo7OumuDJL?H;8fXJeV;BxW3L?LZA0R<ETsNjZxiUt(-amQuc_tCgJDv@y; z*Krv~f8)%=|L1$E?t8C02|B<3FVOGSt*U$KRMn|dr%s(Z<?J9}8=1!nZgM%_uE(SZ zj;~-T*Sv?Ui<93l(XwSM&udpJ-qk#32eA4I8-7m(^Xn1H{CCw`Fa_)39^k%8?U1|6 zeF^>{Svy&zY}9J2@5V?i86=j&$HE`m$>D*@@Phht%LC;FcXHt^W}YevTZ+hBrB$c; zxy&JF_foPWak7sdoh<p#qN&5nISdZ)RmnbKIbT`36vbB*(?<2xLwuXx`9`ox0fd-v zU>8DZsK^$S7nBE3kzG$rG2kOLChE4u&3mc8(UEJBE|2*Iu3t*7AfKJXt|nI!bcaJ4 z8!E$v`bzgw))ur5g|Ig;3(;8rBzV~<m67wbZ{U*MN$4;6;}Sq93W5$il$p$YU_OK* z5HMW!2O@MtWi1fS5K==j$x+A^_!vT=9n@}|=bkY~QR)fD_e#Tq^_bg^v4O;r#U)~G zeZ450=L_0MW4Tx&ALfdsiLbH~H@LU*8`d)J5Q{r-CE#bP&<^l2z{?IeI(sEzRPBKG z&IexZ058u4Zb!kbPIeSrM4miebz*EdJM6#o9Jx9efCe)`=83_PJ6%{huZM|yoao!e z3(~<VHs;P@2sQuI>D|ZhzVmvmW$uHi#ka8r+@7<OghM^a1ss5AjI^FXfqi&Lzk$5T z(|IY3dq4q~1aytE+}zg^ujb*(23>zK-i2sC(PtkNZOfqF2AU5C(_$mVp(w!)wAA3H zaPBu$*;>*UlgkJ(I=1p)JWlHoZ{rvL$x-H7HfGPVu`GwDz3VREJ#RiwB|E<yUbv!f z{i#Im9iGJyB-${`Xs<18VP0BVVd7yW#we7q&M{VfScex!eOM<J7x}PG+Kr`oFu`B! z!#Wta#D{fMZ>bOK2;MRu))7bCO1Z)=y^NQVf6-Aqe2lpioxQ8|`4=6wtM&UAovy15 z_!k|St1a*^I$MXwD+fS_;_zzaUUYh{HsoI(rI%s<@&dh#_!pfvt1a{|I#XFoTSbR2 zYiYCS+*~bf7oC=?r46IQakaE%bd;=?HqBPm)V0mt;T`G%-xCE)8W+>@>p2IMDW1Zn zj(JNwnCJ2QozLHM`MaGz$R~rupTW10-CvATRT<uzqln9SzKFlK@W*CK=2!gn!QdzO zJBz<(^2g#U^A`RPhcXZI_n-U~D7DJpy2JPh;^&I2pqSgWcDSCGWDP&-`r3(UnvI1+ zl=eHIxDV%~txy^=$^Oz-EA4~rw040zh)*^tkp)?%9etf*SV4ATW)<_i?wD&8bJ+nv zo~Ojq+KDNiS1_KPIpiv3ShY_EtK=4?_3o4Q0zQ6b3*Ql?<QV1n1r0v88M<;DryQT# zCr1Z?6O`e;N62uZGTg9FhNh}u`{YL}!&4t2!;#8>u3{dR9SEl=!@-Y`;Ze%avrmSu zdahTFA3~n{qofO!_{nyn?}Y?eJeORgwEO0##hnJKE5i+skl`>g)Gwdg1J-{}QNrW) zlQ5-(BimFqqt}(~*XQdMRhC9XH^C%l5#f#-Zn*O=*eI6r4c=)LT@ZZY66y|?dH$XS zyVVV4CBpirH7EP~nX}>3CUi3CYWf+SVztZwW4$@z+}ig_e<xYQ<V}Cx?<aef6dN4S zv65H`J6Q!+S_R9+fgfh<${Lg^LK(mF{CeA$N@lsgBS!YG7%td-dcO3@_O!SY9_59e z{Y{Gwuyd(%0l?F1ZkMLl+*-lrf(J8x^(x!h+y#qFP@4Gu+;(zn<VR-?yUI1s#~d=X z;uIQ4;U8MxCt9Mg8aKA&s%+E$_<{1<T4rv3i9pPe+04Dvo0EKHlk$DrS39-e`^dF- zwe71vw%fTq9dDO-U{6ruzTVlV`3Ce?gh-_D=NeoLyEO7b=lWI)1@DULt@B(_`E#7d zWwyN1wU6-s2>71^{=OexM|UTWwti4=vB=qSibzj?T0YgE;WC;G>FLF-U#vMR$?2W8 zt=dak#by2yqVDfK&RYL?oWHkcO~-v!Dp@_8wm_GI;x5U`)8oaN@tZsK`Vq)J-eecm zqpvVJ*;iP0%&UoA_a=UZGL`tzEJV^V@=QNQ@-}#uO|Hu4om6-H<&Q|doDpy$T>Jtm z&M5%z>j{(oy$i2nc$RbZ1w=lNDweYsw^SzfQAWKxyR|%M+)NZSIF@ZZt^U1_i~=$% zcA){?bM-y0{#viEqLSxQ|Jnc2ijGsL7=V=6v#&he*T-MLvD0MJwubK{T#7CuC%*5n zSiz=1u(0sVV0%_>9gOh^>*E=v8DI|T9U_C08lS}1LLRc6Sk8-mhdFHK3Ht6JVp#v3 zL)q2jU|w>~iwV~T{mZj?8S~*;!lOQX_i1F>=wEh{u*`>b<7I8Rf4Pf<+O_UwhpH=; zMh0QXl<gMar0;)|Fp-PTV~IcR-Yi+s%KukAKgKfW9{O=cZ(J_GFWboA%OwPa{pwsf zjOJM`pd$z~PvnUK3~O?I;eL}t`HaQ*3RQi72`de(K8Say;qr|E26DS}_UuLs4c!Cj zbQzWSr5ar0a?9?5X-ec?-`}N^?NV%D7a{C}Fx!x!+-N1fLvVz9Pi8r|v)_Ooz#sV- z$tBl76K+|7F`-^iUMlYz@@}S{-Fc_G^XdgUhVE4#hR`Z1snbzT_j4vs_SWWn|Ge(+ z^`aY#r7OJ=9Otl~B45`BLT6_hCb0vZs-}+*le_o==ZcPQ#oN9fA?k|$4uwXC2g`%u zj8e;kmZ?jB?PDtO?SLo+{<Uhay{;)X+(_|`3{q7^<GGk$o>(xKe6@}7Yxs6zZDEDI z50_b|p2}dyZV%fw;{-!+g0gXf+D69-Ob*UA8U^$JH#|HvY(DTXNgOuEc+PyV(O2*X zY$Q<@pk7f;d2nxTg~r}tG(>zoZPQrNd=o>#CR<;HE)@fNaD46KlXDpc{l(-nG&pC` zC$QH;kW{cShzbNlZCf9*T+EKA&0(v?*6RThzl0wS%>?ny3M7Z{o0aEUy>_AMBGT{U zmyw!Cf}a=va>Yw}M`40&Bp|hGjRm@OLWmesoc<J+BEuu)5hf(bL5M)IL(cq`zpwSs zHOx?#@%J|V)}dxbSQMb3HW<aPAkcv~w{+L%R)rMN;#Lf(g7{T@weF@aNX!3jNNMY9 zNNoelK&N;bI(@ztgGgD9=F=>)HId?G{nB<xCdSz$>`--cZMlG(kFN1+9BAFYs_L$$ z9wJv5?5DbpC>IVbH2NExDiRWTVm!0{jlf9Jc@T8gv$9Vkc4G$OcAMSl%ni?N7ub>6 z(vM#N5lV%Wj6;&cmHK44lGGLC;@6}>U?;+OkDc!wW@}viV}c#0UnSI$+vdeDJX96} z6`Yz>oM2i^%y8&BkZWMM;rc<%=t;2L*XiDM--IH3lkD619@U}#p#j@dFZZvPIN%3I zzl{rN@QmCRZDbLY!YU6`9OE=uvHqL`7BROw_Df%<3hJw=ejP?PpWf@0=5bg0VO*Ru zfOo3FG(*5p-JJit@c8#Re=d{oqHG9b84uZqi!RdKEgtwsYH)$(CM(CJR9g&3?r^;A zNUgh{Om0((^RwE9+rWte%IcvkI|NyRRH_h76c-)QOiXeeXsBczeC$_p{7POY@S@$T z=Rhv$=h?QE?j^tWXR!<8H!sTq%|iIx(@D-onS=cb7;)Ib%^_?$K6jwBU`lW&J8gKJ zJU5g&OP4VIh={|}L&b^su8o#tKJ+ao7aiqbR$Z!_lU_wdpG5mC$T)VbBQ3pQA7YGg z@7|%%aqnV%fH;Y9g^P^XFk&}x&q;RHHhw^1jti7<Y-%Ipo}-<98p!);AP=ORK^pat zbaYc-MuAdDhoxZH*_lZGJ~J1BW2HnVFJ^vKRflUEIT<BGCET0Zp&xX}c7Uii-&Z&# zre1Iq`&+>C5dM1obNK(~v+BQ3pBS1L{PdZ|Yp+J-c0U!?Uyi@}LAmP1<CrV(vy4Bz zjPW<>!@M`INrysy=Vz!**mcr|n;|D)Dl;Z@xeaOrxt>(;vj7o68exHVxQ(hgl2XU5 zG?$b>lvr@Sj)%m;f%Ibw5V0VQumBN*X@mucD5nt?AYv$uumBOmX@mucz>v}js}>+) zVH#lp`NRGO?e%1h<LCF2X41ii4-gkrOxZM}SPWM|8xgz`Ptq{V$Zj&W#C0!L?sykD z5{>%4`sD@Nhi1rYNKTyL2DFYxqvMm{68Uox5fsY~5Rp*q0FU;d7sa}B&rBo@#{Qo) zm<PJct#cmT*!s)5m!rNKzlQCn_oAPXX?@g<)6de)zeNPW(nGU8c1B|VcEl&XPyN#! z@n-eZgXTGeEtapQ<id6^pLVlP7qObEkN+tpg1@YQ(Q4z79XZZGA|ofyz=(N<Gn6X! zPSD%^b~T#}_V)J7aDvh7i>o|!`VJ*|sr6wnXkPscl=i#%X{{k{Mj3E(q3l1y6^618 zBDZG;qSl*eq8Y`w_~d@x2cpT|=E=|GYj`ym3)mOB=ghwBZGNniG-BT(k7qMqrbjOl zO@th#9mvJ+2NBj9LcW3PF+CHGb>ymR6MUhlk1yva(0v5(#vzpQ%?;1WTvg9DFXhq8 zg=+cc0NV?Zn{Gc3DtM&0ku<ouTs6g?qw_g!v2Btznds&8Z#Eylh7xe=tJ11@GJc5n zs8I<UI_5L2R!y#_O=03B;MPcZaC4gy!dz>WPKdnQ(v`vqb$^jFR`YAsSE+!{S%mn# z>TB`sT;>_@#EYqW)V$_&--nUi-9`fl^z;uoM3S@loSh;#6SkS|mU4E&^g23qM&4%m z(W&wLR*qr>92QGHAnXc}nH<*TZunzFgoTlj_<NMSay)GAq&ZB)c1G{<r80VVAgdcc zs4*7CUnK7cr^Hpx*wk@dSFtyjuzTtpW8(MO<#fq*Y^Ez`zfW~YE}ojqZ{=_Yj+xm~ zOup;UJQP8oj&rCec}RG2`kaH#hN%0jismZ{^Cr-e^e?^+KiO{`n#VueSIuGGbuqG4 z^2z=V*mm=>y+^6q_bp_8K+P|qKjatdVq9iAzgTe6k5MMu%Of=5X9=dAaUAyo<ehX7 z|B(2JMy_#aZu+APT0Dt2f0d$=bF^stXodw_t$SMe#=?BUaX@qP97ZGYLxA9n0z*tC zjl`eUd$xg3augwKx49ZEW|aNq(dnVV0+0^t4@Pn$p<VDCCQMA6^8X;;!ox!3y`K_P zfx%w<51O6{kENMA-<3IxHAoNRb1|eg(H8`*(-8G%^ycF5NIJblX|j_1I8a&<gg&Dv zm!LJV`1<KQIah;Cf?CaZQPf!EM&Ry8(c#8=rt)FT^pzWL-LIWEDEUL6nooA|R_a!Q zYIu0ra3VA4?>dkiD7&P2<#<@;B`>8_j<T6+nOt>CwVI$D#A!#~oaY^&FehV`Giy#t zbx(!N&5X@Up@nQ?C~HG(=@i?}+4z&R1Dl*06)b7DoKglSt>Yvwz-nzR*UPti2(R>i z$N1;_dFoH=z4R~5v+kEfI_@eyIFOG&r;>b3ekA^qdv&AB1}{hZ{>fpp1Z?cGZ;U8+ z!Q~sPqRuhr$+2iRQj}W(P4;ISrL2*tR20$fgXu!wJ-HYex<rw={eU;qkluikme-Lf zEjrr$U<!FEHyguj`TUVlY$4Oog3Tu;I;W;~bYm1ic*%8)Nc6tpRromwo9`i;i*~Z^ zqiLq6XpCB?*ga|z!z3ma_|twj#|zqGV|}!lzbbRpc=Ig#eS!V{S-<Z38?%pT@&Ow} z<q>YQj-pci@&O#N4MfQht=lO1K&gH<`hjf1YL#WMdzR|Qh7J6qO9jDES$mf1v7Z=h z)F<zxN-KIBQNC1P5SoU9<EHkMJA2A6WiWfpTt@kxTL$5RU_q#fNpyhIk4*e|VG`uW zIf(OR1+k%sKc&8Rv^k6s3ACt&5G}3(-f{l<UY<j|uREBZN?+F4X#W6PGXr_dMkupL zNjbR(e;9znQNiu6mm?+QjNOiBx1L6m4rl!c+xTq=yo=2@zY(Pq!uk)B)SeU6yH)NC zY%YGzfjS!kFC$Tmj6m^XczDutGfJ7tx!EE=kl&!)+#oFHaf0zp<tmkn>!k?K!5*78 z0o{@1d`6o!4=Ks(A<W7ea$edza89{HNpPFtavs+@P)__ueNR&t;4)helqo2ez*Y@t zQyISWPV?Vwdln-`jy)QqxcIn*Ug;SgU}0V^-CG_=rX()-oawm*mhzUmAbF<-Sh=(f z%c7vsUoLG`ASomJ5sQh<VF91oyjmQ{Z?%cF2o`xiv$pY(vWC_@m9J4hgylXV`hC$; z*nDnUrwC&E3~{zvNr#}#lb40uM+?0U6!8vI7}=DP#aYC6kp)7zOtve>A5A=7mQDow z+Mye@pFSs-8I?GBV*StQ(>df*D^9L(@N2!S8=Gfc?VH@bayuxVYlsWZmq4hUNiv1? zHv!orIt83B9SF_<m-v~$_YMXw(o_t)+T;b&le+}cMQe|8Z;QHT-sYRG@%R-63TK-z z=h{ya=7`Ca)$wZYx`p(6uKCu^xRJi9U2)aK7;gUnGqcWi!}fHxn;taBNW;C@3|&rp zPCR8GOAgLXTaG?*WRu@e)^Pt&zss?1AV-eQIcdqa6^)?<LknCEY|cy``WE75eG#!w z2XcK702atomIAU5TmM6vk@XU*|5t0t;XXtvmaCg=as=c%oZqu}xDYn~n6`vd0F`m9 zBJN(!PgKL^+1q_HxkN`^zLk&fYUQ!Dhr742Ij#JT_UGmN{PxAI#%g@{pwd<Q92z!% zmS!eS8h5U2(xZ#6v4z`&g<akRy-mIws=f7Qu3Ofv`-A~F{r+gJ>%;ZA=98vVp4d3d ze+aKTJ9{?lHa}22+a~m3WD29tfkL^6gNh1U4tQ!3-yA#UJOBOHzv?)w$wE*^Fgg}2 z&Wm5Lb~u^%24gU*)_f*q83S~SMc10yZCVgu-L))iez~1t-$Bj&f=<Gm=<A+tZEnhC zz7AbNXytU~=?Fm*P2w*=NWBBu4L2G2=9xvlK}>&P{p-PRz_{}T*Lvi#e~UXGzT?0- z=W^%X>kgDNpXiX>#G&~_XWGQ1zxN1v?Y!GyPz)JZEIw_0gan?xf0w$fEUbr%VKb(@ zjip5-Ndg=q({!QZoAFZ_2>t7>vrKl74nNb%Q%sH&nH{Au5fwSOl&ppwmZSdqW{0Jl z3b0{oRLfaE6`*97%fg(S30%H(BH-Y%((-N|C~o^A{oCj(+EKP-55oI+u~c8l4xFt3 zivwA=1T2Ur*cz}?OJt85LoF?&mFN-=OHQs@isrRyy4O!pEe3xXHWNhSICr43C45F4 z^8g8Kx(q~ZVUpm-h-+Lr5ShH7w2v!dW3=rxkZl9kHm1OcjJIK5%>eD+^R#@znj>eb zvG|+RqA{4}i;t%5`uCiShc5dt8~@2ZnUWI1=|Xn%LI0kEA>DT^Y!8Cxg5*Hf2Ds-s z(KrrjCFe_<_x#somb-D(n<+xLSBSn5x&SJfOA?nHt;JuZ`{jBzYOIgkN^MPXVhpOT zgvlR84eaFok|zwcMh&<aX8;k&G{m-;L%v!Pq)`PF98q5LQ%}xGI#IsCvNw0ki$ID= zIEufn@@7()ERmN1HB1&L`l+5do<4^;9^;wgK-N}&^s|<K&6BV9P2rA<xbr0Q`J@Ak z+lifb(K+VFv^t&_zY%}gNxNLBerJ9k$XCv>xxQ36#~*z`u}fj%Q<xw8kT&34FN!DC z-I!?dFrhHXgE~$O{WS4CripkRUD}%;ojgA`IvF7y0@2#?i~$UPyIOP8K&g5Tb7*7D zKrv{~rCN!D5Bzib)1tp2LXNG-ub%BS3P-8%CJ=m1osbsW_5jccdNjT-G}ePgbt;di ziz%{zx@`n-&y~;g17+HvO!3#${wJnc*ejTyWz@1vEX&2m(jbs|*5-#W`ENBx0%B5x zQwN3%bBCI1Q~mILt5rPPB~Fe+0rd(KIgf;DOzE(x!gws0?{2i9?9-cy?4&v5aD*p^ zIdkO$DKSLZ{mLV*Hi?NlWT``Qdlqpt>M!l@Ov=i+>09*S#u0kEi!zHej?%pv*%62h zqSwN9UK=mi*zVit*~oc?uqH>-JHI)7i?8)9-l3m%pZEqJ#Im8QiE%XMI-VixeLY1P zmX(=jf=`ruNHoEGaOw+EKH(fPcGNPF(Ntqewt5cA3$o+MM69$?Kno`Z3fDw$1;=b0 z8#y1&10MN@AeZXYN|$O!Ch>*hzs=jXz1hk+d3OvrvN?)%cv=o(_njTA#FD!NTaCvk z^Fr!z6aDUSbl>g)r@tQ~YNNG*)kdne5*X!dl>iJaX*@;-HEixZAVwj6DW3#B`seBJ z#4b8qw06q9&6SLsFKoAar-mJ|I7){V2VtV*hqM8H<Nj~Tx$l2d&ciB4<LYz-@@I)| zZE=Ov6ozv3s<jpJ4Li2*_I$h>nhqiY-y#5iX1ModlW)^@6R?GBqI15E|9yv0Hu(wQ zUCKAxDL*C7sSj36lvnbRGL59eyx)P_rUkeBd<?pGn^0|@9FFiY6&dT*Dss%(wn^{7 z)=H+_TkAgtrDA5Cej?*TIx<olo7C^(silY(??w!%MhRPJIv<i3f5K%7u6j=)%M#1D zw4HHue;Jnq$onR7I`n+arH&fT?O8coh?+m>bi)z~@;UCOuyiFrLt5R7-73_+s7vKj zY%DIiiFY_Cl3R`F^rV~y8PoTQ>9nBJnGP56T*VIl1ypm-nZu<Zj|1Y!CdkO<M|?h; zezZ4;ss+=J)=`e`IY=(KmPE~8-JtCQ&295FQ%Ktk>s6#|*p7CJ*8x$3!}y<5+W0mB zn@4pHBa``7=BiVAR*Fw5{NG>esVgj+TLH~I8=7;1u?dr<l-9zO)<UB-$V4Kg(H4iA z+T?=YU*{dHbqsTrR%l^zEFt!F@xAOQ6hn<DIgZHO#$j*>qI{vN#T(D^#Kh^O#gmtn z`)UJIi}~PqK3K`~1i{Uw#newOG!_@qJ}J-xLd*9_p}tUkq8P)_cSivS(1iqTL}_I` z`%o1W9+HN1xX7|AIhe+zi^A+sX&T*VWM`7*be30UpG#-4LX$Qd(M%5Z8f%KIa@}Xc z1FTk22$jkMZ0Ge`y0-HMqUI?#X09q1-Ry<;T$eva=qjn#AKF0|xjt=N>stba%jjf( zdBNhzr<E7f1||=#pVa!87QnsKq}SDi^HaUn(&b*L=J>7#Q%hIY^tPL>4qfF$S9gQR z0q82Xev{}4lLHzsY*ufAReE{~W6_h2_4s-B*_jvpDT4!X(NI3KmUzhn=nLJluM}{u zw_5<nrNo|Y1{kqt0GQ6>#bPE-Y4RR=CNVzvMM$O12erDG#|OjYFm(d^OGnX%=qC5! ziyiLQrrku`Zy%ngUE1YnIN)p|Abr=(6dD)!j=?Tx@#N#nMMyNO!Ft+!2GK=~ImaLr zvk!w{mnqjKNF5+~=q7%K^Ef6qdMv;)h6)Fu$GmG#(W7G?Sd<t!t}REyCI1-;nv$c( zUg)v34?W`7Ov;d<$meg<;~v<-`agFwmu_On8!?EvxW2nOGyU%wZatAsppbbleRq|~ zI+|e7rqgLs4_qN~x{l837AyY#iTl`>Jo3bC@;Cl6Ak)@Hh##*GPK6<hF+V>QXx|(7 zE9YwclNZ%5=~4i)$G8dt5~BB}C3S0s9IWcp7}sl$j6~TH+Zn-TnI&~{BIVUr=Zo$L zsC!*r?W-f_iH*B&=d<y`1Uq;tbHllq;1n2iVbsOM@!N+CEPVc$;?v!5F4?&Tl`pXh zu1Ik0;WS|qUUsghKeS9g$yg_w3GAB;pyqZgT?%i<(=DXYjfG;mMa-p$rOLQ|N5+p@ zkcl4!4D(!1pX=<g>`tDe@oDGoxpo_4P@QBuS^3OM0UCch$6v@`u9j(%7be)cg+7## z0Bdgw#1BuG)a}J-mZqmTld9RJw(W<<vY)9_PXYE0MOpkTt5WA-^k0>DsuC4t@iB60 z9YIqB=r`0GkD4PJ9=Si+@OGgm3Uyz?%Ooh+w!BlCiY?~jJrszp+MI{avgCGX{9I@} zT4*TB;%AqqiN8?dX-ZU-#m5k0y}xxjk!*J)XXrV)?khAbuE|>~WoL_iygZsbhLjmK zaB=pa6y7fd?@Yl{l*N||)(gXnh8DSQ__=248)Zm1HZ*2EsDp})v7#nImv`~d;`p&Z zNgl@!e(55gketPPu5ofMIhz2w(gkJQPp^`V>?R^aZ!x^8ZpN6)7+)#CB|}RLU?Uur zx6a4w>rpdW*|1V}W_{&RY!OFc?HtD$h>FR%<Pg`Xo2F?PZIO{_mZ{RDT!^!1WXdSB zCR)1g&3s&5YRv+pD_LcY(WxeEB={&Eig4<Tg-nxL)t8GLdzL<99lNTCskTzvfMtEA z+_(NL9-bZ%{57*mk>Cs&+1j$LzR{`YmHW-cf$fqMrs-W|>$tv8kT|?-Yc1@g2PjTU zw&8NQoFHeFhL_cc%gd4{C^%FeED!m4e3`TC`N>1fcbW3CZR}3;4A;svTC3(-%OkLO z<C~SE-)%|_&%*($-u1L*rabI7V9F!u2F!4I#5Q1t7j_c+I*ENQv4Wu}i>lJ_^7<j= z<%Z|38R1ebFC41I=h31(p1>p7LN>CPMbbC-EG#c~NFP)_2&514NH2Are<o82oxhZn zr7k7ld^A#`)-Jf5hn%$qSG0+xTpT~~sdNSPIF$DM7oJ&O`grP};`6l6Aw0)<;*rk& zDgK?jAI|fK^Wr%ylCeEOcu@*RbJhLig^>5B$5^!1>oFE}%Yn`8t)54qV`Hb?>+d@Y zNV80Gh6>3V&3}G|>sFB*0Q4n)12h}8!g()k(t@8F>nK%vodT?DmeVQ>MYYXx$GnNa zI@u*VZIG?Hm>BP;#S3=z$%=`7?09yy-}{T}Wg%De`m|!;?nUY7(}<AnsAzg2Y>Z@! zf-Mb4pcRebj5%C)rYO~HXErT#X%mWO8#{67flI-HeJNw!EK^1>)B(IkqnGis^+hUB zF&-P4uGr3PHV1=Co(P4m`#kl?nq0UJYZ!u>Z6^+d(|$T?ETw@lr`hz1&3{Zg3SFV5 zn0=-RHw*u>X=9dUoB7*3%@mk5IR4YU>ErOLFK3@;N!FwV*PrvHh5Q5^E&Mn1F_s_& zn}=UZwYEYFS?%U4b==%?=A!9OvYsem-(n{I8X7VUK~y$TeL2r#_&b@u`eVH0gTBfM zDvKw7BXwmAxRv#(Fu_$H0b(eW0Cz?Lhrno<G%SEc!Gr~J&YZ!4K@H0P?tX;tQIN(N zwhhyt0W)d9lC)LaY}-X0QSugOs&S-y+B|#f6_qs=IVaYBkBdjO{sXe1HB#;on?Oo+ zbY`X+Yk1XIrCT*N$ui-sWXAur<#Ly3)t9+gRHp3$lq)U3^mS*vbdGG$g{@pG<Kx#P zCatGAv76aOpGa7+sf)F!$~=&;!>yGh&mNr4?Z4v92|J3i_}N3!#9u4XgdIg$yc2fj zuGrm@8xhzqS(vc9R5Y&>bI7Bj(Gi4o;ObR0ZnM|nQ#9tFrThk2I6UIun8P5y@G{>} zSf~8W!EtcZ85}<U`~l)t#S__wejzkaP(_H@KcX2P`YsW$2yq>5JTz-QF@!Eo<x_cd z>#()FOH;CQxK-5QR^76{vghKTP$rD1oD~jX{1slYSL;G(&lxfs$riht1N~H6$>Y=p zw(hmX!6WH-SR8m2&jyCO76)39n;DX=$QcEBKW~c6(#5&XH|yUA`8$Sw{dfKtwL0%? zx}L`prqhwz-wyhX<AW@VnUr;wTr8VUD4M@OOYS+eH``qBa^Ihx*GW<B*Nu*M3BFqg z7Bb7@%(Aqs7g09H(AcwEzk?v#5u0Jk!`XEbx3G2I!kg9%=kx64c>zx@K+G4a8>KbO zn`=2U`)A58O)SkOvdOlKoGe0WNfd`YB-Zm-0w~a5kkD-BY-NJP1f5y;K7NYT$*4Fw zh5BPUt&VdU)-{gve#XnQbvciY@@`+II8^Lfuh_nfTeLLJ%{zPTGxH{9hG@6kp1^g8 z2oA6ZD&?d}p!MYrp|2efp*@E)t%h0e+pJr27&)TqWAV=-Man3rO`%nvL@RE%N8*;< z$$*N>dx9B1@dz4%e@F8d(ZHe)$x7-kO%Q|pu?LyChChiA`gdp4I5^v=Ws%gRiNyHD z+v3*xCOabj_?<!g0g#Bal`Az&o&BX%Jaq@4iFn!S=EHxDcWP5$&0u>&#heZDzsbz? zofsZFGgmgD(>0-F@T^JSGg!ay0dA?|-%*ULQvbkHR^14I&T8~@v<x$Pb8+L%eNAj7 zu6a9K?JZtN{mz4fFyFEusI8njC8$FB+Ix-rfW`ud$?siMgHCXpG(ALzW@qMn`w_2i zqxjF{3dKIzF6fTa*wFo1*VCp~GZruu=LRfg!=#3lE?eR5?zYmzV=<7in4DSsttd?# z!)~|5cs+e-;;^hcXIR2w-ee4~vo-6!(nKli&K{N;)tnA@<{CK8%dtzXDrLdl8|w8J z{n0<L!U)$L|3l)=wD@~He-HA<Ze--_^n9EAkD5GdYoA_chcK~_JaVDXqb+?El2ajy zyr?TO?<1Z4p3nJvL9-&>30sf<;(*^p7-Oku+o60vQDnN-7EwJH*+K>J$x7)@OL-2t zoB^3nDJdn|dLm#_i+Nn{<l+}=h4~bYuhStqe|shsJc+&^%D5{Sxa>T#E9}IOeg&OO zu)uFfTpIzgc4P@TiyJm1)~EUC&rj)H{zkKzn>}2Jk4t%M#kgp)=mKL?#Gw`ys`0;f zgFVh=;M!I;Dm{n!4%9yyhtwx7ATeSPH7BXsNdl8!3u8eyqHvq2h-;9h)i<;|$r;zo zdI#PQHJpR!!26*A$TSA=(Ku(f)9-QSbT%%tU1c;zFpKyUOlHv}W~&yW?$vQMHpYI7 ztr4@n0iH_bXl(Wav0oUS8_B)0%o@K^^9Ivm8c}i~>}}yOf1sJ0$KB3J3k=iq&1ph@ z8_0A|wwHPwfH`yV#x%{HX>k1B(%PHC$cs_@WSf0XVclrPt0O$m=5O6i{9yBr48(3i z{8Xt+y)48<3GH(sV`~p}Z)4=e$|RR>eoh6epf3H9ddN1+|Hik6+_CSs80@+A-?PDJ z2-;<s#Q#SP=3yS!h0mh3tKHiok5BVi0(l*Dg6>U>aQ>Rbak|j#89j4zH=cX8M!!Md z$5Hk)ecVlGQ9{=+0QwLYd`mUIke1ff>Ur0C1@S~DFR&=7W)9W-qdj}^<F&vJV}Fm< z(f%H-)%)C^wKUf;EKl}e{nY4<a5i`meTey5u#II&Ph&w8Y*oO_?1<(fL9=7iJ~j&& z--g(b{}+wOOe0~HvGkw3t>i{sj9SI`qxipx5YE~Mej-o(^G$y2oF<=~*W^oI;hVgB zfz#0x%-w2c>z-2n*JV8Re^bUDD?@9Pw=q_quYOboRsVE+(FkmV$*{>d?O#a>lULFd zC>rXQxuroqxmbh6Wh=0G5XO7SHxcaF$bxuG&_cB01%TK*z2`97P$`&V*i#6~XOoL5 zEEg|;u{Z&Si!plPuv!o$mr%&sTe8VJd0GD*8r=oCPn9V_>W=lFB$6$ZOUXFgw@$(y z>b9roEgv8mK9!IO48sMzUe<oadeA4A3#bVPD4tW)KFdhCD8&Crsg2PP{o4DD5K;ht zCcchQ$lTn2Qtl=D<SrL&i&Vl2m`PK%;e4kC?L!mR=QLq%fVmEEzsb`;6^|E}^XQPE z+s8dNQ@`AunF%sq%DnyRo<6E=G6rXcGBflkEYl7iKZbY0GHY6Y0%5fOboL;XUC#{Y zU(0$u$mO(!)Utup0z&c^-%AuWsmY9~FnY?Gh|3-}qn;}xdDn;2|EOhsZ!nNQ+uGbr zfR(UGQOtP%K_jgH0Jyq$?wV{j^N6g|9Np-1H8GqrwC{XAHLzwl;wD<zZRkJ)HmT>{ zS6k;MGwl#R4PI50*@UeZFs5?OscpRwrRxQEr7b34Q-`KZ>)LcIQKj}g;(0!XQ(Qng zkZ<#lT;}Q2Wmf#k$%yHY(abL2Eha^bbWi7Q&StIBW4<YnFWK^Od<PWih`I7-gL7+s z2`#x3`J!Mv(((T69NxdKixG{j^|MSm7d3}o+2;NGuzfQvp2P6P>r@uPmGQ{b7VX>6 zgBMO@X&pbGg<v}OJaYL@f28tdeLlDR)R1fb6MRDO(&VpytX(~qvaxC=!6F?fr=4PC z(?femda%Y!G2XvEHk~aWNHKQCYWtruqc9u9zoo>4@dO9m#}uxk=S|@Tukt<dNN^9t z3g{T^wI9uBy%xHQ%<@)y<B^En_Qt7tzKfsdHL1Zu@+on$$DTv``wy@*$JYBR!$?&u z|2Vj@?iN}V8;K|AEt^e#My*y%6j#dW>+h&0+KqB{q-?f;*5qs`l4Kllxq?2;m?0|< z_L-bTk@(-9ahNhDFwV3hodx_ZHYgUmW`RAJir_*u`hlFYifLXhrn#_Oa61g_zr#Jf zr?oJ750$~w)!$^Jc|Vi)pxDG}Fth1hnQ^!Fy(lyD11*E0sm!L#>woXI6tr%;oH(r! zY1c=bC)KW0Li46;*UBw#MD&OY#ADX<H*rg)4E66HDHDZBd4SuYI9ayYAnA^R-aImL z;f{OkB7)r7-@AUS^sl2kGx=Qcp8Ty>M9I^cH1_t`DG4_JxJNCyf|&pJ{dp|?iB^86 z>N&4FVO(72x4F}!{=l{(^VTMK$n7tpWx5j7PB@X?b=~OCg`Sn!^!iN0$%VPhd#S~B zv`1<fZEGi;t>2f!x&;#))?Gth3Pw}H*Mh#6p`wcgQ8M|3{XQI+`-ka8Cm_4Uz79}0 z_T=n0CdRwxM`vcVVxo6t$9mmOma;G@z_VR{vi>hSLx@9sTQ#4QvVtxVIbC4<4Qi8A z=4OW0GiX3FcPJqMcQ*f%XA+-Fp2cr}{fuJrYywC)J#j+71~cNDe;qMF%?9mq#a%^~ zROoRZ6xvcuF?kND6YuzY2|7fsKau{^Kabw`nLDaeS-0BsaWbi`#<sp3<+M9zH*JaX z2JOB(!{xRuEkXzU?*+6cR&YZ-?!-~PPJ0w-6<t+t2a+yDcVfc8qfHo))KU=(lQdu% z*4de+tUs}oHBHQK=rdC|T8??=k#gyIB<|~ksX}Cd1vrr%#u4OYclhSUT=;3(#zH6d zJMqZ$N0VnGMnsJoYK5OrRAVHyGq6{eWrFp~wDet#L%M~*DG$x1xvVUywV)Bt*iD<f zkT!|hcB3{YnBC~#niCu~38DG4Ewjc0(YCiYoi`d}dAh$ZWQXb)BRdkdzg%4REocHR zuGz-6m>GGDTkSAA*z}Z1=FCL9`J7upvvurJ6-H;*B%cfdZ7+J5?(fW2IX7G71E!y{ zramXkFVuvDIkbuM=;dwRYA{WuxlCAK5i>Vm*_k=o9JYd$1anw6<#&blBBsz`cB+)k zS~WLo72T|b=O$*Y(%&ib`^n15{J+awb#c!M@xvhV*38du?^&qvBz@C2dETJ0;PfpU z@8{jA*-+7$T61g?{j-G@PaQE3Rn9RbfVtoAD@3~{0gAsjlLvO$FCcPpiIG>Z?Vxf0 z^^!K6rSsvy$#-$4Xn$}P0H^5S3`E$OTj4Ql-O@N>hX%P{adQxubg4yUjV{yR@q3(7 zIZR#!MvJF7<s!vt9Xeun!&6gq`0wGd#mp7dTk~|}TqZFxTqv8gpp#VQJ8h1XyurP- zrQ}twZ7<g){WC`S&DpUOyTZ9kk7N3Px#jl5U3APNGG|Tyn{sde-;~Q~&k2}Am|TV? zic5C<+tc)hQb}pa<#Upr-kl_uES;~O*_|XkX&b~fbMkHPPTDai>ALQuZF7>I+nw~h zIZ0P{Cr!^udVY6OYfciH<_?C>nUmD)PQtNoS0$g_os`T;x~e;AW=_&<chVJelCJDd zx_(a53%ZkDI49|b?xY*%B;C}V^rAUQFYZpdc}~(xx|435lXP2m(#|<aw{$1HbWYOC zx|3c$C+YU?q&wy$y`nqmm2;9_)t&U}IZ3b48~43&%m>xGdou4ecpZNwceIimHvg=F z;av(TV-T8vGb1AJ<XUuBCzrmTm&+Bgz!ibJ&*UE&s1#+RC`#@ZA}{xdaEwOfAOL=J zPNsX6>6H#Wwp0vFWc}pd=Hz;ta&d!dyc8KF7@Ls>Tn3d};Xn*5^9s7{9OR((%URto zSWpDYzD?P+N1?6U8{zFi2|K&^xkPg;7w-$X_(NKG=O%tBU!p<gV)EUjeDQmUADhYt z@$&>D*t!j-jJ2)adh-*<aZ3mp8b{{rdSvcAE9BxkiLrd#Kfa*oGUSWylY$l0$7#XB z#5ePX6Vrv<*i+WoTJdlZT`t)`b#cC@JI;k5rXy^N$B*X~K|2^lMp-+%P92k6EwpU^ zWf(XwHaIu4GeceQ0+LHOp$}(O-8I4C`-F0y=*lVP>;~-KJU&oqq-z9e?d*C3yWPO@ zU1&xvFX6lRLi<c$0~|H6<6MegLP<0OQSl|DP89O3%X#9JCEiI=Um<xMude(Rl)sMo zWR}WB6Qj*zL}V<y@x9w9<aQ{QtJ}vd+38Dy%vF4|({R23I5fpjz8bTnrg}RsMoiPy zRb1yYKPH(5eLGH5UoPu{J8|eTCsV}9(nXxi-7NFXa>RWo-<3;bfy6sS(P-dq%DzQq zTi3=Ofu)dwI+%VKng{d%xO`N)^wS*_hnQVvyxJ}^?k_rUT3a?MEYatnnZ<!2cy?cH z{Dq-{$FnewaWOcGUiIYq*0NL68x6&`(oE>>9|ghEaQS?En?<-1_@Eb>&>XLS*B(Xd zyT#u*qpj!DdhrZD%R0d^-C*QmM?1l4>)JHdIdj_~KzjyOI=^r3%|rjS1Q5z{`xJed zlh4i!Nd6KY+5^$QYav&U$I5+SE3pIH-uxHyVUHf_U_Z{tvXPs89G{NIZx%7WALHlE z1X?>ly>%TwJ2aGteUf6YSL_QEtC7Hfcp>2+xq;vDCzI)=v|{T<Wx7e3l!^~zbMS|o zw&V28p4nr0OpFE7dNq-(`J%hIh-e+uzC&r2!6nDHiCr{ki1DYTj^B=7+2Oy(3!?5j zVeHs>kYHL-Y*f9J5BJ2S=DEs!9j)t9%-F}T_U<Q3u5~e7bi3CBWHJk|Jy*L6Cid*w zUuEyfU>YvHf_d-X1=F2{8dT49;KE8U1TJB~P&@M$B;THy6TvsF+N%Ce)lO2?px>PC z;>+9y{mO9RZM2j#T!<>Gdz)W7gVzxNZqMrVL8ZFa5Y^0<HQiCc^vQs%ta*|Pu)`Zn zKZ=;#it6T481Xw8yzH)Qb<1FwTeLdLRu2CmJ~jw)-P4RdWfD{V3f~FoO8g?aw-<%8 zy>XWo6cS_?U1*up(vC-ap^t&;K8IH?x&`*pGh@K|>RimNP=N_<b7Aw#?lNtY`)KV? zi0iMd=S2AwJYaKi4aQDea8AcdHxg|3_*c|}LPMDcgQ&Rn3k)i)Thy1K^`&bBb}OxT zS57x9-M?iO%DD<vT;1``p&rpJoP%ez4=zl`Ey|lcjWms4-RYox#h21w7CCX=?5U)! z=!-YeO)hGE^Rw!x7t?&qmRmKjZYG?(gde-uof%}O+BV<(6B#SXExhbd5qt85_{qTG zW(isl+6pqmnUl_Qx<t|JqlteRWyiPjNptNzjH}xSG2!(#ujH-uQr@=bl9%zgqBn0H z(U&V!xMq}?m4*I2@JE!pkX-2p-giKNrB3}A=OavIoJkqCtA39LBTg&7kP1-123OHu zSJAm?*lonmQ#SuiF1dlXJ@8$tO?ofIlFX_{xw?pNA4EBKP)@LoCA7|D4K{y66`Hlz zQ4jXKsmC<?=f2(ZcF^V(s(TaI&DG>`1K*GN^Jq8QjaaTDiMs{UJb-m>UcR@O+^)vL zx8Zg`;OF==u!!Ui;-J6<EcRYOurFUorb*^itL}-PV`q*`$*VP5E_o%HI{ov6%#x-v z0au-lq)x8{$K4l0D^`5qR8QN02r<+^a;s45%?C58Tz;E!?$Xcr6IxeO;11DK>qheL zP$Q2&q0L`U=M|6fXDD`Ako=RQQ>(u4(Kz@n&sR}Ci(Ih8{cQ4To`XG|=4hTp!_^K= zUPC+vdS3!aZ+`YMz?>+<;jg3I)}5s7P?W{TFN5pHFXyK(m{#GT6<IqqOdjUzLh@R& zW5#7A9)YFSUA)hpnL@l?5bqX5MOl1&yC7b|PjU|lD~rkNct{M$#XHEZ``oVO8H9L} zh-V1#cs>s#-PzZZHF*O+uFg^B1nT^1(Gk<aESaFBmCff+ONVFkbp(THHJ&-BkJ;rd zweAJL_U!B%dEg#P&>r+PfL|%E`#6d}35mcNyP}d$so~Y$VP-jHi|=s%`CvG^%b?w- zUwAGC1osoHZeIJ-@k@i*Hxo9zgW0zb43h`=9e;9QjoExl8(;I}>FVb0WE=uMReOP| z7EC`D+;I8Hx2Tr=+uH=m`|=OXAp3ydup}`E+2rl|sQva1z2Ua^ojhlh!%>~XBg|}| zo>&@ij@+#QbVp!v2OT&bZo39ng^-0ND|v-tns28rHZ()Cj%hs;qTlY?Yrk+_xepvP zG{E`o{@^gfYLr;}XU!Mko#2&?-%mf`R#y!CUDTo4dN;py+e4|g{(-RfOP9?&g}S`f z#)#BHyV<L9P6XY>)_sLaC+glpb@wtX9&IGw%V?538^6?uEO`$=&2`|*dC%=;XuEvL zdr8=;SIzHH=4ANBT~?k38)w1Zrw^mq_wz7<h-N>~34V|u8#RfjD4P8czxm`r3xAkj zmEy3Sg$kqii$F|1V#y!n*MY+`17XZ-`JF(u_;Ee^plHMXjbO{>&k=JFP^kr9<|ha{ zK)J%5#%1DNeB*YBSS@_kLB@&ftWXNKK8qGKBsia#d{TwcQk<BvLboE`_QdxAz$4Tj zT9ok)Dc^)te{uKTv>PUiQ89iK`RlaNr`ov0_Y=k1B+{K2nY(Gv=9<@QjANHrGP|e_ z&$YJUG&Nr^5|d8@B-iP#JBZHhUOu<G^y+EqGT`5%{)**%rEw4q_Zc9pjAlRE#%A_& z1jFR>{ML^QYe$S&kt50X)x)@2Z=L{d-D3bliqdx1U^&-eu0oV0zI`!I(PZ-mtCP)T z$MH$0PVLLoyQ%X41o=v<AyydO1gTfrFSNVV#V^BZ@&)h*-NnsY+UOcPa^u!;&h3YM zVAJYQ8s<aP*E)-%jl=-||8-qneZabW1;wo=vJPcOUCb5yzDNb<<Cl*A=J)5e^+<;S z&>iWRul|kp=KSWJhT_3<n_I8re+fK_p<hUA@P(a`PqbmE@fFT~31kDC7VxD`jHk!{ z=lI@rKzyOa!1mW{KCLESHu~@saNs%^6<8e{VR-Z>TX$2^4qJZ0wr^9F-rqG5`T^D- z%>EPQxY0Bo%zmZwa&sq3XTTjW%U3%e&Vlm4Jg!86n)gFD?+3HHJ1=wOi?LZ;Kbp$T zW*n5`Un3`Xu<(oR`SjQI-Oi2BO5}W(X)Fh3=J`6tSL++3mvZ6EH+kl!_1pZh#@Ux( zD>)ZozS3sCWf}C_=;z+1Zxd*Jho5m?zT19DXTDRpOP5HKC3mTG=I!b45#x?5xu}er zZ=b;P^}^-*qzjiH@XSr?w{yvkdw1MU<v&DfYY#u;V5zLtcn2uY{E#5Y54V$3jA)C0 zA=0(QNb)1XM!QZo^9GgwW8zf)Pk830_1pY?yDj$Seo92^XZ*AmUexJdd3P|ApDW4g z<Y3+_n7<%WFn`H2H?7}h?;Fzg-JAOr5p!XJ=dX!O`|LM_yYS>tW4ZNj#0lnadFH0| zI|t_Ph-m$upEjQ71k-=u-NPJ7{#}Vi2g3JFg84_H1oJ<5=BD*Kr|y3u!oi$uy;B1w zr8*lhTsd&Iqr&M;{&|j`=c8~@0t*7g2iX~mzSLz8EORiexYlPRFMTnv)y2%8Db4F6 zSTojWFYgaLocTXWYW*j_Gk@X7wRe~qqaM4cM=-6}kPFNHi|2%#_5QcAiBD-=d@cFz zvwQ*+CjY}P0;>w-_99z0IuIy_I;D81I2|Nkog=cYkRB@p|HA!y8ZNH&S2FY!u%uPa z7^~`1P%uQ%XKI~bOU?G0c5&wXZRR^Ub1J5JWR3&<g#0je!>GBMs@qQ-Del2^nbpej zI+Nokh+27t3kqjvih2x0GbNsB+o0&k+;4T(2Ut5Ky*wLhhI*o%Z=+fER`i>2Y^pS| zB$yTmClwgm=$dAOX_XSuxP1;l#!=MX%EoR0D%$`!@N)nd25c9S#X}2|0bbD1P5U$< zr&pE5u7rw$kf&cPg2Idcj0K3eIgPMDI?So7<S)!2GjFEOvo96hf$;*sm@+zkPy!Rm z`axps!V~oPb`Q$Yf!%}Bn|E2_-55;!%ZqN2`meuO$=g?~(Lc$g-dAv+S6T771@z}N zd)T-dru?_4{FkZxBoB2bWeP;VKXo@c69+diN2wa7L#~$TvH=*`%pzd0TLMiVh9d;; ziL#Wdg!kr>Pf)(=-z=VxGnoe{t92B<3VKl<{xfJauY+{j@)(idCGy^atqYN+4o$PY zrk#!IrP+#UHq`wbd*jPoauv&+86lG2n>$)g5r&1b@El}y@>bCoWA)wbu^RcyWg>UE zOyHUbi=C+;829b<B_KCWh+=yl9l3U2890}f1GJkKKh9Yton#Iw3oQDMW^Cc}CN!6n zXwcc9>1iyBcCSv`b*dcLCV%UVe7{rC<T@A{Rj##Nxwa~@wFk=Isc3Sc)9Gn!o0m(G ztsk~?MZ1q^!{`sp`+KD|qUMNpPqkCZE+zglmE5W5@!g^#Tc$<U@hpz*<7&K6ALr~0 z0ISpy&gD1*|NIE2>XM3qwp4aChPmsgN=&0vAT=3PVqgy7r($dkMBT*^j%R(1a>tur zqC;#j5+h}^Tj&Pcra`4K9BkDy{<?bDe-YU#b%J}(K1g;hvxq+`kc*r3dp#uQ>9)Cx zcc%htemG4^3%P){+AclaD71MVG@O;<<0}-isao1oSeeD7xU>iS(lZeQ1DS#rxf;9c z_~s_Q>GGX#G&521)zb!72pfvO3P2mwfjLL@H4qHhDZkBVlEY*uIqrlIN<kw=EpZ6A zHK4)SmoqeTQR{mENfyzHwtE#M|4I6Ir=;fpq?HS~@Z|At<iZmcgd$Aeptb^$&6oJB z{sp!Jw~caoSnTi8bEkf+nIW-5eS)4l^^+#7@CkbE)K8kQ(kJM-Q$K0KDxaX|PW`xq z<|UwMz3vB^4hOXiQFzVyRM_zjS$<|Rcx+(L@e9P3a!a<HvOrbf53dpbSI@dP(K0^x zVSv0H_*ls|-vCmrF&cV%5Z+#!*vmF8S5;J}x>G`S0D2<y|3RfUj5ha${q@U&;_bD= z(YWKrcP&b`T9GY<4y;-!e|{N-Jo|+CHEU&KSwHxZzc4$@!rJe(77Lehw%13zDmPKi zF9+crQ#qHGzl^<Cs|V_z%sZ$@wsPfp_|RMg0j5<LqzXiIFb8k00INSXC<t%Z>e_4( zq{&k&U70=e{Nj~Xne3Ts4wk;6UfDOJ=`r$ae>OVK=I43-?VX(X&YpP?nCRb*DYluj z*)uOYPlwU8X5O96WZnsmttHf}l-qrO%56rIrNrcRuZP(g`&r~8FoAOXXv{|(mF8IN zBi@?kSmGm&Npmdq5y%b>#xfsqbef}9^f7Nwv(!pHh9T}SsrC98IJE;)>+><o+j;tZ z3<J#P8SpWv>O7nUKIR?mJcB-FO*>E7$K2P>Gvs4n{vOV-kAY$MvPOIiEZpZ==wlve z=c)J@<^`Xp>SK1b^Q66i`rYSAyFv4p^-C@7hgI!7X-Bl@wp!W~oEG(P(yo|j!%6#M zWjjyJ<I|q~xc}Bs#j))?2l<%x99BEn$DkkcWgX&U+A|<(dIv|7q^rdWAEU|D#jNx( z54Q8Haxpt3pS6}jp1t|j=U_p7g^n&G`7{xQO7dAfk{X#@9yD>9D-5*dDON2H?i<>9 z#4hILf_1F2d~B0+WrT6;ZVv<lSI&;Pe7HX80OashXGpnxxlxx7C)AyMxSiPD9yTst zeu>MM@6N}W{oQSfcKHgm0hh76wz?8?cYBn%jKyUx-<%p_Y^mGEy4s~&V#KNSFv0A? z5Z|S{+vCjv>}A+l#@_CX_@&(49#Af0AGa=B#=h>1c#7KH9#t-5e{INR?C;LVbsM|e zL(63xsExRc1Kk;MEVa8mzFfuyHAf0~n(C?y_ww#;4>Ff=u;%+^usb8(sCKtUh|5^6 z`F1RKXB;XI?QRcAmvM-ZX|*2e&Ny5io=;-K9>wAAd^o7;I=U&ME|1h!IDjKA;|{G8 z*xLFh5?jk5rq)6H?2w3}#n0{jd54~uTg@nfRkgjdoYrgd2LzX3T2U6fWc<nDHmpYx zM|7}kmxA#_z#qTSeXyX%zMC3!AMvVh@m^C&7n))7KO{(e3F#r+wusTJlLA{6m^m2q zfI4%Co^88`c6L%M$GyR{p4tY|GfWP(@22&cSDV1cN-K5Ym1Si6PS0dTCttFH99YKA zgS4`f!$X4Gm1NgufY?N`67eX~l`*o50QM;@?qso>1NO;qSXTz7Tfg=S%q~Xq?R@0M zJNdhiL*OB2SKaG?GAp||bzh^!oy#Xjmi5FU=C@E+E<4LK{_HTWQ!HJ*kseAK3MUi% zR<}S3@gyPjpG#fM8y)?1k9cqMuaeG8ZueR7t7w>7{+$MrX{j{6u-!Pl%}d^te&jRD zIZ|o-vu&uKX=jKWat>zH1(cIXr8da4`@7qlWq4`){P`7N;n_ttz0DQ7=A*)3??$DQ z;ee<x>ZN)Jw;qdPJWAH6jY<`bm$d}BcJTRnnvQBDK962n=~6Ua)Vvcbnm2)lle~AU z$!w0Yg;(>23<xqwmbTMA+mtx5DwsI9E1PZQ40lCHEuqm{mD#9~2xg;tdg_1@{l6Md zM6=BK{9Vl-o0FOM@%K&s{++)v`+JyiWgf@hv-nH@={p2~%mw^i!yn{k_oRJ`=O6hS zA}{NM%vt<Bo4-FDl-cpVKmW(IuPf}h8)i}Kw}V<McK?8v_#-f&9rtucKh%zX9ij2H z@f64h$q}l8$*hPYnRjXZQOaRy;1(S@o?3v^IS@Na-J6Hs$L9D>=%lB)fna<U&9dFe zyl0Z{-FzSNeY#-jBd)@qVAod!@&CZ{upU_%#Cu(6$$|`;jw3;$5+B8Hy|;NaaNPna zK&KI85QGgc^8E}KJ03e>C1a{lK_2xmMq7e0&Kt&-^bG$Ax4#8rs2fJr!3YH9W(Q@~ z7hRny_=3i{3-B-0AjS+v3pkbWB%u5Q^-nWTjs>$vgHF7Tp9wY*)~7FxHW&|XK~KDa z#4V-VL4Q5r=s#|YzgS;WY6r)2l`B_=l`GMlsvIo}RSx=8m5!B2BqR>Twlh>f_N!w) zPdHKZMX>UY{|d%wc87C0g*7V@+Om8QwsPeK@Im6Wj#2A=0+Pj7g-bi%GH$L~XQ?dC zDAE=00Ux>7I398#Z+sN4PA0NaEsX0Pk?CJTPCS0)9=~>v-?+!WxyNsL#K+JI_QCIX zyD~nO*WPe+<Lf|!&lx?De1GCSMg%Gn=;sfdGxg(!g36WgaePoeo@+}o)4wP4Wjz0& zXC*#fDTlUGe1ebfv%$bUlw{I{(V|C=S6QF1XuNW5U$NaAYh1Om`9kXivYAQ??+z(? zh>{+?ENC%5XWqfzIvMRzF$dbU-a5AY@I&QMor6${Le@~=Bx*S_QX0kslp%L`74ugk zRC7TpYVTe5bqXp+c_U1_8cX<hear<}_VJoQ2TXTksiquC>nY>xMPtX#;11!3!rE`Y zNab9+7*Zl>oQ@9|oV7SX^GNAZEkmllv5nE-&|p_}?91{{*}hyoXoF*TXlQ63jIwzS zr$V?pnGt$uXwG0qndebe{R`aPYHO|t{Kaakr&b2dkHA63lHb5A8fOR1FWTEiFm0S9 zdylxFQR2R=4X>T_q4@AaJ&^e0QcG0=1ojgN)y|z_BImoDzB8I;Y($yel>c6h!zB*F zvMtF8WG_{FbG3RkIgtYU3Ja%7x!Qz(n>~rR{=&k^(a~O3Q5(q}7XjLzs}$U~xurH? z#g9_E((7@SWNsWBom$R~E5-O^#pm(;pnfa1PT@Btz`S`LOUK1BkQ?T&z676K>WNCs zI4<FWeSwc4h_yE-*SHm6P6KP)U(BcPQ{8;CN<$P>M-54j;=j|poC<bzU%YlCShP=a zU;df#si0VRX8dR#@oD_@W5CX-xziPt?RYM83T3^Yva<0mFl;nx8_g0{+V!De??SD2 z3ouCW{wVIHJ-C1#14T2t3>Nh0d>!ntlmuOR_zFYo1HcS%(oo&_ASGn&=w(Dk=~2bI zIYAl4XMjg9W2OhVeN7flS5<->&V7l_E!`|8a2-g+XBxUB6^-Crx(jc{$B;B$ZI;Ax zJcFE+sjqc|HhwH0H&#TB|J%!GkmE#XJV2q$cwH~ehaCosTnURdbKhn_|MV#*<*@LD zyNL0r1U>7A2f3_~#JsxYt#0j7ih&vS*3Q4%%~w(8pZWSW+Nd_nK2nce^)yH^oYo(U z`z<iGxi)ck5H8+a81*qrUCgr0#Wbc?+FU!AOts$43xfD@RJEPbzqz(SDFaG5t2<@T zr<9d)b~}X^(e?5juY7gp$_ua10B9Vw6c6|P96yj+F{+g=P;9MqVdK|89^PD=R0$)S zb#lRQ<ZNbjGX~7L&Ewm#B@VNjmAiKM=C9qYuLpzd3Yj!d{1n=YGEb%rmT1io%HFvL z1jI9$Zll^nJ*d_1CT0^c@j3j!1#+%(;V7B26GYf&RFiy<PxHyht1F)_EfAfbOIaW6 z(D^YPI*%Gf2z)1mR?idoCPd2P7T#OKghvlV_RnBQII`E?&v$_TA>jK7A6X*v@hiqz zYGy9Lw0HTtHw2jrFjlp|`CEv2+pQ$^7x9g?s6St{SBrliGZ)Q_RpoL8Elz^!1tRmY zsc;btsjwWA=FIuU+EdS`?Z^1ZZmw=VH($;!S603$XBSOjBU>At$`u#w?WspqZlVwY zPvmDMnAWqi5=4jd`6W-`(oS4>bHb#+>|QS1vHA~q0zWrvFV!t~Yyom-Vf%B2NO~;m zT-tp9Dd#EW55cr@G)CRiE&tqBsJV|uc2_?9pxBcw&VGH?`U<VSomH-VJk<Shav{Cq zKMRv5DE9+CU&TF>i^MPx-s>?d3{I68=;VpY`X`^2yKx2DFGmHE{h#ir&7|sdwZ|*j zqOa*m?QNXRQ~x|HwrA(TnkaIS#M@w-+}SoKkrhd4mlCeij}CgP_SD+;dFR*TV%6hL z)#J5Y^*CRc{DUu>b!k`GZSX1J<N{@W&}ZIXC$QFOw<ZU(mHpduv)f%!;m#j{aN^Vx z4r{iJ9rnqE`id2~br!LDCQnwR%aL59@H~{e!J4ijg?6zrW1kS&8tg&FlZX5i4;eAP z)LY+>?;IRYPfOe;B-si(k3CUaR1<!J!fNf-B>=uoIr7d<{9}8T<?UoP`-lhw44Tpp zJQ7iIsbPV@!xAUpD(6$r&q!3y%&+E=w*BfT>?!(Yeuk$i(znB94ye`;lAmr8-*c^Y zse8h7e#a!bbE6vDsPfVKNl-VJa^(HJ@~Up}(}3LI9Eh5J4v>_N+q9;`!KLx-@Thhx z5uV#h5W496(W)^2JdWI^CGhcG5aaCA37P%*6$DyW^0Pxx79ZbDj^sCz27JXW%x>E= z$kHZ9#=PJ`{ad<-(E2U19&@}Pr5m(nmOWARQv$c#M&;HH`+?m};N7r|)F1FwONmyb z)s1uOnIO0mp>nZQZpNu#MmA<$$;N+D#EdhcoUnZ6j8O<DOmQV09<^vXTu<XhDSNV9 zVp`+(dVJb-Rrk%Us~FMBeZYw+q+G(lT`X|-d2pSUX6K|0Z!6+2iXEeLu-0c9)Asq{ z%4f=+XAv!BkDhatJ&KVo#y&(Bqo>Dp{BdEk=P8|8;@L{#1Z=|7Ts_ztS?lNzYkbF7 z5idsoB1!2&dTfn7H%%n!_8*VoJJc&QrQjyd@gFyN?mU?~b;ZjMS4;7y5Z~IW&<ukb zT->*_s%QH0MJAnbRwLWUR=HB1%Nbhmp$x3yqm;LsMs-Ro_74%>+~z_hc`uZX1@T@@ zi`N0r-O}PTC<`)sEBegY#0&ztH`r-#lr#Q5MfSz_Fkbpw&n1xyT9fDLnX8|UW4o&r z%yMy+;dGIIPEGni<;uxJBzIZrPG*XpeEdfsnk~pKEA|>707&(mcn1e#IIzpB@j7;X zwv#%sf;*0KEb!~CX<p;k6Ka&p(NNwW-OMKjBr^MiAoHxu6F%k6&z#h0koXOJ<=QKk z`D!MU`I!2LeeTolN0)S+X7j+p@fRi7#>YvV4&vi^^tPT)v3+<kLf*<0^2KC^cjSCd z;CGo*&#PGLT2hl8{OmaoTQxOi^L)x$<Zd!YPO3Porh5@bJ9zRo>Os48g*w1mj+FRE zbYwYdT?f?dwhx|5t|xqgyieh^(%EMmkvZb&nez_AzJMb=FCdxoj$vjexc{TkvP`Nl z(7y1^=;_>1k!KLJLn4kO%mp%vzjG;ib{7(u@zITZ)_Nh}b|}i?<9lgT+<4qTEa#oj zI3za`>?;IjUfEAYC=!fa_dY!D+>`IG^D~Fey8i0M_l4lgDx0zQxAAS!EGfSCrTCuM z##d3Z`sv2Ezdl@a*fO=sIzG7x)SX|HiJ$H%6&ql0WSE{c+mfkWjXI5g?D4#a%x37O zXXikbqS@(rv89H|%`R8`5<T^0CUY>#sADt7+c^`B-6vAUC#dK09VFhu)YY@&0Z{FF zee2xUxAEHA2|&r(C?IYjNT5Fr6w|<y(m<aNEb~t}%IwSKzn0v}r{>SHwtVexb5&bZ zOa89ZR^5&JnK#nA$!#hrUmxU}rk4`zn-zA2>Rr6snEh8emGjWNy2kQQP;ymj2j9&V zh8-wHpcD;C|Ewxi1d4BPLFsatmRoGNtk{iVmD5yrfhpC8*dY}%oEK4Rpi{bw7(?f$ z0P6B$!<ax59c1pwEd8*fu^{u4%+em`lQPKEdunH-{wZ_xYbNta`U3aA@-hrnh3iA& zDzw<T`>9`;H+@eZZkKPpVs&vKD!g<(hxs!FZTr@qbogQA;<7ELNF~0BKT6I_@plb> zr}K9_f66xb`1*6o#pO5fI(asMczGt{mh6ur>M{J)H#Ki#O!lwS&Oq}O7SsT4zSe@* zDfk8j>(?~zx94-3Z@1?a&G*>zlIADuxuyA4du}q6*WzfqI`ybRZPir&Kz4Mp(0s^J zrwX-$)0iJy%t3gyoG1?DmRLvdb?)r=9gL{vFDyA2;S!dYfkx3H;+I)(<a2ADn$K;) zeh5#NJxk;czz2u9`}yn!@Xo&VigI@K(sI@j8!O00FR|tPlKADo7~p=*O`$S#o*%u_ z7SnPBUGGxrK(jEF30?dml@9t5GE|nB!pG=2G#$(dkJUXSWD8xkV_bA@%do1GVpCYH zQVXu0R&)iYep2rkRKhB<LlTT*`LkjlG4m<oPj9DL<m~OGn!=*mpgDJAbytetMoMX< z7lla_)()P`+t^`ME8?#(@t;PzyJfVm`xI^4|FBN9#;3P=4rZjzsMZ2!c=O`fPZB-z zaiu*jwK%rQxH#!B)_`khvb??wrj_~DD{#Y6jW>aUiwIUsD|H3O3uhF_g?DRptYCI? z`pw!r_uK0mT-_TOpCSG{_4N?4?t8H5pcYgNCT%C(p;+Ok)piCw+&p@|AzX4G!AFG} zJ#diRYPKO@?QF4+r*Ih@D?0R+=<s99wYFk#cBn<zc;_-&6CiZQi_EU*x4;JBXH+(G z|8JmWH}{8j55VnodT)IopWHzJuW2S%cs}>bJ*9jj=eZof+`4N~W^Bs!&!vHZ^J<6q zO$_1~ZDpO+YUf<U?n6_d%o!7#L$=*xX=Ho@l~Wu})6{Rz2ItR$>+UGc;cSGZ;KHz& zd6k-isBAI_*j1+WBQ$RAWLDPMKwO60k62or8kK3zE2x$ozjJ1lGKC*RUAS31zns1G zinX5}!CS{sY#Y6jobi1^{|OLpd_N&w@Xkn*sHMh~Oz}AI`yBX16M6e$Fi@-hqJ33D zkf=rb>I)05MWLzWRm3!+YVRHt+QzYeyr<Mz-d5~lb=S7F%t0Gn+o~+-Og~RqRm>6` z)L{peTVAno1wr;+IdSM`fi9To{9Vk{v>nDj(Sc<2F95FskqBOYeY9v;_QK>}ZAjuT zd`!n~{T%ghw@|Qf+{;@5ZgCHtNa2RIKRXxhA`dsh5x=YbJitGk57^bem{~FD;A%a7 zH25O_ms_s^w^GmxDQan-+{vp8HWuY8y5)#Y-^Q+7Por2c9Y$~c8z^)|PjINrm(*W! z+Zmc4&Z!01EXPlQ?xN(ifEwpC#FfD1%3q5$2vCvA>M!Oedz=5GLGw%mrtPWcPv;s2 zO<p<6|99MzdV<NV{Wa>m`a%w2mvi^v#x9C4rJ$7Jd`W8`W~~+4MEPZK3nZPa2=jOJ z<?%>S-7-}`K2xp6{nIdVVhb78e#`0>+Bx}u()aNtl!2NwSFyIqC3jJ+XzlOt;{9f* zB)*$hXvVug6+-5BBczT0O#A3xa8Twaz2`FVXO6gpJ)SF%U`PhFr}7*f50?KNR!R`7 zQn%rGL@-A1^*8n?b}_+?CoNEL2|?3S9}z4inE99g$P&9u!7tu<%#}xkwIVjA;}rJu z=blzoVW`OUI=JhbKX<QvdVPKKaic{`?bqwZ?Suc0hJnljdfoBaH_hI{@Ca)Q^qToZ z@`oD_(d(eS-hAQJr#z*H*Rs7n_5Sy~|KWaKhwSy|FOClR+|9fWkJm=V&k1V9!*hW& z;Z(P@rFIE{kD+|AnJoy%QQWwoZGAKSOO>NX9KmZ^FH$f4effWfUb>V27koJ3;Jcu~ z|D}VkM|=;R*1{}8XBYyrIlta?^18Gkh%W$IXuq2eq2c&<=*Beku4B(f3BRQ`cUk_3 zY%aeyfVqm^-byZ%xXc4`^a+%PclgP>u{v82JI61RGyXios?eQls0D7dhiXe|fw1!y zzfOZF*aqwGnHUVVJ)mbH*aijnG>!;;eCXpt7r(@VyAg06mV)t>5T{hUp&j?p7|v#x zL7dO)__;JkbLK66P47;|+bWKkt92XSqimYUnGw7{Dlw6Fhcw2UZ{af+wxIVApmtdg ze6&pE;MOY;Y8YYh>!}g8Q21kFWG)Kwx1l}j3G*+D-#~&KXcfjy=;DjD|Kjg22u;{N zO>l<T)sDAO6WIdnFJ6AT+&KaURyn9`NY12YrQE_v?%e2gyNA^+xv6|OvMCBSjfX)c zXWNXt!Gdg)bQ7wixpi%nT_s)pm^tVb=e2Qi_FfR*q0{c;l1H464LhIOIYk#FZ*<k> zoVO01+f1FjX`eV>-ypM^b~_LZT#)VJOAzn?(uk4qPr8Ee*=7YM_mQttmZJ4ZI~q@A z?!bakC+LHJk1aI5Dq6OSBuXK7>WO*j55|$H<C<(nq?8+Xx8JGG?D)zjYq`}@V^`Rx zt@PKQg+#3lZ3!5*ylhM!#oF?Mjx~j*;j&<^)hBXkazFU3tgoK?x;#J8&n|a6d627y z`wA1qc8qB+T;Hy}*~!4;w+2ntQhw*g9Uj%d4DGC_y9Es!mWsV1-kE?CzXe<*;EA@5 z1hKDCr`kv<Y-Dq_<rhnclV~*iX?ok#828c;t<Mp)Ls1qVGe~g`v2W=(C%azlRz>gG zjoJr@WIHA~hNkMAJ2P9%Q{5*MIyPlzsazigX5+L@^d0MKv+}g>nTSo1C;Us`Z+SQp z8Q-XqoxFSx@n2W}b|lHL`F4%`FOey9o+=8VI|Ec{{&+4=@Y*exYt)tB7<AaP3p$l$ zP|?g?Ufx!kmp6{qSw)BPhG<_{n94`_P1XKA!|4ofzTUoW*OqWh5?Y*BhZngzNLPOf zb<n>#bvW*Ub{#%UR=mrkb$EtSSm(kI?;|BWQ5wZBb|9@REv`Flx}Q3kd%y|qdB@5q zuor|`2SK=An||ME*C6>H>cILxd9#h!j_B>Xq_K+o@`P)p`Oy@|z~ShGqGUZ(QMq$` zcNR8j7KN#-KQg}mPpmG;t(lYN_Hocz8Ki|D-Y)z<4_r7BY~{{PQNDWTrty7N9L7aQ zHjOv;3&8QiOTgtDhRcy}ZI4H}ZY<?S9V@7jqt0KRzg%r_a-e=_uoXQ=k9i;PjvdXH z1K~QV$mA_*&gP?l*A!4^TglhrMay_DnO9!w7KS?nZ&jC9aBS23R2!Y-0pQ(wMTPlX z@_dweF)-K`XN<IQ4x87UJ_r52!q{ZK0J;n68yvc!I|uF@QHJiIdGDT+O3iPnB+;K! zky;1mT5qM$?ahPU=F_?}+z*mnH8Yvg>0^(~44#r%TB8v(&s_$d^V)VFJWDz7RI?7& zmwG&-#Lkv`L?eGHy!nb0l`b^9u<-4BHqURVZOs2>yA{Uj$2#b6OBih~c^lPp%THGh zi^#VVC1zzgbTb_50MCjgM+N4)Y(KD9)lc`ZbGq!S)W~uW%Y)f(LGPSbkQ_y{3rf!m zqac>5cKk+M!;N#gHNHb55#LmbZT7yMetEA19~P)uGyafzf17%b4Ch+wbX_@W%5X*> zw%*Ms$DdL;@8G-^I58q2Hjru5-R-F4UEtPwH$T0(+0UdC$s0*;{R5FZ6lL)-@?brA zFL9VFoQ>w_eFQmp{C1-I3-RSV*gvUGEs#5^cPQ`sL8C5qo8tm=&g!n$S>1OLsU>;* zG<|@LLpFIofc#Yx6ZfOy<Pu6=nJr5{fYRK0ackznuQ?s3c-vE{`*+%XE{YlyMfElp z(n{WV)|{MpHm~0CjJ}{SI(#*1n0$bu`-`_;p~zz8&Uh#FmVA(WkOW0m&9L+qaAhdk zcwWNuyDB@3-$^tlm@(OOn>Be3&b~`oh2sy%ca!GC=7s7yO=g%DySuTLI4_Q!oe^v) zz-Q}a+Uv}1>tQ%G7U#C=*~t@s2%OR^kCMm@7(F{#!uY|iJWB<JJbHHL`EXYrv@n)O z&+a@QY3B*HPR#v2`Di;$GW+AHC$j<L?=@6W`-oabHI7A+C9DOM$+OAnR1l%o$5l5w z`N+R+;kqR@dP^=BQt&3GHMif$axnAHw72xs^^JJVk_^{Z=r7h9lZO<$#W(Z<=E9&} zkz%7hh^-hdtuVOByVaNz<V}0J_5(v0i7bb^mOIYj)W3PVgz<Zn#|4?xrw@)g_1Mt+ z@-@ahi_GQ3tv8Xud4E%s#do~FVb^9vRy%eiXOl&KB>5OErxlM8pTVykoBSh@@w<(} zL^rFb#ScVZcC6W}+>(zlY+4^DC*wMd@1o#b{15sDuJH*$wRu*3@etoewdEHz&O}`s z-=jXMAB8$X5N44L9qPM;`V0ARhoUUrHjv`?02B>E{0yF<Nfj#wdnW$T!GALFIifxf zw+{=qPo}uN4#@P>YIHcCA`bP+M@bJR$6TP$<?}elcH^hXV;z%AK0|Qr=jF97yeOQM zkQrVgj|5jkLmV5iR>MU!9L|D{8{&sftvNrwfg>*~*X38xL|EBY1esH*hyESl+eYX- zF&`Sn*H9a77PIGkfX-!t7D?*2UKrL7X`6LYv|v`DRv9i-hKuXIPei#;F5X!h8IDGV zv*OqrJjc$>s6Mb|J>u<@HgN*C96N@2j2Px;X%(>~RhRw9g;NW}#jO=SM^b%z0ONP> zpV#}9DX^;rY&CZVIbg@Ofw8q_z+|3#>|9_IT-xBWAJ@(<X05XOiwmdv=VULl(9z~l zxp3<hCycR8+a{O||HbY^yYKd-?L47MY7%Q4oOVxxs7X3YYe?U~igKN$c0HWddzf}@ z9S=smOmRxiM>B#I)Q(8LK|3?KoFII^0Fd~7;ED;q=5LfLnST+z+Jegt!<(ZF6ZItK zX$1+T+iFtJ^!@LB4*KuYr&y5SNK>Qd@&1X@!QR*U=VN)+uc+AV2IG~TZ-o1fSFYT7 zpPmPkmf87$f&ydzcJ8tqt^Y(Bv{UL9&K2xkI7uLHhT-Ef6$W@u!Fi9+J!~x6dy3xW zgmcCqZw2ND$<1Y1EUUa<kFaVx_ZS^V_vYfaKsmHu*3LhiCEgy6cBNOd-FcR_VYuCY z2Sa&A2im~S37Qu?$<Kn)$^M8=vvK2e)uGBjyZ+LVbkD-g4w`{0rTPf0R9rv)52~*? z@poJ)ygUQL__3UxXg7kC0Jo0n_l4l}BlUahv&3T(B4M{xrBI!s*Ldx*vk5kDF@JM( zV>xp{Y8LON3-Za<{v@9I7glOdx;w1aw%r|$2DQGY)D~P6KaGaEJ6sej>v|gt#=71X z2km_A;qbIz`il@M-bDEgroYVZ;&=}jV#>Ks%9u-WJVu+XKc-$IeXW1utNvm*^A(=O zXy&T|HD`aKIISe2u9Hl39nH5rDDKU%ax1mI#!viy8z=DxcvKH(CGsu;<3VAfpIl#0 zb0Od<A99o>Q@+OJjXZy1<4Wx=7Z&N+fp4fx-c!v>{T!IP>#4m_UmlkstYnFD{i)oI zC4Nq~PKv)tlx!=U=4CKPB9>Cv8S%5S-rqfk@A9e@rigFxmD=~){~uxR0awKl_5DxT zd%5&pMWl%eHbemnii#qNqJr3sMvXPbg1tdhB=+7T)>xvk*BC3JVneZD?^qLSY%%74 z&e>u0`8@ykefj9`?sw1GX*)AJJ3Du;{`tdY^;xJsuc*(f>hqfVyskcPsLz|~^OpL& ztv>Il&%5gL9)9X&0qf4#11t-huoCpM&o)v&XK+^l?-+q0q58dmyZS5y{^VO&0Q^8F zKE|SffO5COsS3NBF7U*kzO@3w(kg{?cW=?_EL2~Ji{=Dy4&@-W(&Ecw<KiwBYOLPH z;xTxi@C|$xLHY*OhaM7M2sIi##1Ho&2bRy~IHTL#P1T|J^}g_2gI@1z3(ud9Kt%Lv zDR0<022OZ|yD&=s>LtJUU`>tFE3m*MW4+61Y~@&Ax<DEpVj0o2))?5Yk3w=GWPJdI zyJ-KH0TjO16Q*b@Vjo}|R?=*>h^9ED`Yam>H3BEI_0a<q)(v_NitWD^#P<l|D|-s7 z4m>%5W(KdJ(<0pATaxfu>T`rGJhjD5IBixQgA$<_php=APlB}3RY9m^8^B&#UsMUM zBTuo9qN8C35;_hX^fC?xtN{24cLOZ?6NqrvL-y1^#7GQ~W}rq#V~if7tHVb$6gd8- zH0>IRdlrq3M6(!)AEU!@+lzwmw7G$S3l*Suak%KGhg$=kJx14rkFYur0`W-1MWf*z zMHnc4=z;pEKyP*wMo{Pq&&KgX&~bVgP^w$tYYk8i5CWzVeDFgDJ@IhuuLjqCQMM_# z!Mk)|VzDu7U55$2y1wx3Ge|l9g+LMEf1FjpKX|T<Sq$~jmzzVsqL0hq5LM3bGSas6 zRZ2JtR{<LTLyOOYx4yEZcs>}v<VR_xq(IxyV;E7qazHP)FO_06)(N=5)6W;)>5+$i z-+>dsScgh|F0LJ;v36j^pvDtwBcX0<^u311ShvgOKy5C&hnkW2;R@7!^O!TmHT@XY z^oP*q(s38<A9J?YcpQz7(1^Qef7!j*8?P7egY~NKrmI~A&w)SV-DC!|LVfa3sxR{X zrdIgTeWt#w%yZz$Vqbj{uh_TZmte7%U<@AzT45=|1DKY{b*tb>gPT5fvhZTfpGV(w zEafunZRE3t<v$!wS?DsesNe7IBeGJXS9@j+iP*j1)V>!NkN!9EQM=yzmk#M@bL@0P z?$ixE9u_sI{3tMhJ7v2!-qLuEZ-ULCR;NoQom}?u_XOUj*{cb&H@oNUm_2%>^S~E% zdgL#?u}a%Lsk5kK4t-eCwqjiLuEawnPk0A+n|-+Z<*I$^jhK39`QKJ{tJkH3G_4Wy z+rFWNOW%&Vc5lzL8oRWGWv<p**Y%&fb5EbR;`qKr)1>a}Z&$e&<k9Z&xX!hM>p65E zk`c7F>uuXcS8L39y=Pj(7EK4`eq(j$(dYQ{!yNnfZkpJ*LCTf7O&^+4)3t7H{l@n@ zTR35NnR~ylxZY)d){oEs`h%6+7(CbG1s`^6_~}t2tDLfW)ThJB<qbD|D4%n6&F2wI zrp&)EG?%abp|D_7<6ZgdDqSi2+`4qL+fg}#df#wMe|hek4UJPau|D;do^?G`@&3i% zYeaqczM;9-^P}<KM$P%h#y93*i~Mu-9(PXuC+YZY2bUY6X*(vb@;f#1*Ge(Hr$xwy z?)TqbYQONqEz9AQ)Dcb&8w(nbdfX_Z-JMej)4z+zUemJ8x_%c5kGTJSb>)-w!-G4| z5c^JAg@lcs_G?|Qym9fTURz4#uWGem$Hc@RrfjoW=U!P1KjFKzsP=~Q9e?^ZHfh(} zNk32fy=SIJ{L_&+5v%9){V!+Jp!mlQ<tA_Lp4t3!(Z$Sv&(^=cXXb#;fl0f2`ush0 z<niNu%Qdc*@?&Yw)AxR<|8oBDB@<eWThTgX_TE9e1|BTT==wI>&iB{47qaRlH->3n zY`Tmt3PY+?tX#2L<)|uAxW~l$g7%-ySrA-RuES@omoRirP8-;(UyniP;WYs&CCnuS zwMu4Q5t6>~92DOwAr5S1fh)stLG}9n@GUySA9y>p&fXbjjbr<dr6cgc1jb$w#03AL zdt=Z+Fc<hg8TLPhJ{;C8v-L0lg?|j%F?H+MM_~eDAV9QXR}BLY>dWAR`Y`;AfdAja ze`u^U&kL<m<<`tzIX-nXvv;JQNlQD~IGI^PrwGs#C$x4V?FnkbvYZCO{=H6%L66b? z^Q5;(pOL;NH9O<6m7QIk%`A?#n>l01-;(wQwPC}Y2ZD|RHM1Gc7~?$B738y-d=8M$ zCDLc)skvb69xfPuBNq%a)di3J)&=8QNZYGP&8{C^%*@->(bdfAxT61Wq%+(`x|tbw z$78)baQ`CG&7{Xklf3b$AAC^j1)@(ps10jQ>RkF&unjBldlhVE%}ZlA$I4>tS4hW{ z`{)9>3+o<c!*+n0nN!8j6&zSWMGS#Op#QW847p1U40!?R*%<UGih1hj!2Sk>a;xiG z7uG~J#G|&w<55|OBi&qB$)+w%UD#97oMyPql2H4Ada(IP6O%mHdQ#RLw}VLQleQ-9 zOuB~jAgBww+rp)(ndK#8s*a{Qx<Vakk7p-@^djjSP%|s=!t}K6h}Lhqp$_ehdIr?Y zdi6nT<^H(Ge*kJ4>9+&XnlK8_-Kx=;yDg-{#(b_|W`XIb8KjecL~E~!xaV;;mMUBE z)X|4kTH)&K!#aVQ+3uBSoxCb-m6<uNMhzqFz8d%6hiyN0X5F53F09e7n6Hn&VGUWd z1w)>{19i;~^sKPQVUL+T+Jk#+j^Up0V*$s^Z0NDpptEVuX412yk4X7(^z<c-B5i&g z!|6skkoHU_U3(lu-haG%SQBynI6SFgcaCGo{6y<x4y+WYnN>M~K5?|Y!4J1Pu0;)@ zI&g^g1kj!fC$K)h27d?UoM*~2v!FcmY?X)g*`9oc=iwRb5rX>@XwSwqPaQY0lX)2X z4e}pE`_ICDGrLFnjx+-H`!V~Id)Aqm=Sj3y0rg`|PHtT1$C63mat+&4Nq3T-BfUqe zo!SV;{zc)}JcVcN_$fSJVW)jgn_2bK80Iw6Hc7a>k+zSLUOJ6s_>A-&?6F~9XRywc zJA<Vidj|be&)7KKVtvlQEEXG1iutl(bI)K~n@uflHEo{+{ZHlEEg#D{C?7*;myhjn z&N<W#=P*?j&SQxsoX7Sx@I3ltocB2$#Pt%pQ1H~zg(Y0X_SK4XDCuU>-${><7LeW{ z{Rry8TrXkkD@7VY+8-3Yuzv|dn?RZa3O&GOjCb8-Jde|^VBUSNV%wQ=4RtlB1FLWy z&v?D-m`>|kk8he;lUrD}-;xd^ok==19!u=;t<M!~nB_KxPy*D<+T6xi)_~fu{j{g= z9rXO^4(@*gYQxIiMbCkEG34=gF|PjiaeF4|Mo=4e@ILx{xPRlmnK?W_E%N|dO?}!< zCH<cC?RX4-`UBLB53rs7K^jw3z6h=?MY#WF5$=CR+cpnzyD4ca((Vs2ZF3)@=T6%5 zh_+ijN`sm0(oZnW6`l-q@?*W8?17p&kaQ$zCg}`NGg|_laK=F$n0$)cy`N!!`~Df0 zYK1>>`}vEfj&PAwS4SEXzy;KgRe<ZQK0<JUnU)GL0cQ=I0ayBD_;#{2yx_utS%GIi zIM&2UfDZ>-8hARvcfjj03AV9hi-rj{93e~xvIa{ZmJYOx!fZez4JWo9C>Xw3HxPWB z;H@-Bjp*BePV4|t0vkoP6F`+=xjKgJ1n;gvYRbkF-6GFs_;d$skAbY=Td7kib8mr6 ztR<TTd0^~6%0mwz9DV3{NQ0Y2%!3WD0CA61<PK!b#<B8z85|eLL&1MMtHiM+8gML$ z@$l9hJT4h*9e|>Ux)M!bF+^#K>e6u&6*VMUt|*aW*aZZ?T?=pF!7z_2TT7xlM47A& z(L16n)`7@gVC-3}Gm$URB-RVF#43wUkoT!<Alc%`HUkN4t;jZm4I%1DG+WUKqWOxZ z6D?7+l4zNtokS~%oY)~CZ}tlimeN&4Lm>ty_7Z3_3>|;s+~0{=%TBB$&}2%PCy+PL z461llfK1>!ms{YtIG_Ni8FR_Ah3qa%vpo!cGX-K80ptK<z14g<oTJ%t8H^0~!FSrR z1os131MQ`>TqODfzLSKuyFi8PJj|FOy(e2CdqJVtXq_OetL!bs;H52-kP`+keg)66 zK#kZ9W-s7C77d;zcAHfb*oc~H9W)bs+oPJW01W{OfSL$4IBtU09nxavwZ(D>domET z2p%V}lopZAnl})bmgPVi_vU#-Yk@4h1cyciVQ!@ON^n^H2%bA3EwIKI2#-4rbe;Kg zPojrFg)D&k5WQDaLSpO=CM=~u?nkzgK-NJ1L{)$iSZN+ao^{Ey3@=OZrI2SCUY^qO zy$SPPmRA9CVp%|&Sp_2a9T2ir<WXeX4CKus6dfbas=Nlo$JjL>Yxw=Rx)l2>ASc$7 z4~MV9I58_23R$x>zKLwEW-P%U`B92J)QqwJ$d41%Cdx#D<66N2?EdgunL70*n#Rw` zWe{H`5dPNU1<KKMAZwtTWLrwM>HHble#PVXbPja`j@wVR8Qi2{$>))62Dj4C2D2&< z=1guwwr6CU$sLK{$4McES=^n-8E6Wh&Haf=6V2i9+H43j3TO_W%VGKgs1e!b@>rr) zig4z|iFH@hm}s1$B%--M7)q*!C9xW)1N@p-XASG;PAe?46?_cY4gf*#iv;KI43Iax zJ7yEneWFABBze9EY6RaIJEd`dI4hP;aPM`3YbK-;M0woagz;4Z3T3Bx2~!4y84qL) z<V&8(<av>IBF}zgyU4qf=V%L_+gE(6DFZ^u0@C<vo@>HdFx!H);2ke%#u&DN?LL3c z1I*SC!$F_`_K}B^?F`vI@o1t;L`)1Ox&h<_KNdcd=m}6Gm@!*T^o~5O#3?hjF>c*m znwYh?W5zs;w%A!)GhZOgZIHE{^=_aCW;_p3K+yig3!-?UND%-xs!psEP(xN-gc1!U zTXj($E}Kp)lc=7ECEG%x`XbH>V_y$sg7^I=l4lN30&9!}wnCr`)<iV7S`M}Dxiz-p zCL)DAxed1BCZd&<J*3(jZo2|ldohh{mBCg^bP)5bus3ZD6u>%&1!U_3G?jG{OX#>v zI<B)=Mz&cL=C@)MQ8v(Z)>CY;!n(8t$ixPTgOswvKpAY5qC!PEWP7dXIFXgD?s<yB zECF;Kj>{*i0%Xl5id#f=fZDOu!q<X%PqoFm`-=!9>Pxgv(HNo)NKm?SZ1JpY2Ey}@ zO>|KVvZO=aw-8+w6Ug%@(I=5<!FqND<{x03BbQJN_rYdjQZ6UY*OX3spmgvw+hICA z<aRnPzz&ZqA@@*xb-}hul#u%@P|aB<u)zvy`6t<aAX`~QQ-H4XFzI5Asa^);&nwEN z*4U$L1A-Y6*~}VKod;wMltgr$sHW@=&qJNq8=_jW2ZiElkDj$<FKcYmVL;xjj_gaG zwd^}+)<EAAH705x2T+(Di5g1ySwaZ2FHwRVL6kw%RF1R8yw4_TCMS|@BhWL^OwNG# zV0Amhm%)-`HidbYJd@-~@_bL8NfLg-6+BBgbkH(bbGgMDYh+oV0H7V@84YC3lI30s zv#|r7_f+`@+1it>0}_NX7|6sr%Ohl)NVcDlz&4+3ljU(r%Sy7%0K(R>*#TR}Y*|QU zeE@8X&6PJPl=I{{SKfl-;290k0{MYF-;n1r3AY4L5>}3w&SlcY#umcVTihxcVS{I^ z1ld;08su4;XpO8#6b>|mt&<JF6COsBZJms_!4hodh`HS;8<S@nvK<7%FuM~Sk*P$3 z6?Lb{t+7BE?1=0`wx5*k2Z~{dqM>BlKy+OGLbRLcwA@B?j3{58ptM}3wB*ZEHWFf& zXR($SDvBn$BF{iN;g`mUuF8BHSIEOXpa6CY2#*_^kH;0$m2*h<Wg*#K5<Ql;iS#i4 zl8=Z?m(laNd_vTK=!JYn6kdq7m+~*7)GJ8;%J)PEi8PJdV(i~sMVq~5OQh$)MROt2 z<AcQ?M5))&(@lf-%ENJ!Zy>pA-bCweA(ha4i7wnm^40u^O5Q;#sreJ>q4;TmM0$Ls zv|u7V5B^#R(WysxTmZaA3FC8oj1;7W5q(QkTB}Gjktjr~OtgWhj8=u{98p=VDv=&v zIW5u_&%^#FcpgHvXd?csm@vLyfvm}fwBt{tFs%lKQvENa@>*@89z+$j*so%!tkox4 z^&CCJwFb6k^Y1QBJT?7@iz{dzX#wdC(g&nZNdE#2hZTLLc>oJ>4TWl7(X|rjM^{{1 zSIuoKXsp|K4sTm=n+V#{Z4zi_w`s7yx7%#cC2k8qSG)ZT`n%f-(4%ha!RM;mM$kXq zwnE4j_g%2RhSz$IX}cs+(^q*-g0!tC-A1~P^qnK_KTg{Pq*q99lRhE+ht$d&J?%kT zq<eT@65*_jcO}S6IB8AN2B2_t^)3b1Sc`iwj7Ph{9uBWzr~uoeyu(3fcvk~m?p+;p zi}!l49wU9=oo1wVZi#9#HGK)`ucW(4b4V|c-XncYYVBK1hQRD@xP+NH-%A4Ke?U1K z;JW}~`3bfI*a6>PAXNu^b3w6$A%!I|J<Up@XRnf&lKmxJLEZfvVdPhlbP(xJehVa) zq?eYOzS=Jw(zb#0og;1+c%dF~LET3C{~$d?dV=%}X#wdK(tD(jNS~8_Bo(DF96M5H zQZLYOR;pBWErNxD7N1|eKD2ae45>{n)eLlPskWec-Pl*E6KtO^)fMz%sh*&E&8ZOd zb**R&Iojrhx{vgoBW@q3?E=y#r2mj!A+_>u3~2~)^@8!^@E|PVv7{4&FqWVEDnShi z5ALb8NY5fYPMS}8m9z*nfORY#31gi-rPp(3_WD%Ey2W+1sB~wm)bzhVi}yH&w1rfa z1TEeZ9<mW?<7N-k<DkX+BSU_MJ+(+<NfSYftsDHhLO72|+l6#BLhBK-6^>fuvDNSl z4`~LT{Xivq5YpF5vR9<COd4$al^Fvme^LhX`<c|eEN)jRy8`z6m&3YL6SO$q@Q|~R zqj!#|1zxECfWq5cJy5Z(O4hSnPl#(U92LO!lv`mH&L)Mr!}x1<D2xHwrLes)-g+H| zE&Vg8U3uJgC-p7A0>X(bKMnT8mp=fWDYU;gD4e76IS|6E@@GIdkRBnuR{k>VxmXF) z{5Ppf<-V|8sd7^oPc<g}zH$rLo?02hIT}6*whKt>RY9LFRnY&(Druk_tBkRNni)|9 z`!TfvY;eR|>j3s+#7EG@5&wZ^RMl+0-cwvYMWs7IX-}()`ZH+p{@4%)8$6q+YpbH} z0&S6=Th-OZ%nGYwOTR&SkMtqwGt$?jA4z33^t2=Otma_DnQt{bUxBbEoP}2Nwh3od zXuCRTUD76`sia*=2apaS9Ys2xbSmir(j}xTNY{Y|Fpo%#D>4%MnQoCSA@;FBBSAAF z(?KVLI<uLP6JUE~B=+Z<K*QM|k&_@*d8C&}i%4IQej>GrLLXPslB8jvoc&dOgoAz^ zDK5#P(nB4g*408a#SC=}V0JO1969S8^8$27jDu4EyBg!|#Mz%QexRRY%77-;9uMj1 zQ#%p1&(?-AR9BPmkdaQQ=}&8;z9#($3P;ucQs?W}Ne62a(w3y{K?B(Lb+Eqet~1q1 zveR{DIVGpph&>G2I`$Z7TI?y%sj=yx>tfG=9*Z3b`Z%_;RdTvk_Y!QkuX_!2c->}N za{A=DZ9!Mp{h24HAF8_%^lII$pl|ASh5e58I)R4OL;r+&>tTP7dOe{R9b2!0a|D}K zZvnKI<Wg0fCG?!NKv%mp1ik9k9Q1stcA$T{bpzd3svju!pYTgY^{_X<E3afbAWTWU zt7M01`*OWu;Q74XkD#XdQ$Pdi&jYPme;H_E{q>+->ti1>qW*T+9#?-q=z{v#pG<E! z&4sgH8_okg-EcAJi-yZU?c-O2mX2TVg4b4TQx<n8807pO?*n=yz7%L)d@yLCbvf5? z7ThS&)tT)(U#*!ldqY~j0Jr-UtODIwu&-GFj5J0#1h9t*iLL?cMZzICHmC{K(nd|N zmiBCd?R_F?b`wW8&JH#4a&u-c3l;`Bv)~Jllbl)W3mE3U3u(=r8NWEAd2!uHPMiwo zy&Y+1(Bl0)63@Z@zN9kxoKuVRfr%L7{KQ5O{u<iG5)NRmo6dC$VEN5%fZ8U#03DI^ z2{b#&;?CLSqyTrkUX*W%y1r$L^c&6bT2n;&iu4nyZ42CAnzR}yXIe69<z&oVD^Ls} zHW~90n_QgE{vOldS}>S&8fgaU3er8KmqA;kZ%dv?qn$RM(2FMH2<Lh-mfl0s7o;nx z)qkcKZBsger)$c$u<TQ>6?#3<>w{iHuqG5=abi=kj>V_Wf|l~XuRi*<W_c=JNkd#$ zLCE>3>p*X%PK4Y&O~sVp7?QL1shD5c`Zut;wZ?RMw!v~}+6H}kk>Z|6wuy8*=@~!V zvyF5w?Kw$$9n_i4ZfoO%_4X2^?J~44tnDK~yVgGpnppoBXw~}XKm+QZ0)1XD9dum% z&XBvDwy|(*e%pC2lHF~)4D@;1)u1ElS8(R+U0baA*eY>6QwtPZC8t)2<C%7_jjfVX zt1KSX=p$ilkDOX)@t6l&C1+ON>s_!#{L)%7@Af~JfcHkUUjfs~OWI@q_DlQqJd)Mx zJrceY*Q7U=XN%tHzLBhL?_Yca*f+g5f%fTr2&}Vv=Yl@%ecl&q&fjfy&j1(&VNX7m zG&T*lSEgYPulMt@Zhw^wV0+WjAsh_9xTb}NjBvnF0cwF4>OZ90NROo9o{xU0Cuw^F zZ66{%L%NOh1nD{Qxky?s5RYn38V~xv&ox}}hhoV%4%_MneakSs?!=LH9kvVhq?0Zr z-8u|CFOa?^AGhJ?UuF0K@Jt+@2)#$w;kmFqmUP8%?2(R>J|2$8x{W}sL)xA6#}U}8 zEEs{Y=Z$<1dT!*ups$<Sz*qP5kyZau7h${W@LQl`NfU=Zf$bH;(dRg*Gy8aLOb0x( z3xi+;GAi01+X9X;u8wNrkJj29zbbA2)by64M}T$$4PZk@kM$2{4@S>(31^>1PlFob zFy=7q2^xd7q6Tck`5l8PfBj?AK+gQe;dTqsF`yX!g^n0Is`rh|PR^{`4cvZN(C!=T z8`pG!o_2hvzyP*!{0bNy{SF!dHSIUpb7K6qz##T^d`~Ti$qCpVhfKimOUFNhxTa0O zH2g-Yx7J*+2C&|ls8cfW8oH76Q0Cv@UzmyGv<nk)|NDs;PCyoF4bpE&$7Xp3eJPCt z7OZ=y1zxBQKcQ~$L-nHVAkxa90qovS|NrrtCt<wxCt>;bnuM`WA>A?w$BKIF7;kYu z<~|v(m=z~u?)3YGTCj(+@28^w^r;xaZ&T^6b}E+1gQ+3G&~Hz}{rb2xa2k$0>rca@ zI*<+_ok6OPV7E`32mQn4X+MJgI}Jyt!PA$)cH(rr&i0!g24PMo-83D?IbV-vaU83U zY4Hwmg>etkq|Pz8epz`RGp=a$>ztwy&M9M$mG@!VgF2_(VW$Arc_!xK>pO+NhvJy| z;!M=%q*k+VTfc*F9CjVj<_^8?|GQP<Q5S}xe%&e)he!K!rnkG}!*PW0b-U|2ya>Wy zLHozjw%#@aXJL%RtrF8vYZmrnt!80p{m7b0x{UP5EUXU}cWiOk)&f||*%)%y*%;%% z+2+!z={@H3gz@|^(&?njN&g@{Px^w?c`kZ}kk%k=M%sroi*z~ZUeYt9k4VKlJl2)8 zENKnWmZaTDhm%exT|>H;^epK;(pRK5^D(qQ(i)(Vtoi(nW#HNhS1Y&%QBE!HIj~31 zX{7}tpnM#MVf}2kz{mAV``YS<tqJvH8tO;dK1BM?5%&~$p`M{V0~cUVSYsic&7}*c zLY+Laa29CS;pfV7c4r}~Wzi+jv011U7F`2vx#%|N(M32uzq-g$j<frV*7G3ta?vQq zAeIr2qsPA%$HRWHB(WU!QEt7kj|v6tR}c%ju^<KYULVlM_s|-0KeX4ETvQCh6rxV{ zstDgKpS*OEbpTtq6z^g%<N(%oS$=uAJ}$cmiuV+$>3VstUWO&9*MS|heT?)L>EEC& z(#^|pED^lCuaz^a2^!84mM^Lp&N?q&UD271UXFLct5-I!<jjt)>|7~;-Cl|FHh7=X zBK_&gOQJ>kN6-Lfv#NqD9tF9t!WpOFRhNW`HC{Cy?xfn2c3CwR!dbX#JcRS#D(sC* zto{}De7rWPANJw%`vtJ^tKU@efc|-5WxOtUg$K~M4&wa<W5K&cc&-GYLGQYzAy~_< zX%YUVtS&*Te_9*$HR(sv9*LKrAE>sbKlsP383CHS2FDmbfEFLywzmTu_0AD>;~Lbh zq=)=)`v7g9CA~;`kMuF=JJQdj_G{7Kl{A1fgfxP*25ACm5@|=$Zlr@qN09ai!Ek<} z?adyzy@0ll)Al;rUPRjmX}ew^`sCAgJZ;~g?dG(-fpT#%4SoKC{l)DC?>dW1AUvd8 zmDKdV*P{MQYF<~aN;q>^R}s`_T}{vq>$+75U~)a4J15fg^`~G@=KB09`dF?-`o8s8 zD^8JKCw)Ttc0G@XVB%LE5zb2fiue2FLE$+_=;??6X4=?4Tn_=qbsGoaRXd?7)(!Ju zyoWLm)<<qQbGWH$i}X&L@Gf$|rr$gx*c8$=pkMMb7VaQkZ9@G_YP}h^dzM2zl7@PY z^rIhcpQP;#w0(&54Cyw~E=$qJhe8M<Jwf{~!cm;rrr>zK%4VF$sI|F*jAWr(!y+*k zI0AWd-gPLpajfC#f0_rUrk~i3t+FkQLQ~UkZ=VPuKPP<;ivH-yFa9yynZ12+b$D@( zth}p6r>0-=LVf3mT0q<XkZvPg1qy2s_tcHk6)pq$8ymVZtGnmAx$<jI;s?6&=cInm zCJ%<|Z$4gMoX_Dsh%YFt#ypn}vpO|F|IgOP|5vLxk0IpkDM&W60lT4nkz#1Dbm)J? z)!~m#zOX{L5cU1;@f_AU7or|1#1PJsUM9U)sI@V(Plfgn!v8&-@2+gBYG#A3Xyp07 zb2kz~K7R$nzj_6?@6z^@EA|k+ysC$v+D=a=mWH`BtYy90r=6MUJ_oMB><TNmcEHcf zw(rH<ExmzzHsA1r6?!LclmRWe(Zbryw3~kinprUEzFWBc=r(Hj9rXNh*H#GO$6YYC zVe{{P><O!m_gyM$W+V2)_>i?egxk8+`$*?Xur~F`fd0j*?=e5Y&<5l-1wHX6`mD~y z&_?XXRGrJU8E$5`a&ddfE*w`(&&TWI*XMf9Ui6Q7fto<tg0$z0ut+RztPg`|d(4YV zBHte#w6RP}qH6@y`9ekAU8@7#(aCF!Yb=L%%IU<$yT-#f6S`UW%Vd*?oE6P*Z34Dn zq71eeNMmlL(KCbXac#j(tPxQrJL=kzTiAYOyWrZD+pru(cU^mOTXx;B_2c%eYFP|r zrdMLAhMEJbOEli%=zfShumqw^i@$p=Pzyzs-1C6i5#?Ifc0bD<*|$VTtrOh~fchxU zcJ77nv}%x|LGCw!Mk$)&{s3C<cttDRp8`!)wA=j^cVTlCoppZ?v{X@%`+wY(tyT2e z-6CAseIoclPY)O2#-1s1@bCh9qo|~ZFOXe1%x$i9m`5N`oT6$TAwc_yGA*^?O+aq! ztfIyqm4OP0#<5h7DB;fjAsP?oFP?j_s-YNW2K&~dw(wy074`6FAUxTOFx}RN2)7}2 zQ-6<K?x_RNV2}U4q6|pO7uz(CCSTDCkLF*|9*_24(PfYCfPSX<j>u;e!z!Y2>;u_O zmB%Q@F%M4+)4!rlp`I9KTqT`iJuxkPE9;cviD?NA*Qu8$#urxwDTAeZVjkWQWwLpm z@j#LIRSsBHx!7|6c*YtuOn9-<RrTXmfu|2^r05WM`miNL<JoDjm0%WpNf(>V?t7+- z60EtRzkz(&Fro}5ye5j0>;Tan?&%fJ{n&A$9A3pM59m5kF2{CMioGVvwEW|p3-pg7 zU!Oc67%;<MrX|KFm-{n2MX6x(XYPuy6$h}Aim(;K*i9#>1u-&^g&PzngIFztn#f?5 zW>Bgu!`2dIupvGn@M@wHM7a#lbSOKg2+wpVyP^ndNGQ9b2x~|vd#ng+K`48v2x~zo z`=AKxStzqaVg8N?tP`PZJ5et6FQKfED1-e7c?VlGdS<YhM7yi&luhJ>uR{gfdY^dk z?5SvnPZt@=Mk_kx(?f=_If`~#^#RI{(T~gXX(GxqOKqJlLf*@>vUPO2P1HfrOP>L< zJWGq!ZU6Xmg;l+~6*-m|A}cbty1K1YiFjU#byQTL#7J3*4Nw$aB2ZLf6BN}eF&1nK z745Vd2eeU9Vu>uE!;0FLm?|r?LL$9a3}?;iVSJfzru)ECP5m#|zP#@^S%r1fZI)`j zvw^xRiuG;6tFV5Gn)n8a2sT7fC*LfI^Z6K#-iK6WS-Op#@ZBV<!n{1%axEA`Bs)q} z#83O~1iDOghhOtO2y{z7j(Va<_DUxRr3uUqTGjs&N))pp!cfl2DCSF~hZ4nti7<ch zJc>mbbOk({>SV#*v^r}=q^GPp>sV|n83?xSihN6E$?B}1qR^7LyapShs8-25ps_kZ ze79vyHbdE#l`N7mFh7f_&a`YQ`4nim;rUY5W?Pl*LCMcDmhDyavZT~v*%3wmf~_t) zsmR(-YIWHKoghAItsZ+zq~{@yeN>*U{XWY$CgSwiJHv5t%vO<u$86bvxhm@A*Mv7< zzB*BvHDtj=vstZDb+m@;4Ut}Z8Zwu7J<M-P<?@EiN6`<Z@_>SgCRoOn3Ka1yQQ0Pz zO4j1pUZQc9d8I<Yc3s)<S{2V)HPXZUP^u4jc2s2X9{}{7B2WKeS|ip^QAPhTKtmPb zl{tZpRfJdO1eT?!f&T=pF`J>NlmBF(Y@#D_sDC_f!j>!BT>n{G6Shv#M*jssTNNGk z4-tuMucE8|*;*nyq6n|BP1yxSc!h1sZV>71p&7GJ!2FG4c(rK8DiP^d*k-JQBD}&T zu@j2$3Y&xn!C$Tk$5Kh`64~@?KoYyD=sDyei9J%p0+3!RawPgkQ7IzGK8DFF1Y~PT z%t29our+6%iduuMIrBGYmDYllQ`8GQlUWo|CY#~9UQ1^64BD)vur@^Fz_v?EWlIb? zptWV?n_}!4Y+%58ts^@{G@DHfNQbrg?-k*-@f+sfO!w>+P+N3n0~F1I*t@XtidF<1 z*SfG%igtnLx9l$}wjACoV1Ve#UMM;N$8}?`6kQ~Gqv$cwd!ljdBOKR_9c_-W=W?sS zc;20zRpd-`MUj7Cw$`29QB)4-JN8~t6i^Q)TIiuf1!l>f%+{cDS}*2i&?T)mD{0U* ztq%(^=(g6ERWj&-_C1R>D3AAJ^$dEV{lJ<S^jz!DQVc5K16U`6-e?0^4}(5vgIIrq zK5J=gxIre<U^dPmJJS$0)gV{XP&VHnAJZ_l+#rh>&JG$BU>d=085Cw3$vzuY%`}RY zY*}1NbxfmKErSwFV_18Gl1*dTD1$nh(%C74dYCepZ*p-c157`%z6Omnjbr-^nqV5w ztW%0Tr<*3QvIZ?SWwLmK)|e);?+n^z%3>1?I$-*VtupAOX%gFQ&^gm&cHW>u(-ihp zQ3}+FsqD3)E<n@RCn9~!H=UVUVahTXj`^lDFQVBjD)5GB2E*Uvf;$^FAn>7SHk&~- zp3MjxCg!s4?a(%kEe)(K=Cgi^HbD#v*f>QepzbbY6BJzyd|_J17AyKQaDZ6M)+=H` z+1e78qsS{Lp8w2F6Y2MVKeMZfaOC(id!!RwJ7VNgX4f9mf>+;Ip3TCDa_Mex8H*;$ zVc0g8vChhd<+7ahQ-uA}3N}g+wy~9Lk|JzltJnfX*t@M}zbe9ha5dYn2z#*A?2IBD zHUGk15@oQtK}~?*iwW?T!LlKLYnYp&4MA7r8Wv16j_m-?b!-n&E}Vx#(|UGT5%vtf zvI0feGyKZ#8J^kNugr{Z0bzJtmfXNf8gx$E$Px^?r2WP^8+1+E#AX<DTieWjG3bG| zh3zvak8fq?4SJ$&V~-7bu5E|K-^H;P@ExqOL2tC3EZ(3G+Ah|~pwHTFmS&L2w1+J; z$j-EvZ8qqn>35cEkgI7QyK9h-=?|uTQylv_(|%TpD3k3EI%zt<QWc#Fvepi=F*?DB ztcf_xGKn%Qz5Gs^4zuaH4eHWK(-901{&G#1gPMpO9e{2H1(?6k<Df9}F~jyMDB66I z9i&il`M*JR%%|89ovf{bbNMNjtH_n;1d)E#KE*ERHij{rVxNdISZr{b`7G<u86(MM z7+*eX)CDPnH4PqNzQE2C<uZ)@B4gj8O&^V3ViuxY3iA@%pa?^`!s>QKPyM(XESX3@ z?k4M?Y?zjtEWMlViO1bx>D`fLvi89l<_GLwB0ZEM=J*}j^iUo$Pa-|`hb&kThVlg6 z;4jzoeefjnU#zdPVIH2dF*;eWlwPn5BE6Jeu%Ev2e8F<Qvc1%UWV!Zf!6D)cjS9}z zz7USYUm2dg{0dF4*eMkz=Jquk*aOWo*{a|Z=C^EvqP@ZS=JzazNIwrBSW-{))bsu? z>p-OE{WI&PY#8Qe_DK=uo%2V%z8q)bVZD*`<IKD&kzQtI-d7PGXU%sg!cwy5IbR*; zz)yX3oCE(vl)?N;o2{HVT;ky`gN2lKvU2516x|B)wsPn0ebJ`p$cr~3%3zgCm$vfd zZxqFr4znuBFMh9kV(g{(eIh;8{`{FvmcgZSxj%oSXkzI+Ao|iN#DFCc!1Mcki7%MP z^+%e?7M6~OUx4mQ1b4}$lda%;T?4+v7smGx>G754UDa{dPo>r^&rc~&jG+R5uL#Sm zGS3?LC6uasK9L?uHJ<%HXpK&mp&=on8sDU7Oh~p?jqg@80c?@{prYwui{vL1Ed*N> zKc{FN*rNDVMSDVgMKr&w=xj)Lt7!gAQPncJygGLogz3z*#Ffbd@>i4swi>*lqMl%@ z!BZ5CDwAbZlaElesLV8=EJeG^%(be;e^Yd>%wnK@M0z`l;W-9nYcae)_oVx=+WeY9 z*;;LW-=KJ2hd(nYTdTwWHfWnwEdS4-y;k+ObsFYqHv2v}$10AOAj-5nDVxjVd61&_ zW%Gc_D>9eM<&Ah%MXu%YfMRr_lqK+FgKCQeK8$D_n^NwARb&2`Xf~Tu?wVB-{$A1Y za(Ar~dGo<~T7E6}r&Uw_jtFbPTdU^WZwT6EvSZ~wTeajNM7iujIg=%smsfPRoQ)-g zCn|bcuF%wqH&^twoTDX`XDa#+j%&kz(#hf$>MPpvxr#zUb9r07Kv6ZaEhEaYG=z6Q zwdFgAV3ZJA#?qFbA{x(r39V#l&%K6XI&;|e(0JaFM-XMQ1EEotj=Td=20I>F%hHMe zr061ee#2KPDhjP{`G#*M%3*Ip8(TW_<3yS4KM3Vpt_{;;Fo$KyuDl9S26GO}*1GXT zWh)WZ*wUSEBg(V{g|)Qw;5T$)<-^)qdh!p-79IAjr8l=5j$vk6>W1|O^4EzahNS^% zBgjVQwhw<#HvPW84@V31OZMZ!=2#3e%??`xWJkvpS);8Vchf_$tPWcb<WH2ra>BO2 z3!FRXo*a+s&)r61n0o6U#C>(L{0XoB8^nW&GAyh@cdJ3Xg0i_*@D*vinxY`ErSaN| zs+PHJ8O$3hiYt?B8qAXvMO1if8NypDs$1bNpw2|&EJ<J+%6ls64z{6ufbtw!;f-Y& zpQ30!(HceDi4H3|Lv%yY;|ibQxc7=mRJ2$R<0VE>ZY>onIsjEyR2OW+c?U(Uz&4zZ zP}B=-BlypXMu2Su|6S2!u#Mz575xmhk^GaQO<)_vOO4j!`yFhfc#NW}72T~z^9G9k ztmp^SOcAS;%g69kMZT5tfI1V6gF4aOYAjzn2E!c3qAQifZ>WvcDG}&L-bT?kK;!vl zMT3Ddxm~*MIjK@*>ny&2Xf|6=siyU0{$A1cN^#axxL*c&T8hG_TTkU7ir$6K1?sHG zQf0dJG~Saa)8bd<v1J<Xuc&gBzkr4-N`X2too6WO33XyRpQLD1nI+aU_$)<>%B%re ztY~+cZPqjSN=4_&><8LFq?g1jZuKLkQ?K*0xg${~)%n@nODAeab9hzVlj{5&zE`&~ z&xpUQ=kpw*TzGR;h?vhYL>z;KN91yY>|-JVzu4>(iK>o6Pi#5swfVfiPAnTjS-{hY zav9E-FW{RM;jH@tep?aFx-Z~P<0(FxtzW=n72$0C0^VN{&d4v|%M{^^`~rSjCksAz zTEMR=!nwQ!{GlRzlD2@qAv$WoCus|~m_YGa@X6Lf?x+YyfD5^=B7Cy7keAbm=Jgly zXreoO4V245-a#kpb5IfsdAg#{M5~CfTr4&Vd2A+?5|zs$-joRM$3AO|ct3;k_+mcY zpf}nQzS*FWrl0vag9`Xk{>q?}rflvyQ7^%$K$B@1uWFE;X*q9Y&;xA+AEF5F6j$;& zitsLSCEsdz-qu#~0)t#ltN0s(vgB&+o>d&*CG8g;X;7hQ4R3AG2W>4MX3!ID9bafr zwzi({HOR;GE5ByYIc)>~WY9HjBQN<=aeU`Yzwz1zJ=ZqzZxrE7#%7+b2=C^%@a2l| z9(^l6pa^FmxAGf`@J@d#|EvgSAh&VfNqT&E|GtgK7_>^;&O0l@JN=z}j3S)z+{u?H z!uf)o{0~JqU$BecRD`ntyZI+YIH$UsSDlRU>DRd3JbDUJCfiyq%CegeBg$aAtCh6b z!^=%YTLwD}w3o*!x?L^M=69YlO}9M(+dkfZx=wGZm9_bU+s)94MV7TWz`s*u7g@>X z5dV=V(-Ih2&E^Q7q}wdzBWnZA)@@Lev$Y(4P#qT+8PAV$-&uN?%_0kcEVGfuvG$RT zY;ueH5c{C8t~ST{syS$zXNioOVRM4-Bg%xQJM(~Yh{joBeU|{`D_fJOl{R@Qlp|It z|AW4Xs%0s*;S-~EHYbhvdPn8*ll+4oANwY16WE;QV(gigVGzn`?nN}tk`c8BC_vdJ zf$a=0r)=}Vc7|6~HtbQ(@-p)<6zq57`B`3>D3h&<Dm0zt{S|Ei%I9n6Q+(_|)Ipnb z{K5jAP7r-ss8a!v_adZR>!7ea@T{ijX4E;G^E^c-KH2Mv%>|A>JcXVQA)OcbWJNED z)+o=9QMbYN8&M|v81)qBsIqkmdkb_&+5UqO;6*MMW0;vtM(+U|Zey=Mr5v-p#7mP+ zzakX!s>-u$gtcuU&mx-1Y@=OmukwS6JfnSWuklxkN<|0RUg!QxFwA+D3elBpZ}I*H zMcUrx+Rw$dI<|NCFoT-d-sQ&)YH53qcUxNQ+1d6!_s=e-ezp(z9D_#L7IDk6Vq2E& zLq5u&Iku1ZDT5Z<KIXp5i#=D^KH+^0T4(!|?=xt#?K5t-qS$kn?Vr4ZLHlk0;`s*U z**@oSD~mlZ*}mYr4Z3Ull9yjqZ2Qah6<=l0N88ujYjv?r+P&dZ405#l8@`lKY%5{+ zmNz#j*zO(AF{rZLdmg=}*t3@12cBh6eY=mm&>&yie|Vd<#h#7rKJm2%wXpk_zc;9j z-Df^$U9o3pyZ^ZV`eN#3$3&q)L+!X|^lPy#-A;(>22Hb*qU{FVRy}&YohG^%wA9Wd z`Wdvw&Mbx+^qZZP7;n&C_-*s41|71q7K;ozZD%9a7<9$XR%|lpww;~WXV71E_Tq#= zpX?mOC4+429mPF^JnWssGlNRnJBz;!3buzg+8Y#R?<#CJ7UwU@-c7g~6l?D;{0&O9 z_Yf5fYGdyyY8ceT-b=(A^u4{eNHJ)*y^rW(&;<JuqMt!C?R~`%gBIAA6k`m^w)Yd6 z2K{1RN=!FsqrJbFZ_sx80FiCbKKnqi#-OA2L1L3ZXY7N;K7+2?mlin&J+KcE=ZN$t z;AO;hMGc}~+m{hoMzCVSYJPN}C?nqKHtRLfU2VYj8`?72^Jt4hSz#fX%|1oj19c{v z#~iDB!Y^-rZ;-u1m>8mt^QrFVP(jQvC>V%u(Zlqq9_CO{_!?Bzp_1rEG>-*Uuk8>n z+_s|UJh<Lw+gA}S6_p2DglI=Jj)hlm=ulORFsP|RH8F=s9}h-}%{tL|FiI3E!tr2~ z_)L_^Vyd^aL<!3_J!LV~lO3W(Fwq^JP~A(^5apGvNA;C9HAGb+eOypOJl&4R;T34C zLk$7b>F|eR%!v-Qgu6kPv=|X=PyxJaE5e{_S{+f(pa)v4XkpN8t*+>7kjYd}^fxGv z*B9vqWovO_l0mMf24ayx=S&U7R)c&@@gm2dLQ^C0i0FvGYj}ci*ok?_wcu5|v2Y`r z4YL5#92$##yU{k2eW*U)p{aO7bVT4tAW3{8n#asFes)L_@PGjR<}o**=E8|+CJU&s z%Atj@+pC9CvBoxsWKoX@S1GKsNfC{SGHDe?ibzp}bH6EKt?mhPNX)jC*tZWuIU=y` zwid65X0p094mq?I!GEBwh&QWo(xI)WN|ei*)i7DwiEk9Osu3vKiy?~eE~~wmNt6lq zT<0Cyi)^AIUN+*gLkF?JpqmaI#WSKid_avNhi^og{d#=UYCLu5EE*8q;md2ha_Axk zC^}u^J<xDPf7kfW;aicR$g`%|v8(t=QO%n6j@`seMICFpId&Hd6=l>c;rN|cu4qlo zK*t_pouZR9%Q?bZkQBYFS=q6d*rUk3R+M9JaY#|kTD2Yfh&)AIYBg}|D+&}%td;2a zy||`mQ>|8x{lq;*S88=~{6Rb;!dl+bae(;SphD9?0WU^`zj-i|_=Dph(UVB8A!(vN z5gwP}m?owWWiYRpD>j40DWW1C5|iaPL^vJP%QGZqhT||%ThUWEe<MV^qSTrT97l@g zikxcx>^MraRdlA-3dhmnTScpDt#ceB`Y0MxYqR56k)~*P%^i;EVzi<oHH#cFM5ZG9 zT6-OT6w?(&)I8ugPApK=rdE#Qc(Ghj*@zR46U2H&OKYBS%oN)cJ*rvYI8p3VRHas- zW0p8dlxe9LbHni`aavJ)OcBr}ouHJuTTK#0U(saomS~)1aSV5wB0eix8)F4zb%?<q zmTq?|{P`99%QfMQ=QM+GZghqSH9RXj%@lD&MI1e6iQS6ObB-u~7(>alm}`59xuPmj zhQ+IPp=qv&QMS<9QBLzj17)jOI|itkZiBSMIn5Us2Bu|x?bc2U4O&~fqtjx8cGT|b z^s_;SYxi=>7TpfxaT)AZ?fy<H#0H`wj-jj+rxal*tA*PU^ep0d+!_(A2*X@2Vu`R^ z;`s*ANGFR!om`;iiUR870k!?gbED{DP#)hX`Wuw3{U(O1<3`o-6`MqcVe4+SNh~9p z&8F3v;IvuXSDx4EEOFW*o+)}=X9duEMYgf)oVE(T9Lz(e#W!{nP<fpw)!Rf>gH||g z6ZH+s*0zg8b=>;;Syns5Kt(zArvarax>^6Y^G@-LqWAUB0Bu*~5_i#gm$<5^Lfkc= zM~WK7-F4nA9FFQK>lF70$X8KX+;itWqMo9uaeo6fSM*EVC+EGQjiMcKCYQaUo1&aJ zN0;BlBt`e)+<_J-5)I~B?GyVIc{W%KbV^bA2EHzTh*yf@8w3Kuqbe%1ZyS_z*)KvA zjc8B_sH&n_4I*6*h+2x)G^hpCK+(Pi^<55%ri#utNB~Mz^r%5|mqVhHqW29_fqE#i zH0<aCKUb{CwP9DFVTvj=?Co+yq$`SQI2dS(qPh(;Tyn%tMNJz{1j<o_>&T9Zi;8d^ z*-`O85v~Q#6)zOwTJT&^^_ZS_Tp4#vv{QsD<Bo}*ig0DzaWPF1u8cb_mMFrNaVNxK zMYuBVgveKfYu59`TSd5LJx^%I_4sft+({9t2-m`$6w!)sJ^LxqNfEARKPCDq!qs-C z#Vkd*+U~SirU=)`oe^6U;X1i9VxOY64RiTfaaU1V!#toDMEV#kUs#=>lu=vB7rr`K z3gauf=8F_XuYt~qpNMj4ba7tHQ-pJs=fz4zIJ0nGY*vJGmFLADMEYFid2vA5aIUgI zoKl3dlLg`m5w75?=2{?LDC*%+%k_c?%fobLSezTx1BzBul}I~HHrBLJE3oxd)TU8K z*Gpm+5%yr~waa3cPL|${>X-|~0Y!rwb#pBgcNL{KvN&83&xkVE<VJm5uZXxadJM}O z4RpOK@`-X8&i!5$FBIY0?5o1*EPCcLobA0TDl5Wy;j5y#BAolZD*7wJx!<c|h9aC@ zzAAPTWx&eFcp#?>dh9b?M?>uCmvlM{DZ3_oFY9y%=(>2U=oQcnAqsWde?T{duOi2U zKCZV!&nvpk59qeguIW@UA)en67ZlY5+Z}Q62HIw_goG^DyW)(Z&I!|8?~D6H8LS6* zJ`g=`>Y<EEnC)65?kk#}u-NsHc%$fNpvOYHrF(8jSmF9a#1ZND9nVBho#?*fnV6yo z?>nA}X9ap%em!5Y*)#D`(LJC)g`iTJ$x0MdZ1$JvNu@NCB^NAe_FSYXnp?27*$c6m z!qi*9OR<kA)1ozo)f6H}k#A#IO(9Mzs@gbEyb>1`#W&89uf$D7?HcFu*P=*K-^O`B z&lQaU+Z*vt(NAD|BiL=sL#Aa;<2={Dg+<Z2#utE`742_)%k{1BR&=591E4@fPa4;A zeJ4T{y>0vqsEQ)yvCih5XrvR=`L|&6y2IcvgV{IH+&+jJWShzE75wJ)QN$?ny09qf z9}%ml$%Tr|J_$z0&1BgZdN%)8I4HV*VSMw?BAp2D5u)7w6F(_xRimyOm-C49F@umx zb+YVAZ0aWDFN*RKlYurVx{(+nq&%qTMPjxl<rziTyJ_;4BJABX`G`ngX<?GP??U#V z#o;;#i*&e;q{nV2gNbxcJGn#=dOFG@559Q1O5BD}?8`On?DmBsn}&!l6xZ~-uWZTx zgT8Ir|0|mVwD&K^_43Qs3^EO9I>gP*h;KB+;BL^grd~iNjg&2NbC*|%imcJ*A@3@} zbb83=iZGoX(o}?bD6+<MddSK|8SF#T<v>G}4O8tYH!H$ad&)P8FxBv$>4$nKm}*by zq!Y(fd&wwe!&H0APZWCwt9o&{o45R4#rN&Sv=;Ch6#C0GnQN?fgV&NM63y1T`5NR5 zRMMbeAU}hu0hKbSMYAn#{sw*5Y_A)<ctM5vW3$6<rN5#RZXpKE0MD{t(H6JRVzOV> z?3`N#8Amz7`f?X2MdcP#T~YQ>gsHA1M<~KnSC&&1VXDLBGDVo`Dsr15Om&1jt_V{d zDX%NSR7cC_2Ay!LF11IPr6P{0t|`kKw8bq(rs!misg5nqgXwCs$6wLYX6GI1%E9D` zIr`hJp3G9Apl5x#O%Zy=6^CN)mJ}iy807yys6tY<_Qh5MYz+<11h6%fhm82Rd%QfS z$6$?NHj+0LVVI5NQ$-kNBl$rQhM6GEk16lg7-oWWBf>n`yEm3W%7!hVi3}skwZ<0E zL`EyZ7SKf2RD>;{iL9px>wFX0KoQpYCbE$ttn*D|6Gd3(o5+?rQJqheZIun{d{fzh zXq;tNlAC)|*^MZ}axBRQ=zAhewU2u<Ia)u?g6T|>8AL@?E=h8lA}p6AxmXdFOOjlt z2+O6p+^Go5rMb)@%COirFYn$$;(J2%zOD+;U7}nI=Dnr#c!IWE3+A?^j3$~5eL;2i zmh!T0W7wvX<yAUvCbZ(9mMQWn*)l8@nm2N9CEpWaj+y~!PxUY{hEy3tRK&5Zq{_yM zu&uO~trcNgX(PKS!nV>@4p4+`rJWq32-`|~IaLw1l}>W8B5W(2<z|CUxOI^i6=7TH zDjylN#SMNr;2EZ~h}ud|S(zx8a@$jOA<D2MG;i<TOZFqe{B;2us(Zo+H$?Q7;}v0@ z=q+a{!t(4Rw-I3|{oMP=gG3lg8qf*liJ|nBmlR<redT>c7|Qq3^e3h>!!opahWq!@ zg$P5L2vmY7*MjxBpDe2g!|W%kDZ()O$@)YYmaWa_xc?xV6JaQefZBd_Tz~o9SI702 zX^Jq00Wwn&*75;zfg()j0J(=K!*Zhe8utM*mk49n2$WA$#Ib)FDF0Q*VT&6iBmctu z;T=PW7$oZ}!c-5EEfitwX|k&#j6F>bCMx3COQp%bDNI<0due&g!7__%nU;nvLc|a` zLs9n@+1e1fP|^4nxqPTxu4qY%JfQW8wu5b$+^Xmp*oMh{MEWRUxO90=XN6sDG1p_1 zOjPu?#S)LvGWLaTvu*i{$5^>RQ3;?7ne$S&g|*!5F;05D(kY_lE|2lD=WCr3fU;!D zJ0yL?GDT*+*KMs^=6KAI<3H#$#OH#?Tv_!WoqD#s@3Bah|D@B{mQOqu%V&yaw*2U^ zOve4I+t#$yJXgr_|LOEcOIOcT@LfR;2;bjq=I^;y&QWx>Wkt^o(ih%RfVNvLV>~y@ z(Td)*jPu+oR}kszez(cfM0nog`F6RKayyglyi`4TyX-@@nXKRC>d8CgMZ>d)=T2!2 z?{UBwf>Zi=?vn7^5kwVJvg9t=Tv2pN0pBg#YiOIv;!@H)_sIT487w&^p6{3M6n#@} ztml3SzfwS<d{b_`=K<N;tW%GaNuGyfnxa8KN8~;tebvrUd07$Os~wfM6yd$vQTb32 z-qjtI&lTaF+fn&W5#G5SmH#QiJGZ0KVui8m-<&-vUl3)m(U7B~GTl~B*{qZqp1E?F zqE#tpd7fl;x@`;OFHgGJ>y%3rt*9_17i<R|blXFs&5k;~CfWdR9l_G&trmIa$s9%Q zt>XDfImcPIg|&h;1hOl<mkd24$(F9DVXHi_<tysYD%<mv><e!rM9<#f3BMK#Z`VT_ zNfhg&(?p_!@UA(u&1n^7IW7I+9dbz7KxbrsMF${dXQh2f-F6a=%a@UgE)um>bc<+| zqQ8jND*8b5UXgn$hSCV$EQIle6U`^mzq6b#PZJe!T=SJL^L4VuHDCGii6UI{l`lUK zWm<6Ua=zrHFw9H~u3gTTc8YK=@0_fn2<P(7$yh}=mv>%%rwHfr&dW4KIImbB7b(Jd z#R9oj5zZZ6kY^O(+~EazT@lXZU6jIKPYcfFU6f9Wa2@p}8L0@@QD2gAidv)wip#RM zqV}m-^0FMJsC()<r$V_@(ZJMAKpPZ|O$`xO<aR|fQnR%y@}MGIe|=RJDZ=&FSLGW; zxc>T@^a;?@iR-Vg$+C)YP4{)#OcAc>zAiiHM19B&+0CGA?S>p=P(1u{%SfUOOF-+b zo;T$Z-DZhs9Vl+fRf_7j&XPCfK1Dd&bW7$a!j*Bi<ReANt<Un?@`a*rTNeO*P&A-* zF25srpq_`Zt@D8Fbb@s5_Pi_G5b58xx+l9U!gWvgWR@aaJ#|m6P=xEV?#X?Ma7ETV z`G!dUmezgQEePYwWw;{ify^>!l~yD_5FHWtJ=#Z-2cu^Oo7x(w7EunvZ(cr<GZo=C zFCWQeitwA4kK`tz47RfM0nbPB4<cNpS7>@7a~0t_xu^1mB3wiFRK8J!YrdXJOKClw z_|3~_GK?sL?QFeD`%|_tY+3TT>}Ak7?S&j+&?W7qoMg~7?Uh_)&~5Ft{KKF+rZ@7f zK@YUQrFTei><Ol~vZX<J{GIG=&=c*w9BI&V?Sq_RPyzoaR~ht1`$z6D=!5o2<{I=_ z`&V8!$YlB~H<u}n{iNwXX;-$G>`Y86GRW1$H4WZGhG#P>(8naSK!eViq}E&!uHe(O z@rrPDpGjLtl)+BGxixE>6<uq6Ni%C&D2AEAuC>0VS!q8I!5TBT9$B=Zy3OLyCR?*; z>AH<tm9>^-P_|~R%`|A6m5sL8puJXh+G-+v{(joiLEA}$-($Gw>8u?!=(eYuc11tV zg8iqbc83V=5!z%)Pwk1aVQ=cCy;8PXVDr-cQ8rAqw<g0VN0e%B&5lSPPxxqV24!nL zT1kVpS(VVr7_`@_q!vzusea;FN^41ksea=btaUKxU(XON%^-_cIc+<U9$y7*AJII^ z#5V3;6|^IY7Ps*SI;j&p$u93zQ7bek!mE-NT^{o=4{WhsRkS#R;=LlYB?h(ds-|r) zDAg-c+hb6BuP80ope|m~+C_uD^Qx}hH>i(S4ehl-{k>{xqC#=(gS~2L&IXO}iqZTH z8tYYCt3fmy(mCF%j@F52CcE8cnpb^oiQ&1>tC6<D@LcMZpj}p;uiC8jYN~lw#Q0{i zS8aatO47oKFz?&EnrpEJ?e=P+B^mUGS4*v{K{;N@T7M!;%So>kZKYu=@JiJ-8n&xm zt+m63?XFi_?V4eG?A1<tY}kJD>Y%+g=%rUj&8t#zxxDlGM!Q{ECsW&ZUY)fk27U7C zqP;Ol^X{s#@M2Fp@9tV<gFL-^YBdZh<=tCrWKgL0_u2+U?ro#J2WUGDit!$(9W<zc zcbb-GP*d+AT7jZ6ZBx95YS#?v=sjG!Z+Q0d9;JOUXpr|9%?;iIhqcbV?P%|GEzY1U z?{QkDqS&^xy)(5L1}*f?(%vXaYP-UFvIalaMxi9NUFSVTD{Ig;?`c|VMV;I3_nxVB zHt4ALEUm9Wr@iNBzbP8j_LBE}ZI?keyccLW20ip%q`g-3W7}8WKWm>1`ry4(vsBg7 z@?%@>vrJ1Q(r4sXYS~13OI@k0F$li1tZg=Eo7F09uR(jQe$jG>urDa(vsOD}P+6b# z+C76Jd^T$DiE^!N+6{KuqE)VjY00&A1KO%}SA@?uw`t!i!snaYw4W5=GtBMUOhxz% zbGx=t5kC9eq3uwF&pvl(`xW81Zl{*32*-6hwY!S&8SO6Zi6VSPyGt`i>M6tLzPmLC zMfluzw-%}h$C!JxD#e~K#@wSdQ-sg1_iCw%@Y(fVZJ;6?)BdiFP=sUJ-?e#)a7?>T zTdD}hwEMKZig4Wehjv&Ij$8lGZYrW@$^RdF?*U##@iu(V?%CNEdJW`I0s$!z5(r6v zC?Ju50#c#^hTbtMU}#E<Ac7zgL5hZ61dUP>5D+N>k%W#20Rce)rK_NVqI`Fmb8-;z z_4%Iv^S$qTU7udLncsciQ+IZDc6Mivab6KUOEzG$AhqtY_(#ibG0G{TC(A|^Mf7CZ zh*5-3dbb*l6ycNJtwwW2_{4Ub@w_5@V!O>4sR*Cger7CEgimZgGgc|WC$`&-BZ}~e z?RMj=B79=I!*FA{ocP3chY_p@pUUnu9#(`;Wp^4a72(s|Y-6w@e43kWj8%kBY(F=a zDZ(eVpBq_<@M-lfW2Yi~TD{BoQV~Ay$T7|<!si`1#x+IwBs<r*sR*BB=NfVKxzzZi zcel|)5kBeNZ44wDCqg^Ho@`?*5ua6ij9-cHU8Bd#?lD9IOa-YeP(?)#b$Yz)UZc66 z+5+_>N)wNF>Qr{0QR5+uH$k*()T`_PqrRV#%N{b~iMD%sc1kXL*chs8DV?fVM~tz4 zda>+L<4r$}DtpX$&rh$GJ#J(XZTF1r^lI4?MpR?YZ$_u7WltGR{WP=eX`{8D7L@(g z=;Egj%APlpiMD&@b(&fBdt-4^Ol6!{)v0N*OU7nJJ3Fl@d&$^CG+pfMw6W}E!-!|k znUTB7UN!0v&4l;hPnEr9^j37d)2XsQ7-@>mclx31k4CnlE;aR#pNzwPDj9OaIO(Sc zLVh;R`>B4&uf{b+lY<`%xoO<=)6*fhjB3rXEYn4onmt2)Gg=bOgty{PmA!2|=ckmA zKa9qYv1iqXQbPVTy7_5*$Q`58<7k^Hu6HUKB4iIgO$pItWy&v2+&((wX<a_0s8HUJ zr#*6#qKbKQo;GAh$}deM92?j{%5jv+c_-nS_d-mWuIOnXORgoFU=MiaqYzu}Q#2e1 zeu$6$+fi`RGr7fG`5oDKKY}ZN@Kd_$%9btpIAlDNpasc6M6k94@q*-Vq8-}z&#Vmz zlCu>#Nt;3n$ULHKdLOf({GMo>D4n!Dq@aAH6{eYO;|_#E@(D$_1EG*iVuIE^4b)!| z?l~wVZ#;qVCcxJ^wgMGx!zHVdB<(`7zM`n4=5Ap*P*Jm_CMAl>@kHA_H)`aD6qC){ zV!Z91c1aUGC8f6=lUXy)E+rc&>YDULNNL$d5$;G0mL1x&C+?0dD^Doun{+&+tTYqZ zhPz|EGFZ`zNoPaK$sI(~#h9d(ZUuQ=*($^y4+)hup2T?BT8=kQR+f#3;5$P}8{9CN zNHjq#OUjc~WH)77nRGd%sywaelcZd?y8Kmn?oGNLQbXQRbR6Q<kcFPY943f!NeNm_ z8B8=zTuXZ2s3|8Z`U5CjuJ3@J<3z#EmGlQ?fsROLwDO&AhCC=sC`##kC#05)RkWdV zlM=OM6Gc{+$Lt8%Qc?RZ6Fqh0lT6OyE?<Pym0c8F1kWhhPkBam-QY&cL5fCng>Rh6 z5sGrU#@R6vW-3&cQr#Z##>y#7PQPxjb6vivY@c+Cvm40SM5(Z!B-d>y*DIUZ{d}P~ zxnEJ`?g`pM@~EOmx=Z^Zd0tU3@O)VQtmxJ5vED|~>_oXcOS@-lO{Amf6j1>t&FqmU zn@F#ssy!xp9+6d)XY(Epdz;EyiU#zE^~TGGmFJWmXG5CF=0xY6H9acn&E=EIb5jr4 zt1dez(s~Ai?IjhjLC>b%=5nN>7r@p+-cp_mdS+`a<ZVS?6Wvkd?S(e|8E(%(y;^u% zNJr7~UhTY(%OXt9m*Ck-7FV`ny_<Sl$&!j%^@gv0Nw4yp(7U6zwXC3MZ||-^l@t~0 zlMS9#6un4PP0?pWHHr9rhSoAl5x&pRMz$j2>t<WogotOVZRL|hJ8T@m+RD!CX+K@Q zs@_)iR@4oiceIty6Y-nc?c^Y~(H(m`Io?mNd)vt+eoFJUmmm3Qw)aW7*-!J0r{!59 ze)qhCES-ey$?pqylog4x>3#2xay%34W6yP;ky{nvzN{qqhl+>qf_IT6I%6s`MR@&r z-Yzno2<!f_x2s%5gkJ~zvtT#*DG~3D=q7iv4R(I@bi2uuMEurxcX>w<zBS%M7U+UG za0~X3<%qZid&p`;=bgm^c6)osZi+qz>M3U{x;@~ix0gJisOYmty}hOEifQsO>LY{w zbjsUDhWqK9x38?{r##tDwjtsc>@QzZgd_9-IYSYSk<ZD<ZkWS3QT^FV-WOyiMNNPP z%6>%L@`L0+B0kcC<cmZT#Q9D?c?Zd{iZX+51Fcll>DklnV0l`_!(%j9hIPmMvTZy@ zFUn-1^U%8O>>+ZtqEj&s*hA%EB0OTAa>Hd(4~&O<KZ44QknboeT>nq&CAr*B#mc=b ze<0!>GD_CzNi8V8sou^WBjfz!EjLzfRTN&cYPnbBVWRVJwRpgOReno!MtkYm82dH( zBa?IX*&g;pDSBa==QaH5!bBOS2)~{%Nj^q&#%Yv1z@9AIGHL0_@#QAVWJMv*C1_J* ziqH03n{rd+5=9lCPb&9@?A04{IO8mOK3jWJ_GQw-UuaYAO*xK;_c%<Gr~7bO_Id}D zn<j4)?a)4YVZJd<2KPl9>;?r&lTk!xv@c$GsoYz#F%i5~HgGJ^c)x8@x#{w<qWFPt zm75{2E1EK}sy;*hqUaFOEk(5k%?3~SDReBgHh$1NAdjL0gSvWWNK;Xz!C{4FNJr7g z!Ar`$EsOZ+!*VlaX+@g`X9B%Py(djPcKmY3S+XqI_^g^OD-m&zoGq&m@wqZv#`<YP zx!JO%pU!#b$S3`jC*P3+iTGT3S58xe`&ZKCY$EJ~Tg#=(;Qm-Y?1Q_?&6Q6nDqMem zxp}gepN^E9FP9T>A6zIeGSMitSXLc?sqh)FMD`@YGvJGmWinaOshG#?_vBC}?GDTY zR>(1mTEg}HefhegcVH%vA!jJs>%Cs^L%C8>j(3Cmp<J(MJ6!uel3NvRfw|O2GDlH& zxc0A<UobiNos-q_h_c-Q&(-p4BJOo-<ab2a)*IY4l0WdlU-8Y9MV_Vl(VL=~GFTBl zeaw^<72(szOj%74K7GuT5sL8XW2THH;-`<9@-=0{w@5SPY@$@rA|=kwlv*<8mnzz& zWNTS6h{;YO@+#YNDW}V2$%%?aq-+maE4M0o1!$c#p5s*BExp10SZ;luX;Ml~;q~$W z5x>W|K^iZh?F_xgxk1J%!uL2g$Yi1k_WLP|-3@Xa6SPt~&=Nl-Xd7h)5kGs`C_hq! z&t5jlb&BxW%SM?)gx{e{cQ?vwitsyhpUCP1u`JmFpUZqA;}qd@nNMU}B7QEjNp@5= zd@l2;e4Z#(WK_OhZnGRqG!E$Za$Dsg<%v&JK9gT5!Y3-*<z+?qL}k1DLlHhv*)EF@ z;<DiLfE}{BB7DBGQ^xygq9<E+^3y@%b2-pYM~q!^f}g%Ja%8%nP8+#$ji1gLyX7uF z<!XE6*M7Qa?3F+J>6)=m78uMWi>dU5wqM5j>4tGYw)WF4<Dl&2r$3ED@+Ch>`GuVC zrvmb@T<53V@=LkPPi5s1`L&;l%cJraKOK~L(tZ)k!Xwx*S%hc;&8&{eU`2&WEq0H| zSVjHIZvYy~1byj}_qd!%1Y;K5Nqr@kE5bXe6B0gg137Hh@t*6Hd_WQ2k9{o@6yZ$Z zv>c%b@2kF*;}zi@*jc$m5$^vxD~~F|QSqGonuy2UbMhM^yuXDfe$pC(x#P%?<~=V< z_-VHHd)bSKN5zYBCJ~P)m*plR9BF0w%d*2zOl79{Dy3@qD{{G?BFbNrmlS=Q(zyIj z@}{32D}O^K4Wr!YdCsr07ZE?t`BgrrZ1_CqrW~Sd_&n#P9Ib5lJm;32pltXQ>Xv+y zZBU~G?Ke5gPxFo6<N`lsTEENp{j|~gLuL{2^PD^KOSaj)pUTz@^Q5A|PvrugR}}7j zy1X>6D!QD~8R%C<Kd0P*U#GpJ$Qok9Z+pTggRrgbGDGfYmRUqmO|V&J8AT5b=~dn~ zLlw0e(n8v14Mm;7=9qO9^#_|{HdHhOY_8c<Q7YJ6v!$XphGc6&W}>1+Lvn#SEBY90 z1<c-x_JFN``MjbtP|kwpP(?pMISZO&6nTc;(F&QbDJn74)(e@_6jd4eT=~N0Y(;g3 z4gp%IsL{|ziWf0gC~7fu6wn$)?T3yoU)0>FsK?MrK-(1!0$VY2x1!g;R?IxCXztLr z%NI9KC|Wo4+2X~`bBgwZt%P|+(YIhLVg91%*P+>3N%K!dC5Pn#StIxu)g6|tl`;z} zY74efX0W0cz*gF<sAwYCN}JUcEd*Pz8L4PB*n-Ulina~QEndcaL{aXr!$6NK`eNAA z<;$Aw6`dZ|87PT~dUA+4o(R`Q-z^_v9wtf?SB5Pw?=_2zq*9BMFBh&*-fW}j+n0kY zR4}tfvF*ysVHHBnBBPmpe>t{7WiwWhHL`hys^$zug-5opP~BXi=mDUb=2oIq(O_if z3J;nC$5JX(vRdX;q8;LVjXo7>nKJ`ywas}<^p(Hb<}#vG8^7{b+gzz^7ax1BLWKFT zvUM3b9B8YuwI4dZLZrD%*?J6}26Rx_27#@Pc}&?}16v*Q8)a)WbZ&*Z=0#;|F?2c5 zb!D47G^;|C`MaWZLpK5$sZ=9-KiKM-1r&V?wt8kT6V$d>@n|!JC>5xEg&5O)MYZm* zZ58U96^Ukw0V8uOG%$-3rHQLw4NGchhA0X>@lkM`If3KZlSX<gK4eZM8gIWlvMSIl zwo&UoY@Q&(@0&(eeAuip&e!s7DmF4(5~Yf>BYPEZVrH>T{0{Vp*>56xrV49R$BIqO z6N;*i>Q%g%xoHyHB1iSBm|)I+ovGod!4)4fSCK7EOga(Mxs~|=*>F_sT)efplW2nd z@~H6@pD_0-!cq7M^SGi(qmUqL;i2owH1K4~*5;0yS+T93wv3ur5q?OBJmIOqsEmqF z6Tu8gemN?$Vh8g(N^`n>ZPccU9nGsMhc2VxyME@+ie4SPA8dapT0HtoAagRclD!Q) zJDG(PeK$H6sI;PjW3shp%nFJg9Fq%FO;IbbC7BV5o&#HwS)YlHN@w#CKjmtj&2B{S zZp@ey6}y;270n!T5oj7wwuUw8YBrvNCEKAb8gr{+H`AWVEx%!m724fwNwh=za!jGn z9%jpFY`Zw7bZAerLmE<=u*X&m?PcD4i*0qr)(GumW=v;#45+Vpf@p`<du-j%erCTJ zXxpK^Iksu&0JGgprgdZ2lub6DAxahd$37AIoY_y&nXzv>&zo_xIL#Ylp9y`zT&^f6 zwRh+sbNn2(RY{!_I?UWkv_pG1^}W#H<`0UVPF)o`!YuF(=l5*thR~PHYKq3Ceir(& znWSiD>h92yW}c!osfR;HnKu-Do|;*4w0ZVjOl7(_l6o?9j0qp`BDx4P*6g6@7Er3W zizrPLc;#&9E9SI$?CE{wR_JS{J)g@``xQ}XqM4zn@he3ty>1>>)ajKnl_r}57ocaV z=>JNUN^h7Q7BkIyCA!jd^Ms<+uRKy|hB<l(+IDK6zjCP1EHjm8g7^w(wpopibedRv zVovlNv#z4gfZj2a-^6%n;_`_RUEVd*6*WFNCpz8ymX2+jNI%uS>s<3R)gethdwN0l zdFB+#f!D0&o5hx5DmZt0uF`z7Cee8<c6_$Bz>HPYWPAcpb0#NY{HRI`%-5Bz4*U|$ z0&^D88K?dDV10qPMA`OwCxGW_w$bl*EHF0{@g4gD^K+t|0_(oO-0!!|t+demnkZY~ zO50-drXu`y!(y|@GAuQ&alTh+i5W$dCJv9^T4|~IJyEu}G(M-&GShy~SHA>pxp|vC z>9?Pjn-BPHj<MW~A>#brH~T2U{N6W56JdS_D}7)tC&KY8uTqA&m&q>hYPPn@{8CZr zS95_*5lyfkY<8y7YV$l%svXnpJkT{|tMqEHzQ+7j+3LNTC)b!_IhERO4z^6wCQ7y2 zgDul6s%$u7W|?J_4d<;{W+i3o0%cii)=)G6%Cgq1tH_w()z_H~RlJZ1y{&a-yt37q zkga`ewp6y(6LNu`BpPS`4z~4XXJxZq%LVGAY{g&8);5^WD_c#lZ7_!^TT`%YG{-30 zQ()U@PE@v(*Z!>Zi8)Q#roCoV{=`ft!XDDw+GK9}09yj?Q(p_J{HeJhgK6Vy#VT)B zqdt00tLP)VK2&qI`mYFEMpdf(nV<0bkbPIY&;7Q!qavIfKW!NmQF)J_Fy6tt;vMqa z=8o!L<glN%jA~N(sGl(2iM!&R^xNi+YF+tjKW!P6RQa@@c8}^?`CGH#hujP5O&V7D ztXWb~>q)6V<rVdv<kioaRf$sVQImRG=giv5HXUr|%@}3-0Bq;Y#zf=n?UUYgzB8LE z`eM@CKy4M_(fr=*sN&(#{NC)LY<R>jm;;mzkJtq>g@}*XMf1c*z9TlJ@+C8QB~$g+ zr&qpg?qRYMC%@@jHV-T6KlyE-lSC72e1G?fc}@|&zk9{JL6j;+PfpOTn(bC`yUd&H z)vubJ6s?-v+q!D@RMhsVJK8n#Sw+u0W$V|>6h)s+uB!iFj#TvJ<oU)A=BtXnpPW(o zNAnFuzfE2PG*c0N{r4wxo}vO%dRsr4?<vBs$6hyAD#EYFUN_e(DmUeVeZ$<UD00eG zpd3YyPRZ7OHV-OlJ0%zBxT4Nr`^Ef5(EzahVqQ`-3~axe*A<Ni+pp$rMQLEWX~HKK zab&lbgYBkSP|=nt!TK$;q@n{;^5iYE3eh-m25i5XEtL)5vHr~*tO(z+{>>b#C<?xr z`nx$%5q?MacQZ{<^Y{&wZ<})zb&1~rv`A4({DI1UnC~lkBmOI(OhxZEO?Un@KT))! z>3cvs6cvmAuJRpokD>?Te**eak^X3=Bdn8(N<X?8=)9s^Q~s>1SyvSme8URUtX~y{ zzVT;e-MXVF3T(P%ui-XJc%x{T$10+z(;Fc`Wr+BzdxjONZ1`na!>X<bzbtE5brdB+ zD@m(?BK)$fw3;fyug99!<BIU>v8I)%2){aOSxJiUtFxBXn`j)oV{N;(HHmF7@+D}F zmFB13mSe3V!aJ$w!dz=T+r;lLr-TJr12d_9V(7G&!wOi_iBjPk(659Qv{otG)M=B$ z3R~VRZVCLddQmG(5#DnZwH{Q2Usf+>)l-CDRxf5ftf==>r|sfaGev`+YA=ghPbhk4 z+G)Fl^|Ye*rnQ$PtZs_3z*f@gr)Ue<N?L;y<$|r0H9}Dy*h*QiD8etfm$qJ4gkN$m zZB17c?j2k_*m_sd<&?L>f~_Tr&Xt3=d94gZKbD(sl(E(-!u6N3)~AYa{iUpxtq9j& zLacp?aQ!93I;sfQU%b}Wig5kKYkjW>*I&w6KPbZWmvYuEMY#S_-qO}`%j5b>dCOJw z#*ou?1*@2%MMK)l3RZ}skHJ>as;p=a*eY7#ig5iU)QVDs>o1|!LyB<yrIPiiB3yr| zWVKe*XsEYhW$P(LErwPF>Z%CWJi@HLig3*%%o?a@|IkKe6>GSnZ-@3OUd2jPglisE ztx1Y-&7-RImLgp9c))r`5w3YWU@cbEe(1umYSssedJN3~%2G5J@~dubQnU{8t8VR7 zGzj9=u=Xl?4dT_Xjwr&lnVQxqMYuLo)A~-)`DyT5ebzNa*Qd=l!mXQ%aQ)>$ORVE# zgzGO4T8^SGh7B%W%POkq^su+XYFT9!iL}LTZL5-^0%;q7YAOm&^Hz+o>M9CLs|pmS zC?c(@9%;oZYM3_Ph_qS}jkBA9t&a7iqV`~`V|7uK47R#fA4M+{J+CMYJnLG+6up<0 ztwmX56m3q+1)502v-En_HlmsEwdnO>^{fMa+8P#ZX&+-t;PbKFVX;;bKOG9IZ#5*E z0MG4hx1rV2Pi-p3S!0QKG=130WE+fUK~)~M@`&);DZPp}vWl$798yK!QjN^UR%<4E z^mL>SMB|`j#i}&6CMnNp(_!zpwMx;V>1C@tVom#mQ^}fMxk^)O<R+%A(@%Nht+3CS z@}_TaAGMY%`VOd>)p$GGt^*}l0~HmXvB7O_El^Z-MtGGLR<|AO84I?@tk|7QkIraN z<#8)E8)>>|JEM7(mKNMxDSDzxD{B)G-;cGn>VJ;533i`ZA3xCAYNBZTtWSX+Q-trE zK4EoJgzuX^Vf811RWWFnHr5~}Xu-V?w6T^b>RamY18ps97v&%p%{mTL%1_@u(9R0= z)3pZ@tq4Eedf+Lm8&RtGV3t{}qcufQ7EmW^kD~3f3RZi@ip#+qQpMg`C98F|!uK(q znpLS<H!D_A`6{)l^{^T%x;QJgS}&{3e)haG>yc`GtZqcp;rCElR_kXO2iR6__A}K6 zSQQQ;asN!V>M+5V1HF2()qp6~zMRtAO17FR8-69{IqPv{!>{B#XC<-?dfju?p0~y- zPy9mHKx?8R{6g12D@{>Q;|bLUS#uP58>ay+Qq+Fv+-ifZ_lZ*N9zz!cWh&dy*>kJC zXnmq=(`GLQ+M#Uk&wjsJinT}4XR}uUeW@trwfCzHu}&(Q_S!0-^NNno{<zvu>#Cxk zW`7Fwt0H&Kj%vfKJBljJ$px|xVVjM!yUu}K!`4kAp0f|PYJ5R9@!FhVeT3DK2!C}X zweSdQ7TfIG?-Z^6l9f%AD$2YY0wfM&yz!#?y9wH8%d4p2yH%@?wr&ue(R#kyv&eYs z4@Jw~Jzr>oCBMu+ey>>t{ghhxH7l42-os5UJJEXc2zsW9Qt6o$U$>SMO%N%a+E$-z zEjY@ys_D;EpK5JV6qnu|=(M7C>3xBk=dowk^ug7qSy_snOMj_)n$_|++Qy00^l8;+ zTMLL_v>7z3`W&m`R~&CPc+RyBoMc*>{$BMZR^l0^Ptvzn|Ik{ZXn*?q#wu%*qOZ~q zR$pzs^DTRxPyeR+$JQoAzouWPzTQed%Qk)Pt?HjzS?8FF&kd@v-D>$A(`OG?tFhNQ zs|e4W1J-3l;d3Ku9I{4!&z?=^#@0A&#b01*J2$?@QR}dxXCvFzIBvyVWLpx@No$Fs z-gBR+aoP&L!nWaapRIAuO1j20bM8wuE?OCi)`0D*)$d2PZJGOOjqBF%>r7wFeXGW= zR*9QTx8^RYaogIZsK~sJ;D>n+|Hihcc{^$t_Q>CnCWyxK_SLZLez)1yxZ~*>1#ROF zQ=55LYZS8wD(XJ(c8$_@tfo_+cy?Z~nqK&Q6s9rrs@AMvM^IVP#KCWZ`d6~+D*EG_ z(EgR}Xhqe(jp-j|*H`r9x2^hDvEvk_e%rNwRl5h31y+>44eI}Z-CI%7v!VT~*%K%~ zJabYDSGV6`5;Nd!>>BnFRTk`#586K|DwSTh=7V+-oy)mmUW1yo?2(E#&1+RN%7#xb zQ;l}d>sGUY-AmD_c|&SGY~NONecptcP3>-yJ+1juYd&i4GMPf>e^B;uJKkbi{_w(@ zt?UIv(?!Jm<u#wM;UmqIL(}<d;JvGOMH3@8)qK)kuIOc;4mNzinLK63?3&Nmr(LG@ z^N-c+Znr7G^z8grHT&5+6pfsJt>*J~L_xN_J^xnCLH37=u(!Twul182KE(diPX)q< z*}D|IH@{T)2zyr{PG!^lYT;w-s3J_c^W(x_wU_&;ZTMt+eNna*4(%D9W)CmM^y~bg z;j`@F#hD5%koH`Am!j$mCWp_nPn2L={RQ*F7u$zRF@?0t3}0bqm1Y_<Z%g=x_6bGJ zr)7t)v=f8b)@ng^_!>KhDBH$eH*4*qig4G>I{Ta=+;#J@{gWcxb@Q<;%3vzlHtwuh zZ^Or=iEwAldOJiB?k?G2S5rjaSG4OXqVFr(O%>rxV58ke5zYiQ+Fcakewk0~XBFXo znNREyig3ToCVPS++%L1qo}q~L#MlcJ(ViH4r6Sy)v)SIH2={<*wsU<1`+Bz6M-}0| zo-Ot{MYvaJtNoKA+$*%z7G=5axL0VK4Ik2`mcYG2+w2fUxCiGmyP6{0gY%gktqAum zZMT~$!hK8I?Y4^O`-*lKMf80|J6RF#y4h)uP=vc~cG|Bg!d*An_6$Y1>n7V?qzHH2 zd~UB)gu8A&w?9>cyKZ*bxr%Vt%`Q7n5$>$XvCk>Ooi#c3bw#)%C)XAsTzA}&lWP}J zgu8Bb+aZc@*UfIbx+2_lv&W8Bgu8C`*zt;R*UetLts>lYv)Asb2zTA=vy&C!uA6=K zON!|GiuP-Y==+NH+eG6;)%4@x2kZ<Y9QjTI9rDw6;Ro%TMDV>!*xPc*F7L$}ZP#hP zjNMcb?pQfu_b1|+$1xk+;J@sGqZWAe<Ms%$%@p$%uBmn0PF1vi;U~4evZpHAzi>yb z6ZX4`&Mn+q>!iJ0QK>~oYMruIDSC9#*R{U3^ArtU^nI<<c6>Q3*-SBM(T}yx*rSQk z#Ii-d*ZS6;qUaN#vv!8^Jh@1(ea_yi=<1@N+TYn<D$hHMO4R<|KC7tA;u5tl*x}_d zhcwY>ak<(T?QV*a7FPy3;ivH0m+XlZxGYJF>(#z&Z)LK(jE<{)#cp1aY<B;}NJ|vG zw74<QdLq7KxMH7Yn@C#R32fH`Y*+1|P)r5eI!|7;%MzV;u&uAz?fkZgBG>F>w$ayr zf3UYI!mt1SWCvIBrIMgsw=4Q-ed+6Vb0!hH<b~Qd>?xJWlYYzfSNkAQs%W%iSnXf! zGi-yhz&kbe1)?;2`I1Ssf3t5giH%E|8Nb;nVVFvq*s|nJu;mfW6nmD;0BT$XZ8OEu zB@1fbwg(cWiA!Mn!!A*kZ5glCt9{3Ql89SLIL{JcORTCboEc1T4^+s}o#FHW{4^1> zbYpFgGm$7&JiK&UZNvFOQOl+KYg>*{jZ5~_(i62ECqmH+OE1<Aa#A@zG46co^97wr ziqg;D3N7TcP@Zosy;Hle(~D?=C>`rW6m@1RnzyuML~-W`6SYz)=d!XbTUsfiloM4Q zbDtnqEscyQ?LZLz%a$9LHjW7P)9$5DM3nK<vZb9P$_7w!M2MeOEqyt{8$ho|lyhF9 z9QgMJ%RA$VV8`^*c@gEE^+eeM^Q+`ktAS-n73Q*)5tW_cHIcFf=3d3gBT5ya%Qi$* zby|kA4a-u^Sx=NI;+JiYsO|(m=(8n9)O5xZrHXFL_C|y|>y-`5S<88#7J5z>BbFVF zsO|J4%7&JBJtES{Q?|F3or$R9MAk-6JkkkTlv9O>dqEV{*7rt%kMN1nrHE){%htAx z`Y|HLPrFC`5z)Y@PpQllA1yN?8#;XzeFF55^SYwXff_j<D*AF+p~xmqo+9j7O`UT@ z_$ESQ_#Lz02(CM}XS}mS5w_r?PFSR`T{=fJbB6mVIU>Q?qX^rjxl^$YdtytpaC#7N z-5+zFBI3F~c30hfgmo_$+0tLzEu*SNw)WHRQBjfYoB^DseR)}2WP4|@qF<I((%U;P zDU$CYy}|@7Kdg3pXATjs@I2+L@!OIjpK`uu5|Quqk9^uGQWxuhZ>IK-?BHY&aUD83 zoBcFCvZHgzPctH)af~R82kT4kEsN~xe5h#Jdmlx1cQz@S_uj{mJ)PZ5v_jC^`9cw{ z5cGCVD8g^4_i@fD!f&bfajq~?U+U}JB$_F<HF&g6UuQr)%pIw9oqo=6MGvlcvQB?z zmZHWhPKFL}Rw!z{qH~>RowG#nG=9a9I>}D2XilZ-L$B0%&KVoaG-kycbp|?Fie6vw zN}UwvCQ+K0z2coZ!<^*$?3uS>X`Ppxk`0ii!(D4o?U$X3L^H+d6&ZC#I%5@GT(P>& zD5rTtj`#D54Ryvkmx;KCjCXc5K^uH|{C%%J-Z`KsoG6b8T4HXc@y_=|{H%O}qdkK0 zc!$gcrwkE3E8kh?HR?-veQ)=Eus+dgNH#pSd37c_1N?NV&Ln3%rviI1LcFg#A1cB( z*e5&t6m6*y>YeQTqNsbf2=5dpq$%Z2d%dPQaf<ML_Nh)cCfKzR>YeJWP=tGa-gNd8 z@t&VIogWn8&bBw50`ZvU84dTcO>@E&;a;{hr=ud=llGSLk|NyMHr>f!qMdDTJA0K4 z_p-h1oK-g5y*AT<ALhUu9NfJ&%ZXvqaQE6Ar<t<hezkX<7K(7c+PluPMDXjo?|)zC zUFRJ|E8fqjlkV&xI`3dx&vg=;VGew3=Q?i@%@hqkC|Gx{vp`Yr4@%XY=bR>jvGs!r zb>};=2^3FE{Gevth0aJt?*J`wHY<AngQ&WTozs45Sa*rjygA03E<X97Vclg;Pd`P~ zUG60N>Cw6?oEb!E;=~87>VDv4Dcc_(w5yxp<S8nj(XsA_PRqwR&00XKodZNLvjSS{ zWVGaRKAF+E&ITvA6?=Be=u>y2lkBHqb+<UvTC*)B<ITD|ogq(fyonie>h5x85KR~F zW-O|^#}RGVb7jWLx(A$YL}?-?V{6?n{XO|;MzDU&Y1$S&u_qs@d(7$Vr(<=GJHv=@ zSJAS_ubeDJdC!J=PdX=<oY<Om%AInoc9;t8Dhl<Ua+)g&ulZ5r*Ul0qr%BC*<<2<! z6;-a;Kk|%oThXbQWs%=FHQRG4Io@-1&pO=|;hA&Jc}3Bd8b8)O=d4oHz1tsk&pXW% zDIT3U-#h&k;hFQjGldCC_G8`eorotnhrQmQs0+?GB0h62IFl6xe^}VQ;A~`a8h+^7 zmz?hu^#t2xr_@uJ${B6)hapi{ohFLbe<<y%PJbrn^oQBnHD|1%!XJf3U2~QZVJqdy zYtDXUivimY&d*GA=KSDPc$#u>@XYziiB^PX&QDGUqVo<Ozn`4KRI)U&=+gWbe{x<R z8y?LLQP-Vu%F|uhKk9}vO;Ji%uzthIP=voodBfSIC;{Gky5SV=z^#ODPu+05itz2J z8%`|IOi^~_5J)qzBYMsh)mNrQ{p|Gf(`2BePHcO8<(#NroC41<J-Kp8)UQr;N+nHf zxYRi1rjtmXX=2}{J1MsugFIoj2K1YgLBzWZes{7I6)Ke(^}Dl)32M6@=nxS;FWwRL zhjZL-OVIvwZV>Sp@~1PlGneI)m4~AKbTYa!<*hs$CEbeMkS5s8S5?w&x0<3SS55TT zZX^@r2T!Zrct1__IBo|f(PPyYn(Mypr(v~&+(U}6Cl_+RCxSQXAk9K<`R<q>&n^nP z4-!p)uku`qD(uE7N?8>bS=5au;yM&{+Y-$b6IT5gRn+aJXvV7BQN`S?ekxe6gnLZU z+*Kz-OSwgQaBV+YRkmJf_jN^Itg2eCj62&;b?b$=s}y~`s#(4AuD2)0`*~HzdZBKz zqC1@j)(dlY_-S0ds;;*edZr0;^~`$J-EN9XtX@#BhI?C4gVi6@d(e&R&1tq?omsE8 zJ62Jj)m!S-amV#x+rZU3>eY2;D;lvnr(Tr1OVKExX!oX{PSuNbtM%o0sjIKoYv4jb z{BPdIDZ;s8X4J!e+A``^y?oj|$`jq#O;)K)T^$tN#0~4mX|7vcG`gvqsHj@qUxS;u z;}zwtE*qWT?oo7M^+&-i+_Q?V13l*6RwUL`ihkT}+#l1NE=sNWHMq4qfQXOn6Yg-L znWEmB$ml2BO^O<=iH&aK{;H@g*xI_)25`wbt@*uHJ2zHQzco#w+q=m`X(DCKN5N0I z@HtS(Z>D&CP3!2V-3JscSo2hLN4K$`x<+?$Qx#pWc``J~ou_Esnv<cO-Om;6TvMWU z7x#psuh#UB?&^wU&fywRcQ@EiFGlxtcPI+V>>u67J>jPpqx-oL&tbeYQ6=-m=x5!5 zL^DM~W{KL*ySEi}&P<Jd!JYU#=P*2TTJ&J|rlM(?bE02#E4{$BX_=AHDQ=viMVSkt zhqz}It<GE?J<RPekUh6%u8w}m%~JG5=7#8zZks`DJD2%c^cc70U?lkVM&=jMsqQAC znXo=lul6{1m!D2Xk9U7iG<x8<=m~D#i=0ZytV+=n-PjaPB{J)3^kjEA(M<7p*3IZC zZnYuo**(jMnd<f;f*EyI3HS}u9m-a4V3nBZZmps0nVMBE=56;hQJR>N)g)$?8#|nB z%d*<VyyK=Q+K|;bX097S#|Y*cm)m!p=T@QmrHQXD7Z^6*ou^9H>`LnM3*2W^?me#D zNm=O57{O`Y&KexE$j$Q8%P~vcJU_h}v%=M0@_9~+`N$1cWUYNCX0_W@QHix51+Q_F z6@{&xACu`$QxvoIYIK&nUQv^^%VO5L@h@|lZP$Jn^Rc@}Q8J{m(d{ylZNt}o7W0YQ zN6|!}P44rG7Oed|=2Lg5qRh1iVm7;@6>VO7GIWbOK~WyiR(GnRvq0P2nTmb_`pliD z$X!>W_I7ufqLSe!LwC3zDJs71Wav(JouUF@%XT*_3IW^aZnmPTK)c+1iXwn=+&o2b z>yE|by78m9esSy0#q4#5D{8y$O3Z%uwxS;Eevdiit{Tgp1J{|chuu6ysq2cze(ByI z&onXZTI%yh+`VK=6FYw>9(&aNQql1r_KnDMV^cYmH`i5+J?{2Yv}|3~*c0xXiZ-mP z6?@9<H5N_>wIXraO=c3M_E&RGyPE@S-?+P!?eYB)&NptxOo#^aCH#%XbM6gAUwOBB z&bhZ0;auaKJ8%|xI_U>subw-cNxOUiW`OP(MWx|Q?Q?Fb^29f_&$*L`aNaW!(%hvy zF~9R}k=dL(=6Bu=R)qPTcjquse&^kV%7*!!cb6-|{LZ`YD^JYtyt{^o^E>a}P@b6I zcW&IA{QSOi;}v0k-?`hFD8KLA-O7gfediuhg!z5v9#)>1-*@f_BF^tSw>f>e8VSBB z>b7AL`;V+D^}Sn|zCg{k3vOv95qz|7;stl8py!kn@1i@JNpt|)MK}CWw4Ko!=l$~Z zC3mbMY_m)5L`7JKOKw~Oc{;=MIyAlH#xv0|y5zQ0gmt*&?oggshfD53BCf+F_Xna> zaWyYNyX+Qd&QD3LV@NZIxGb056N<1bm)*09uq>C|<t_5da@k$QL}j_`u2+O*x$NFl zo>-R4u6zvRaak_AVMM874CH>r9o~x4q~3bP-Kq$4zvAvvgt=dFi#)-(V{g6U1~XCa zSKNw<F!w9&4CRTrUvblkIQJ{=Cq${@XUP4kdsI=O<499_b6GIIt8RxroZpMbyLGzi zc4MOauDbmcVSZQL<;oNDyXvkb;{2|<JBT>HYi|5dOcQMh+BLT&li2yy%!=3C$pN+> z-Ra799Be<j@6%2!j(6Q%!zB8jIFfYT%~mu5=!Uy|T7C{cyQ`Q)+^POWes;ZSWD`lJ zT35d5#?ww0PV<)Al1Y62^`(egZoS3%sr=?X#3XK?miBM%)&Se@?k;6(c1GI2yU%9l z$Gh#m$Rt9(8QS}{8<vxA`@;=q5*@w~eg1H((Q|Yz%b#vbCb9GzqyL}o<=Qx6vh9w0 zgGrqEzU06=t{y=)aT7=jN@1eb^#qMnwy+DCQJ$cwikcFck@;zQg5U>ZF$Xd1Lfe6! zpiTicBdCY6rGw1~`Y6CAgVrhAwhPk+${@W?ewtR0%Ot)7n-#RWUcSu<+QcM+F1of8 zRBlkd%?)~xNo>Asg}OlvY39Lo4+?6^B#vE49Uc_)jG|jW1%jq1Dswe;c)_4whvlbP zDCiE8Xm$1Q@IpZ*UEev)!a;?Y#K^0m-oioE6wL)H64Z&VYV27ws0Wi6aqaN%qCv@{ zF^4nSC)YAY6bs5ygy(IspiPSKJSrAcg06pOoIkF4^<qI@COVIb1%)ZX^Qc(RQ00l| zQL&)WM40<TNOLYxs^|nmS@ED{if{xg9wcCF%~^+XKglBjG7rMKI1bVy&XPV~qlw>1 zgHjhkA7cs}ms9&UvNXkF&vFz-sjKo-B~9&nWIfW{n|>qGHzSE*U9<w}5k36+yEVf| z{|d?1NKPd=gXGKr$v%NOrh`=%fn`IhF7EYY{X$ADKLuT^{EJ2t8!64t?$PJR@*Syv zqrnntB46qvmo(fyD0Okrui>yqd>x?q4Z<GsF#`13UA5-=21;%dYdz*(CP4n1GXLN1 zQ=aNunI!j8Jg0O~6*QiJv&`4Sv90`Jip9r^^|eXE?a66!`*1(!vz4u!FUJjRbCnvU zgK>TRlVkm#(AxLw^W1J&LXW6V<>ww74`GjZ0;HkzsNu1TThiyxwYy&|J`3&__kOWD z-zTs8`S&IN|7t8QRiF$!Quk|_L6jHQ>we|=uh#cJ<&R^UE=C8m-nhSneMjwnB@e6@ z_XjQ;x6J+81by!AEt5c_i#I5DzFKiQKkoVaUUa|m1m+%ibpAO!lk#Obhr%dzv5>;6 zD7==!pHes*q(`u4V9Gq+?j}zT@4HVd907EZN7i#Bul}v{jY4d_2|l{OUzOKL>O$Lq zVbrt6CvDLCJlTpGpXa^So9lJ(=ejf?&&HGj*3l!Hk%q0P*Tns-fvxfXF5H6B??Ab8 zoB!9s9?^+X=o=vaxg?xpe(iKRvc6isMCq_~LO}SR)BK;d@^vTh`oh-~?pHjcC_}x1 zC42Hb>hB~T{kN!gQ$G$2V=tN+Q0qAqUP3Ypq%Jm4nEM#lI+ry2$$E&wfvxc+X;^YB zl)k<fm=2E~C&~XdrN&`Sjjxs5H>{1=ON)X0ugt^(OZESU|97<jA8|g8A#?;WtcgGk zkLqm2ur4^vS0C=-9LDik6Ez?mUDTu0aIDq@N?%{an)+s3Jl6fE>drkM=M}nm1akL? z1S$iDbrlZGt0n1KgJECq4ea@e<nuIHxwM@q+=XOse^?hBW-H4Svi@h~C`eNmoF<oN z3gyD>U!Ph#zmC3kMh(xmeRa(D`A=(jJP#bzIXr_(&iP_k6Yr9|S07lmWfZFu^+~)Q z=^~3_ahN^t4Wp0m&VsLE{~Y(P{=V^$)89-v^892kg;@rc^Q!=#K>hzM;cHa>In=^G zQ}{MX?pIt3)|;Q;vE%T+k%hot7o{myU^*CA7d$@?Os4|*KS=(#uA+%R`7Hc8xh7ct zo3_P!4P6A5`5L9bl2Z=U)Ti7VQto^f-<!+7pI85TPtN5b%9qD6mVx?NJF)IOC+8Uj z%VrcSQ1dv|qCH5DNFpnrW$f9PG%u1*DusF8!g=NEeP_^A@(Ii(FwFV>XLFoIIda(+ zQaDf(ctlo^HBhrQK*R0H)_Xm9C4t+SJ-LOszJcxeKV4tWopa>U28Oo;)QH=GeF9sC zHQZv{Ls%0i@9m9j#TL-Tmz2vtg?;M@=;I-OL!6{oobtVT96fY_bB4R`H(8JE>`Mp7 z0V%FgYJpbN7&J;qRYD$-0(~&9L2-RP*fP3M{g%qWwF``upRy+Kj9`C{_?>dR*B>>U zizb{+I7=_R3D3v!BzZN1Tb?DCvm#l;NY((Ui&`K(A{L|};y_BlYpTs4tO=B`9!ue8 zD9rl6FsGJG))zr~#3+!4coU@WYR<9d2Wa?Mb7=#6#eYA{WBC2jSwUss`y;+<xc6QO z<NDT(IUSx==BKF(u64e~SJVG5HGEbEt~zD~v@l*hHM)EKyR{3xw&I$Ghvvh+vkCRS zyIr0q2WsxE-G40?gJ$DW&BnR^a|-!kU+#ZhT`}%jdB`t`E^zki5uXIq9j&bY?;jUk z?17X$;xtGj;J#89*!~`}8f29LR?hdI<HFfW$0)xp_m)<tlmqquPIK`ut>G&V-aGrk z`FGH;Iz*#rpyq}@1)nuggDYAdie-p=y)Wf_P2im0XZ<4}Wej@)QqaZy%D_1WT3HjA z7tSkuxnS6rGF}Tb!B-P*f&8#X6#di}%NMtzU!w~QdqhLh{HN0S=d&jNT!0ant`~vl z;J-aDxGw)ENj_36>qF1i)p6%K^0E7;u&*_E1pqzo)$sLQ6FAQM?wg)~W5;0+UHt>C zK25%lCi25RE3e;T-}9y4iTXp*-%4Gr!RA}<)&!pK=ySI<KbG$)UZAEx9@d)W13NJM z&(~13N<ii0GV?r>*W7URSQkCX$}7qFtHB<n=e6Q|t0wY&H1Q&pe`G)k6G=0bG;=7t zjKaKzgZ`S}-1+*;VNMgnzI<8Fl8^ODin}^M=9kL1zRji0m%cv0o-6}P$eO?-5*X%E z{Z+#);A;oAa+;j)7Ahf1UF-@7^Xe8`?{{a%$BXZPxbA-q^El?aUh{a!DWmk&ms{)* z<<8do-9K{qIp4rG=dq4k09(m-Tmp~dNlKq3&!g@w3D3t+-d(mbpy8FhyVv)4_RjSR zjC+al;&d*3szZ6W<bf%3?!H+0Pci=a===P!JlrRLp}e%ssNrxC3iG}B{o0D#{NL2; z-d4I_kIip?U$6V;x^VgVsTq$9fs(D<ZafaK<YUKH4x>-t95^uSduQN(J$w0|zxwd8 z2yDH;_W7&c*N54MdpOq@CERt=JRvX~*c<uy@`%lAM7}Wg#^TgNd>ZUI`C*R;B`ddl zpu{Wtzn`VwJ%0{N=YMZFmTK1oq<+_0Tta|`TZ6CiD0#Kbqx=)e6OY&38g6H{a+r@A zAHjcL>${H^wmECK<h=66YpR@P7R@C2=y#>su|G@J<GA4w{Q|5!7NOOn-ZBdG<dpZ* zx*0!3eUWPY5~YwzVZKJ^hdp8<=na9Mnn)wbvyuDNeKz?l4)Emp60dJ_m{V8*KDt;# zo~&oNf%H2`e}uwU0(^d_Fvf*>6j^z+d4--8T3hg3C<)RKl|V{S2c#*QY(am{H!!b% z4s*)B^f3i&D_yjJ)I1^)q#=5Mlwxo|`k0F@cnzFuhtj9v>+*O?0nc<p%%l{)+KA;` zLg{cU_QbG9=>xA6TTftlSQa^%ALj9vuM~VVIo1Y9Sr^%qK3|J@?D~Q<Uz7FnJ>fvl zpUH>IgZJi!Ft%d8_v;D&RXsl$aVgEfp2=5yesYl?{=1&}_py9W;REA#f-~KqzAf+S z+xMn`*Gk{Do>R!z{F@YfvkN?rJa^^wZ`z03r0{>Vo&Qa~{~aG3bA0C-kCQy-<bKF+ zcd(wvtFr%B)$YIAGJMrWsS6&-d4`74r{Nakv6_8Ya$cMQUlDlx=b2J<YBvu58_A;| z%fMPhQ#$!pU#WN;YvQ-E-XrogzN5^Zi2<J7A?y(^{6)iKh3_pdj>RK+U>M7Gw-2Uv z_c+7;+!}#(`8Q!cr|LudYl5Gs-aDqT9?Rwt!y$J=;JSyTwMtX11m1fO#cA@f=9vbT zGjNr_BT}g@?89~E<I5Vn9(m}xX3&*UirL_AiuXZU^iCsR^?cX9jiC3Ck0EjcQvNsT z{JR`=VT)yOzvBp=pZqlz*Y55*V!eFje*$V`s<`>}^{t1TfHE6YUn$N~`T44M?JxC` zv=U_sZq@&lj}C36ZNrk!p^_Jauq!HW%Rd%a7vHEJ*xxv1?nPYF6`OHJ5gics?=<<T z`C{d3aP-!x{JtZLM+%;FKp8ZF*Sq^$15?93X{a~-{(UU$+c3wVyaH3hG8p1%sF$xK zeIe{C3HBc&pufSJ;ouKz<1}O8SyNzYg96%TG=x3WW4TXa`Z%}YHhd!>m%x6)B}5I+ z34M9Z0)I(w;ArCBxcL6L6pI3K$0O(wYXda9AnXz7>6<U{tSRtGH$OuUoKx|+eD7Ku z_YEGaG3-00*v`JQ72C?ULc%^rpbWk<Vm4S!b+&SSxy)zDhvQ-_U9g_xqE)I`ze1R; zcjtoszOyMXm;BNO`uj#>oH={cdj<KPTrZzLmeY5>u+P1kds_p`?5pWtQ}(sS7C1vq z;rR^DS*({Y$A6O=j;?o?ipN`Sz0uU??-%CsV4vp{eC>8`nTvh)*Q5NO^1(i7iZYPC zuh#eG_4mi|?p_yI9&W=>NK>bA)kD`2gRT+2{=;>@H?P2S*az=WFfY8H;x{>2&u0^d zxtH?De6I%E|L$w||7n_NYX1b1Jf;PXZ(Ogyai9Zv@+^Y;+ds?vJ6~ONr?`0cr-^*2 zi&3P%UpkyZ3atsS55M`qdMu%DZ8QHUXo8=K^O^=fRZoLl;HpTg9ITl|nx&L`7D?7{ z?KY7Ht-AP}!iPzo@`rVC5yBq9np+TNjYjv#y3(T+deC;P^;_pren2uX_rDK&L_vzh zHD$@`72FPG$XYc(vWC~tB0%q<5*nf*`EXpmi*G`j{5IDGYd8gzK23i5_t)GTEAU?O zamov&PIsMm-w9&Az9*Ic9BxDDa5?`?I|P=2`w5pMKm2$1(cDj-fxJ9|cfIwYeDl|h zHSs)^c|7U!!yfT2XbiEA^oPhNPla(koWptBF^tx`M+RPL!Mkitd`(u?TnY&P2w`2| zyb<;r(slN34USZQlK<U$UtYQ>2+ys2am&y%EY5|;C9XTZm+q_k-5N}vJuw|!l_7AQ z#HCWP<ojHf|K_<*;EHkJIC-x=FttEWekxa;>V<lE$HpJ_wRQ|?Q0k)b--b28)&#O9 zlI%qiSKZ;ATL{A!8+Tx9yi0mq!~8q_{ru-qEWTb~IX(0q1zd$eFX{NgdLxY+d@Rt% zpwdc#wKK{8ZXYhmy|LC&UV(b7wV_h@=Q4Z>b=1XHkRGv<>bsj#<24zUcwYEM;J|Yv za3@Q?-skzxedF)b^u^6jO%s97{?=W>e$MND+$;7|Y44J>0(^=*S@LMf{#+_<6FjCc ze!{bCL*zj^Qd|IOid!HpQHavPSTN>;56mGcFHWbd-|D*(@p!`5ohoF-Bde<srVeQy z0;!98!#qkqO4da3#PiG78u?+5=u1{!?Z=Y%H0;B39`?apbTRNRsrmfTQxhn4@e=rW z)I5zfJZIxDmdzukQ95sv<ToehKv);^NOQmNV)9u=K7nI3t`_QdtriBpx4(j7WrDnW z=hqg}f5xf78+!13TuJQ1rQtn2=)+{?W0Zf*(&%0TW}#%o@ep?VLKxmVBF%RJ`ak_) z-p#FxziNEDys>3qzLAY3`MWTdr*eQb>aK9U72ki>MO1dahWo?gpwUGq((^lqco(Lr zX9_qk<*=^S4baMA-(3T1xcvEH*bg31l0g*4xd%KmqVQcaH@^mEaTNY;Czk3mJa>S- z(lpcK*2AlnuHN(KFsJq^#Nz9SN2MQVMIYa4*z|imxn-7u-b2qOd@FMN6d>?Eck~r( z4SZLPcT9N128ea9#t@tTK`+Jjd#pU8;AdDYcaabGF)WErb5Y+D$%9~pmLVVZ4}3<< z*Ds#w@lpQoN?lx_9`Xz2$o=p_K$!1wa31S>zQbXjOS9xzYko;!OrV~Ib%b|6C^Z~o zec?cT{&NT4vjBXS;Sq!PV~#}+{#Ekm5h(BVVGTd0<Ms~>2Of*RKC|$>^T4rquEmnq zKwkI;%fo9U9GBnV{cG5l4(oZ`_-oj=-V(Ud!eQLUdiP!iZqK3z4N(x*>P+}6DS|)- z!N0{oS5F)evGCVGoE42h(-`zkL@D?y3x60s3x5xaM?`t}s|SDe;ja?>H4%@(|Bs0< zt(Az-62b2&QB@>~WUVv&brC7>m#lS#ziwhA{3UDM;jf1n4}Zy8Px$Kv;a>1>AMou1 z|2_+T&%(dYLs}z5E%>Vge`VpXBm8xSzwYqY8~#d)mmsf^A{zdR!Cy%+3TiM)JPd!2 zz#sA;_!|O$BgAM(Yc!-a8qyjKwlR?Yn<7@92Bn_{JWaHQzk={LNxUW6i5XCn_eB?x zDYoiaP`@0}L*zo<xsZ1*`0o~d;IA0`RrBly{ch0j2K`?63fx`@?}hL_F#!Iahrhw_ z7v<RpwtZmR2e$p<ZTOoczJ>C93;eAZs(njb5K2}S{z}5%Q0*+}&O*7)f$kjW&VlY6 z=+1%ef>@+q0Nn+#4E~)2{}vP%L3a^!7eRLsbQeK)3F2M?-6e>733Qi0cUc_LFGKh; zgr&AoO06XPyBYqS1pgKkWd#1tadoj5zKRkB^3Q_dqH@iiZb#9*ey~1BOl@$!P%3;0 z`X`W=8r%d~q~RTqbsL(6Q^iva3xXWcums3?4MRX~Z&(TB_YJFqEEpF7vQAtK$PRH2 zgB%_AD9EL8EkW*!dlKZ0xGsfPi^n_P3|TGS>wG69N!;mddy_=VE`>n8(`BM33CdFv z!lz;id3y=`hH@`~-_7hL@SDlK1b!>Im%wkk_7eED*=^u+zR))E*#<t+-Uex+re&8{ zu<q-gt!*QJ(8G6Ew^1(JAeV>1dMYN?n*(W{4apH#;ajUY;z9Vv>ITuLXH)M6F^9qj zd%|x5i^9E7K0$I`uNGiE(5oFt*&FpudZYi#y%Qk(N$-vj*7|e>nb-%d86<CkOcD6? z+!TRd%}o*bMck28$B|V2kyOW#RL7B2=8;rK=m7&?Du;3s$k7Ae0=aWwRp=ds2chgc zXf|lJ4w?tD@ZhfA3!=l|utFEan!!szvu5yzAa4!MELT*+@4Idits69|z6pMh+V+OR zw|xuSp<3mdF33|c7~bm*i3-)QB||lAy-+Q-W+-TyfOHJ}PE=8nWkAk1LMdFG!jUBF zlWan=1<AG~JCf{9vOmaNZ4iY=kW3{xiS%h8>&GqxInlEMWP-Mu<OY!QjcpVzDo|fv z8&C3el3jBqdTxt^@tINewXQk0jH2}W-x$7O6o9&CMzz&?=e%40pi!;v(L%?J?F|>! zKV}q+TTvf<ju^*`(Q&IOe9kbm(Zxf&sE2ZDFXe2gKS+BW<Opph$z?fP$aA;+(KEWZ z1OBUXvNc1)FVp52_#OF3ZF5eU2AIMNwJ}_|L8SJ1PMronLiuyS^Gr@=)GY`*Mp5_$ z1+VVa*7T^P=NKIa^fNT+%^lpp3&*9T*9#??=<(9`#Jw7xBaXznj{v=tVN}i>W5TL; zVn%2Ub3bix%!tqZr9n986SQN-Qw=>0!zpgKcC>O(!(+zMxQK>P6ste@H)vQ!Hq3po zVSo7M?5RRUK~~k{$T|qDs~YAQJ#x>3d_FhEP6ho#o_I<*Rl_#Nx+iEkhBwz67f<Dn zrxM0f$>S;CRBc<?zMf;or3Urm25D1sAC5!+$KoQjcX9`VT%0=`H2AIkgOKt>&q1xn zs&R3*^o-m$;!?GNr9O-ch5EwpMQW>aduplLgCQ?_QnlESN_wjHNXQrnZ_E80JUfQG z;b}=ZwuC+${ZLCPXA)_WNRvbwO&-bZ@KAT{TJ8%EC4>IYf+^HDMpF4llK)6*s~n?s zgJTb2$-e=)FYe+)Q|Ks9p`$#5!ZRqGPT_P4FQM=f3TIF_gTh%9&Z6)p3U8u5u!%G~ zNV9`9J4myKG<!(1hct&tbC@)TNppfUCrERGG*P69qHr9A<0u?P;V=rHrSMq_U#9S7 z3NO@p<bLz;9%!Wy_}N^PCrEB0xr5|kl2b^|Ael~b3CRqSXGvZri9KY#Q6It&dFo3% z@6t4F_v88qS*X<GdaA6ryF~3tGH&<CMkC-T@0Mw@@9w3I7D~KAt&p>JSJlzlIVO$z z{2W=i=H^CoWR7=dqwd<$-Ld8hxodY`qYd)d?o*9c$eX**Lb!6xi;WJ-$-zH1%8`Zl zRMl5d+!eC?p83WK8NR1*<85+FjTk!z^uJi!AhnW>H^@^lv%MQ+-90ecfX3VS7+B{U zx3%ZOUN^gIZ6Tc;qsyN24ZCZlV_P-uu1%fR8D#RF7aJGQ@jUIWjostbS8IQiTh$nQ z_&Sht_Iw6%>7Gk4CM?}E$dhASUiNw8)zBJy8kf+qg-hr-Zj{h*G;rYTJ5;E?T)F47 zm>gsM9;Zo;u^IC9>iAm_ImY%q!JxU*`Lo6j{7z|96R(cH3ULNnvZ@}Y<JZ<N$hv#K zuk)j9zIQlSM;9L-*<I_NHM&U|{ps@X`@njay{|UW<lwzin}maPT18C`+xtFfM(@pS za*OKg)$vy-!gTy1`vtiiQVRpm1WhxsH5`zI9*Lx}H;Z~*6qP@U${$5FiX%-NY2rwe zMx#W19<f0}e*l?jq1<Sdfi!14a!|uD6VLs3A>3otB9NGGypCsROC3k=>ZWJk?niQr z!uw+E77%y;BatT7E7ELMqmo{qN|;C`$8mMOk)-35&MUHNBxs2`&LWy9AG``DQi~-* z3IBY=D{j;%1RDG*y_c@JUeRbM{NR%?Yfkhe>NwNzijbOxye%LFOf9x%siui~lbV%4 z;<%j%<*e1T7nC!;X|kRYmKl|-7b?{OH2BTAALXQda73WY30i+jVUYRhzUfUznAp!# z&13trwN&%szBx??nLqD~tDS1%buEQjek959l*<(AY2&Fb<8_=J%^-a`>1U9B2I-ej zyJb+jr9e3Pp)3k#QF%6zbq8ruJ#$Aji{C@J4ANfS|46ez8eR*q4>xbNhtl7pkK3Oa zwMU=4Kg7ES;y&H%FvUHnP2b-S!dOQQQh2#pni+jy4W!WQz@}y=D9sa8p8B%gfzM*_ zntKlPSe~<#!dZ&DklF-#<AL%Cy#!wey}3~dm&vE7hTooFK|ZU^%!6GMR+~EyR?_hd zg>Ta99S1D)YSKM4waIPB@ni2T{Z8kl2_v*M_11zcdT0Y&<%=||*8G?;qTwST=QVr` zWZj1CKz4}R5Ayql7eLmD^Rzf-ls{AsWVO1LTckk`gb@kkd}ATW8`N$apd_g2vgezJ z`)gAh>~0Y$r#3j$BFAWO=xB>G#?%I5O2d_|!O0dQK%RwkrZ%|LqJ&4J-2&ONrsuIa zpb2`cI>dVPu>u|(0Sb6<=1>66ln`%Gn44A7i^4oj+HJMOL+{q_u5D}Z!ehsbzK6z> zeDg6c95pykLH3VKqka|c!BHaIgJVJ&8fn8lcrNEqyG2nhQ63y;q9~U*(!`M_jx_P4 zi6>1wX<Cw|C23lcCXqCWq)8-A5^0i1lSG<cr0GSPUZhDTO)_bcNs~gF6w;)SW+Z7w zl4c}n#*=0|X~vUg3TdX0W(sL$kY)yHW{@VGH0h*CC(RPlEFsMj(qxb(gESeW$pV?6 z-SS)+me%s1`NpBSEpK`5)JSW&$<w1$h<B5xFC3js9_*Q$JkLUS2l#*N-9s7-CuoN~ zI8vSP;7E1WgQM{t51yfyNq>X%w>>yAtk&ipI^Xa%9PtiK4Fj(on<#|>2K59OyF$DL z4D1gjAdI8*(nAYdZGv<fxAq#CK8)eB+qc%>D%Px?Cg<1h1A06M!ys0NreOx=5>9cW zNX8jh@;C!$fbj;6sFY3yjp1j^V_)PvamM@_WTHW1qk-f9Sr3NKdhl)~NtI;uVbMmD zlMcgqN}6P)f9r5mn-mDcl|ptLu%OLI(vK%O0_M+Ow;4gB$_TCcm)9V?rrsZI20_?u zI|#zTZ9D4KTXieZQIBp_Rqv?Bw@PR`h2nP9+qW9kc7_V~Xf?0xkLJ`bmw-QB^*ZYP z%g;AD>VsOX0?qs{tLoi#v%wblaRj|}Hprr__ks*-eHdiD)?a~a+xi=jeOg}v`AX~S zB!2@5zpc^^r2}$7>m_ab>&IIcZP!u1)cR1NL3)WNs_KLEiX<O=V!km*Z$RM|5FSA# zPlpmh|Dh2nmHbo5KUGKnRPs;N(SMR&=1Bc^OSon9dfxX+PJ$6KPp0V~KT)D&hJp9O z3t=3aZ_FWC-@<Szga@=+0n#y=SoLEEwc7yU;q97Ok?)OZw;IB)wM)|<k9n_Tn*R9{ zWlPSX_L)QNvyj3IDZD}tKLRr%J%(iCBlC^bWL-_x)i6(Z8`8w1(8Ov1J{$B+tv+s- zMWx+9o*T$>19`T9k{p4OTxxx?U0Wz;0=z^vy7<|4=?3=vbYmEN**YEiTl7PlsK0H~ z-#U_@?VujGM`_ZJIL0RGz1#E^M-I_-r%wCBlq1ee`n2wDU25=7%n54Y3_4#<7<hi2 zfLx%LQr|uSY1V3b8PbezdV|h_bke7j{|!1LE>kX={Ow^pcLvYSYrjqZ_DHst24zmr zx|58w?!aten|>Kea+}gLB&JzF;yG0S=2~#hN<7!PTh;0g2}U`GWZU3D+U+BCN&j?W z3FrxU=DxVRPwU%M^4nC}ZF<B}oJl^P`&HsGWBk!?6Z>29kG>Ii#vHYJQ?nd>V5wgd z2U#1BmVL5}TvM;&lX&IYQLnzV;QRLV<({K_4Snj#{#yOmB#?N=)L%Psv?q8LjC%p( z(zqd@UsG=+gh$6sdNN1HJGFy4&L|G5aMzsq#zDPn&KKGla|GrKCEWcaYKGNLq^k+e z)t?H+>&U4>-AVQ*If!H=NxY9fRj4h6tIJDArxvd+e<6wb3uNs`*8X(vr;*g4oqvB4 zXJU@wmH1m6VK8Ga=}n|npm2#J)fBoK&LFvj<Vcd^Nv4y`AbCT~9o6&cC~ECElJRiw z05e87YMD`q(tGfTo+yiw#I{P5ALXs|Cd#BwQEto|uO-Tx>rvvD&%<a<EKz=&XLLwX zDQwRh>n6%K4~Pzl@^)T9ko!r4U;0gyM=6Y7F;A5E&ERAx!$eOq<&sS4r%)MEs0=A& zO(AOvl_7=lO_49cR3t_AIkqw?h4M;~_%-qrN^>N|8cDH6&}eW*pF8TS4#z-V=%C5P z$8uo~zXs$DXxopyKY}dW@s^G=>Rb9R)x$gD6>V6@3)I6e=;6nMVRq5rcu@2V*>%85 z?+j|O8Ia4z5XRY5I)tZH^wL_Km*!($YMEq6VOeAf&5)N+`%I$p6oq+6YNs>`mx1u4 zP8wX%(m>{TXLqXZ={R6Rr%1ZSHG%NvPAPO&rqCIh0eOXZGbCR7GT{8mjLL%huMltC z|3lfEz(rZD@#E*6eV73^+!6~@%QAP(4Ru%)*~A6hK$#In7zGBH0Y%Lqwe)IbS8cT$ zlx3D>rR`R5wZ*c<^4dl<lxtGg%F1qb`+v`Ko*4$|{{FuopU?aKKIb{l+1K~HFZ0r< z*+>0hKjrWsrD!+EJ<MT*!kUW}un+crr$4V4w~0>AHX+ZRVNDdnaq3qs6vKIn;UdLg zFv+oOFv+oOH_4gAZj$R=v`O~8Xp`)X(I%OPXy~J24jXAT#~tD$!(y;wADr0FB<F<d z)Xs`x8%ePp*GrpzCOJPu!}9tGaj@JwGLAHxXk;Bl&KKv#P}pcfDStXb%Fo9n0p+|g zt?Axe&G>QOhTL?r$s&CVmA8dTXBGD}r7XxL-(1RV0ofE&Dg0E5Rmj7CBiB+M#)=I$ zT&3GY<=sS~Bz`(#6P0}{h22j2?UeH!6so80o+fSKc9X2<?Uc$6D$61LS50qdyY!>3 zjnVC<ur4jK?5>6KezP8*ZvMx{7~MY7%bvM-+HR8^>HC4baZkGHOD)f(r9W%~Zu+uY zp4`K{9WP~f-a!g=m`ZV!O5xI8`f@{Ft^UxLkLQ)^<sDzS{^KuWfK%7Kowp0U&T6<v zKl17~v?j{=amu+%yYj2^&RYGTuW;^4_aLhXk5m4esH9C)q9&7Er(`PAT`gRe-@h7T z8m1o{7-Oo{j}N?|ozYSPF*=vFARuS&&Rgzuo#)a`YufLsr(D(R*TAw~KV$Zlx_bTJ zA!`=-eXWZeXMXeTi}ul;@HmYogL%~2g;(0mvWG;QWuJ^T%RU){5<N1^0R0VDS}m2$ z#}{?7Y-v6Ve7O0CMOKSEi?CX{kGZg@A69?Qu<KyIIkq1#cUVuX2(m1{-;5PX+uM94 zo^!}M+<i1U_R;8w!y4BoCeAE-_&(9lyf;6|EPHsInPyJP&mG$P&BycQjQwF$7Gh4; za$%3v)+kRP>$Q)YpX_nSpdWKx!6C!9&BK8&93E33&k_>~G~>Xcl!D_JFF3<ToYzk% zrZ{uWa%<><(z6#a;Kz1~kT`$>~)mV3@sB(J5~*hHmUOZBsra<Y}|w^RPNo8_3@ zVU}Zdhgs&WkL8}Lun*KGetng0H-+6t<=RhqIEXkgdr&;`Zb&P<#&XL&3q~I`i#sM1 zUWYkq>##da+2f`adN7Zj9okbnyY|qPhiDG`O&9mhnL?|$Y^=FR-X&>;^3F&rly^f~ zVH3sKWR~{}O_Zx9v%G6)GRymgMzqUUMUC3-zIVs8U=*AkdYnqsLU^9?d6Cdyk*#Sb zj0PraF&5b_{VcMdTu1sAs+o}%S)Xwh*^WsTc_NWczH&uaJS~ZQM_S}lhBLVD=%G7< z6|;vfi}Xo|b8uoV;!H{`z?X{mjx0c5oePa@ohIBtTVmv?j#fBKKkfLT4sle&aa69Y z)O)wnNqY?CKZf$tL}vv}I@t=p=?ag_)#vMLMiu|28~tp)HkQh=LBHnsOXfzLyUs3- zN9wu7DKth>EOK1OQ|bi<c~^T8wbUo3*do6N?I&DCxR!8}MfUs|7Wt*ntt7j&_mBG= z^N`BA5|1VBM6y;6c~gnREhXE5n`1WtbBFC9c`M1gEe}65eaJqFVL$2jk^WP|4JQI6 z8z4VmxC8i(af7A)#QBm=mXA*SUUHA+%n5U;)$+%Qp1{s0uPEI`mK$)2b)$X*omxMw zFF84}^dPm}VQRY<^~+Dj=xX(QPRjY@z)6eMrR6t2Sb7v;H^;uH|KsGFrL}r_qS&M~ zma9&kDSgp0@zjr{M=ZIg?A}Jb^He7<zW0q>9kHxpO%Lx8OD)R-yvHqaL>#f)0?iT2 z?W`Z;ZL!Fa)nbwBV+-|x7WAA)AgdW;`>Aa25%m8Y!lgh;SHJVrtw?wOsfQ5TTNLL9 zgvSWK;P`jJx0&U=kWHs$ZtbUE@z(0QoyO@Ftrtfu1E8<fkAUWgWfJ5g`YEU1)*AJT zPJe??Ua7Gxqp;3XE#6)Fm8XqmhxF@D$Dl-aLcdGD9hxJSU1Yh3@I}G{z!>Z0`;QHX zv95Tvd*6OmS+0I8OMO49{6@z`s@r~6`Gt<_tT#RXp!quMoW^4VMw0zV(u}mqZ*&-- z*&I8PedTvL;;cOnIEU=ge|^oAq$ILWB2AK2eyPJw_UYEE4wNI$@|)vXWRpdjEUWxt zM=tyRa!m(I0r?h?robw{*%3`K6mu%ST=Qa?pKSc3@muA$J62h9cC6J_SqJQ#F>EdQ zuCn&oIR&zu!&h15*M~P*<p^49mGgtN`E<n7rVD4L7`9sFEVrF-2lQ))N!&^{|4rCo z9ksJ;*luW~oV0TVd}r+}GVHK=fk%ame;=iC6i+Q5fh=)9X{<t?<R7%kdH5dOeJmK> z4}EEKtUNcXE|+KKwdKR~N#AY&PWx7_tqZ=rtNgH4j^cQv_<$h=n5^w*lrbM9`5;p1 z6>}8w=Geo)++j`Dn;-jNc$2l}vBSd;)AQ5A^!)TNt#OCx`RQSru@BQz)Wfu2ZL-R5 z%{EbNP4unMCae73Y?D>)ZJMldO>DBt=gUpj?Kx|;8P<+x(<^3J$3H%^qFlS|?2Y<z zl*I+P-&rqk(c6CDAjtQGd~bs0`m>v$S>5HBLE@H*YT&&U^3?kCEO~n01m8(#zpfaD z`@2)HKNRyL+58TD(%D|Vd$ehU^Uq!hdGXoT#<tKY%^`!!IoT)gygrU9$JwJyz2xkb zx^k_Guoifawh1Uta!L^PPRK3RE!Vy~qQz=_qHNevdis2no<8@XuaF+4nmI~OqL0$v z;3%GnKQgR|YPF9h&&->sZkwoXqp?CsU#cal;Xayt7T-kmEKe+L*Edm|E!Lk7KjCY! z%I}h%r?zXc%CD|oggkd-3)QeaV$|A{k@g7rRN5XPzfu|vdGE-W2)Q1`M9B5%40=%q z%Sgx=eG#&UBt_6Jg)FloWZ%e&kTYH`d^g7ykWF!f?1z5BRnWXJaxGcP^O?QoO=N#a zfBftl+Exm+o#Na<amLZv#qNkSJcr#K;fUTda(9GWn_6i1zK`PHN3rcEJV;>=Q&{=L z@Z@;;?DB=mqoi*l{c*}kON1PK=Og4(iHi|(gc@wJM0T4jg}hT+Rb{uyvdEpromKKo zV0{-4zCgXZswd8h^R+WLTdvZ(v}>Okc)gq(Emk=nTC8WZNzYiUwff;Lm{;-iq@l{C z<+Q};=2`u~UHT0zkLSr}B74n;$Yz(`-0uzTkbXPtcj>!8-cI{%x&L3Uk4CQKJ&57E z0n1`+wD+*dcG+&)`qcAy&Sn4Z>18gh+jnnh!^FaOKVK&C6ybS7ZMnxPpESv5WWAP4 z`w`1!%+JRh((gp5k%<5Kn2|QwMk8%<mpGD29Y^UVQEjA?K8rNDwj*yuR2SG}jpf?D zdZWlt3_b3(Nngww`Mscv)SAUM`L&?2##g_WXC`lapH@BAD8Cjs)+oOc_?!N{?=9Az zx=+8)t#)bh?!cv;{$An*!iaxM`6_%H$fd1LmGTJEOd?Dt%pvp;UinpdwV!Hf71h#O z%JU{doL?Qat}x>ND!Xe&VHZ7t9Yrr-wCD}&A+7+%h(5qr(O0vGGV!U-BK+b@;BxT| zaFsX>tP$S<*NPv3>&36YP2wVOv(WSwyw_v`-Ysmv?V=;FPILwC5SIauQ=F$M&K8RE z9L0H_;=Dj{UZgmMCgU_{n%*GNwVs**hrPXkSz2%4T<r>AF5U<+2&dM|U=RgbZ(xyj z1+ZA_11!_}0{vQl;BxJ1;41AJV2w5qxK<kkT(1oQZqkMUH)|t+TeVTZyS32<i#V#u z8u&z$HPEEV8VG2z299g822N|T23j;(1Lr8W=aE~BxS*NzQKF-6vMEYL>;4Yxp*seQ z(R~4o)tv_R)BS3);O#IOf1FOnpG5LhlBbiLMe<yoOxH=80@4(brdTI);wSxb(yt=@ zTGFg1&1RCfl6;Wlw@5xrmLE_IYxOb@>-91ZoAffRt)#h|G}}p2r$4R3?_21*MW9z0 zs8<-MR~V%I4$?eIn%$&%${_Q$pY#o+KS=twNdF1xn+OAh#|cjpwh*2pJWqIm@FJlw z%G3=;8NbCS^I#`UN5W{r9zdOlF?QEb+r~gg*qCIfjwWdzZIXG8Ax$i4`au&V2ABdJ zqr_a(OI@QxuIY84({v12VEPGIWQyn(C5laBfn}zIZm27YVKc?BmEyeHBy+XhB>P64 zN%oB$reAe>@u(@gyG0DJ$UIzUk$D(uk$D(tk@jOO(mu{2?Hv}`my#^9=TEiBzLai} zqiMQDj;1V&98GgAax~>yA}>d;uyh6%Sh@p?EHS`hOCMm2Ri+hdm1*^}%CtTp%~8^P zLYgM4Og&(gsUNq>)K6Pw>Md58`t}GJLtTW7;Zc%zle~}Q7f9Y8A?vNkHoHG+#+C;x zv-yF3+l|2GwtoOu+4cZyY###G+I|PFx7n|X5}RzjfSYaC0=L@IfOp%9f!l320PAeG z0e9H$2R>?h3b@;L0Qi*cFmRvk3*Za3)4=_<KY<N4`_)n6psg41E!$w=VcTTj2ez5O zqqcnDC$<V;lWiF=V7m=?+;$J}v~9=L=o@xf-e|ilZx1{55WB3ISi5Y6es)>61MJHN zpat!#fJ5!Iz^xSOZVI&>p^z*4_tzm;_8o}1!TvMkgLW|pxw1zB58GpaAK1qOkJ_gV zvWSaz_YjK^kxPKNkund?NSTL%NSTMCNZCfkkuoQ1$#*^ZZX(~!<hzx8?~ar$xII#~ zU|pna!5xt@=Z{9p{<Aw$_MfLBW&hb1Df`b0k+T2nkCgqVAyW3AgORd~Z$--fb2zeL z82U`)>%gOtZv#Jxd>_~pc@!9k{1kXR@=M_9$Zvoxk*9&@BEJKkkNgpMA@Wz?#mI|5 z5v2{sn2nOPXNfXFwny239iut|qocY4dqiCZjETAe7#r0OI5bMu#>gmH8)KqmZNx>% z+HgjF2j7CIAAv<tzXFS+E)I_nWl@F^=rd98k3{Jx?0yQ{Kw%G3*teo&O&*Stb@f4% ztgE9@vaUXfl6BP-CF?2>CF|;Vl&q`MQL?UDqGVm2i;{J9K1$Zrg(z897o+-Ijv1yy z!D!6q9pqc#13Gv{>&0~)ih)Brct>L_caWu++Ci2gy@M>p^bWEVSsi3f=5~-d$?fo~ zE>;NfGG^St;Enp<Zjk&qyL;)Uu8{6E`qQM}qW_clKD}kN)IX%}L_A&}JyE**a=3x| zJPJ2Z|JF*WAE6&X;b!T#5&QJ75~t~JAx_jUBhKM?mVzA!C-YSc-mCw5Og-_)v9+4g z2bj-*_v(+u;U#*qkJl^CHwt01bxl}9JS5>E=5L5sB;=cf_}unI0;-v~FLOOurrXHu zvMP5ib3Jn-^8xVhsO4sMe*?DJh9qeCwz`Z*50?IY*xeUwvqhyP5)VmB0q@l>O!5%F znzVuVipjf(Z<u_DxM^}-q>8VBIl%l4*k*e=TSResV4H14f-C4o|B&sO50>R!!~78Q z0p<W$<`-Kt;#g(}vx_+&EaR(TcO7$pS#;v?%noK3b1icna|3gL884nw`ZdgT%-=+- zdW`R?{9Vko%=OHT%+1UXb(8h+c1dk_7486->Z6B>&(%}uYnj)8rGGuU8<`J)W&H)f z8__?TS+8BD!pDN8z7M-=nd_Mw*uRn82f#9&W_HK+;_zVE4vApOC-WNSZ`dCjW=c;F zmiB#_9jwo1_ZsGhm=7=qz%swzuv_1o<6(AyrGFy3^O@H$Kg4{1`5R{a<s1)lB6B|T z8s>+X4={hjtiOW8Gbb|VGp}KOh*=-Y_RNXQ`OIsWA7a+}D0|UYmCwN(VAlF6|31tP zu&jrAb~iHD^jCIu%<<PLw~M)!xt_U^xtTe3kg|6$H#2LPFlBqjGWTJQXLd0Mn46i! z5EV{ij%Dt{>|l;(b~3w|YnW@9>zM1A8<-oJo0+wtD&0QJ_(v3#e`W`>li9^w%UmDi z5h`3Gb2GCxlH+G~j8<+ZbAY*-8UOA>>1)if%noKJa}9GHa|3gLS&Zd$nd6yV%(X!t zr|gb{yP(~~c;${|?gy572fLljfjDI+Ca^uTgW1Vk!(7MQz>I$eQuWLn&)hso>1z`e z*E2UVH#2KV%D)eDJhO|rmbsp}k-3>!o6O;v<C$H|waoR*jm*u=+7u4Y9M9}xu4S%g z?vt$S<C$H|waoR*4a|+q0p@0AZ7QeB9M4?O+yEYk{ac?@PLJ8eT+3X~+{k<oEZe!6 z-C7!_!yF&vbftGO*D}{LH!?Q|^%=^(k-3>!o5t}o$1~S}<$P7g9AI{2Dt!%e>~!Vs z1D5lRgWd7$b}`p7*E2VOW&Dlo4zRm+hKi@2xskb<S)0lEWp;pNJn`&yvfIV(TIPD@ zM&@Q_Z5GGJ>;O}I>~^x-#qL_>dgeyvW@h}0AJs!2W(Sz!W4DvtE_T<jyO!N`?2gS= z;T+6;W~+GPnO)4a%=OHT%+1W&9L^7OJhO|rmbsp}k-3>!o6F&u<C$H|waoR*jm*u= z+B^==9M9}xu4S%gZU9riV0SaKHlO2Rj%Ri;*D`BPwquTGZgeSqGc*3ZQneFvJhO|r zmbsoez%24rI45%rb3Jn-b2BskwN9nO9M9}zb}`p5*D*IRJ3T7Ai@Aommbq?;@^4@c zFpH&1AIt1ub~4v6*D*IR_bFH5;+b83<*sLLWR9&=dIz(UxrVupIlwHcI6uq|W+!tE za~*R7bAVYa<M7N5X0e?0%noKJa}9GXb3Jn-b8}E%t>S59Zf17ep!7~=v6j<g4y;q| zz(&P5N~ZRXWp*$-nQNHWg5^A4$L{0ouDM->uVdZ;mUc;-72_XdX<Z3y<Mi(2^zK&d zV0PZG#!($}%|Dboz+6+u=>)l6xf_@R%;G_gpV`4&^ALw;4(w3zi-#3En4OO(_u9v} z9FHqLzFYCZJ&OD7W&eGO9nY!z7AJEJa~*R7bAVYquk2%)9n4PV8s<9Y2Ic^>c!9$+ zJHT>1b28U3*D)X8uku;&isG90l)d9)Ro)ur*iYEaT=%JJzXoQ<=gJ-1q|$dVJDF>k z>%cNU4a@;%@rBaIGCP>Xm#k-YFguxRnCqAum;=n>D-O@>V0JRsFxN3RFb9}LfWtF8 zn4Qcu%yrBS%mHT6%;A|G%uePS<~rsE<^Z$!n!__Yn4Qcu%yrBS%mHTnySW<2%noKJ za}9G{(0xML*D*IR2bjf4j*r>F>}0NCu48Us4ls*T9G<y>IlwGVvp=)*jB*FQRg8aW zSLI=LFguxRnCqAum;>JlvGVdrXW$&i^8?4j>|k~>*D%+eS9T4|0cP<thi7&$JDF>k z>zEsu1I*$V4$tghb~4v6*D*IR2bjgL9G=<1>}0NC7XM*8W(TvAxrVupxq&&rEPm(k z%noKJbAVY~RCYDYb<7RS0cP<B$H(kob~4v6*D*IR2bjfwIXtt2*~whPT*utN9AFlI za(Lzdv-~9uI%i;ZFguxRnCqAum;=m0<M7N5W+!tEa~*R7bAVasRCouolevbuj=6z3 zz%2BfF0;d++)m~i<~rsE<^VH(0z#FW*}?2&u3@fYZeR{D3loQDb}&1cYnbbp8<+#k z!pz~B9n4PV8s<9Y2Ic^>uyA;02eXs8hPjTpfjPh|tQ?-%!R%zNVXk9tU=A>g2oBHe zV0JRsFxN3RFb9~0jl(lLn4Qcu%yrBS%mHR$=kUx9W+!tEa~*SlSwwO;W(RXaN2L!i z*K|?tI_3uE0CQ}#@^>&hnQNHqm>ZY_%%Ur&&+K4!GS@KIF*h&=m_;`gz9B|&fElk) zsQ%3CV0JRsFdw{1qy6ZPYZS*0RpA`W&XM?iP3%)@nCqAum;=ntF)CaQa~*R7vtyEq z$1#QTnXFh$RUFG4NL6+sO|g@?hPjTpfjPj8S28G{B2#fJbHgm<c4Vn^oXj=Mb<7Q5 zS<V2n$mV#M1I&ims-B!+su$)u<_6{fvzWv2Fguu?%r(q)%ni%|X1rKJ>BKTSn4Qcu z%yrBSU^#yWn8iG<=lPn*!TD7zb3d@W4{@@)fZa9hZeR{DiyRKm>}0NCZeR{D<5d`y z9<!6VhPi<`5Ogn4_5tSDh05(<u3@fY7I_>$vy-`oxq&&r9P8xxm}{8pm;=nhrR-{$ z>zD(~Vv+K%D^lFREIi5`%j{&XVb<h>8S%By#7OXe!4cp;#am;q88>*`=yA?*w~f1h z+|F@_$8{Q?GQMVf-T2qWw~YUB{Dtw>xX8HZxGUqXj++@*9CvTrqjAs1{WI>JxM34+ zo3LlXdlNpIaDKwY3Hpg?6ALG<nfSoOmnXJN^iNthY4fDVCmo*j%cQ=JagHQMmZQLN zljA-|z2i~Ge#cSA4~{G1C&YgiZ%jx@$Vu=fyp-^9!mkOP5*H-in)pcKABoXPBa$+b zW+u%|8Z~9wl+r0TO}Tl>9aFYX**WE(Q{I~L?v&4`d^hEfDLs<MC%coECYL8~OMW2v zwd5no-zJNx-KGwmI)7^M)YVfrPknIezNxQF{dnpRQ*9{&Q{q$Rq%2A)O<9(*I_2h+ zO(_j2ol{d&GgGru7p5*wU7ET)_3PAsr~aI(PaBXnGi`C&inQC(9!z^K?d`NL(|$}d zrC*jlI6WbKcKVX^)#*>Azn*?&Mp1@0V|B)cjMp+&OfzP7&2(hCGjGb=ocUhnr<q@7 zo|xW$#-JG!W|Yo&Y{rW-oHK8qdEd;lGoxl@&$@lqH?vGx!?RpjtFyLcJ(cxJ*1@cn ztYf-Avm&wwW)I80K07WuA$w|eX7(M~JF}n2K9c=Kc60XG>>sm@v!iGCo;_gpu-Q{* z=g+Q~y=C@2vwxVqV9t^`SIteGTQK*wx%bZ9HTQ+N@6P>Z?hkW+ook)feO~Om;q&6> zO`lgW@5XuS=iN5%wRuP8eKGHwdEMvtp5K4|*!e5x|6~4v`G@9zHvjbepXUEL-<T7V zGbm?a&c>X#bI#`cCuc-%S?;OabGg?n*tlTdg02f^EnK|t@rBPW3@rS4Vc)zhdG&eE z<b9C$p!0d>f1TI5#<(WBl3b~-rLL8(TGuVETU}qc#3Iw8D;C|n=*~qCEIP92&qagt zC+Fwpm*=m`-<JPC{uB8h<bRugF8`PO-}AMC-UWRNRu;Tk@O8n(f@t@(?(yz2_rva2 z++VrBcmL`hvUv02XBM|CwiG58&MM3=^cF5FyrFPy;m*RJ3Of|_D(YV}t;kd4ExNtv z)uPiyw|bJ7Tv!sdwENQGOEZ_=y7a!KPcD6B>A|HxFYQ(wTRgrvwRll+dGXHT*NRUS z|5j`%=~r@XNm9wQl0_w}O3s#aD7~t*$S|yQOsTVUdFh4HE4}I7mEJqO2fd$pfAJ0~ zOD-!cySZ#<*`cyiWxteNU!GFFsJy8B!SYwj-zh&@-cp`Z;i*_%v7<uo8|)kHo93(V zE%$BpMfeB#Z}Xq<53ih7xw-N{<&nxj<@riW)rcxb)$FSBsx?)&SJhYTt$MNQ&8knT zzN|V|^-GmlR=jNgviFxoEstNGapkn-^Ok#;Kf3(v@*kIL)q|>MRWGVuUcIII`RWNP zvM{!n;kAQmynk^6e&zH@{JN<SpIArg@H?kHS3r&|EYXDMSy&F-vSb7B?2=o7(pQhr z281?=4){t&Xa427Zo)3Q3;7#mQKA=oVnj!A1$_J9UCBZCowLF49Ri<WqBkD2U5Pp7 zIxz~G32;pkBSa!JQ=m!4Z^um)qw&jfV?-VvWjVz-u?QARghMP9@uFBHh!wEB0amL; znz&J9idr#4+=SnUTO($Pbs|gDiEObOF+3}B#0&W4y9WG5-COwGIQ&)^ekX1beg`fe zzpPgvJ`rvlW-Jx~Q7FC<MdGCJ;P={=;P=;-iXV{DFQQcZCcL<@Di;>50vj<OUd*W! zowQ}5vsNvx(^iUjZIzg;-5{oDt3`%(qnN4HU}46ut!Zn;d~KarpsmOIlpDlKZ4=(5 zyj|R=Z5HdaZQ>T~PI0TYU2M_r7x!onif6Tl#An*W;&bg0@ul`C-kRJc&S+1HZ?&g{ zLHD#U>h=nY?ge4hy(S`bjl!mTLqzEg;ho91MQ7bRqKocbahdKt(M$KfxLS8a4AlKg z4AOlg2J4QCp}G@dIDTntBz}GFdfi#PL)jw6>5N(&+B-J78tpo}$7aa+J+=W$d)xzD zp}QYgq<aYX5dPy_h~+)@0Bd{T;}&9L5Bx;FDC+o6;2k~Q0^Zf*FmQX14}kf-WIQ#5 zD*hhbw(Eu16;ls<Dn{BXjY1WhlGpc^zJKp6WB9E1Z?I3kyo*7IOhRQ-NAkuVGPcyd z(sFiR8S3K>|1k<Nzpu=R%FlDMn~H3m38+dm#$bnhyRI{^h%8l}RX#WNh=D$~pNw-r z7_RLn<5c<lq`&md9w0Sy2^SJB86az8)d1<cp78DgJ29}H8Sn%!`x>dwBb;-sv~*u9 zHDx5<aIMUL*1(k(A?6Ld3Ak|J-+=cF+!4a(hRRT{6RsLC&nm=`p^Jc@6Mi=o|Jo*u z!z5l#IFc}JSUEJg!&U;960Rg%Pk1NcKZeP7gq|2C^YhX0w;=}ze;h93Ur%Y>J>Ub# z&kXn+sB*Pngv@ghVR#=<{il6D88lMb&n8@X{d{aLvIcsA<zsWAWZ#hQ{oFLR5ZI$z z3GkM&GCy~a=1xM@rdb1h@O^+Z4--B%R>l(^zY443QLT3KgbN*nxO-fejzVmhD0}bU zBW6GzIZ3AS*d$rE*P5P#W{_h)aJ5ag-E7;w&O%Hyy#y?_H3083z5$F&J`5}|{tK8I zCEGVS`E$rab<Mzq$)|wc<nMsB$v**aP5upN?)fKhYjQ-FVBb??s(mk2<4*NbHTqP) zReg1Pvdpt8*Z-<{H8!73*^RUg5`LQU9OOXCeqeZA9Z!=z`9hj(9do*jx$AX=>Aj<c zxGMc>;Fxq7k0X5$<k}vxb=IfPhpf+#VO6gFk#Qq5J4y3&#yZIR3E#}P9r8w+A3h}C zuQFu)EBwC?wQt(Th)3bvOqs5!i$o{M?KS_e@t@DUs;dwxKkZ}dIXwZss$8l><ECea zG%8m!rx!t^N~&yTPG5P6=8oyNL8EF(S!Q*t57{WaswEY}zozeluc}F9A8u1QOV+^V zS+c!$5QdLRH6w-hTh*&oe^&ig%~!9@maYGULH7KjYh;|^bC;UU;v(PdF2r|pq@^0; zzs->=g<-BtU5(A~)Rku6yy(k<V?m7qH6p@CjT%ScBQ8A8Dz|E6#U+1&*wpw^<LG~l z9W`py2vTDwe70BPPK~3!g|eTk86$jF8D3a`8=}fWS-OLSX9y#UmO?+UNY=x!BI%n~ zB>VF%B<~{(5O(lL-|?O@*cW@MfZIv)8DWPd(pRNkce$){HD9UuP0fwUx2;~T5fMJQ zM!0-(jd;n|8c$nGnSZs)-07D#;iG<^U(U4Qsc-DjI`_73$0rOjh92EMxE!m%3b_+# zAbfAdF=##`{F?CF71Hu|Li<W-*^}_9m0!Vf$VxeroSc6O@~D*(lUM!-%q1*dDZ}1O zSV#CQ;g20;8#S(!sjHQDO#1mNWITTYN3E1NWTh=u#?}p(OL%xyJmiHP{{~dOaoY{D zo)ebLyb{m8*2uIP*UW|dImv$z_FOCVtJiLY{^qqbQ>~L4bI)_ooLnb0KNG4rFOu)0 z>*Wga@_K1GaHhnMNIpgQ%leqULcI642Z7)GO<Mj;Xx%7RTV<(i-oIUH)EErhE-hc1 zE$i_6+hxxGxP3&w;GRLP{<h6>jqbHsrr4M8I>J$e^RJS*RpVOi8H#OV5yO4PB;abB zT+=6-G9jl%$(4QT=J}B45*BXGhaA2KP^-V%354%|o-oMW$f>_eJV*E|q1qSq=yneA zBvTLn|LZw2hTm664DUHZR?2o%eIs|JT*bos#>x4=%lJt@YNeD_|IxO{8VmLunTM18 zWe<<oB4g`JzC8)ABpgIIX^X7Md0S;Fk68-`1ZNwi>CsKLh+0X5yM+_5IXV9vaM`^Q zZ@u>y;4kYX{uFT$XtwFD5u*NH8FT7=qacUx4b+^b_7!SoQ@ai|2dddm&5i$SzoF*U z|MPs<elPLA=EE&@vW$<fnKA^cz(W$ZM5an4{l*;+Lrz#CH63@x4-=x>PB|0C@UC8l zRlBV5k4ZV1aOq>RAF4T1%}8oSRdZ?hEUGNe?UwfQ23|E1^*?Y3Fl*o#V0a9!CnrI( z?nzmzPd%9g`6yv{Y$~4UJzn^(?I+_@yQbANuGOr&vBzuh?MwNedPMdRHR}JD-1XD$ zbAvYFa=5+q^RoFtn+@k=J;*pMqFOIsQ(pnpa0ji&r2#vN#YO}E%g_zf;r?0v$Ke}B z6ZCHab-0_x_Z{IfL;sc${{<or0r9mC+<)stC!j@)HAO%_4yfUd+Xj6Xphb)~*`bdE zYWVf|Na(u)Euym(|8FO{05$v{V+ZKF12z0Ac_+v{340+9{8t!4=y2EG9e6o>bhxkY z1&oDG!~MO)MCf!PfiMX=4ZlF&2bw9OFXUt(zKJ0ELoO9pLoNYoqD))^*-PjX10gTR zSpmK)fpY<T0|I9SI^5rnfMpHgO*kLW;ckBvH0y9ipu?*%qam-yIRU<_0@TFc@EWTQ zzo9O16HXU&;#Qm<XyP`)%{W2OiQ9o1e(OCE@>aq-kzbv-3pv%{|1eX4_uy<nC+-y) zu)L4(ew;Mu@c)^a&^&+>2Yl;<unwmVny4q-fs+TFcnFAZt%^C29|mgTQJhBT#7;s@ z%YjA*)ZqkS0pvkIeD6cc1CG*Mz*H?CI8AfIH<NINRtU{>peB}R9>^Y`hX2xB3V9h} zwN?Vn3ZM?>4PMBrfT&Nc9P(<y8k}LER)P3-2F@~2pM-00rh#v?0d+W^sD^wq;T<^R z(Bc0)CH@`f92!n6Zh%~mvkskj5GNfdueJub1E(E2@w9dea4$|gbYh>j5%_|3EAS<p zec+rQh%Y&6cR+3c>O`Zq1@b?EI&lE!BAPe|)QQ)%yCA;-#JAYAdmz6B#20Y1`+#rb z)I=xV(H;OE*6M-p;`~G>-optBzUo4FMB53?2ZSHuG({615&lbi9Qva`O?<390r?nE z6Q62(Ab&#mnf5d^p9Arw5^XQ!6F{9fsXYrkr9BVLX~J*u3-S2k2H{!lW$0T7zt>)Y z{yV~R+H27N0Mv<JwMO6t?Ep}xdmX6Py$LknEJwpB&mqVroaf;CkT}u7*JO0>18q3b z(FwcmBiKyB$&OA;BuvtM40*EdQ{WWc=kQGi>cmvt7r->#SHN^#GxV7_3qp?qYGMY? zgV2`<XX;Kto`=&Rd`AhW6S+7c(uoDS?|}Ps{{|k={Qx|u`w94|?q^`L?pNT~y5A7$ z8^Rv?-=XPF*h~Kh^f83}^nXI%m$1KH(=>4v5Z^q~gYf@VddQ>oM#$s!X2|0R<MdW& zCIImTI=u~Y0%4Lq5}HIHzQC*R0C_TDvc3~EQ-Szey}k?NR3K_V-xYE?;WT}BXflAB zn6B>$Ig@aPz85qzfjTiu-y3ok;cWdC&}0+N(f5IVE)aF4?+bZ8P$zQq{UPT9QDge6 zAuj~t%hCF4AUlEh2BLl-<VA!9`a#g-6T0<7pkEBsi9-D_$VG%p^dq405H8h^g1#7t zIa5Cxaw!mVrhY8sG9bRuqaP2s0*Egt=_f$;6ISUbK~qV%QXda_l|B)8gMKn_wI09q zDQ*PnM2$WLSgTJ1uGMD%*Xc9i`#1dz$QuYZ>SsaTsm}&Js-FYgqn`(xr+^ss`W(p5 z5bo12fMzdH6VK`MAU{j^yxs-P3xqG}^Pzu{@MXOlGJc~K_=?^Gn?w4gklzAo;vIbn z<hKbA>%Gvt3&i-v?|JCNzw|!fF?}WQWBoGVC;DpOr}~w!{0xY1=jm?%exbh+_?5mE z7|^c)HtW{`zt-OZJdR)e(TNlKjlh%oTM_mY5aU{ZJMdTi9YBL&3oyd44Ze26U65@+ zO+?|BLhzM6!j6XfAa^p{4}E7KR$;>fkfVV*(alf~>~44n*u(HJu%}@s@G`?LU@ybt zz!<|5u<s4TI&0VixsTy#$gzZd4SON?Gdv6IZ+ITQR{?e6YQu|=2LN^A8pF%LfreLr z*BM>|4mC6ahZ_z6CmLP{It*_D6AXtCDiNp?NrrcTlMU|zlMU}fKNX14WH<s$HGBk2 zH~b5jVfYxn(|{O3hEIVr44*?Y6NnLH_yU+^_zIY9Xa>$Ud;^?kI02k*I0efbAm$mv z8Q=oLS!i5_?;tyYn#ec&8}cH;0>cl`xPdy{#ry<(((p4hPZ@rNyoc~<!*9?$L%7fI zJM?=ApEdje{d0sb82*I*dBPVBnobih5$-qWbvp4f;VT9s^sfT3LK)1E8-Q4$3|7eh zBs^%aL34ocbwecdZve4E89G3I3yAf|&<Xgip$jzc0d?YiLs!Tj0P&SELwCp@5*{`5 zgythcgRvL%M#3m#Z|EZlI~cEkz9V60V;|@{5ylw%Lf;#R*~8c$auMMY<JHi32$veK zfxZ}s*~2&xaw%b%aS$|KAm$C@5Xj{~%p1mGkbQ)e#u3m|5iU25f_@ngy9?uJ$kl`^ zjbou%1;ngk91nRl5W5TG1YnJE5;V0yeCyK~4|xp`GmJ42@;abS+-#f-`4%9)6KYI` zyaA{ae>0{)-U!4l&X@-IR>Iqj8PMEDxY?Kq{T)E;OpG%iZz0@foCVERpeF7zW<$Oc zsEK=wb0FVM__lE#<Riu$;77&<z@x@I*!*h5Zx4%K2rnA*Asb9?pwUzaU#rOj*+OVD zEro11l>j46USLO4Ik1z-2kdOB1a>to1NJag1ACfQ0xvV&0PJPD5g22t1@<wm0bXfZ zhxq#fF}h8+00)^iKr<MKouO$XaE$3zV6y3U=+jMiKu#mfFl~Wm8W5w*v<;YRx(nzs z-2<#N-3P2P-4DFU^Z+c^0MQDjddTa5s87>F!0o1ofe)E>0(Y2p0UtI!4m@mn0{E_J z5AZ$H(+KrGP$xb!?FF7NJqyiAAofM3=OLda{MPg$G-rU=`IugYd=99IpG>bn{t>8& zpG~hpK2P|IsS%oA34b#kfc^sEe@w4K|2yFyrZ=I#2-L)%rbCebODN3mK%)`r&F@05 z17b9p--m1fYQk(j0@*}pF@FS&6^QxV{4dBh!btPS(AWv1%%4Kvfv}VLbLcw)@kWaI z3&@=bqs?DI(-nxh-P{bhJ7G`rH_-F|YND6<1mw$r7_H`0kYj+@^PA5=z7D8~A?CA? z2Lm-R%={hXp@hTD|AuA+5PiV>1LRSJqs>1-b3ITKW6eK99z*Cb{|Ze!5VN%TH{dk$ z@4!s+AHZz$pTOB>4R@b&%-DE|xj^(8vk~%q!d$Z%njFFfW-IgyfjV)A*#_KVj)dkB za|g%|194wt?gV)!P!o@tyFlJW__(<%G`oSAx6R!lKS}tMxhFJx2%k3hg8mu8edgZK z?*(GUHeUhxS;FVdeV};(h~0v@FXWd9_nZ4e^D^NF=BuGU0>n3V&DTKwi11(LfzTWU zVxMmw1o;>c`+V~d$e$2?W*!F3=RoWY%p)KN2){Ouf~FaWoxgcB<l{i>3e006p9E^+ zjCnld(}dreCqQ$S@H_J)=vxTCH^)Q&Z^9qUiO`=T{Lwra`k#R4|K?=KKNJ3HPJ!kZ z!VBg!=zk;p-JAjae+d6DXF~s9LSdN!{h#I;(C93)AZtK8pSNT~)&n(Rvdn>OBs5#* zL1O{xgw>J*IfBq`SpbcVFw&9-eH39wiwpV=K=gb|KIG0o^m&ULax@Tq-cks;8(|NN z2b!Kh%xRXTkoyw$x0FEB52%T&Endi10X1=rr5y4Ape6=de2}jtyv|Yy%^<=dmSxZn zCLC(1hJF~~2+K<7hXXM#EH^+NNqD{GMrcM8j<wW6KL&{V3(FeF<AAucu&jd|M>x@P z3pA5}I{cc<2FUS*iI$DfBoHQ9ZiRj_VY20R=%)bj)o;rkkf#!+TDCxw2E<OuvJG+u zVW#CSXr>WPx7-8$44_WTwA=@I7GbvKerU3QnwVpG0P<|0Cgxe{A<re8Z+Qrs93W<R z%fpZt5awBSLbH(2Y1sw63y2+*<#EXQgl@|d&=e3Zw(Nnv$nrEag@hi<UTBs8u~Jx` zg?x+UdB`^tuD84h%?2RWWy{Nu@3*`Hc{>m%A(q!5|AVmJ(g@9iK&&H{1CVzRK4N(t znuiH@THb{IQNqV8hoIjD#9U!{2lC^DPgvfC=1Cyt3d{SDp9118!*T@ptmPwUx?2AQ zIhwGW^<!wd12OAbKZSgm^>fHQ342+;fF=frQ!MLOkS_;fcWrHk91FxMZ2boEm4yAQ zC!py|*xz~z`l|>BSkFLzHQ_bZv(R4)#7^7#9pvkPShcPHhCG;XsPzYEh5$7&-1-yb zVT2>BKSMK;@Ota7(2pV<ZT$`UF+iOdYyBPaI3WHl+xiFOIKqk6KcSgGILV67kO>D6 z_sCW~<OCq@j;%(>NkHu9t!Btmfarl%E6`=N0T)>#f%(=Bz#?lWV1=~{@KI}5;Ir25 zz~`(zfzMle0S{PvBc6kVZ&<H@=5@kPtbHJVYV8aB(%K(*!g@9Er1cu$zpVp-KUfDL z?2kaqb=D!kpRL1y7px<Iogzj7yG4u!_KX+{yewio?0W%qA~s?IuusG!;8hXv&|eM2 zED@0i92hYfI4B|+I3ywkI5Z*+I4mLqI5Hv=I4WWW@cM{Zz|j%ez=Vi7z{H4oz|@Ew z#F+-fJ}_bd@K{71@bd^4@XLsN;5QL&;K_(W;13ZV;Q5H9z~3WEfd7r~0u8oupxNdF z+HIA<4z^{$skUlhnr$V1A8j>GdL!`dM<dQ<&jUN--5x#OZt7t;ryqxV!|#F7h8BH1 zcJfvcFA9ui;3A_DxYj83HyghPt~Z_o-e$Ck1o5@86EI-x0BkZw0*@QJ08bjb0#6&e z1HU!)1hyD^0lzo)2A(rs0sPU}2YBAt7x;^@Kk$O_YT$p2*8ndX2Lk_V9EA6&(#<XU zEbJw|2TnJi(^rdcZKLt_*m2u1;7QvE;Az_^;McYxz!uwB;P<xiz;m_<z#nasfah)T zz+Y^Mzzep?!2j5if&aCo0EImbsIzAP4faf+$vy*UvCjfV*t3Cl`y61DU4D18qdf=M z*)G378g0)5_OQ$EkX~lb2gcat_ed|d7XoAL9^jSsrNDmn65v&KFK~dp9C)qW2fWT+ z2^?%+1{`Xy1`fBc1dg=JFO^<zzY#dbUMp6K#daf3s6Vqm0DQ*24)}uo7T`<v4Z!{O zjlfs!w*njNw*&uazXN#Cz6JQ6eH-vY`(41J_IrTG?DqjbvEL7T%Dx8JWUmK)X@3Y9 zus;m^+P)Kb+`bEV(*8Kk#FHXh^f!trk>3NSMxN7e7FTt60>37BZ3m-xOjLB*1N3)# z8ecy>-9>%}^=OwA;IS?lz)!kl0zd0A57^XY2Jp)+vw(pvbAVrW$pIekvH*CpOCIpU zE=J(DUGl|yVrsMzm>Rtom>&Hsa9Z^9!0FL10%u0Q49tpt1voqUHQ@Yce8W@ZM&|(+ zM!SH{=zP3uSJ%}He6Xt#xTEVIz(=}n(SIWz?Ya&4SXVtXySqMt-#&Z}`s3mmSRNPq zV0m0Tg|NrP3$Q#cUV`Ouu^*NvL<96E#6MwqLL7wU3GoKPo)B-r@`QLBmM6qvSe_B5 z3BQEp84-Zx8S!=38KyJhI4sYIldwD^n!0A1z7^*Pe}v_?;yf(B6~DmpTX6xF--`dh z@>_8cv7HsBZhrs`-Hbq8H#5-EZHxY_i0HNrXz!+nCaT*Lc(?E}Xj<?j{Y_Jg=!Q@& zA_l%K;&S*JwM~e@sQs<mJ2s<s8+?u0=5Fso{yRb$wXLu;YInji0#9gq;2F%-Vkq8} zbl`2s>3GtRhc_9$c#5(P-^;xZPavKVFNuGm^^S;7MF6Gx1^<Nf{$*>&ZW_B~?CWDa z<MxfaIPU84JI8Br*GzCsm^xwlgyj=fPgpnM@d=kr>@#t|#32)}pEzM+(nROPRTJ-? zxNqVI6F;4}ebP|JXvYf2*N%?yMe%j<GZPjk>`Hh#;Z(v83F8to6JJU^ka#%pXkt_1 z@x+$I^NF^kE0eBG8b8G~<>-`Orp!*hG5OZyr76#+{Fw4t>Z#P<Q&Z9wq?M<wOS>oS ziL}PFf2EyC`y;JWdjIsX=^5#+^vd)N>HE{)Nk5w2lzu$@yYyeu^%<QqF3YIQxGN)d z+S}8POglC0ztcu!j?Fxh`D13k>DNuqoBr7JgVSft*f8U=nTa#!&TO1{e&!!DjkD5b z<;+?#t72B|tX^4tvj%4Qvploc&E7Qora8~gIW_0|IWcpG&z&=O{@k^5ADH{>+}G#s zn5UaRb^ek0zs<Mhbjg{SQ;_4!S(&pY=aHPfIgL4A=lqbP&yCFOp4%t)+T0Df@8*7y zJ7a-!!IA|P3sx++X~CllzFP3_1s4|NEqrs~cMH9F)p@mfUpvn_3tZ2*Zd|l$(cVRk zi{4(;E&s}VPyWOCujap*A5jopkXKMr@L55j`zH5B_g?oQ_Yt>wai_&Giw7*eu=x7I zTZ&eC)_U&t?C|XOyya=~ob>$U(U$aD(r?MIB@>qXd&!ukNlOnG|Eu`R;&a8(CBsYZ zE!k1>RLKh^jU}0-b4quYeo{Kro8YbWuJwNCz38=<^)BmQHo9z5*_^VxvZ}JxWp|Z5 zQ1*0LW7$V#UzD|!S<5?>_bl&QKB#;``MmNc%bUu_S0q-f^S$mn?)%Yq(bv&`x&Lba zwf;2!O#ghp+h6Wq?tk9@n*VkGJN}RSU->&#_Nlz4(o<Ppxx8|9<=V;<l`WN`s$bQ0 zRT)(URZFWbUzWLS!LpB+EndEU`Q6LwmVdrHx;m!1fAxLU4^@9#{h#U{8}VL={`6#d zf*U(Up5UI&!J4c$)Zm>Xte^4^udWKmn1w(*Vh#Oi;_D95(N=esbQnKjc5e=DZ`T>W zQzCzvF5K>xOr?{k{%}9kNlI<gcw!fOQ_e2Of2JCdS2JEhwczT4H9s5c=?bhRoADHK ztJs1u`Y`6|U3g#lalD`W7QR3Ip7;vyKnHMrEt)Y8sxN(?0H4G&)Kj=l<2r*;{w=Pv zh^qzb!gpeg_#W54#RhQ>asPnpM_fPQI*%ukKO>!AkjAg#HE{vgZ@B)0>vvoias7d` z|BLkg#3i)PgoaCpORs${3|bRrohB;U^<pO85yRWP%omtrwE>-FYs6}!@s6XwZ_6sX z70fkY>0hH&k^fq4HQBG#){uL>_BV2`*X|(qog5C|Cnf!Mw)+RW{{gqG`+p!^yao)G z>Glv0Qn(&?8mZEMiupsZO#ege2Rxa_y8`S!%I@#k?i}-v%;%YZVZOj@(tY=ojOTfS zO6N7^MrNN;>6bCvOv-&ngyJpC+nDcSzK1!(rtI9zh0I=?%6~btkGT^5vV4{7UdHZa z?5^hUD_Osi^*6Bl26o@b?i<;?hQqC6zJ+-s+ihgKCs_YVXO-{Qm>Y==;s<tj=%V~P zF?V6^%G{l~Cvz|6-pqZOuVx;|JcM}!^JwN-%-PIynCCI)FfSnPAu6L~{(6XI%+=B3 z_el4R<i@*H%zK!hW`3UeMdp{IRsVQ}-LEk>vVLG!RS$!hhcM@L{qCvp+WK*OG|z-{ zoxPLJb)Mu%x1DwD(cK%rS9c)(S>3VtTlIsJ_h^HYSKF2)*X!3OKdj%A9AUaQHNx}{ zTo2-U1lMj{&)|9v*Gsrw#r02IZ{Ru>A7OeM{2s0kQ#*D!mKuf2ZFnqwo8iTbJ=%*I z_kr&>3{HLk{8IGb<ZXs8r|s39pSDLk7JtCdd;05!WAX18=1qSej4;#p>OPvjN0%{U zuP$%K9<6A`9^D$q+i+#h+^c(c<{n+qj4ej!aXpP|cXZK=dVOiuN5;~uZHA&5cSo#G z-i*s_m@s>Hbj|Fww)M#e40p`AnfT2)H`zXzQ)N4bYgw`%*J|5Wb5`5N&0TFvn7hJu z$DF^}ZkW3Yx|?jsvuSX0J+4)-Ye3$sY`f>ZZ`e1_ZFmvaJM;GFKA5vt7d3xB{GN+G z7XP!UBxjFSlCxL0C3n2}<=hG8WAR&zB{}}+`3trg<}cWzNj?KUv!J1~bzwv24hx@* zo`>tqf&+$+7v5+-v*6mUzb}kN9d^dG(cC+4o1u5!9<6uYlhKbmpNxLmdB}XswMUzW zu#t-zI{yyt0`9q}9%=Wt$o9-C_{ey#yWaGv``WIj-S-(jbuW*8HT50CQ=WGWA9@yc z?YQJ&%e;liTj~UJ&FqHGmzSU~q@L?MvE;h0>y!6)UZ4Cbu7=M0=IzzJP&&cfSh`pD zb!oRQ>yvxniotamu06Va^Y&=CbhrEVXt;E*`S$9L`KqGVC$Gk}#kkJDJo>}bZH8Wz zKcg@0(XCH@68aZ#y@YFm`K8pSjUQHRG4{@T3gs`fO<mUCa%RCs)WKln<5}20t3zGs zdR6WLzZ(7b<@Xs*EZ=5WpWNTF9{uRV@;zE(=|{F<D{$Y8J79xm!dpdMMIXGM)CVKY zpk0QmAFd&|hT{E;k>Klbjlne**LYkLa81JHz=ai3O8`$sJX3Hb<63~Y7UIgo<;1lF zx}~^^ap5m6!&^{U?4Bs5xtIC9r9SUs|KL=gw{&npaj{5%kl-nGRa9qHm$}=SNbfM4 zITaqiyF$p&Gu^HNh?m4EX8B!yH-%sW8G{m)SE9Gn@A8zoE2Q9F?kC$U?^3r)Cv(vf zcfL}_S5&yF$$Pe|xKc$r%U|IsEey*MCspWPPSW%WZ<)KouYysDWL`PjGAm)CN-Cv5 zq^JtGv@C;>!zx7PuJBQbLr$UWTir=6ziXD;-&T?3T2$<ARV7yX{N9qp3b)Je@s@`4 z&S3(f-C3TJR@(%Z&n;3Wm-;>a>NIzChPz}DYWfm)C<Xx&s-WpEkE~RcWvY!}30t)@ z-KeQnr>f4$rIjVEI!Hc$MP<I<TQSvDT2L(Odp7DIJlB-xDc*__mp^19i!t3*;d8gq z$b!xHmbNOV6nkC%OM;TFZCGXDmx;?349ir!AAMj^C3+cqsP5EOo#e@v)r@Z4RzG=p zzPn8NP~geS{q9m(Fxh}@4UwRVH`Ixydwm`iGT6zI+`jw@PZ=tzUDrwXl$MLspdnhw zU6AN4E=JduX{TgWxbofH6)zb<gJ-!bJg#ET3hE~!$>S<4_4@ptd|!B=V9^nezimCp zjFT4K#*0xMmQsogg`BxlN*8+t`A7{9)R3F=#eKt<?<#9;J!+(iV57DxcDCPBj7oC* zLY-O#KvlT>MIt3tb~Sf}92w~NscP7#s^OhF)3r>@beC6pD%=HBChh|?RdBDC`ArGc zkQ!jBxLmgKQ2C`|dWEM1`Kgj)OPQspp;F<k^2q5csk+ov;>mBToLo`it(aWpF7?M( z6#7KUO!s1Ug}XH0J=5*;79%Gj$-UTBS?q7`F}=d=b5~Tsl7sj{qe13}rnJ_M#?esf zZS0U;Rp3@z8C;F$wz^<txGOLN$?>8lE5zw3Ko=@4<mR1~U*s-v&C198$Q3`iyb?zK z>O^lznX3Y&QWH%uLe>9NlEG;!l*tsIx81ZQQe9O@K#qv^ekpTHil=!C+=6*dg{urR zwUGKGZ$5fOsbBg9<#7MW#qOXti{ZXW?)+j`h03jrpw$_)nyU&Ca{iTx>>#u(wOVnm zLW(S`Rv`x}P39@&#!%09`+TVH6rMgY&_lkVCJSjUDG1j}sNFFTTm_-2N2bipsCu<p z<U+C1Xi335QQ>Z@Q&|qJ*=l6BodZ?8ZFQk+gw0tpVb)V}ZMsR@;6X1mZ)k=^uMAZ& z_rK5>Y1a{@X>bh^m&_TeEk&x@9jGZJST{7E@bnd$d^xqh+}@}`p~^$!<C21q4%;Vp zahMIc6DmE$asrXnqGFM~`;z)<^$4>IO(Ly9Im_9l1@6U|o(ojCl!DN33yx-QY3sCf ziH>aLfRfcL7l2SYJj=A#ht^1*m9dcF2cQ#OCGO%xY(avn*EA@6?Lr5m4|-sY3r>r{ z_NOt4y^^daS^Y91X-4y_42Nz_6+>+qjEFQr2en$8_!3>k#fx0|OGO*4iZbXG>UEfh z<i<?yS=;E6l}@%m>rNq<CS@R4_%@EP=FRZXU{_OSsGX)&78kdj%|o3$-Rmt2*|j!3 z#jo1CeV0Oxe12D{Urp)CD%p*_vrFzdWZfuTSR_<oGJ2l4gX<op$U6&nMGES^qSRGP zJIzoQX&n06k4D+W+Xdw@7px~*_^?E(thBQZ4$3xBA?)&M6@a$&p$16FaQj^aXggV& zOJ+1^kYTx#LKP&sFhUDL7OGjXvq;BYG{IY0TJYBqaRiv5sj-j`wHwGRrG6BOPssYY ze&poRe2neTW`XB$syp641gCXoq*~-H2(~9HTRR#icPfC~c)E+-g~;p_3|Q>eg8PyG zZ4heK;QWZvrlf~DMW~niTI=9{N2c;AM-;}r+V8<w?R7*}Q3ckZS+2$IS;(3j7P2+u z7!Gyg1Wy4rYig%m+*&@EhBjU@Od@KJ0?U1;yl0SmVA>dB62Ue~pyB0qNA4bdWXK9R zS){1y3*SDs4nwZmu$w3qM=(%pp0JS)-Vp=?4aY52Wr+$PCF%=^DkS^hXx-B&LphGr zwpG<vLgivq7)lV_+$*yTY<HDJTPIAc!vv;`e0OoNtJLkS^eNBQrcrJcr;=sOg*9jE zbg#T=M5$Zq5?{WzqS&)Y%&PYJ-6d22!Rus7lE+u(^~oJKd*ik?m{;Fm>NuW!dAAw1 zF<0?~8-^R;RKInEv@V!beKOOn>6Db=&ac$37SP~K5q8(qKApiT+bTqBMp1hyiN%PF z%8??cC_mpsr0`vW@=<%)OJxeK`j{uIB4$?N7Q4iK$sJcP!tmRU)>W6%4&OD)xYIp8 zze*!mv(hE&qCk4l0Yd?{hRUI^wQvG$6zrQAI_UIjR>JK(oGH`1e$V3SVC^Lqxk?Lh zf0Uxm6J#1;75Z1kNLR)gegleVGcfKv`7WP7I0K0+?gAL>a@>VEDLbJa0DoD!R_nGa zad5rop`Ar>sTi`Rcq&jES+m^v-cl5ywb<cuSj1KG+$S%O&s)Tl%2IXztj=FDiwi_{ zrKcdsBBNlG$o9D_u;G!rs9-;on_!Fy%;B;sxX-0za;&^E<t<Z3TY0#bD0C-OWBpJg z8(RoEok_z!MijdJdEtuCOz8Vx9)oF}no?ZpD-!6zIM|^C)fCby1{Y)@cM#mO$ydz? zDp0n6@feviAJ)C%{K{hFY?fz*yRB=E$6u80E-l3EcHCcOb>h;zyaeo@P#04?ZdBo4 z8Hqf<JdvZ(oJXx7^2#f{emA;bg~-dVtib)SU(G&wa+y$;tPh=(a9t-Cdl$8yXe6TN zRaU4o2*gAVkypUg+~%w(uf(-H3FkFM_}KxMPfj)N0(U`1NGSu+IudG!yv6c(sjZGj zXCAgv*fz>0ObpLIDP+r}l$KTcg=|S`DCLyCGeRYoo~^F%-q0rB;k}`aM=(U&3<k~H zYNhR89E?fhzfeo-P{l}_kVE=VccV6vE*_0?st!3ro~pj3o{ns!z%8b#h8rx|?GH8c zblJJ5d&|Uhw|gnwxe~<t(5pubXPG;)+&0GhR4>MTxTnNb%mzVMus;UX+%ZD^G;{G{ zl<yMXFlA^csicC@DT_-yDIb^UI3Jg2;T$pi5}hj2CCXrWA$5w6cQ7e5o_JlJwbWCF ziPNtpg6uNcmFaLsj^8PsQjZTCTh&lNd6eUxj0p%KXw=EgXF+BucVv;`Yu#|sQF@9G zW)&Pe+DbMr7E0>aD#_qH*t$O$tVB1qN^;BK7ICfPpxvy|W(c*~iPq5(>VU1CPnAdY zFzQ{wo<*6(CaR>Y*o}kT;9|#{80AYhiD9CeP7BcSe0~)%c8xwhxei7cQmC6w5v*B( z+{w9&Isi?gv)tt~<<dF~b*v<8iCG#El1B2XA^R4#eKhw;Uevl^<mJnF)#4GHDfzTV z&610-g;e2@OO!TfgzVEDF-1Dl>s6(S_o<VPyd?-W&FvpCD){sPr*?kNB6;9i-8z5D zWhyiq%E2o)tp78ZoGAW}1~LYj*LK;FA^*|?gTn19q2bA;CRyGC%u%P06fAU`Azjnt zT|u#&LV|T5r<9;9Eo3`UJgV>{hRrBy!D9uwd#jX=EzT6Isj{(gA5$iH$fId1<&iEn z20pAts=a&^Z<4oCZW3j(H0p!W^&>@wx5^!w_Ja9Rcjy1Jj-^?<>f;iJ?zU8a4LKno zRlXC$6ROtQ3wG>aZPL9}m^Yp8UgG8{=Mt@)PI#jbDw1sO&`N;iNFK_{mS$0UhqfLC zG;E~rC8{`O-EPW=YirlepA%_oh0#%jlQ!f;#1|9@v~Ae_@GtHkg8NdmAZ~8Ljr07$ z1y6Q?M4S$&vbDNo@ls0jiz^G<TrskAZ8dQr^LF`<Yh&5YI}}i~v7;qe^=hhlnPiwV zu2pUyW9xHUnRU#l@>GW#OvzH8Ne{eyqz}qyBQj_gXB=C!^9aTsj6udM4+ALLkf0{w zIO%Q|LmYXwQ&ZS!mGq30$8G2!RAhPzM1t2_>~@vX27va*7#i|<Z)kwf@W95tWRbTx zY^b1~{V>Eq8E*10Zc55Tx)*l<8J<#kQ-T#h63xMCift9M+;VcoBWHQa+o~3W^JzPu zr;ah`>7=X&TK_UD{cZM-?3Vsnn0F-ej$X!0!7$;|GY8ZywzzVQS2wev2^@P?`Mi5_ z+lO#!lY6OYYjCbbnS?T;jLMD`=9Iok?NgLif1#GvD%wl(BJKauBeV3c)R>0p_LcJX z7f*sIlYgOan_Dhm+q|+eSjQE9p7uzA$u8W9Cau83J^6k?&^ydUzG0h*kWD*XaHB$f zI2e;M53`l^i7guPptfG|m40t<uM>}VFp}}=fV=@AUo;WT1K~#GtD;T8X*wn@N{hx5 z?%(AzPIPn9DgRkzc)l#cqfox`?ovsuLyUsSXRkp)jp5c5L^5u&)gUUvFwCy-C{um} zrW|vMkOv<nODA6LY^<wgWnR2KK{to3=R~vIcxnb?8dfw$<w-QD<dPKJH<O}G{kHLu z8E&JXMr*551!-dymd!T$U|H0bR}I~EGgbI7mqS`^P+am=78<{;qlSB8UIq4WBCkv> zqj_cgY6|rgtYy61&BSARY$}uy)GE^uR9~TLP+b@M0CK6>FUuR&W91$W^P#JNghW^9 zNgcWtKO&GL2p-Z%O+GI5E(}f&loCwQ^A1;bLdq(lkV}_JEx6}VF4=Lt#g!%W{si?} z)%KKtoLuDyl`OBxZQo~+o3c<EGTQi3+!*5Y#vg2SDo{u(<DmRd1(C!{63M(Qk<8ly zdG0e9m4$<nipk5%D&*r?+#w)ZtRBH-Y^uvQrPx)dYL?!1l6fH$ZpM(CCy>@tD;%Tc zxp8i)9s<dvebe1)^s3tC2WfNwC95LzXpJ=d1g$`BXei&P&Y+y(D#Ps;Vx%W=(!70d z4EGH_dJ~vWyvwHH%?IpZJ^8JV{(O96gn5Xb+^dxUYhiwcSH2O}+Is~;yRlN{V@ICt z&lecTWw=pa?7@lJO!-U&OHvt~hH>nw$MUXO%|9@eHGm!~iw%;lERP@CYN=3?)CJEj z<r4wv6Yi!MaGs4}re21i9!3$i)8=`6t=oY-%q}G<mnuU3ZJxxDZLlAP)?G?EECNb2 z%pJ^Hcp|}!h3kTLf1P$P#9#Xc!?w#@FjzZ}xRio+y(Et6y1hEAqT73>Tw1^FOwgpN z5yRpU?Si4Rg~~?0m%2l~ZQ4Y})2?vACy==3#VbJa1tyG7+-YKaB<Epy#w%-#rZ9A7 z7j>srm-Le(Iph^`#D$F7l`<}9)Xpaqh9)VBG&pV1P{y<(N5XQMN#wBgQ6Rcz7T&$W z<Qg&|Pg+9Mpv=HT<toIvKyby7)|jS!e)(#NOWw57oQ-~<hF)?|z>E?UXN80!ZzcAy z!6&jRgscs@1HniyrL!S5T+v!CoGKMplQUQ#N?wMLB}1-pV~*!}ZG+2(<)CeXwF}~s zFB;_)gdTXvyE?f#sEwg)d2(UHUm+bh>Q;+vt02{U*WNl6%RLkVq5{bq6@`U_M76%6 zndCAXrjf~@l1L*9M?zLbH6m)QBN+LpE=VQwK(9(sUzQ7!Pp}6sIbm<>srT#B-BoyZ zM8;3j6i>0-snM%;xcP=3YtU}(E$FEe)jl#sVOlkDVWHdg&J<tpF#<*)PoL_Um~WQb zRV*JLVK-V?BB%PGrQ8r!6j!6OQi{Rdk!)7g|IiNdwG!nUYVOR6DW2tcV?{oPNI{>M z9n|lk#Pa0hZL|Zu&4|ZO{C0*<wDFMRH{2)GQ`-gzsxLKf^WukUt4m5EtM(F=Y!9_l zQDu`R;coH|t~xZ4gw`N6Q26zUR;`R7SY@qR8BgZ_sDw-X+7wKA2Fn~?cWr(CBG4rj z!W|P6ZSdt&_0XSY&`a}xjv))uHp^7va1|15XC`%Rvlfc0wG@|Fw8j%OX^n+S!Ko-Y zbk<YhrU!v|1}PH^?r<vbUNv3_k=egQ)!r(!J^BmtR=<?eDjcQbHkNy^%-p3qIg;3{ zwX264wraynRe@B83&u{%T5uqUzwm3*t|G2&k8U>u#D#U|_MTzO@c+l&yT{gfTzP_Z zNl~I6q(s`<AZRIJVjFg*V_8o-PGrZ_!xC*tlts#qu?_l)yrgbK^2)rVCFU_9r3BN# zOn?nKgUw*lKnCbWcQ6Qc18guGECQsl-M|Lu0Nq#&CJkhOT_A(q1*U;4kOeY-3}%17 zbL!ON`@Va5X)Eb0(3W|>`s#V=)Twh$ojO%tIWdrLIjKb9<t#b!w@MG#E@jO7=MfS( zk?MnCwHH8kDV?U%CXL7V7^2%KU?Y%cx7b4FY!p~J8{qVnRFGDlyl9eAL5?p|<7M<( zD*-)D)Kqj+Sg@PH{&szl5-UWJ%CiXJNW~o3{^(rJBQ+`LV@~^u^|drqlH8S~SiVx# ztFDV8MimD=eo)Glb+p{43|#C;HP+~DK119!ymHm1!XP3wL`=8*f)6TAaFQol`Qq)9 z_8JW4Ng9J8ex|t$y8wkJ)g5Z5qA{*`ebB$mwC@lOS+p0A0c6hlM^c!&=QI#K#Jyz> zaCgt1^mglvp-#nx@3NW?LD=K%*=EyuYvStCqOLe!YqVD<=eg{Z1?YJwz4{7k?Tb`D zp!}a}E;Qj1`36)(Y{)Fbbb1bUyo;?hyf&A4FvL5USOF({@JwgG=V4Gs#?36Mzr@wn zoyN+sqwdn@*YTf!%-Hkt<rqpLXRs@w1!gW^#tW_x`TWI;^21ygFU~A2*)v4UwBeuk zdA`nk{`30lU-%AV5O!bXm&<Yu(TELW2*Ji9v13U-rfNRvm&BbEL}~2tB+RWa7%qZE zMC2$+0H>V$8nR7EUByU!mtpJD+9VQ$ef~W-=nz6~`K-1}^VC-b)608J_`JE9WiHcZ zu=SQ7JeXOGQ%u5vcD(JM9H9-{KQ{?9e5ScTX$14WzU$o8FzuBZ63ah~mih+Er3Q!r z4H3W0q;IrywKd3TRPuynB)9Uo^}MX+T5#;fZON$0Cnl<25-{@>_LoSN0At`MtGEzU z+Y1&!<MUV<Of?qgxgt8#m~X8#^bPAhoE*a$w3s7FHf}A0sQy)KhTEQ4Q~8~<YmM8B zGzjZnr@$xtkLyajiFbjT8(X($U@C*<sJZG8p1_8@goE~F4sOA9@JO=bcDl$Fz%brD zqCWc17q;UrG~jyHfJ?MrPgWL94-9p$oSi1$_nLy|yf3b_mb~%QtL!dDx#^ZS=`lCs z!E|69oocL-(W#9A{<&E5h);#bL3BhsB4nV%AatPbC9)BciG(4v5a>Y1OvdX2qCmQ@ z-ddz#Tdaz+kVlJ|xxIcVwh2;#kc1S%i%z8&B_VYSZ#z%w$QDM<J4|BTuU^yvPqJ9% zQV^b`vTlauBZk<VSQ27>vGdVGle7}j({NSZX<YQ7JA^S*oliL5bW0x9Ii|=0Kp6V0 z&f~MlqdEsT)3K*fi$1IKT(?X<P@M~z;6Wud;aQ!B6-Xu@sLq8<aA1&{@T|_m3M7*c zROgz4{t81bkfed?T;3i$-SUABxx5P)viVSle4bCERb$y5`XE$1-I9kI!@1`*zIdk& zYt2mC%n>WX06DLPylG~ldMj)+KVX=wEGrXESH+e@VO1t+ERZ=ld3ZT(p;AS<*&xhm zW=T#4OPIc~+>cn$lP%+-DKP@o(&U7Ab9?kmkL`IcE+4}@y1;=}Ws)n4IGq(J!FD>$ zTuRN#!XPJSDZ{dW;}Kty<-{BXVoZT|l=q8K7Y-D|X31@kB9>!vcpQ?FJG*#b;Adc4 z!iETFfb3CabRY|jA|eV=g;(#e;q-_d{glM{*1tm?3o$dZW;PN66s%`4%6X~rdy3;> z9JA_XIsNF`LR1U{x(*D7WLdq^L!OI0s)}cR_Bm9*j9EnX;@74D_nDF2Csv<>@`*&d zOs}x9;uHL%GEE0j@C0SQSQ2s*bGY(=t*;b#Z5Pk4`y`G@y0A1BQh5;Ih+5+@dD<=n zxkI^hV{v_Ibsa3QP^~3uZcFuLx#;)#$-y+X*gNBGRN|}BL=P_}RCojXh9srBB^B}o zXAUbShjh?!>rmF)vo{;Fw=gB;FnoOx=*A)X)pFmo1&fz#P=<XI=J*NkuFBei=l2v` zeG|_ZtyCgc{a_l99_ur6dNw<!E$pRqq??)L5}D4lgp-traAv9U*k9yH*%To&5I)L4 zi6+G#Eu%(G&+5s>d0L$!ET9r7mZ_edEYo3@u~3I3mMTwZ7AVIuuOI1r9GJZ_fh9mA zYGTrbX!6R`E;FCCc1dRG($r^}Qe>L5Kv!x0LXwBQG{P)`PL$$(ezE0wF{qYnWX>a* zGmLwdwHzz3)5PU1Edp@z&U82v(jdhoACw&>;V2Cr>tQA}Ofrv#7)QuVBe1Z<S5IH* zd3Dlh6!)WC(h!)IA)uV2)bDZ@G3zN3%8A<Ta=di46dhp=haU@LUxXNXjaN^?a3%22 zw}u12QbcD5UJ75P*;_POw!t2k>TYHUJFd`WX8pMpaq_Lt&G96M-16Yhh5K=IE3(<y zDOJYJYGVCZ)h*p#T~|jTIh~ed@p^;+(stMC&2~e{Vv?G3+PV;r_ckH{B#uXZIqnNI zaHI`q3`8@-w#Wr|5h*x4La(JbGlOZur|K%)>WChFNsPKBSp@k~sKnNYmZ*{>BxB_x zzM@#g@*W4|!i__gSC`Q83o(AR)m(<Ex&(6=$8w_mj~gqkkk_`q$=Q)+uV8vO)Pdew zojIt=bKNvdJ<@gGWkm+|ofSX%Sa|$;+<IEU8fT@Ucc}QLc^gYIo(7P>C-YS6&f=M0 z0Hi(`U8M_A%r()zzTAW>y>^H7<uRH^Hk&n3f{abdu@&X{rAX%Vy=Sh3x0Pd=*D%Jg zsksRvE^v`iLXRzLQXG_c!RfsB<@BuMRmtpnIlkECa*k3@OIdu56n<R<#qrCagHu-+ zG(~=?4QH6Fz!#k7;3Dbpm{`V<8k{1;Vhc{KV18?`Tzdg;%B)w+>{XOWkm;OX(ih)- zb`D^n2nnbVmFDsV(_Dq7{i`=I;La7hjYj4i>mmmVFR}$8^MpxaO=Y@YMA|h}`U=e) zS}>E{I4-tXo|Eh{@mPa+#?o_^HTm;kk~uUO8%r7r=d9Z_yjufVg=uB}78%&t2?tZ8 z4PA3iL*OK@XMxE&HcI3$zUD|a6*OY1xv&h!zgf6+l+yC6cD#KN1X#WW$EVq8Agwy| zOfX`%{#c&kI~%i0f@bC{G}TxQ)kx1S;85ZU813E3`G6x1u~j<*Yp&cR#8G%v?=+M4 z!|7lWPk3Q2h~nkBI?er}H6^cBK8Y&e1WS>4HBltGBeaS;e<_ihxx2LJx&Q01frYD# z*m(LbWSyj+P7+J}AW3ttQ`vy5G9yrUi}9}q<VvfC-w^vcX-5zx0r^3-as!fky?W4D zQ*}yp?CW7DrJ?xtx{V%dw6Hyes3~bZG%{O-v?Ua&R$eRVSyB>&$vX`+3}o{*+3TlC z-@_pJb##Jtv6xKIMRbV_iG5?Ss(9v~gjYZ7@x;Nbg(yyNkeo0vgY|NKxy~~$JV57J zh9yCJQ=1!IuLbH0oG*Hpl)O*)vxa6(YFt=pt>F>_POdigMZ7DQ%(Vm=sw{z=sMm{@ zHr)bT8cp>?dhO8#NiipG>IGCtKI5q&uQCf-$ao_my@Zo?1rGSSSqCFtrRnh6#!2|- zh*lVz(%eyh&>XsQrhF($>7CnCPxHKbm)Az=JPVZjZ98%--MPRlG;MDdTbK}{^1z)3 za~j0HDR#3l*TIzFNYA$>&z(%p!_N@g-8cNPRG<@zY*?yL1@|XbCzr7c#qBTM>GfLj znZ?%Zt+TD$>x2W8aI-n@3rx&kkwf`@Z&A|;WDIE?P_SFR4WW3ZW4}fL0;RTbVnlik zDy`4yR&P?~EImT6HD-Ye50jKZ7rncty!yGKNp=;eXxtM#HbW=&6*jD$yS^-U8qC=o z&{!o~&!mWn7tui;Nv32wTVKH>SisQW4ufTPzMcw3X%^D}*p=%uwLb5N;S-f-;(D0b zo7zwe^5i$xia5}_yfD?k<#=^^wBaOo2umH)D_EIGNY*zJqPG;*7lf0Te6hZ04g}iz z6<#ugYY?$jfK>?23;XiiPuIQn>a;8MEAZA_;W8&ID}+5yN}TW{36Wu$q9}qgyfDQO z99U%*aXNh~%_MD!eBSH+GdJq#rA+WH;n2#c`mi^Z%iv0rGELOh$-^F)6?b?7$rB$T z%rAOk%!E{{Rk5GxdrX&RW3s$5RgS@j?#4Gg=+A5^IMOpA2QEW-97?%_=9%*Zue<k> zH=Rf<0*<fLltQUt0Vx7NSjE?zCqQqOu+3!ByeC?FRT=^JJslHEWhKpWmQslozc84> zmK11QSA4}dA#YE>a^q@3nI$qNeJWZKQ@4+SNayVmSH<%o$S%(z68>C{8DDNKuP?!2 zMOFf~x8w7Lnjqndg3zL3o>C5pfH;!-Lk$rnWEIlE+=J0f!kLlGd$xt?(G;^pv`Gg; z6fH(-yYU7heSwR3rKt|kdDY#6!<7xTK1>aW7mgZ=0`(^7O$ByH4|PPPBBWhN_5lOv zh!jQ%vhjKbSQ1)+JeZRU@;ncrvE#ZMZzq>VI$E?a3wZ7{wRTcah6E}ls2j2`&jOTb zv?KD8n#{(QMlnmM$1=nS&H!`C5iJRPsJ*^CONE4@xy@4$*bTYX06$y7IS;(Az^xgV z?x-J6a%EJgRlt>NYA2UNWU0$OLkcX=$bFl(ICMbD$c0co($63W3FJ_-8<`1~RWuer zK-*c0@l~o0K2m&)Buq_#fi@gICh&t@_Up^DIt0Wtc1(HyiPkTDW~_R`AP`7FyHC#? z159H)seAnho3$P!4dK87TNH;L(L}VT@@~Bj&MSUdMz<8K@s{<jvLo^CE_$L6ZNkgb zun8>^p<V)=3{Nk$5<v;odORjEp^^%pD}vPBA<7RJe57UIY^yT@nRsyZQd^te5qhrX z1J<SF1JVhB57yHK%qt<g4^|Cj-Imov^mWHRsJJVZdaXy)UU-<%*R@;sdah4b|4`xO zs=)M$KTtYs1kKqaxIxw^u6rjr&Bdil9uJ~M8Om_B=z##KL{?RmT-$e~!$@gjN5uQ& zF4)u@U1pzUkcm}+JWW@O#4}dK_bm#N|H*;Aj`_C2Pq#^$fJnK}v5jt1E1@<}qfiq2 zsGAN|HAd<@qR5zn486J1TE-DHf9$xOMfFe#^NSc}jo~E}%w+@j@SqfsX_9(mh$+7` z&|4uW8Z5#`4+RL7xFns2*M*wL=+z`|+bPcGLS5T!+Y?GC@85}rDO~e#&TfM3r9-Mn zqLf!D8S0@UF9P$t!Ykpeori{iV(~0DP)M)COAjq+=X6BVaL+~At`~3;?4ck5&M{ez z*+w;{ph(|YZ;0r%61~3zs{`uJat$fA0>lU>fOSsZW&=2rx-xqcQ%XVg^~TukR)@Zp zD)VuqR=*bD{PViKDcD{s5AB&4+@7k`ffa6Bye4O=D<JaXqa8&<mrPrW0nvPVV!D_{ zDZ{O5HDS@)Vy4?+YQhhD<YAK6^Q!=FXU?%5Mv+h09xC7NOq}{a)67b5YchpGe$oU7 z)tP0O+MOOT@J=Io1B!mqCEQrRRk(4Rs+D&kP1e@MxE1wbDMn}Sn7-L^y_i_8n0%qC zX2#pHGphwEMP)n-SVl3uL8TU>x*l+7@<N_K4HbMOUR`k7XVc=J1W9Kf>4L#69--m# zwccEA^YVf;{NP(6hnEWuelt}Y%6eOcbb$ddN?rW;)iyBsd?&rXic9|{n(w%>_^koZ zW$p6YgJC->$KS*-kj%Tw+20l}ym*?#H>-3<*3^_j3>i<rL@vXsu7s!k%GXG)TzV6g z$C?y-ci1+KQhd7&hAO1N<ZYXPpIxlCWqX%!$CvHaVzxcA;RR!#M6lD~rRtNq-JZsR zgfP@1QYl&nw_B^Xw@WSTdiK7}-utpP#7T7_YMV83*@=xwz~w`Q-oAgjk&1+7d}y1H zS&t^~(Axz7<`JQ`2PThyLlW}uUpgi{(Y%hanuRS1(?kN(Ew~l<Wi>+Pk3*ucYc81| zx)Uzyl1Rr-$%IQ5<T^|%rC%G6+JqnBlphTEy3+-lygBzc^~2@Wk8)BQdker+Gy2rZ z&U0|z!$JS%(%MpTm2V!i0N#&l1&VpH80I<Ge6QK&snj!ip<((ib!a=%xNkwa;_KFU ztySW26(&9hf!%n^O!HVNk~POjUp&v5)ak3@Do(dmvxuapNe(Tp5zOJQQ`GX|g(<O6 zl3T?Tg$kkaGmWoFT}iBDs>`LrNi6en9ZstP_G<GwD--e(5we&$fzf}mQ|~-cVu?HY zwpCqDl{UB-jg=Nb>zG<mHUTm(79mxC+?X+aXN|#uI=D}p1HE8Byg;<wpz{uHu2V1P z($=z^EG@@+deO;Jk*vhhDLI)E6=ijPR3vDn<%CH0or=aBo$5#@K)D4!HwEG4R3rX! zN~Z#WaLYw}Ws!i&S*pmaTdqz}bRzePx^hD73S6GGL)!_#mRqZKd^e&k<<Dr5_jD&L zI-xY)_QDj)flvGu7;B8sI;@2B!HVgN4Y^$HM{nyQr>YtwF(E4J^0jmt0lk;Cx{eC` zdjEW_)bONk-EbOMhHs#JA*-zyloJep7zCj>mW=mr>kP9xKJkB<;b!sLuv|<@hZX%C zml+YGeupDUWb1ZP-~wC$=G<xjS{hdJF<!7?-?vo3k;k0QUQ1PEsdP#6-{TFQjFT(k z8{o0gAslTl@Lp`KiW{9|)ox2rv<L|q24i0MTQXTz4+z_duvd7i4X??S1YEFV(%ye@ zn*H~;O*wn&?Qw2myv-db{TiNx?S?XUrm@h(eW$#O4sIDxs3hbaV`u~7tw?b5gx8^5 z4a!!6!Hy${Ga6xGLXQ*pp5dx9Ur;`v2nQlv14&&Hh0_SPVx@)LzKS}|gh?0uM-X|L zhpd)W#QJSAb+{u`ekG!ZnBdh&qraw-h&rdTY;YLj+6}I(E50Fo4NC4nP+HnLmtaRe zlxul;KZ#iQ=6OR7A(`lsUR^${a66Qb=@+m{6ufyyKnWu<g~oa`mEYWYUhdD<MDG}+ zE@?J8vLZ{rXs&s2=tYQm3R-xYY9D@+n^nzaRqm1iJON@<ZfUZh!k3np8ZdNXuQg5b zj!H2ze0!LYhv!33D%YGgsl0EGH4(C6jUiLp`i7@ppaVEhDpC_YWZ}`OcZ^!@P`a+) ziq$JGWnpRa%10S;I4(3cT!e!#>5@0e3f2_d$T30_njn7Mg}Cr3rb0X|xrM0wRuG%a zTD97P3kAaKM4LwxLQ?`O?q5YZ@g!e4#3jN0HCc7Zg2|A;5k0#o9Svs!wDClUXoS*| znp*9mpDe4~rfb6rS`!aX4sReO?g=#JxP{2;_<SdG8t3^(E*G%_V|R}0O(ty{QfonY zEWr1466Bo3n}4OBNeQbdNtDwz^I!w2<}BqRT^K|!nFB&fnX4ITXU@1K?EZ!l%a`-I zayJ5G*wvA59m!QyKruW)7r+_)A;D<QiiQ-s1q_xUam%o*_N=hIq(v-S5a~kDa)AQn zo4&15N*Tvw6v>NE4m!6)D01xTAAeDY(1YcXPE7Mmyk2zcgY4Sm3T_p|64ZP7qQ}K3 z=JMQ^sXoY9J$9{CTKKfqT^i!kc|+xNt+yQSD=sDYKIGLxzmV_g7&J0?!K;gE4pAb~ zDr$2fnz_A0=p63GTjpmI>WjkaRKTgTXekY6P0F=VyCU65gSehZe9U4t5I3}V>d;vR zJ=Lfz*b4bLVH{xl7Cnt`^|ZjW*JGuYMLUuLu3^TjbX6|oYnIMc#S8lC%P{Dg@3W#V zk5Z8$pM_=tFUv}zlEl*~EeA*6D*A^{LzD)yL>Q+#3}ID9K}$KI0vF{>5Hks4%IO{Y zTFO}Nl6fVU2(1DxUWuQ8VM<2{`$1wRAA}B0=%iElPUCc@44~hLAq(+hMz79DWl%_9 ziKr%k8-*EGj?MFmP_4)v<Cz~d2H{T<O5ZW@Vk4ng<;)Az6bsmFDUe&tfa^UgP*EDd z)3Jo_ezz<E%yOorYo)|0NRpxS4JR?79p2X;FsR>?)yplte3gtimY!T6gw+z=)RWHZ ziJXi)LY*?PecliWRSVy^g~}ri@6|Qw;ZtnvMIw-cz81sbkN07VL}OcpDCUwr0A9U_ zk(tUd)*We#g;Z7mVy|JdSTT<IRA2C)bdfcZZUE3OATx&r!wXAr{Tx!l3sc~KuT4ai zgQY8?nL8UH=F1{3L@h9jXG!H0rvLae+_}yvgNZs4om04bAxdg1=bFl+!b~v&C=swf zx9!KaoGj<v%F+2?m(#OxE+?mhUQR8Hb~%F|`f`E|cR9s|yPQ%U<Z>SJF6okJFhEv0 zOFGt_a|O##dNWtKGQW~u!Eqa?BAu(_q~QeYoTET-<)(7FDyQcZRZ6#!Gy=mZC|(+1 zydtL)-Zrz=2n?Yx&VF@(&pO!*wn1~{F~XtW>_akKJEl`62U}N`_@-T3&utmhVngs; zP$nLm76)}s>+r(KcCk5!gPk%JeUPzGccG7RQ;-GX8`J!rhuVU|3sXF;NEr(=UJN3* zyo7aGnDPFi5JvkTV|hgf$wRV-7nt7k%%=a$mAQ-gS2WjH!MZmPq5)BeWdk7(jzEa{ zLz!(ww0xO}cq`GzX+>5!KH#dHWVkA)cx06mJhsXSim!6K;j5fd!caL&83Uy}fp$Ex zgzkd6Wh)F0i!^^>wEd78M8UxiBUXY1rTu+gaZJJuBxd-wEpl&mmJk2=Fo)GIZhg%4 zWt<qR--b%*D>l<ci1228pC40)C(rfG&m-?($$0CO&nEkWK3r+%FQuu`+ehPpgXgPB z{aLc;47hGpo_V(z<xA^#`eIdCwA7cyL@>)~e(ZAdPHA(dLv<Y>FnY*J`Msn(PIry6 zxVWXHn@=4QD@vvtl3A&AFEUHW`>9yXcEhsV*{)fZLYl}TY_4RH@;$dK2J0y~+6b1H z#q0dZqCB6-;=&BfVv`NLEMBK=7G)b>S)`};EN&vFk7O@0%ckFaG?7R;SDb46rTUGA zc_3(fn2=d5w7cqLB+2``heeiA_QINB`&$$7L+lhJol|WugThh2s)s;=e2GU};7^v- zgbcUys4K~Yv_w^AJo~W7YEv^B%KM{V7OLz;iRJp8zEb@7vVK4gDoV+)ud=o}g}jmu zMk~!ZdgNJI5tvo+%rE3X1C?H9C3js1X<mpg<wx%!x})^B{63zGL}NgcE1twt@-c50 zXiHn>L!F?@uvKB7BR;J<nXOPnzbGM8zOZ90lv5L2d1DK<UCP-iP*~1XfzK^6DY8nL zDuHqpFi_XDzIDX1Nm#kD09CIxa3K{g3HBF%hkM<j1_x^nMs@)d;>Rsa=5Sj$0MDuu zm+UMCPHHPFtrb!BVKVMmQ-yI`rX3H{%K3U+xx(#*IzE1APU<>IpFbk$-OuB0RRuZ% z9O`EogEndu1uWR-${Q=dT--(@8fjdoUmjVE@sy+_VwKrrn#8hdDALb*_<fw0yxm-r zWR6&MtQy}G!A*0Gxs<7CR$q=1Nw$14CosL*LyVIKtdr{ks7~Wc9a;s?bdiXzv@k$q zzrqZ)tOTc`Bd9<ITcJ0~7-K)zz_E%&UTmamoZvX>^RMt42As^0rnFVOMSEAc622lz zE><X+FsE^1^$t`)j~Kd8-ktT10(PB7(ptv7v)y0rf#7pWo;HD|z%~<es2@AA#rUO# zbscvxB!#5EZD^$UAWF6aithTM0yZ-yL9c|EWYx-b%=}cTP9B*@aM-|A7hxpBq~&c@ za5o5a7j3j5O2@&2o_rj@j~Lgji9)TzD3Jz_(hd4_wz)!s9PW}b^}A3Q-vIUK3frau z4BeA0(~n1+)TFqO3%K+apU_fNQ#66Z8Q=?Tq+=B#g%rYDHA&?(5;7N}g~A0;zuOog zh)I6h`1{@xqE1)*as0xE&f2y=qHZ|KfUz$E1L102HrS=+atv@}aEN_V5SqmZ7f?KB z@it{Wta|^W3){zV@?6D*kk}AYAlQDeIr2rCo0(f*t}iub3oa}(^H8nUaU)S1yvtEh z@`KZmohjXmg!@lxwh8_KSCrTWZVID&%*-qwSxVMAnWL{)?`RCEmZIcTiWYQ~V&h1~ zBqIb){uqmPs}rb4*%ZyPS0^yGXvsz09ip`}6)KPQHp6daWad&(%E1VZYN&@1)gzRp zq(fI~Ax#V@5kh9=c4wg|8+4-x1hW9`1BC5AylVb7FGA$DR@U(m(<Ey~mP$HC<>EDi zkAV~>ktO2`CjkPz#f(>U$@h3IFtM!e@_Jh!WBJLu`Bf@oJ|%nAW599^DsPbmYsFb4 zIPyf>qUZNBi{d7B2lr57H5G}^90X$LkDSMCmT)PUTZ0=toYLe*IoxWVyb@b^20Hd| zl)!ac%L~}P;fw9nB3OdQ);d0q3=upEY*%02`4b@UklXvjC0_%!m+gkXyNy|VQV=9? zvn5xR`;fn16Q*GCags}rWu)k$SON_9%?XOwINgx22@ZzA9zmK4SgKT@Q|1^GLfRl* zc6?Hms8{yoVbi)id-rkHrl!R@CoTnWd@<es!UQr!qLc+t8ueABDK3ijqN5!XlG=#Z z=)TyxJ7M=rUSGbEyb&F~XESho#J9eA&5=w&rPT#clgQwh;17amdXk0;@UcCxYHE3U zu!&z-UBOlCE&nA+h`QMpeM|I?s+qYpZXIF><z18;^XQCeS~g1r67cbFeq;R1x>jXx zz99k!Ri(aSo43y2TOZ#2m&rJ9LmX6Xd~ZyCLmWThg-CsbSVZDeVe%W|Sd|>82{9~$ zZ2AbXh{VUi<Tu1I3nKLqV(r6VSdA@4DD^{NArnM|e0s4IF*!fqZirW|=&Sx7zmSbz zcMLD~fyWSW?hJ!&YHgOrQCV-!;~)pXeou}Hak5d$V-*N@v?jO`4&qp(cnI=^GkIl6 z7UOV2@WMo#>af6u_b<F+rtn!wD1x|7!q!x9q?C0+7RllEIe225tFOrw=J0o{u{Fr2 z=EAac)~_TfK8=Yod}QifG4ZtBMCj>sOSB=thcS?E7vOo~xB#f5gr@Zki$ZacWMgpl zt*>BqNSL#PTo&$=;e9$Lr%6dPOGOqJ{WcN-kwnThd%;^LNq7~?;=G>Tmd1%_tdYfe z(F+)S*tLC?-()??uf4YUp;x}2EWT%{@?qHN=IkwI<)>kNH(sj0SDzAtrji~qNQKia z`HJj`r%&atPgC6BQ?yEtyk*%)HfT=V4We^A4y={qbOmZ<+|->WE`6PDaob^$6cl36 zhP+R=U?Bp9;L8{Sz7dR7G2Mz?&<s95hmZX&XYeFfD3^Rh&uD~gOtf1hSD_heGmE&~ zoLy<PTl2ix2HSQrPgOy%?0$iy>kE}6sFkVc3@!!ab%JDXqQ2%utE$sDUnxd|73mrv z7+hBt*TH5I-6K+F5^2t2NmPZ=W+Encx*s6TBC`j+bT(5XZMTo4`M}LO-Yl2qLkDT9 z_ZR<e0Ut(Iu7cRAaRG9RTVj%KGduK>N`q7iEA#o0*aA>)>TCt%MDGCh0-Ogdb_>4q z(6|Y+hV=IWR1#hX?6c#Qi@`Q5B0gq1(vol}<S69zAFzhTCwEuN&G;()<jP%=`gz&y z(}NBw0xOd);v3k->@tnC{9K&EemdX;uGCyk5#7dfPzmd7lOV{(^g0@DGzEb)e&)76 z#-!f`O0G$^Ba>n>4==dQtAWG7%I{?50Yp(K@g`$m8rQT#E>Et=mxj1&agCQsL3qVM z5)^wA59a{|Vw_SbfGCc=q1EOxPQKVYkb!a2Q~1m`tWMTI$OeecnJ+6(JltOAGVi7O z0&azc09adGZI*0wnkp!=kq4u%&WrAP{Ze?`MJS`#kmDIMUU9b4y6f${0;Uh+R#wdR zWqwO#a$fKeZGfsubjv}tO<?nuWlAe={Xj^hjMz5tlATNfd&if))vPPfAP7we9u+b+ z90jNu?N^&Ct2ofaTDhzg)2jICBJJwh4XD3NQYy2_!KbvTmsvosk&h*sbrm++inR-B zsfbm2Aqhz3N?ZQ0R*0Qw%d)09n?i?AR?9~|s?wHkLg!fBPKuE+I~$3SJk2^C2^g$N z5Xux$CDqVTU?SAluvTe=Jxf-tIhBU7NJwAd*h*<zh$>`46|%Y_^YW`HZca_KZNp{R zV@j)meQdG0Di(-98)5KJR~)%Ts>u9CDVJ9PQ0m8=KZXNsTX4j?ia}2AK~nozB?dCU zVulP-UCw!U>G^}!JYgta^1JtG#*mx&^Ju#7YW#HlhNp5~tPfPk$3URAgFTQJ3AKA( zs<TaBgz3ud5q?5@jfEe&;#V11=>o0<z)jSc7gG(mBXJG!ViPP7Ss_6dnScf_HWzMA z;p<v0T)xluORYQc)yzS(OwzQV1EZu9!-2i|;lt!b17dPey?;fHt%Zpo1CqTZQ-kx^ zXAoN~KpMXRX#j&1g0Jc&2Mp0^Oftrmi5{ykh7yQLK*zjJ;3E0pYrACsgiR&_BD9<Q zHm@>0KbM0<@X>6RcSGP<Zy~39Prk`^hxVuy2mdd30~}CoRnVx_%XV(DvAnQ))AK>} z4Z}o6so5Yf7T55JIh<Z|bJ%RT>6ROJ^sWgAFb%BA)f02gHiaN|6H!N_zJyD|aBy`+ z9=s@2P&Dp8mokUpr2_vlNWdHeSu;fw_bFG=C#Qg+I<Q}N!_BtVz;Tx`n9f7xsSU^X zah5@_kF^lGy6jrFxz1?2hRAy-7_ch~^^JOQA|S`xqH+6G-#O{2^y^FmT_S<Q5z2jz zca#Z$ciI9Y*Tn$Lz82ID#(dY3&!GxXjk_Xw7j#a_m`J?TuV5!$&TgL5eg(_ZyAHdx zu7QCSC8;^*plY@2&;gpuFo#9S*9317D2Td6%w{pG0T(x2`-U^sr0pP7VRT$oRE6WO zvsgmPMc(cftZN{ZC5{9*Gnyd_^UA7y@mI*SbsLMf_nM?th~j9_ZLLCFVBp@vw--@# z4Hf8WL%P{=4Q>wGAcF)KZ(tis>0Drzj*)kx772USLgJpii7Ice00kIYg{`qN2|bEB zpyNK7R{z?~#`2Yx+<otO?%S;%bF0S{KOi8C7EKD_n58HLu?K3!fTFa(+0&Gr(Y9L# z_Y-RaDZtjP>?x3aWlataF&OkajQ%)D;EbEqZw0#dj=A@aGs<ZT{sDfjp63`F4Jdr< zqu^|%euujqPE8P?05&GL@-<Hip@Cp*a}HQdKi?htE7fUv>w%hU+Or@F*T$|3KAhPI zd#W1Ic5~p|5H52PXv5m)8}{BZ{!MDX>(*r!Q=&P{@w(&MoWs>vh9FSpP`9sxHB{>m z4*70&5}cDfd`BvLyewMneMxX6I`V2S?uL(o0hP35p*5OC?JG!2{xeU)3xIZ+3DUOj zfqZAe*X+4rXi@Tk_P8%L%Nga~U28!?wO3~O=NIC0uu<X9ztMaRtj&TtgSQ5T2`3vM z`vRrh(9ijJ4h2HSnOgmBOUNQ=)2;B1$vU}mnFd(0B0odcgs-?&FxBi+*f8bQy+=Y| zv;w=#8hj&FwG}Q;Nc3%2Pe0}1iK~@=SZgkx>LO?NcM=JX1lGco;+*kN0%N+`kW(UX z?%-!=@Bs&qo$^Q^NIr@n-<+%Sqx4RGRh#l7rHm9zN&}pR?bUHHU$$WK!uZSJf?!wt z*ZRmrVI<&TC0v_Jb<1ZV^MflmXIL0)hz+@~D+vGFbIMt~!Md%SLC8*S-O>$vctyz+ z0@Y)iMi`*>NeBzAptBML3u`T6Vi=%QJHZ$LDyFxn2W=1z(v3j^DQzsboZKRyTV1kA zDm+be5uMh2SAxeZ)hORlHUZ<TTp4^>SV+JC08{-)nF^#f_GOh_2TsR{oAA9kyhK+C zO^ol@_r=F`$>?3E8)Ri$Zc?=$$g^Go027V(#<LtDKLAz6sFNM7Ne#;7;ASZcD;<2| zNieHzcxN4XS@r8IinV%r(A5%LD?iREl1c~*WF+5FgN^|N8@WiWI^ceiuqMwFDU38o zwOPmxq6-Va=Bjw^%Um@NE<mjp4^jRqMT3s2J{XVT)h+L{zH34NbqJmn9aKN)NLCRS z)5CB>>BD!pz&h%|q<z~@hFEM3Uo6g)mL!WRzY8rYL}yjFd7zbaxX7vYt^xQ)ol0u~ z%$s%FF#y%;R0v(fH1`NriuSBn<}b(^oEozQ3lzhm?<pys8t7H9Qzb@0dZ>0b90v_i zTEBKi!y!q^wyAW8&SOMl9933oQTg)<OpNf{k7OZqgS`u|?;wRUHv=6Qv@AoYGf`v+ zTK5YCsRNz!N3Z48Z<n&qb|M>tc6Z%2YJo=8vs`mg)*`ZT7bYm{5QNztA*7ltMxiZ- zeOO~yFiJz=oaa|;CA1=+b`vmKa*yDGZr6eXfXcvmgsVwbQRY1}2dLaUlzqdZ!ye?( zEVd6z(OtF?LsG>qqO{@b<fI^OWm-0uZ{xGPUhVgEY^c{)pC-LCHBeLL+$|795V=%% zWKrW<YUcOtV2@&T7OJr9Q`o+P`&`&s(R~RPzRI04qp46`CeG(peeJR&P*rkD)@)!? z3oz8U)j7A0ogc`cW$6EN5TLSx;DSmu5-g)t=C?&RNsX<Tp5U(<6W|b$?roApMtxCM zgIbwig2mZnxCEB%sslk?d<~W$Wu_tr{UsM}snV*rQeVF1nr@kL7ix5U@wl5i=H`y8 zd=Z9#1vxZG9hdqsS3mCHXi?X1cD@%lKI{;Xf({EtidS(}DjRd4|9ESika2T1EX)(b zK+|kyCXakxu@WTtqU;bXfWs>`>X5DSWlE6;1PB#T0s?<xaWg!6i;$<ngt_UY%8#;P zwjJe^0|HhSu;i)3bi;2K0%dDpH*~APgj>ZCGsP4!KzIa&q8~(&EpcYm5+C~@plwNr ziMEE7F>cD@k^|JsUD4poL*WkXzf{T=l4l`Hc`p&zpspkZ&#-@+U1hoz%Nih1Gwgsx zIT1{AzPYfb3xcX-2=C?fasseAhtE%z6KM2?T5z)>2}d>NuwGiZRZ&VsY)n8;y{Rb1 zaZf(JS@&Mm<x)9;A0sU#p1m|hBrZ1bJ-1loT;s;t!UDNlF%BfgtydcJiF#3BuVF!Q zS3=21`5|I9B;COGHCGd~owqxYV*Qghpm@Q^7Gt!D<kqQ}B+^i}mgr&tFGMT?yjGI! z=fcpF?)@%cFAALWoN-yc`=u6xFsUg~!<t6>l~~cDA?y0|i=PUgsYVvb8=U8Z<t!Ri zyx9ZB(RZ;=6P6F4F?g{!*y1LP1>hrjVbN@x!H#MW7Z6XM^z2#91XHW)ivX>4d&WeY zlTD_!SX|HZyR*m-^I5D?9W&QyD$^}o^hC|V+}|gO@(tT2T+yl3?iv&y^?LD;bJ_!! zSdTbAww(65ZeeM@5n>;Muguz3iGv@-88NVl30Q<C3KT5#<Is>{zeX!+7Y_bN7_B-u z9oz&~>o6~;+f&jRiG$VMZ+$V_*&sNGzgRNn7uEzzY;Xc0=#ueT3noO9J5m5K^jTP~ zBM@tl801`Af`4k3Un8}MhNYASrD3d;X9R3{yVAJBnlW<cv1lY+_-{d^RIz{}+&YjF z82gE3sQj=lfpr3xqK-9Z$GtsQ2-nAPToP$=3CipQjdGLo@YkUs8dDnPXK#X%Eeg0F zG?&~<Eo`N6@O5DjC*Nr_$asPRkDljm%*;S!xU*A_o__w>nHgDK;%kHcbDpX)n&JJJ zF@Ct>gTmN0{6OStYitigqAIBi+rYUEK^zX}^O7Jv4lh=I0HD{d2cSU3=$KOh<)%>Y zA}k!}cO7g2v;pzeoSVd&UYFcqvSE#a&mq~e@j6YT;Vs5bLl!om7y&pi`AhZnR%)@- zcbQ!0m)~o`ZBk4RC^3Vf#q5_m1a*2UE=>f1*gc3v9NS3Bo=JcfOHWY8i?CuR`~r~) z0SZ$}-U)?AAchrN17dDa3xK?HMpM@=l(Fcxma<nF5PV%yMo-SL#7ZS?d~LP$B5qo~ z=}tdCJA=zv+Azkfi%xS4H|S7dkE<41*lhu?WK=42va*mY$I_A~9F={ss|(&SpUz=| zH1O5t^Z4L2pW|Xoli|RH5wcen_^(if-!Xmu3+GOqeD>5c&m4R5)HCB}o;>;V__-&~ zJbV6`C!aoc^wimtXHT6u`s~p!xf!}Tu5!}B#54gK=1ikr``qzQxkn#W<?86&r;i>z zdi=z(CyyE1yx3R-9k%UNv@_2%Sqt<Z)FG9E#jIoBQXHi)MbA+?N4F@Oq4TUZZu30L z+QQ99vDaWW#{$5e9>;o?9+vIr=Qul0KYx72PIK7|j02v0X(=-M?q4A!lKs-Xs=oA= zv1?deuL6Q&Gjtk-#q;#@i!;GFP6!ESEKfgwa%N`rW)q){$BGhmuIEq9%mi-nfnYT_ z4Rd<vH6l%kS$VWtBa)cQV)LET7{WO|4>kopGf&KdI$H$vlskQ<fu$5RWJ&mxPk7c% z&XX>rcE}K2-9b2}a$R{IB`!FgXMHwjjT7SXz69r{>_A?_p+g!FUzgY^5r^~?hb_(5 z0ewKSgOqe@1KS)h<D3>{O7`J&4)(;zPZY}?>rDUvV|jbWdn*SFgS9p1fI_M`V(TQh zPrF<1^;QFhq_T!*dMo}c+)A(-#%=iE+T%Asr$@LHA`EqRySF+(KB3T!-ily+LXp|t zia@Z-It`?|jysvW%MRQRqY;uK+>D2DLCC%wJK9?#$Bw%$mGnpq$4>CdFj@+^8-7{{ zoVIn^xZ6sM{_EbNcOo1KTylq3$$gCOq9H2s44FCdc?!SJAQ4nwbcg8L1Pfx8h}=d{ zEF+Af)`umk+&_YMab}P*EHDKd9IhUo#o{AR07ffzk6stcy>!jJE;YN?MVn){Rl_hY zQHPxgXK2xQ4yk0X==f2sNg-n<Q7#E%e4&s3lx)-S^t$!k;f9`DYq)Jo_N8!pod}+Q zdMs6F=fd^Uwk=KgnS7k5FSS0cB38-%h&EIb=9q%ya?*w$3K_Vkwd1O-#fnPhXB{qb z3N}##r7jbDtr13E>V(TkSU+)DqY~8{q0W#q%DPAOUbX6od6CeEMWw{RheVF7L!T50 z4DB15^D1{uxGzbU5S)OeCJr^aekB#YK-5w9If2?fnl6(pT<!)NvtpCHX$>zFD(@Vx zlBr&w$Kht^-ntWY`ug+y)KC=Ky_5sfVmbEHB;)DlPe3^9wwi=tWOAp)xxh;|5ywxv z)9(>V#ytax{mhIUvB9W5zce!gUmTilo{b3@m?YuGHh>F&na2f@1Xk$jkyx4smLiB? zTLGS9P&AWv!Ku9d&m}@!6w6VNxJKZ@D87--!icE~C4wGR&$9bydyY?tK|=#1Thc1z zl_daeNy0OZyi5hRn&vqYSSa`{3LM{pREGK{t9ytU&!2T)N2mpT%|@N*=!s-F^c9Z7 zMp;-%2o+x4?q}UHTDtA`f)qVnnlnQFO+jTuWC-*)mjw{kSG*Znw{Rr^OU9T2GKa4W z*dg%IoFnla)%{zHM-q90p9}yC;BZX%Y&~gDDm=BwF*hOC&tbJ6CN{J^+$znD!o~{1 zl8z7Ilo+Dcqx*ykB|(YrAXnA4pn@_T)zTXjOH%ZXIXzpaSw)wip1_v6C95imQ^~Ua zQDQWM9)*_H1fEL8l+B)WH=yr|n%Wb3Fk=8*FcMbQd8#)(g?y^84z0UpTkla2YB%*f zYcA21Ac{LB&B}7NQ)=ge(ysHR!=S&W+hi2Bg%+XC(VJ1m2Hdu5I`!0B`bmK1tn>}2 z1mA?E2eu13HxRc$RwgMNDe*5(;%HogiUxH-+?^J{s=}*O?&tTpW*r-nP&H@UN9fTu z4q33?#%hkHEbOo1;z{v43+=LEH4W*vi_oT=tnj=jGy?Ci)Q2FJkI{|93O>0U6$H%a zG<!@)3zVp1-tRTix?r}4>@+_irR*oV8g}I^w$I_5g#Aq1jNgWK0H>mM8zweRV)2Ya zDQZ$k4-7s=!Q0rsOt(Z8qGPCff)nF<Dpt__Y72acafz0sMitM@yg~sP$XvX%!FvYq zmFI!I!AVIFyX?jSQlzALA__~WI(8ENB-#ChDbfme1n`!5VL=p`g&BG58P~R}=Zz^} zpwR%7o?L!F6EO%`YLRndVmooR^8sD9K1U-sh=*nrqKH<XbFC#fI0!zxNboUe!k6V% zKi_D|!I^+tk~!f45YOCg0lSA<fNSK)k#yBAwo<Xb(>e%}6AP+dZq+WBfj)KWILtt& zVKe1eN;hE6so0I;SXr;a?xJ)Db61Zso4K2{9Cg?oRuxuk6Mi#H6bPuLi6FV{C7zDH zH^-^sL2bFx>4Ggln^7w3AuqI(p7R15J?Dk2>p3rItmnKZdlMv3X6=fYXnnu|yPmAx zz)86<xI<5cv6xooG2IFa6Hk036rtBJ`jM%Co)u6MD@+1<SBF?SxvWVS4QU$8@bFS1 zff{MT-hsM=;MBL=^L*R8J#w|NveXox+BUhHzj`6YRz`}$i--#Gx=V7O!=@-Us;v4X zr5q)-#2nN}xaFtjwYcm9x^S5RXApE;s<*Phwy;e#b95=Zd(SY{oBRQP%Yyk!ZOV@Q z%iRjZ)_J+XfD*`iiiy0d!(IS32#ct!wEz{p+&wxiwv97P;(7}EO_n__T{t>{FJq%g zU=aDBR4>86DwIXsHYrZ|uRKIK5cW2_tnji|#WDfTBBT{PjHEdXUHVpnCsc#RR1*n8 z-AXFpzLk(FtT??DV)8cW1e$<6K}|e01yi`;NqmDMc0>qWnq$A@7yR+k+&tWgA);~h zg>=>j6<xMD<>WR(k4_D11;<bUjuPN^c4p!vz7F-SgG6Y-6I<;z0d(0rjgZhje+T;5 z$}O#JK}0g9Xxl4es1dr|5-%+AV<4+&MAJ`5h?IK*a;~fm`8La=eK3$gjZn9ZhQtxP z)-3vYrX}ZvFmxXKY*D17ki^s~(STIQRi8m_c#zFAQCT42aO1-aFB2phv6}@cTol*G zu_W>QRcm2ZrLxLs<Sth6bgTkIz)iXYE368uX&aoXWG=4@O2o6VO7xI*&@fTRG+WAa zqnv3zW&)yE6E`giH62T^;B!Ig!qNxV%$%v?Iz@~ThAZfhG(H68tjM~)(iA({1P3Q_ zTjY|BET0=HVbl+0o7yKx7<=pB%(yo~1GpA~yX`HwQsAZp1ihd@2x35YA5>OED&^@f zUe^#~I&W>AI$qFeo}E1kohIMzV%%}Z!#Q+33syBHRZ^t-tHIwu^$?ud)Br4#n)Htw zD=o3#T?C`Vxk>0I$b>6l#P0#wln-5zWs%GrX4IK2`6LK&0SCa4tP2gRhpV6{19d=f z(u2{ml_C%&=9c(=O#K$6Uf2eCG73jFSx}U6R&}Dw?jTH6IlAgc>p&s#5)OH?vg&zp zRHTa@dyqLTMvH)BdDGoQ{f-MNlI{M$q7(}>T6$075@qY^TewC$JK3l`6AaODvz!P^ z+Xd`M-iF+Rbxwk?S^xyK2>3o0`8`Y>xa%wVW)+qI>aWeFv?x1BDqxoh2BtRB#5$Or zdt_SO^{83hFr@2laMc`l?X??h(^e&=W_^NRcELbh04q;dt4j)Yo?gXg!0NDJCo(Rc z(_}xf{3?yz39>Fs@D67sSq!>p_Y5==UFY3W;yZN*&jrwCB2aWlg!-70o{7|VKf+0l zBqq@#n479vl2JSb{J7u~Vv8_TX`SPCXi{J8;G}<}Sz2l#{(WN#vF~zrT#|8EA|UH{ zdT5e%)KjL8#qFc=_BgC%W=CbC@6!nH^**hE{V;>2nBdik+nsLGj*2NcD*>9bqOF|* z&Kuzqvpa~;VxdK^!@Xk(HW_nKD)%O_zbY&N4n>gSQJ3AIu5#pYT&uP``_73T*E1)n zJgq_r!ks2ZcrxvXSD%lxvGT@${j1JRUWc=8!`;Q!Dh}M><S7o1x-mRk4o7{EHs<a) z9Ov^PIK3i`4!#RWIpe0>q`Trijqn%TQTHY1o_ZB7N{em{CC1zmo^W$U=!U%CMy+to zmm1zf%n|4I!sXZJcQez{(wJL8S{-oUsDOJMCC1!kyx(=_5OW))Zz2X>?fBJJ#}I?P zJl~GO%0A5^Kl{VKBd%6Ii&AT7jXlK4Q-N$2Pq-^156|6>3B2s3_K<iOL%VgPVZnp= zB|In5_B?XpY(~;|^yd0`)Pi#n_=~-;y5@W>N07D^)+0ty>(o}c(=jsKS*tg2(2uaU zb4bru*Gb$FJ8{fA*9XX6>(<}c^7ecDen*O9Ju9O`s>-nVW;a;#a=$%zIZ7Oz1^lgS z1Kzycw&8uF8!k9wZ3b++=Iifw<cf1F8@s)a0;YB0QSSGq5F(5X%*7+%K}z3my0@Jh zdK5D`@RR0C$j8||jbGzt#xa^mi(EiUHHG%){rsH;1u4H$UJz?jNXUJTf#+c!Z2T{; zfdw^DfNW10Lu8X=Sd6!+#GzJ3qiluju@17mg;-@cID~>c%un(lv%7)qZDr77$h(ZV zHT;$tcNxe#$j`2_E;2ioBl1}LTtaeg{0dUpS{;8WLJSe?L#*FW8VAY^Dd~`TFJUm! z{<`0<W;iUNSV-!@a1&BaN)9Pbzu=7m%I$ts;GTEx?XBwT#>7l;>6pxWY!E*U!HC=S zC`NP6xryplj7_Q#%16i8p5c(9kgW0=o)l_h=m|%Jn9l1djyikIvBE|go=P<q$B|!U zz5P!CD`9dxQw{GKw5JonNH<Os;@!Q$a&=IdQm|5?jh~9|b*Vv>1EuF2dZY4`1_0kj zCs1=rP5Fqs-8S*vLvfl;+hl*Tx<7=^Cbab(ZM|8Y+u-ah)J!yw38mp1NWkq1W(pM| z3Uk!G@%8G;Q&2ug17q%dNed(DqICEq1`3CJ5rYBS_*cJuaLxl9csU9k6fu+m*Fm|k zkxFOg9bh+ADRr!bCQpzbaYU32ll!E|Ha2awN}0#BOq!43v=)rzW5nGp{I#Iyke5cT zrt?GU`qDJgjmo0fVE#zMCIr~0s9bX9v_U_MGFY6w#<dwvXTwWgh0b|A>FtLEl9k-X zKN2A+L8o5?Qo%Zc>aQcOqDUvFb!kc%M-!8K5s3c0yeT@!geVvkLDWD<SvHMRrlvZ0 z1eM*p4T#uD4w$m=CZJr#RH-$`Q4iS(b>%U%%2t^BUG%0Yp<Kr-3QX3m44=JT&uWXP z2a@*2fp)J=qRmCg&3Q<oV(YkM0FaQev)5cF;HaxiY%)|r)<$d`I$f!7-J+`oH)JHr z{O<f&lwQU^orf`vM5L=Bw$no2*?Z!KL(g_h=m74^z1C7@MHRI@*SR+K^$yyOu$5rh zxPKlUvqg(_h;+&&p3!}j7bG_8O1i|;fzd_O9YH^rX{xJCX8MaRkH)3dItEOr{Z(YO zb)!-Y$Cguf5h<{Z$OtN}&P(;AES*>!!zOZ2NRqNnxa0V}k>rY8GzT9SAfOCK$3`@t zajItJwMSI6A3W$!yOX~?&_6RS2u!CskxCR6m+r?rN^LRe_H$a{`X``o1+}<mwXSre zCwi;tsa&B~eV`81UXlTR7ojr}A{nfA)coSGkcpX|6Gd{7vPm9fQmm8wUMbz3%_o!U zThTnQEL?pN`SbQjsK$)l#y7SW&O{&ik4>}`9MWi68<;}3Y+Xii!9@h)SPu?Y;g_?0 z-KC;9fHYGLQ9kq^0Bx^S*B|+FD)cD}s0zov8(Ad-v9Wm;xF%O2Gd+vWu@F~P6f>%Y z*tn1ei;SGPR2<|iT>-JR8rK+P^+c?RNCgXA$!ilil4b)WUO?=68RbEjyQe+XxxJB@ zxzCgbGBV?`pnKd?(c_@{+DEIAsyY(jd#2OOIgh>*Qyfr*?lNFp0!w619Tw@S5Zexo zYi+TAS5Xs1I-x1|)E4Jtus1N86o#h42GZ<rVikk+Vt*TdYxukC+<w-ZaF_j)5aTxX z$k$<A)*HE90~RPw?h@(_x~k&18_{O9WCoSaG&SbZQe!Zkl5gakbPT3NU8U1#>H04? zH^3?Frp^P;Ca3c;vx$`QB*m|(cX4Wy!f3V-3hRYaMHX7*Swzwr$f|dKH6es)_O41! z1v{PAn(B~oT2Q4}1R9isP&ed2Qe)t)iR6pa2@J9^bTjF0#bkUHd6f@q$$YX$gu1gS z`iq!QMnrC|wGbNP)hSQwVG*f}JvN-uVE1M@4ATHW*DSGFqB+i3jVA@Te$v;Q_=D-J z9~5@*s?0j-Z4u$MV=T|b1Jx^&a*RvO`PywowcBmVzx!~J!v!9>HtnrqRM6FEOSMiF zI91-4&_-E7i^FXSAeStvGAegs9h47?_@_2ATbj6C#0_}$UZ!x+7Ga^dg6AC!82dmw z$vnbG!kW+>UPC<RG;S|LS)FU49~agU$A6EzC-HX~|1^Ya^$?oI-$nd;96HA1m?}#? z#HAN!;N!BDFz;&p3y>gIm)mQhCtYoS472vyNdAr-2a7RmyY``~*lAZAAUtjte?JXO z=#!ASp%_NWNcu*2T|e5|^&}RNpLez0`uw!34OvLy4|05LacC2w(-uZ~L6%GBBE9pS zqfHui9aN60I>}K<4P5UVujG@XdRInPYMiZ>w^cRj5>u^ZouE|uEVMBh=a|YErTDmF z(uFUXSPo$|lXZ`u$H-AOk`)?$%4OZuRnTv~sE%`dt9hog`z36AMLRU~lkx6#+LB6n znXW5RK7kr0C&DNgXCVuxra;;u?xIQJhNN)Rl+kko@TElY1vh*1gV(2;r84l$0{Bc- z-COt3J!zay>4c+BJxDp$l00o0fF2aqA2e0ac%h~mQX(~1uFz5mVOZrBEb1s21k}8u z=8qmqe^#}_xFpVXjW|x^n6w3Ona-I&of55k<3_LL&Hg)$o)tG&QQK#>2Mxz))o~S# zvg6w;TZ9BPY!esffQ7jIi1L0UddCH6U#;*c{p|MOKMU&MVh|<Y7uIMtdB0_k0q5KA z?{%l+<x6j~zqY#AKFm{~T3vE(ALc30DQ#n<`0bar9(!DGlRm7pr|)f+p2Ey9r4*2R zQ)aKU8TYkFV`^$ZE!!Nk3!rcEb(GxZ>@@x`B~nf}%`@AZAJ?V#Xt}@T+~LoGr;=|@ zVI0%dKi}NTsj_d24IOvNoTz1UwMMy0UDZtPT;rMh3R=7K;Og3r<A}R64m{JyV(Vru zoG4AH^H2iCb*AbIshK!kz;MY$otT(W9V0bdsdQi}IWPMAT&g9MEs45k8rP#nSKPoy z>1VfBI-#d$wpTJx!}#{fRnXx>Q5J`F!KrFpGUkj{%D7T<4Qd}n7bR*zihXJex(bUn zq*kJn#X5C#IbIRd!QyhTXz>!7fAUp~b8dn+?S>u!Db-_~4pLT|MTuOT)Z{Lww61yw zsZaM3^1f4dNHtK^VY21=D`{=IK~-H_oP%4`*fw2^l6oHf)jc}S*xU<%G2{=6vPvW# zXOWv)IpM6fE3%(DPF(+Ty&-!WznAMz#C4#O$I>1~%c5aSN6cNemE88%m`B`;*}s=v z?QPms$-#BT7IpY5fSqF-o$8DVXgy>ZT3U6pP{%C#XMip`&^>iUwM#^bOz8gDn78)# zW??`(uPN_0*mR9XI%5rlh})n`=u5t$R2rlNQd_c8rp+eQ`;?7M)N@r+Cnv?_*fOqM zM|$h;g)2f4PXed-)PZbq5`rir$y-Skln`t)U7J}OSP7j?XP?>bv}Nlf`2cMsw#~&* zG<5;?SyFAj$;y>@T=mhu!nG5jBb52-Bb8+-SBc|<HX7qXJKShUdqx^32G~D?o^r-q zFxe_cgQhy}EfE`O8I=mbp{mt;D~cm(W44`5Etr^5ZrM|Nucf+C&X>081zRQ+(Jn#m zpl+$^7*?xyuD5r%-){?L+Zjgy-_;OENdamFH@kuHF71D?5l>CXxSG+n_wh~neU2A+ z({!$s1k7nxMKYbLBuUdSpw?izjBx9yDa^Y}c#3*;@ew8d?M~42K1iJ)!<6a0vz*b9 zUOQE}RcG^BN}YYJduNT?sD0FA9l76o_#;xyON^QusX=MoZTt}{CX>1=(KJSM6Cy=+ zW+TXnRA%C3Vveks2&qzajq%Dp{p5?Fik3`(2SdVNtFG|xfqdVng5<%FZcm-e3GO#U zwo{!u`Tj}v`$g?1=lyo9z#51e&~Ki2t0cEsOcljyQ8oSk2qxQkOuhUdhsomd?yJq( z?{2+Ni93L~D$8-FlaMM?<fK&~6wPWBl2oXR@skjpcB+EgOQntCcdH>yRm-9&zB^>8 zaIS2zVoTd<WG|vIJT=FX<NwpGLEX+ipEXJZN83Zx%Lx3dA~fl3tnnOQ*WMbA?V&7} z9hFGi*nH59o)@`t78o!4!&QRtY(xg7zq*mA8?y?}G50#Q(k=mQ=_q34K64Wa(kdp= zr`=QdcSrsm!S4xBH-~HivBz=NiT|F$bX$T{Ayja~-W%UsKQ_>&^142U0ph}n(ugX& zZ8_=(6BZE5*|mh4bn2VKKkGJQmFs^L=BpQAzIp_?l`QJmc;teN&dR#cSsP($>VxR| zKa1_f&w6;>Q;&!sr^j4VmK3_UT}4g0u|-uddQR5%K7zU_*KuO(LyuJEaUDF2UKb2q z0W@Tpad8!SN^xONX3M-ZOe)4m&~9&B61b5U{IZ<t2&uw7^a4ug0SEIdavypDeV~67 zwGwIz%!xw;?;Fyh*~IvtL9A!2F#GdPE8*t8N(4o%2)V-{m0otfQ&X>lZQ=`pAZe14 zuD6tvybkWqm4d~CnA^WeI7s+KSg=R@a;M2(_Q)fN#-n$JOr4lA<Qrezx&vjiOkQnj z)TCyqOK=ME1<(#>E)4|K6r;OpfhTNyqgOCU2wVYo2BFv#$1CpMrfYTT);0lXGoigq zaf6Y)m0Le_3Kdx!iQnw~senq?`Kj<UO(NBSpm7{D=JV-fua##`ctQfx>EK<N;zZ@A zBcs}FrQA@O?mC?4Fxz=9-Q30>R+Ce%9ObAoKCmX!gXT8dVvk3(x=%4BZE{rgJyuf@ ziB-sQbH?mNbZh7CC&xS`nz-zt@Zl+dCPtaFlWXmCl+_}ma$T1_oob9?j6_Us!tti9 zOJ`11?P{Z07U))luc$?sv=pt4R#U1~nt0^0E9EwXRQVa(B^p^{?!%)>Az?d*^dcu~ zzz0romh&sKJA%49ob4*ph}!lz;N7{VF=*u~|7@#`kxmqpZiA>Hj*Bb~8!Zo{Gp<98 zkwqd=c0dVAhD{(;Ek{>7Ob3-)ERp4w15S*^N28=2Ql_?^PIeAbc`3lbq8k@WY8_eK z&z%wIQ+~<8BY)+Rf`hEaMa515vi`R^%2nnke!98LaIQAdmPvj!=cXq$fUAvvIu2z; zK`-w^k=~So_3*jc09i2=mwZ)JuAboO(TM87&rl^6lytV_b6RH|(aqsj1xx2ix!tVZ zjX#_~k+kA+0Z#hPNGJnhBBYuo)Ge*(oSOnwYgTjMUPqPY5Hd)m(r)m%rDE@2LSKoE zDPdM*p=7k>I+PJ@6WMFk{i?!vHA!@*=tznwHr+1O{5v_s^@3I9COY3U2c-@pRn?<z zbFsSqtQVI%;f^wrW6j_0_%ZH?c|C9x6V&0fww<3M2W2f(YbajKh+(G8^0^>Yf${x9 zPzyKS;`XPq0a8|Q3wn;wr^o-;3dJtlDlUg}SO9J2>RrrD+{Ke$RdbGb{72PiG&-ox zz0yS5u6y=;mp;*vF1l=`Y!m%E(XC|F@fVbNu3MQkV4KV^-MWgi1EnwI%B;!JF|0;8 zZYF7|o|5}fV<)p`ovE``E!%u9jtuAB0?LsgtMbH=&FjvfDxCC-P;CdMd_%klQ|dt7 z6HMN%%a$1tCMr)?x?;y2>o!JKKEr@){FoSvI&exaW$VfU=#F}jiD_MPEd#cruyFWI z0&Pa^m(@%@RcFRzPg8{m^;YV?xoTk6FRd|(oT}VPJ_M5M9Fmf%Cm#oRwSxqkW{%g; zf~iTa{|hjlDC349qW=l}(R=<A&OJ_I$a`Za?QOrC6W$Fxg-P!Q{t?YY{pav^4IbD; z$Wg?~?`!AKa;~10kz3aHm1$8+H^0FYTR`|j9KgI@xA8Bw(tzKeYmm(*>cpH~Y8x&u z0W2+DG6B@RbjaYoA1`_^PU9Xb^A9&toP+M6GOwuZQmS_6uc5}=y+gJ2DhCgnTeJ{x z0nX*yA}M!b3NfjpSUMy0^d3=78KO3cjx`PGnLS;!yT>{3<wX)TW|N3QLSY%6k>(>s zs8r9&O5$1$k_YZdL`&|uspPHuTqd~{+<u<Qc{O{=sTyUp8Y;r3VE?Rh3&k>=z@!dh z*kt>hKxmY~mMKe#`_!^&6WU7KCZ#x@?PY0>0knxXNFf?7Pa`wJFh5Nzy6~=YFSoQy zpl9|IbnyFW&7C*dgxkGR&Z}!E(zzLRbP9Lon`dRbsK0QIkoBqar8^kIu^o4+DweJq zWPHSC(M>`iz0<AK_F*=>u|19z-)SPDb3|+j{n^|*?a{A?zBuhTg)}QUSF~ud1No4p zgiTVN%(i5-%bgKxK<Xlcp7HSplxX};tz{APh;SQ5tIgCk?SaLT6iGmYKV=-TMj*pa zuIQ1g+uCuG6eidCRHU0Sz!u1OZDK{=IJ2LS9kOO(8m-FRFXc6I-Va?ARIB#7tsV^@ z!MM>6Puix9Z&m9wDx{Y$<Sdhm303t{E2ZJp?8%|E6XWR50@#RIz>Vmw)(Un8U%1}< zElv7I1<A(U#z@B|`X54@`0^FtnAb0uBZ8Gt;i4s#VQcAXmKQC5T8_DBHC8$@ZwzB< zHu4zRjek21E^5a|Ofs;`<$bhN5^$o$>PS$jilay9(){V#a7>KE`7oq<t_~{eH11p^ zJp%qciZzOrmx8rX?ag*0Pul$7JGfo1!Ry?EEobJ&|J-eYzyFG9!cAR3iDt6WWjUT~ ztRW>^Wu@svA`zCUC{lvMK|p2cWHZKCF|w)*lzCj)tYaK3=XzuADk_XVja(E)Vl{qC zPfhZHbPt6>*SI80k?`2D^x$woCEfVbsu`4vnaC187$N4hmeE1Mp<Sw)F@F?iOkUCN z1bC%$z*NoInS6n4qhm6xDABi`G2iVzV{+7NRow@lClp|<L@7z;M>B_|dIeyluLt|8 zR2-dy)Thbkm8er=H@N8*hgm2#RijK*ohpt%&ip6c5xkws9t?V;29+Rp;r$^ug`PA> z-q01b8-G&8AJS?b)bva1+`c^hSCKoU75z>C*Wu1W6K@;=js?XC^(WQ)K#Co<&e8>| zxtk#OLn^S++HfJdjBXTbbRy-1WlQ8mO9-1`j=Jv>C?cICLH8UtS;Yl$ydEs>)Ry;w zQ``f-?5s<f50+)#R?N$7{P*3b>h`Pr;1jmIdy`CB*ePh-Bbw_li_w_J8{Viqa~bG9 zq>CtST<czt_x%|mx@h#XyXBn3P>-RGLN^;XM2i%Mms*K?h{_}fiksMsfnU=nR2^q) zS})aw97noY?><_Ua{}d*K-|GxcKcF~sKU-%yfCY>=KcAR1&8<a$b|bCC4cVSei_h4 zr}63>Ssf2)8<(Wtx-xf&W1cK-MDr#6LJV^yF&L4eTR0Eax*^&Rxkt?<ira0PpxaOU z$75G+gyqviHEut9sLM<q^LMc61iTI~&Arj-(xa5+)5q?dv|fj<%Y{9y9$bPS!Ol3x zoAs_|1_L+yAZxxRJ>^)l_ms`=z){|9{LKVjb?&RRI(FEc+03Dq>s2C9y?E4vmm*%5 zQ0Yo@49<)sKC_<0Q*@DIre-iY0jNI;bugl148wX3NQq8_b%2gfVFG2^KCKFLwoLi! z^FU{9*SJh9_wHp(!Q9uSdXbQ;$)>TJ!co0E9WUVlJaglI5t(Il9RbL^qJYh$j!n_< zpCXHMDMcC6j>D0b8wHV>GxmhUqWgNfBOOsn6&fz>R%e31@gWFwa8NL`0xq(;H%V;K zG}%iB2+kkAiYj>{oSveoYMR<4dsH-~q?pJBnHnBApI77<pZarf4jEPrOI0IKTc`Tb z$#z~um!e0HA628r;E#q8&NB9xoRy}57H}YU{%`zcx2978`5?fEB(jP%DZQ+8%TL!j z%KAB;RfvxW)cvTO$iyJ>o5WxQoouJ*RK{^nJJGERAj18o82JmK>Q{s{(B@5+P`2tT zLdc=n4!5g5kEfZo$fS(95q;@s)2anl@X;xmTx3A_7)OEHpgTOoYXfw@n7dRg<@&iB zLUyC2qDjIGn&c5GH`uzm>vC9>{?N}is!HoF7-xtnt2y7%313~aQaz{f-;Se#wBuD) zj%X5yU=ir8?HqBclRI5UHz`>-o%u9goGU5oFzuD4kuFhF4?x|fSFM`$QJXeM(Y5|7 zxLb-tNRyMDuXY3fgyIpu*b(jjC-{2=4)j&%%}bJ0qtd9PQQYc_xIyc;&O?bv7sw># z^dLt!*O<Jmv>YX4>A*@sF@-wwA#P^cDd9wsdbbQ!x=tgG?eugv_)O8tt)rE&eYxCX zsz8wzdTTSsNtNnb*?zr9TV}V8zOzL-rVwHe)%8QCnHsfqN~Ms1CA?kkA=#LjI&_t1 z8>K}$+H!1XSv%FbcrPXAjkz$Tu%wJ2)uvJ$SK_GsL3$9G&$in9%mgr;YBO8)DPO=v zUC|AtICT3tMwEc+)a8cK{XVxpcS&-)xH!W?V)MVFuU0<g$yw?5!~JY>ZVqbo#Mf0w zivE-pn2#)_4eR47ldMbEC<K?RkbqD*W~;G2Ws?!bdfHew-gKKu?dj>1dMdEhbZVFN zB{C%Th?i4v66z|7FsfQf7>PtRiLkuFnf6oRO`$T@PJE_4q_m6-l;ti;pXY!L;(%L; z`K0Eh7PZf?o<@n4Qo3`PImx(`h%hB&a=p52#3pMYjJe#5*te~}REX6!{*;u<(=<Fr zs6%RN8}fT~nWi|`<vo{zG-!~xh(znG4)_}CVhqV5-VChVCK6HXo)Ta*LQqYa7xG*b zB=D>R=OIw{8YMdyzJ!x-8I;i?RF>gX&se7oqYiL{1ogH%)vI}}hR$47Rg&}~bwhay zS=Q!yaU+TSF;_|>29gO$Ax+Z_r7A3_K0&Myo4RYRc#q}5-M>(!8_+bu(d6`rxmD>@ z?n6j8?&rI}sjwCCM1JL6fpF(y>?H|R71u~7N=xpMG+&22@cx2-Sm8Dk8hCF@dp5lz z7tUoEd&PA|oIKh1KtUxvn}xGmy(zaQ3)-UQjek=;i}OiCz@i!vL8CHD9!lPt17*`N z1xE+0sJ2Cvq<JIvG*M5b?}{KPmWZUuZYpQzlqZ)b!uYI0Dc7T%hK5ih3R|n7tqvcd zN%4@XaGl8~S4_!2d+{1qoc3BPCenq7l^l;xV0?~%{}cOPa34pXbp`lwoJsk(R}nZt zKMrdGTp>@ydQuWiYk3nY{wHBi`6R3-Z?jB0mZ6NXvnl4Go3fp>o>ZZs;*_cqe9x5$ z%fZQuHXn&?ruC#Mv%6JI+r=^58rR)>C1bkrx5YWC>JIsr?mh55N($ZP(^=1y)Xc4N zrD($=0#v0Szb&ScJ8C^tBvj2I2iN<Gl+>5uicOM=rd#8wio$pdA&PlSg<{uCgBgR} zwS4hjocZJmzw2H5^L*6uuBCimt+nOuP`x7d{@zAsE$=}U%b*HYhFochIu`FvCdE*v z;-`hG=`W=TcmLn_)~qQy)bYv5O-YKgw;Q+GieHgqsclgwQZ=vVf|CPF)s3Aqm|||i zl`DPJ{?+QGvQO6&Md8odD1)?ToRVC79C1T#k6iFTiA3~jn<{h25KOgdAXTBEs-rIP z)YVfcBc`;EDP%f?)#a)QA(x0;-6(8SP>4zWrEFw7l#jaqvxv7NIGb=D{bC8z-BW&U z(v&5uIA$!xNkc=3jh!tgmB-UauI&@IWh-M<J*w`f5=(J&2`zDYo(9~{3$+m6+FQ~D zd6ZhkJL4;E(XwZ8JW|S~bTxC^WMYUKN881XA8VJYsg8g`p!<<J6^)*6dRj1iYrHD- zDnfM3G`_kIq{37bbm{@Aw)TaX%2`nqShhi4TuY|gQpB%{JmM>t&N?clZ>7>2I?Tqu z*F7j*t&!srMJA&t*UD-h#Z5XWRX`U9YJ6KI*oD-)m2jzvA@67>)SzRN*8qF8lX4QK zFjbp9QZ-wL*WB@I__#)7BJ8o%ZNfKBk<_BA26LTsDb8X`koIp+hsnLYvRn-4>ed)R z3K_{7wLeqFM1(cMVN5sl7~h$&DX?9ra#f!!rJL6+VF>2?{pp8jVfURmi_*nyhP;<4 zb1e5q83;$qzI_ypEWpnFuRkcMnsUOFN55In-HiixT6`*Z{0Hf&icu~-by9YcJRIss z+EMD1H|<T@R!cihX|lc*QQMX0rz1K6<5yWqQj$){Wvt}C)RLmi&1E8?d{7cGQe7$! z$Aww(s?pzVX_!JUvT);n%cmoSo>_^uTGPeKY}LlH`6`b?lCK>shB8m{|4yyuI??*? zO4ojxj~Ce%)kj^ZrZQ7kbHC%=Y39A@q}-K}uS!<+%FZY(Tg^2lK!;OM+Vib-HK=iE zQdaj;*{0Z3xk+tF&wMC*q<o`!3DQlpAkKhZw4b77Ji-!mg02qH+tIH88}_J44W_xI zvoD$wa}y_*FNV#O)tl3VlkX6jNs&1yWH~Bkpft@^Rpe-WvAnimHT!)OC!r0w8L)dB zq?@fRKHF&X#1#5M{${+XiZV?TRY={b7p33icU;nt26`y9IaH-^QBHDmlQNMjMMa-A zm=dO<yxLr5=bs`{Q`IlsQsO{Unwttrm}2{c!jM;lEUvqBm0yI_riiZc$`GYQ3?l7t z#E-S4ZUtN0Gt+v-dMQ`oC~0!>rKHW<C2pf{94N-ozM(@G`^DayHG^6NNt=^`RtzkB z)*qAwHacE&G}YbFwg7dJ7zM8MsKaN)h#L}L+_&gPhOtic<^JCo0puH+)e7B2$$cr# zQoF^K@+tD1t;`Tr+rZsg;UI9pQpK^8DXeIo<7H9wEY<C5bEW2DA>B5yol$OOE1&07 zR1#5Apb|PIFvMN8hzISz9d>Dn<WTvc@Q@7ca?A&7R3jPi9&D2CvL`395}lAb5}kWT z<+|GF)(LM~uSu6Gl4D<uNf=9FJ8Bf_-MEyq6syT}&}yj7a8(>BWo;_Y<IcLWzqoF_ zhVeD~L&^+IdXaU~$$%$l&*2$m(bhG^6M++8D8wJNog$n@Q4`2fq<DqiMmB0AqTn|O z4|Ak0nI=fgo|DeI?$k_LD#~&&j-FXj5z`96<ES$?l+`xB)D4h0=&3B^DGGL0t-2)k z+<cWf3#l9{cSWx)R<$L!d6P9%Iiq(Ps%YOWqf94)+Gwe0P__~7a$UxlIPg@GqN+9p zLQut6&p#~4Dp|=x-59D}dUI2sGJ?45V|mEok5=Qypm6VQm#lP(kbHXGpi8~00nwZ6 z@AgzO%0S9`dVXtvOrz3CY-+Z9`~9eHJ=cy~qsk_=s3hmEvnf3jTee374B&Q>4^mI6 z5s_K)hKqb2sZmfiL(2`7*9&S`;}oJKRI^R7TGQgAYH1RdWweGOKhw1xIi5~WbI{UD zPW4g{lf6~?1-Y9+r9M$AvB9S{zeH`#n5nVMI2NSRYRb2~#_~HaSa`1hYq7ID6!)od zJ>L<_ITXca6ds*mq0l64P@r~#Hc~$4OnS=!`HZ2sbNNmuC`^ExKqXC9@i+1|@+W?T zgWiGi^%C4vRwk^7{oZB*9iyX0UKA*)Ck6>YRWG(rDAl1Zs$6l&ozH~eH-DX?Kkl1S zukLOrFa?P8VSYLahwVCHCg0j_t*QSa$B%TH_SDpEbL_U=C$xoIlz2G}XFH`uy4yv# z=rzex1l8*x_jtrmw|>_iNx5MMT)s(*=@eug&qUtFueQz+tWr)GUk$ga-?9Ig*b`d! z1E}duyS2*T%lT#zhpN<4F85&0nMx`5j`TVzom;nKJSWNsjPFxLx!4Jx-b`_<EbF!? zvGI-Ea%6zB>nhgO-!Lah1GXF4aL}#-4f!1zL~)#QWpYQSuWx^ldKjMZVy%&o&7~|~ z7h4}qk*LYnxl$#iJ8IKOql~<Rf`aenkQ`In(gUjb{!gaEwqvBLDqWWY(M=~e9#kcg zi@@p(PL~}fSGu)86cm+(e^~CTW$ho9`>A=sw3DfVY@vKm^9!{T<M67({QrHqU%NGx z=$Yl7tNiD&10H?uO|Gk+X=@POP~q{<+H9xo6f*Az)W*lkTw^7>_sLb}Fec8icAGEf zN98%xT*RyTOm=b^VXED{I@1o~kAu;uB1bhgp2E0{d|d6A#m-n~dDE9F`h#nkwY@5& zY%1(?a7;epPT^1QW@QeZaNy9=4YA>#Lk}7VD_Jj!_vTf+^LQw2o-ZSHU0nFou+AEf zA$1<lPod_grJpC{3-t}eoq|JhvH$VH0>gwGq8PCAB5p6G8r5K2uJF_qv}m6aqBV_| z!ygGQWyJnEa?*91@VU=yFTai>F@VFe&up*k5s)k|+IAb8=^RS!NAIsfDoCop=t@M- z2J7t}TubO|A&T_QQ)sfsCNT*1MI~D-+p2=<7S%5`!ji&KVt*dvKB}7DjCb>ykt>2@ z3HLFsfl2Z!K-RkFf@!OIVNK^%GS_L8*Lp>O+ihIJ_0P!1(#vbS+;~9mPx4>o#!-pl zstf%Y=OpDo5<}MWyasZHE;V3JjhN-+1u;~vIu(Y_>)#SoyDmtZ?s8dSP4%X&Y>;W+ zp~&tcpT^`EN^$B+myk^W4}{1)#MLsH)f{v&AGbf^hU<Fw$~j;!-P)jJ)IBeCmG5@w z+WH;)1Smg51$_oBs{NDGll3_tuZKUCtw{WbDOnlPEs<9-68gDrx|gZpCypywv8lZr zZ;t#TAXX|i6A@QfEJORD<%tv;6!7(F)K7Z{v6|YqVr`s{)_QRr9Tom)A+c7w8Ki(C zT*w_;4(t%L+`YeXpV1)H?G5XZyIwsT$XD1yg_CSH#p0H=4t*hD5f_AimK-7fyq9X| z6Yz)D@rbxK97XpEC-<-O7#JZ^qn+tiMTbeo>#~tBM+>{@BYK7uTwpipiFLU;CA#r1 z@`P%CF!g_?ZKt>kkoSz`mH*wv>5h4FoY@E6!ZpyJUCBk|0By`X=r-63)sUqA2aY9< z6r}`@PKcb@_|s`HeKM11ddb(r`QB;K7EG36m!)*G->Qj~1FghDQKL0;S}zMYWI@Wj zi_Y_yio5kgg}69FKA@2r&y=iH&*Mk_bff)cX^Abyo?*z&62%(R6k()#pDr}Cq^bx+ z6v<T$T3H=KPkF7f;cy%Oz$bXG{{FY{YcL>o*C!lf+`%e04mWWg_3C%XZR(}WvB=I; zG?FpU<Tnqv>R^XFL+nO~J=PT1(`M~eBr9)bX7i!9jH!XbR_JQg%(aJ<(`v)U&8n;c zy5Xxsq1>*j<7wO7_%yp|+|oX;pdVH;-orL1KlB7Xi72jQ+>jxIq+EN1w+-cFto++B z0`eMoi(Co6%km3}i}1Ys-jH8>VQT0tAevv^q$;g%{1)eNyr*x^N`AD98a|GzL_P-M zAQ?s3>AtKI#3UAHq|W;2Za{)GDMhye-tkYoQ;Je1*+mkni*Coy1ik%z-WwV3Xo|$m z@zEM}tU+M?=)<Xel5z^=Hk)(kf!h4Fmy}%Yji_&w@t@uzpc9`s%4=00o?^X#|H&Ml zxMZn><CX2fk?!(vWGdSKOr$TH6Gi&!#K>GvWvk{6#zHhoyNk$unM*f&<Csv-OHZ`u zK5&s`zX(dowM{NGiyCmOPqmTrV49pSt5HWCDVl-Z%heF2_~+gj*&9cj*ySm+sy*#m zd+WM#oNwJv)2ur6wYIi(oAK7KUa`AntGg$J?w4>HI&Hr^lH{1AMjbt?w>S!*lSjBp z%6ICt&vYIl*1_L?FV1?dSGdF`PvB^~C({wD;`XFF{ctE|<FT!01NFo67;y?Jz=!|d zeQo03{hQam_u>!#&-%b${N?}f-@3tn`}wzC{qV{E{cAf9j*iquU(m;+yAF<iqBgp@ zLtY<pg9k@99p4d;T=G1I=OEsn^UuqSM}Cxh3(>FmY}fr0<)xlx-!Ss+J2-m1c5r0L zUPi(Tn)(uA?~UzYQ_OPc(B6Zi8(;NdRDG;Aa_^#lUbXzI0|!Sh*A8j){YL@Fb!+e; z_fRb~=wGyI|AGb&j^00q{CztI`ge{D)?BSt>#OzGcGL!H8#{K6Zv0FB{89hT!vh0j zZe-(M?;NYu{DbjhkUNMOeRS_we{Fd1;K;_G)CLE}`VihRRvTn+aIg<q21g&=u@eOc zo?tBq-oM(n^HAT;el+_qUN`?oCjSLn`z}M@-nCOJ>)YAK_iyp%k9VVc8{Y!}f3XA5 zJdEc1&`hllfqn-11;}qJkl&V<Z|Tdo<mHd`<&Ou)oYuY@g$!s1m{8Fn<Q(1jK0<@| z8<w~4vK%1818om#EkBkje+)<t5A5+3j%@rO27efXKawK%ukHeB(9EHouGWX=AnW@v z0y}_~hw-tcKK%6yj=n9w-;&=y9(=;X%U3}81fYCEpnL*QJ^?8C_T9dngF8s=J8Jyt z<4-?-7`bDBKRfxei$8<>+0CCl{MpN&ef-(r4~F5-2Nl_)V;Fr7(>eSd>fbp!rpWk9 zef;?zjQr@vU-n^GHTdTY3RR2&fuI{u%sGsXlEeVwhVZwCBgkmdOYQIg=*5jbis~OF zF3#a+^ihN0g`K3R(MMq>k{L1jf{e=7EIlSX%AAKr&XEKUfi~O-Yp;zA67h!zMh02A zG<8xS#4l<dMzbf`;>o_9J8C;?yJ~~A-L*Zny|sO{q1te5f9*gG)4%p#YhNDNdHC?i zC7_WHAh!mjTq14$8L8p^T?W6&pI`FlJAFGzKuA@RkxU!k)R%8c$}jchm-6x*efbX2 zf`R~zbEh_XfZZBB(6@`YKG4@UIJN`NK?X=ppdpsn%^%>kR@=*;ef$~X&rbgA;?Dqo zc4#X<(8mw;p%l9D6Mg$>m>9c5Xio_34WWG@G!#O8A+$4uc7;%X2n~eLj=g|NrXl7} z68>Ql{!tSCNfQ1k5p;NfV2^J64ZC+}w*!_gj@*Cv(4gxZ-TYriFCN+r{3)U^Q!q^Y z#gOs$oAUch`TY(EVIK(LFkoXHhekJlzHe;Dq0s~22z)^^eF$Q(M(_Q>k=#75%dt8n z&Lz<|-bLt)gs4HUI{<ok;1Fs!Jb<x-SlReKK-x71_KV=tohqXsqZw=!Rj9>1727)< z31fJ`36*I2p12|#z6u4%%$&<^cv9r3ZASnrn5+K|{|}PBu8wZ}E&2H9MFh}U0F0jR z8AFf%78uz4`2li-|3CylY#itt9^UIjf-pF|Z>;8Hkxt_O=Q<|e_nf>B%$wq2<la{- zbblYI{@z!Z5f8rH-zP8k_mKsCpM!#U4jJOf0}gW}M>qbDk&XYj$MuhH{7<7BzZf27 zb3fMR{%>Ke8$aITY7lNC!mnNbuw)|>K<N9(GP?PzLm-wu{u~0!2fH}56WzO98{VV6 zq`1}s`o!xnOAMnOP!%VUWf|00<^Ur5hJh;-1+ThZ8y21=%7B#H_^X{yP%{|b1(q)9 z`b3m)fWIT*jcoiKdMXt8ckC73MN<4f2(YXCx%ZYAhNJi1As>X^5d(83;K%|;-x413 zmOvueLTHYJyz&3C4Ln$AbmKo`0^walM8F~98c^{$dT*MPd+!})XJ8HiOq#ba$WqiK zRUg^uTf5mgZPG$>=oSm}oo#WPe<oo3Ou_hBkec_t66g87uY~CP`(iXGh}HdU532LT z6@vHo2~hu~HY{T?QX`u`fc7@2W^96Uk6skaTqI6^)wgqJ-!2DPN6n>=Vx#W>Bt3ZS z0leVRulV_1z>kDT3i!WI+Cq$W3;_UX+T)?UPsA|W{sn(_@aJ_1l#zRb1I{sw(b)Wj zpkebD@*+fWZ*aHk^X+Kj4jDm+Bq2lm9+H9L>(N^6BkqtOYx9@Pu;*wExIy?MZa0IN z6CZIh-!C4<2#xg(gA*de;oKBT#>_#vy{?~a61qOlDTI+_WaCGYrtF%LNZW(Q5bW17 z0vkWf-k3e6{Qz%!ea@jI+>bCS^34-Dc-y59pEjUxM7Gty>=tGj3$vhwS<J#LD}5k{ z7D?bOyw5VEaPCer>_r%m5p+D59S>%}gK4`Qxw~)WCkVu@^GzE6X%@{lqJHCV5I`;X z?c@9A4xn1!2LK-41-%0rMTjjb4RfRrzX#1)^2o*yv$r2*Z$C&X8q&f$^|4DIgGq)# z1MG)M<entF&oZRd?o2Z5O2WI7@Lp}qL$FWZhV`*qAA5mY^a+}xJb^H4?5A0eernM_ z$)bP4DZ%9w>X6xk;6sk=@c?EQB1ODQ)rST!Pd?%>)eb>e49bjx^utu)J3<NxwKDQe z%+x+Cbua@_3lz3NnaW^Gn8W<tfnQ7_<@?}w2rFAf94puaTKfkP3pwQa@GJct93FOk zi1ci2@DO^Fyedb)1YjL#m`rP!q6t%X0M!rkiMT;39LxrGGP1c_GgDi_tl|Sxf)CIv zADBdZVE*udVtjzS`M^Bk160ljNS_Z(gaHvvm@pc^)PnNlF~uzC;J#hN>pn8ykxk*i zRHP8~b3l5CNR=nx1H=Oq$^8Tyl&g;)FlvZDJNdJRKRfudk3Ylw*~OpT{Mma*`1HMB z8J}i|+?h||&I}M8_a7z{cmS;X4|9|l9NiqEJlz}tWD+=tfPy<jo_udwUhYlHAmSB8 z?oD%~@yqT|aUT|)LJC4~4uc<i<>(LzVDnS_d0`i@@)kPJ7fN$spPL6{q}~$HHX*t( zY(i*w5JW`rm#Dn=75;pYKUk}eY`%jZDo!JtAHK8>ZIS;T$7bi_@KCwzLv$Q?9M=2C z-9`L+9A@mtVI*1dA$rCiaW7{7UdCz=lHcIl__GlDW(a*dguWF*-w7cu+f_9D(n6ab z4xtx9=u;NDw_%~pcPw=8ixx^?`R7E>y)O!`?tM{k^^PL$9ZA{HlnqIFK~r83@_<qT z*+(^pAxZy~rhiIaKCCYv=8I~wc;IF9o@B#=FPlf14G+F-{I$Gn{I$G%U0=Q~Y-jT@ zGJR6imQf8O50EO2Z2U)3C&3^kfizGbem4G^KVL_$tq9r37iIL{;qSc-3BMpTExjON zd`coe%wGUZs$>j7#4lju@7Jj#CAA7hM>jtPAcdO$fPlzUkk^yam3#Ww1d*e<>7YYC zY})6;oDi^J$*dZ^r`+-0A86r+gZg&w+n5ZB_j?b6;SCK9?SOhQgwlN|tm^f>hrvVm zI&$yZL5buP#j=Z<B{VZI^Z(E{jKwCpg5E>uS+$}{kKS|IGM!6&-XQ=;9x5s+AOaN7 z3ek%1f~aKooHZz%8}-P$Z!FQnsC{s<J;t%zd`!j?FB}Ao`b2<jQE;{hPC2@{i2o(i zCqg@XM=VGFNdbEENz2N2Bw<|vhP{Yo7SJRCiT|R$esNgLRGTD@(M>Rf(amF8kAFzj zr!?vmlb_Y_vkX6{;pYU#aeWzQ!njm7F7f9z{=5iRbm2KkJ1=Pynl>R(6B2b<qb^I- zWr=!4qh67yS0w7XMqQVv>k{>bM!g|XZ%EYJ8uhkBy}joVtY>M+Uv&o_feo3?cuR=j zBKZ&_bceMLzQ;{28ku#u``<i*-6n1WvpBCu;-Mg%DR~4hdJiyfDb{T-R`z6N_QB7h z=_S~&uiZqRRaEn7?7Kb%cPqUxl>C$X%jTt~`^Y@zt)M=I65Jv+_pG**)w_<+PYmrL zP`;8$9U+KuV7rba4m)fST%Ai)-~O=yEd56}SCP(a$@?PS>sY}Ij~)oIz9y~xizqfc z)~E9VxsYAz*6J3AhsK~7d=W)fS<|qXo3te~#6{8Yf#Cx>e-OcGgh$_h`L86K27c~? zag5yO8W{-<4&(jlJ#L_OxPK7;Q(2)^xNnf_EG(@si_x+B)0))RkMus6eMdK&___Bp zEXt4@b6=N;n@!;~BloY8B<}r;RxzxXhiMR?wTD&$2|@{iy<k8R2L}hK=KU3nC6bSU z(Zl;3`uSI492h+eLnsjPp8@fuz0R+I5r#U3CDIS~!HR$f3`Vd{Yut~Zg(2=oH2EP@ zAAkA>@H0BV;2?i?@@E%+cJpTsfA;cc-)^^Kcpq$p{e8g9@DM6OkSRk<8Io7<N2D-P zexzEi5|H@^`uNE%f#E0p`ubCS{i(b{N9HRYfC?&MKPx)KD6HlGOrBWy0Uh#=phTg| z7KPvtV4;SF0(e6OhlY{s5Xj<^K4DHdz%}Ra;DK5n9v^Xg57hc4fIPc3k}FLOAr7^p z{KogSZ3!Y45CS-;!uZ82y90Je4C8^;36q9&k#mf2fYA*Pql`Qmk1Wq=ndd?ohP2Ft zmYMKn@T67BkNKX#F#JL)KQmHcz>~_)JgJa2Mb6{bf#?2Q_~OsmVRQrU2$4uZ{D*e( zd4SUz{c2Fz)fL5oLB`Oss5zU+qDIG!?~5gUvq{8D@rzjCtFkzRPQRt<f+TW+eUkfB zqGAY-{Ob`62x1(PcIbM41Z!@IxF->?evLZJ{+I<h4~0xx3Q?#Cxo9xZDZb;-0jWBP z*(ZbVllLCzt9?YI>POrG*r}zge?PPziD|?x$;^x%T5aVc+<n+w;?KLvKbG|2-`4bP z9S;ouFCZAjY|w{yKs>1YjVpb{>X)!ULJrvs7`=#0!-q#76Y08%zyKK0Lr@g3fP07r zT5Q$f7Z3dQ;ROkYSu5*0EQ!d;RmLI7$C@y>kBw}86?F`bJ|^pm&98D<`Is*Fu;akY z)C#^z&E+w6?Eey~`yK(--ux$mFnk!rISF=g<o=T=IW*in<ftHy;HerbL#SoruUOUB zw1TfO{B;fc$FJCv!yrG9$h{q+i-1kvV~hC3Oh6;Q!Xj3l!=PK*L_xa1AmADv+5E=d zv3~Hk&2P}2DO$5^EmECApr%$h-O5C`&$czGWgWJc!Tq9r=`JQFCk<Moo12_2TuP%_ zK!K5<qCL9#FXZ=M%I_aZ(!aJO?kF7sQrVl$UkmWR_Q3yI4F$i3;UAFyntd38Y?39% z{j1*E=GWZ!uPT8ILVB>0dpocy9paYPFn{**=Kz03@Pqn@3h12s)fk4*0nR;Q3t%t> zV!?+-@0|qTP*@2g9>f@7fMyGfp%6NR3Gn~5ckZ!qU3Y$;2gy4caz>mh%95O+GPapS zPAo0okHFcLV=0Ziw&RDgk-JK*;c#fNp+uIX)=?{=b7$y6E}SAp96$!Vs9e|!t4#o@ zFpH?Q7IxP`*NZA!0~Iy_Y%~TUAYM2~Qdn&kn{@m6{?55GLrF%`?Ece5$eDZ3`JMOc z_d36G28YQ6+7PbyIhnw@)$Dp-k80ItE4+Tn%BlBJ4)nAhZ;Ixmsa7p``J~J*O7vRL zoGF)8kof#&46<dG)Qderd8qO0B@Zd7tF4r7#$I4Pr#3N;KJ_X8E^TBj#cry9%J5XZ zl)-8JY6;`qN^}H~N=^iNks?lc5y-o#oY-oj^jOz;kHu%37r2Y>+}1tHQvp_nYMBM+ z8}^|Fv@5c#n=1TzDPCz*!-O7Jw48Bi=C;y|ohZdzyISW4jAAI3XFis7PQ|>t1}3Zz zWaujxv-&`u4uS)T`%M@<&t4Qm=K>`D*Y8jo$@zMUg~5%UeXFocF{}?7_jOjTF#4uj zz|mQ?xCZ?>FM?B_^n-{+08q`l2ui`ci_Yh4#l4O4NJ06yXPs9ILtE%*IUM<5g6FI= z&)}EC0^Gbi<HMpg!ZwOsM9`|kZ?1*)FWXdEF|YRN$Q5lq@oXMgMMp|qTIH-58^A-q zf@7vxKd^(VPkk|V9Po~)6gyO&)p=_i=M@}aH0@FKB|3Rs1%F?_hfAc^ScG+rfwhSa zS|$TD*S9Ll0qj-%>np~f$eXfeMi*&jlyftmzR1ZwAv)ig(Wn@nKcCkEb0|-i78`8{ zT9y}v7-Zk!Mk==Ou+=ND>p``j5!Eniy4<S)Z)EVYO?TemPuxryyr%h6kT!<VK!yFH zK>Z>BVL$sE{h~bmn!F8oHxa2Ydd*gny~4&0Xj&pHQ&9ApW@Pl5pM%=-VGj0|&=8*W zJ3s>TIDlBSZ_*BiKQ>xH*9AMq>?MGfw*mm#(n7PA2L&3@ms3ltF=~~nJ*_%g1Y2O{ zvf2)~+77hT2sOhEhUDwDCOF#N0!O=B;6rWTLq^Lqj*gx>7Z@Rus?XO<PIbqCXs=>e zw+u9Qmnaj&VZ~EU(|JgvXz^VGyz&qnw_+`@7aoX#Z4}m57;X8D+|nnmLFh=x#xS?X zna&*~gofCZh0^H_#u5DnGqGaz0szMInKbFcsb&SyzNmsOH?{A5SFM47QBaPC3r^wm z4z@5fh%NynPd=YLJ_-l7iT>tAf3!!f`w{!rTZzerY&ns2qPKomdb_jV6~GDSvNYX? zPnKTGiC!JOX`SDmN!%)Fy|s<)tjpXF9VrLpzT-w&-YDWVnJ*{u?(!R1W6NL+Z~Jcu zm!xZuk)}IpEVIP>C{hNtF8&Q8wCB+4@^5RNE1?C*uWw%H!rOnL7?8?r2W6!5P=&2Q zYQ4;0bsQ_}%mrj)cazNT^!seO9-;N?Z9VRcjyoxlcV?%$`d?@NLU-KH-F4ygD&%sb zpFZws|DEYx#cBU}<GfSSC<pzzafeI+Z<6Kr^*;%iZ5an<WnnE_$N5BNfLhBS)=y(5 znCM*n4$W9zF)cprX7Fj@iTY_jZENQZlb-@PYDs8~$(`x}IhhNnL<Y&B;849<VW`)^ z_2ARz^oe>&o<d*GCq~WnGqEe$%03OeuUR%IzDr1cBosNQ-w{WJS15_K+^xqy=g~q> zy=~~pF$Q0Dt@^TIzcuqjYu3cWF66LzP{xQKl7g>}@e!n1uEToFHy6ECgm6P)YkJlX z+jHJX0_GcFLa>5tI>3Lhwfl{T<V#)J$oVecA4ruV%wcipF{C4tLh9dAsi<qyPL_3w znr~UPQL!5T4B<sdV{CHo=2GAy0t4@bwYPYR$6*M*yOFXFDu9RJA1ZA~g}tKN%Ays$ zx7dq{ijh2E@-t!3>h^4lqAE~Ea_j_71I{V~28AXmA721L#Zp#~-ZoHgiUO2r${AcC zk<nlxv8kU9%R;*cdTqMYo|b2^7X=o4pVC0{DAB`7lF!TU(#T8q`iNM}m}OD4Rd83) zuzm&)qnPhj;6ZC%adQc&ea<T2BdAL#lFp&X6pd2jU0U+$P30)G38JeynIo2SZ=T#b z;b0UUwSmb2D~0;GO|Aj;l{T0+H_M1;Jx7PCd6@sf;6mL?s;G@p3~C#pK5DEbp&@9- zgNa}|DHS83;Z?61K!ZY_Z9&Mx@XbhcY0bd%z1Yz>-AMfv=W4HuYno-r^s=m6#Wbu8 zBePqH$*1TUbz@Um)02E`bvJqne5`HZK}z&B+~go^9v)~mqtC&jlkGsCGzMn+GxUmU z)b%O99om@3z1N8;Xpf4FJJgrJB!c;kflLVXh}r|<lDLtv8GzKWB2K0L4Lx2qtnh-v z3g2+Am%9c)x-*IF0O;Kj=$`gF`}6G{h;#b^W*KX@U#(M3gx6nz9Nn|tc<pY}%Kzqw z{I7FFUZN{(z9zlr_;K+uj{lr@M4HQjM0dtPFUOEKV#lS}fn^CQWoG+9Af^b_LV#b? zM0eRd>m62<1We$j*lRhWoYV6bv3gA@O8vbwnV8)3o=CK6jp9u9?#4M^?zmTkjsr>w zArcHX(82JQlAoFSL(z@zDWm9n9oW-i<swnWeLB!H7nL<(M0-0Xq0!s0nl$?zus^TY z`V~ETrw2MyyXyUDNMTrIa)&L#J2YJJ!{|y=DZt{FR@urDmk<{UZ(v#}^XCV>fPys@ z{pY=#(QvoC2vg>LEoYGtfVZpX)+fEZ-g{+zPS<!Zt7m@Ft6hnARYPl^m#L%I)EupR zYqPnc%P}lMPV<dzxfCkBS-%mk=xo19Wncx~XXBo+?yx?pT~+Zv&y-S|7{q?$I_hy& zE(vo`@J&QJ3lr0yMxg9Z`yQ2yD<{&L9W01NJ9#Kec{vtN0Pg~ZLV<C*50^cY1t?>? z-}X8Q-ISz4<lO5W$zB+bP*ZD@9({Uj*5f8Uw&<}{k8OI~tjCA+DC*I#$96qFtj8^S z+^WZIdJO3C5j{St$H(+w8>^`>gMDc9sR7bwG`6w;@iQ9CNgTz11=-jd-X(ACQeM`w z64)C9)-}aqPlEQ*NyQ>CZGy1;U`x)k38nQeXK&HNP5NgMgwc;!3n}t;J7?W!CL2Yq zq24TgtK5<A%MwzhoHdD`eM8M%`ALh3<v0En4LSeGRH9>z_11BO;{mBIwmV*(`}iBQ zQSGQ*VsA^12qV+yS&FvR#ctPg7K-Bn&C2p(+UP}!z`3+%mCahCFJ#pgHm6RL5FRQ4 z-x1AO>}QzHXSXD}wEqXdG0ZCUd3Mhr^B$f_bQp%nkdXrs<(Xzi+G<lqgvvaq7u(EU zVUya^bOs9pm9?5aXA{x!)JI~sDX2A_nhI*0TkQ&J0YpG+UuTksRg>jS=Pk}xI&XCP zn$FVc7o}6FwySzlo6_uwQhcoY0YGkr=&Iy^=qmeS1U?9oz!bArrkIV-CcAS6#bvl7 zt2y!@<IWzCa|#WlyC|~+!)@CHDjzqBistd1TM~stpuWzhQ~iwHPkK@NuwjN5)nY!A z$x;gXyU$Y!`z=~{s)v*_+Y@Zz#DH+Ku(0X-G%*P<rJrgXva8qhXq`4e%0qbxbW<yq z%e)yg1-Ge~wgk3Q3Nbw>PQ1ajI1`px1xc9Z=wyF}SqA^yj~yavrIP?5P0YBAHc``= zKDM#MX!@f^&K(1D=JikZ7qK+~Yl6aJbOwDnD>#;3%KfkMwz-+<@067xnp-xx^BCw- zB-5LOmst!(XfA6v7%-+*VeKnaQB)+QQ0qI^h;yWHc><Hu7J`u$G4FXb(8L;vHjcVO z$z%XY(wsFq%BfmpnJcpXwH1-02wCOkQmJ0;-!&DvC?KsQ=`GI(3>$O_!{ubEUk>%F zb&?GBNv&!`xsA%9K=xPgldPArOv7st05l_9b`gXXBE?)6*#|OWzIoCHY5uaUlEu6S zB$1#7RNQP5Vd*=Z160@PUE=f2*<WN-F|k)iCNo{o?sR{;&-Rno%^uqhPr-k<;rNA+ zR9!vAEKxNu!AGuleV?c2HE2LJlGKJ6sD*`iX)rxtqtf&!rfo)Rvsi(gu0SuZLk10# z$_w@TYG)D<i;h|%@eByGE5!r<Ll56I1j<ctj4pAt{69W+V!nId$?2~SzubH2&vzVs z_(bPF82I0RbLOVI_x`U>{Ps-g_P=<k=T9Dd`pM4^KXuPr|FYxMZ9o3%xj&!$%aiB+ z;`TrLpZ{UxPyXW{XU+{JPrsJg_Vw4kdiyJnJ@~bi`~Te^F7N%;A1xhtZ_AtEcP{>? zfB$cy&z}6wU;gzUHva9`HV*gx&L8*RUikFye|u$j>c2dgOx(Nw@Z54~<@jQ?bhx}+ znyyxlmS(DpOVvtwr8-lZJ6c*fTrGY2;m_S)T3)PH=4R&zm|HlytMvJ0;B!aIOUH?| zyizUC?Be&?l8Jl%RyltD*qlm@^W(@Oh%)5prOi$69e_fC;OY7d#IKWg*1vOl3!m05 z*z;1Vzw?3M=5R;2JG`Si90&*Pe^gILp)Q7#SYr?Jy|b{#m*xs{o&oP^Lm-%oWI&g! z|4tp$$#(=i(;Nt6&o`6b5fs85nQ(U|yd$F$NAp&~otakl)~10>;8&bPY&)>HnZ+1S zVTT6w?94*OUe5=@taetVAMb_$TxoUc3DWqz$D0DzF6KpJ=?m=4da*vaJqXy$#F4i| zI6mkNZ%&gO|Dv8nF=0K*&h}=@gwTG@lTu?aAeqKRu7O;zI8k&fyik7<Cxx%Yg|Eeh zuld5Sdppj+CCq%-ip#h}zJ0FA?%5USc%(m2%7CwL@`aBEn515ai;S6x>)t}`n8pP< z`lV;>)eQM^;Ij6rW*bagiJ{GR(fz4HF$mIOi8rY*-(}zneFfLGd%{v!(vC4lRY6aZ zR4Cp)&j&(h{A~+zIYsO5^z6|EfQ3Ce3dwMC3{lhi*(}pbf)Gs522@G4cg4x|7@Kqw zd%}~MOfJ{}7;7bBAt;eHkJMy|dV-7#ibHfjwIdr~6Yu^XN+#~RXL;f1{neF`F}Hs2 zUO2MIqMn|cpIbRzdVFqv9z0N5svcSR1BU|2rP*UE$Cj$4Kd3G(v-nF3vnA!R>;Ap_ zS@gc2cGDdp+D~>o>d(Uf1@;bi`(VyZ3my(QTMl|Q<}H}u9F#OXeZEkCk;zp^7BvH( zz$(JVfM7GvCJ|2ep{rdK9BDw?gAF=w`9U9z)x9>ruZup?@6pptZ}<jm(QT~cVtlc4 zYCOQ)5_;$j)QuS%R+|!?IyIYc*a#+H3lOPBuWt839+xlYUMctL>I>2ac3wZ1ohOLH z=$;mj;=<B#m`lAbU1uEDd40N$ILs;7d^-0k)ZU04mmK5qCbnO-DA*F-g=FG{6}q6$ zvULSJ_Q_@DYu#3;tH1_>WbN5)&mMa^&WgS?UkmZXYyS-oztoXUh6e&Pa|a6biy1L= zh_*#$uHN9BVt3%UnKq<TzX+BO>zBd+ne>gYerI?%tX~dmPlh>oeVkJ9>fKE?L{O+x zK7Y>=Ubg2uL_)E6MS|_STUkJ4L00v*fhjL#7v?PL+b+K=?)7$$vL*7{;`5lX^Gth0 z3FaCP+Ov`YU!comw^v-q`MmipGS!PNBfhG6xb&&t*@f7QpB3|<qHhgQZR;SV`4kbQ zOi?C4tTYOwv-XD%sLwcj`2ZE<l%_C~;WM%mJxcRPn_&wg*JUtAo>L>Z(s>T6`M$qw zB<Av#pfg67m-AX)nvg`LvHkh}G_|q=op4<Fe1E<VBt(1%>sPMCVQFdH@~N#sxA9o* z5yF0iQaXYS$e(&$0IvK-mT~)mQDMRQUs+c~S2Cp(ng#e~Cm4wyhMTD_2{)LOpd7Yd zV@Br1hwaHOsqKH7SK1iaq_fHV#{<$@TVQOdxA$CA4~zn?ppHt14K~P&8u3D7!?t9i z1O`YZ_NQ`p&Cf49e&4bAmAS?FYJ!lCjvI!=gx*u^0_PMx>Bs5EpwZKWHG0UZ2BNt^ zA+8n$USN6K6^9NmFzyVi;X{~#UMgLC7e@?09S4Pw^%zD}k^wt5P}_YgRc`p8E6mCT zvn$DAP&zRV9UDwamFC5E!XMO(CWJi)$)vY?fm!aIO?RO&WNvT)F6CmoS5CU7q0SDh z10gl}TY)gU40~iq7(09nU^2R@cYt_&Muxe6q^Z&P6m|tDQO20XKh5MfvGf~bIK#$W zTB$s9j%aWKHFnI<MJW5~huq4txBP;$w(Jd$?-Iao)(_=aRP{sFe+D+v)dYK=bv&t6 zj8e^5s+rg)ox{~G3^>uPffC%ZZJf{mG-{6~6aUaS<;A6i#p)7-7e0JpdU;{Kx>7Bb zkIuCC@ulkGe7OQCo<45e_~(x9sV-NS=F0PP|Fk-DcX@t(x?K6va;dT~KVPjFcb-Tb zN+y2)?;!uVqmO++0bfie4*c2$Jp9Y5|BsT1NB-8ie{kgwBohz++S%`2T3T58fL<}o zd``>@XNsAw5I#6+&?Sh3CthQa8hcq!kW$`uETi@=Y`m7V18JGVjlg)OnrMMrLt?B^ zyU=o8v=TWiTxd8;!02S5aUWCwwxu(Ga}<Bb)f_>G7#YXc7dHe!CWSPePs0LbBqwBo zF5&{CQgCU-o5Ajw`x5j%Jm=43YO2$v3Q~d54>p=gYMqoq4C#}KMN+dQSXiuM@RMG) zqIH1LuNAP3*775^7@o4{SMB*s0M3rkzk)BYYsCp6-7aPlA38C*DFXVsSayyq%3?f& z0>g<(b_!Zj4lODuro*m|e}N`Z507ufn#VHGh0U#~E$GE{(3o9WYs=Ovjp#y%-ns%E z+oaCzGOjX_Vnf>mRUIL1ubQh)rY%>;V0E=Y9A_A`K^)7~o{wYBFhZvD(4Agvi|lx^ zES2fGrf|oh^$@b*nh?j$Z6Kuknh?j^b=#ztd?@R#&UIZCb98U4gI<dHJe#_1WUaQ~ zd2NwM>T2}y5myua97#(X*Gv<Jx%Tsq2U#65|5d(zfa{s&8nH99bjlj6P$sLTVFqPV zF|*LrTkiD+tD{kt;jYM9nH37n#O7NnRYkir9Q1J-pefg(Xuc?+3YMA=Tr?k3l3${# z6o&+HQAOrhfw>$F(e$TT#>c6B2LVWE8e^fO#zV1=Tz9@Zp5h#bZEE_XPID>-cp=Mm zM%kp^X=B|k*mDhkj&B#=4Bsr@4!%8n1HK#hcJtLmP?6cLQFgyP+HXJvh0RfS*IxkU z>^#JBn=21b@*FnMH{wZ@Fg!?vo)6%E+|Wn8%@K)u<54=%gw;=YSahffi=g1fgknh- zBfokrj<>rBi+0Db$rfxfhHY!Xws~0XsV1!UR1CY)f?bJWFSTGV#js~uuxDb}b1m3& zG3;~;b~=WgX~E9Kuoqge7h>2?TCkrm8qz}?G{x*M!bl&~?wp_L72-40hhe$qO?}jT zz_QUT;K%)jCHD*Il0&_Zti<=|Eq<rZV`Foe`CcEFfjKKpxb(i9u`-TvQyk;ZEVa0% zzP$mrkC_V(pE$e)><7vuw`>$ad{QfxF-^AMu^qCRH|pDu31V}+pM$GvN+TTgwE0SA zsV%b3XQ8kl&{cQl|%TYXhpH6r2lA7$@YI9J8Es{apf<Qh1}zNTE$hq(`$kj4>l z(Dr6D*w63>UcfM}vYP<KvPld>^F?HlK~*)P$H)dqTt{^EkTkgI6nX~b<2=&g!$4dI z7flzCp>4&@WZgilgXTA6eO_JznBQnZw+_)#_%~r>;2dm8Lde_n72ad28%z2`GCzQ< z>Ey{9#<j*^HN_2YmXoKZ?QUbIn<FwA<a0jK`j<;`BbW<8AD7Fex^h}aYKi0+_^PzE ziHgSd#3`mb9b|)E;E2tQrAn<2FIo2G$&wU^@$Q`(=uM}sl<mpwrmoe{5`$IBHiC07 zKViMJ)ulCQ7mK(~r{Ilk<B2!b9gpbsVR^SbC=Lt(maJ`%l_=|n7Wev)e77H7g_yeF zBK(w?QYaON_;}h53rb`5uH+N55`Dyi&{aC01zqqS6lNypZwxw}K3!Sy5ue6Bir8N? zG>v0glhIDl1r^1?Nzjb=JUJ|AUgR;lJtMWqeAqZ{sZJ`WaoneB9QUcrp$O4VdyW~B z+i7XZaHn|}q1j<0G8wt?gnK>dUSDyqr?IbwMVx{ShR%nLuRAmIXw1C4T(sjZ^f>1M zmE&<f@zBjnXQ}EwD>EFmtnn;<vy%k9HlB@ZE~wgT!ORtKCegrf&ZX05)IvI<#`7vw zZ+I*DRJy#5?f$Cu3+iGrc*;uW#N{J#>Cq!$^io`U^hn&>f?99OVTHV?Lh@nbMOW50 zjS<rsV%D*Aw9!13qy^O4mMM<gWIkXMmU#XXM~>szZnCw5p`DLWA%}iF&c<ampJ!TX zCB_+2m`rg1o46l?S<#@a*mt*xO?xWj3d=}~XntMPI0>8D>vKdRr(SNGTMOq_NjaRD zC#zLIHRtK|)67KjK%|f6`_L~$<uJnFl2-5I5NQ~FkqWCOEPJc4N3dW#UquE}tAzw7 ztYYTzaZ$S3ii>_qUpN+&-a28c;6&U}CsH>BUF2|rnw{`9J3-B!ySZ5e+ZK}G48=)7 zo#ra5xYT*C#W_JP%E6%l9At5ZxXdX#w1>J51{T3D8^Fg(FL)Xg9%n_8B`HA)-57Ku zJBE$@nRFUiGHs&U1sKu{7X43x6%aJjoE&B&A}wbcVxA_hxg~n0VhNNGvES_4()6{o zZIZ0v;zK|-4!}eN^t0x3XC>r>ZZ-!S(-~>!seC4%<$wrgE>;xT2g$V5X7KJeU{Q5+ zDxE=r?C2CsI`O-~QS?9bRlTK`ErWY?Kv!$7_AX^gLCZ;9xtR^GD@NmsKp-E^!D$F3 zJ_iSEjQcs~77q63ZEr^T@157aZ8f~5HD)Kup?9&9N=SixkVOZw(2EsvQ1R>E_(H(W z^;sKuOlbW3w12-~Z#IE`NK6jn#Np2|wsBN$NnIb?rTJ2@$%9|=?`Qlw&g6{u|Ag|< zV!wwiDd(o+MA+TL>DHASr#gepNt}T;yl58vj6I-uJ>Ns{wYY_PPyx7U>$oETXa>;! zazU=&l1D`ty)O$YqbcuOvU&&V<aK_-eD9-7)C#M2m{<A;uV+Y-p2M<9Eop9hN*ek! z7X~$$7dWsPrx`-%kX=oZb=r8r={;3<@Ai2lEb9z;nks_}b|I3?JSX&GH|J7|C+PO6 z<?iukpRMU=t_4%fm)gp4ZWdZ9<APe5ykrSd<YQ_Ms4qN-n#BR`?Fq3`rfC&Y>kv&r zZa-%8@1J<zaq}HPbKuAldRft_4%A2xpl>Kvq4AnYu%^(l>8_sSV`mfDg-nBOq|dcd z@}SPm+M!1a#1_geK{savP#u{*>3vfvp?k7X<jK00EPM<rwjvhyMO#+Kl(&f8d!|f4 z%i%gPF2bpW5Y)4D5^-5G7`Tboc+#o|a?-~jUops6!bl&>^nI0Kie@9F(m2PYRJH2x z1k~J`H|9{vdWTm}yuXRgwj78aSIW9Uhv;25v<p$_)g3cVbgvr+v+0(<dWRjwfZ*Y` z9zW;CrSWb5enZ6CpGOZr0#@NrwBz}F(XmHV?(2FuKH+D+u0Qk0uknBcDugnVtQ!wB zB`w<k4;wGT#d9g8)!|##PY*DQSdyIga&6*-vt&&KsZ%jvAaFV<$IElX#d3GPCd^Ss zPUe!<x>53H^rCXM#d(TyxFWk=;?2~n%P(>D)XhP_M6n~pNR+4ajSFs<S5LKfwQ4K= zfw)`1tKMnJVh^R8&|9*~l<=CAT(W6FB}=R^(Rp*ZorpGAQywOv+Yl%XBe*ri;F2#! z89Ca&-XTVd>=;zF79|r~1XLE%s5-~olaB2<jE2khvrgqpy(!jc;}Yvy1G7%XXuQd) z@5sWO2$iB4bur?$>5wuL`BXE{lr{EL*mz}<oli-er`*KwL#Uzj6ZyvQ`Y99Bngc@p zbt=l&9~U=fnthw!%Ll?>^K@0P2pVP_Htg=rh8AZ9tz;a<z>pCxJ~m43{e)t<S>=u{ ze>mvm@B?leI0tKU7UN#UI?ne1F2fG-rV%HdJzMK;n_}zH!e6oHo1Y4LWF&8Oz?3Y0 zhtZ{$)7#FmeHiByzil;Xx0Ul4qAWTMt*z@bAm`79(VBg7F?}-|yO_Rd8(3sfcPO(n zc^UgU=ei<SEK1}GL8pw|OvUJ)o*p*S3z2EdIoBg@!?MIf*SllCL5kff)v)#o`4iLZ z;gFANSIsoe?aQuNZ>;?m%d+-Lduc=q>xZp?HIA2sjaQXE{%UT}#^xxjp(Igj*3<?! z%cHfFTlLYJO$P#1k7!MK7=r|6aK2`%Ir_%Fd30e*5a`7zHhZqn%kpEU1#QUP3A0~c z@yICZZ9`Cndd<!4Xt$r^tKNUey&FBXuVIUO-&|#BVR>P8W!D1>ODkn(F!Ry7?;4sK z9Qh>naGyImfBde+xz8*u9NAx9dW?;{na?bhk5nIDSo#uNX@0|f)#c^#W7T~#dmlcI ziQAD~4;?$YGIyl9E8Y)twsm{TE9JWvj;<_~D=T-ctSrq<A6u#Jx{VAU-M9Qub+)=x zJzA;mxLr%P2E%#DX4D~j&U_q9?C{v3U-GtnOQa`EOWg$3Ap(Y@c9r4yM8I()3=Xbd z_hB?6tT}|fY-F!ukL0vNmf*Z0(?xq8unBMIH7ah>Ndb*?*m&0_M4|B`7J+VB+$ff1 zE1_ZIbp=`CS9r1?U|BrN_8Ha#{L2bdd^tPv2`+W1uf&t7z9N=LtRJpzrn|WjhBOqq zlDV}h&gN{o@LX|3XJy@D9gt|itg-q2s-BHs=((DFG}uJXGq1wv%`kd}eSs8En=f>y zEGL??$<MC(b+gLittXN`PQw@xj+EONUkw|73gVWvg8Y=(_^&qmMXwIBSySI_Ok#`v znc2DskQ~NxaFW20K|z`!s2o;1wNV*z<F;1OYNraqgyW`wZ4$f!>7%h;?aY8}n>P$N z{>a@nfTStBVguXu28_=y*k)kSb~|OxA`t5wDqAdW67m+%!xd&T!`8kfX6G_4#bi#| zK8Ryju^F@CPsF>%JKDbDhzL=PRTEC&Ly54cB-0M<8=7eL4C_yc2ko`oc34-_>8~@d z92+18$enVx7^f_TNTv+vb-^AA(lo-O%w-Cz7-}P__L^Ni2}P(|syX9TzUg$ZWPq-N z1r;+UpAN#jsC2)WLDUmcpgLA2e)nVZ%%<|XRO>vVD_q@U1YP_D9}{L^XVhtGPi7lr z)$+ZDfy`&NID)HmjwP`EBASE)f6l+f;ffpNA}Cl&AMFzXjJcLT{kio4F;wK+M{r#V zK%=0e(O$QW+qD{p69lcU_?ik%+~PeN|1A#j0|nd!D>V`~%@r4Unzy*h(}pKcYwYT$ zy?2#ge=uAcJ2;Z<IHl7uQaPRCS66PAu(v0f70<y=hPlCE0v!sruwHa-Tt}1Dad&E} z68PC9DHSDDCq3sTxS}=wd)x`@-mp&xn}Ak1w}?|%(X?>g%q(_Y*d$(4*o(ypDJXWv z?;C*PAVecV-3F{i5wud*nR!-HVyBhsVnQ};h~u(j6xVvw8>`#=9x4v8wN!b(uBOX? z=iLhD80!K0YO&kcHJvf+muW2uC})IQKd4j(!-Ka597ZPn8KlS(HhPPAIPxk^X)C=X zf^Zj6SbQ9hrTf7h{Y6*RhTGi+{>%Jm<aBBTGPo%~T&*8Sg=GQYGRPn9RR(C7A39UL z5+!U1I#rSHriweTGREdN@{B_KzLuegc1sI%&2afH-L0M1a&Zd;mn%-tiZBddLy8Ie z$(vcLt-SKCpckzUbIX!3NCpkdvVoUHcvvQ~3zIsqr0jMmI|ri?iq(pPWu5SRxVIpa zVQ}s{GHE89<{80YvdQX=-e1W;CJb*j#bY5+pq%-}(SqVvT%D@C5JSxav1SM_#Kbzf zP>i=WfEL@fJ>(T$JHnV;KxB}EikOh<oQ~?a`ZV1X+?_=xRlVePoPZVW7cjYPAcld8 z4pAuMru-;Ri+;-2!a7zdkGoy9K!S3R+Wl6O;tMJ0$}CkN#u_WB+8+hCwgu4D!k~(8 zZ!(Gfs+&lY<6*#S-(@PhHY>UYzkZ;|sA^!f7PJ&<PZy%AwkYGc>)y)V=h1u{N{KTz z<JQ{O&1lY73*_x<DAAXD5Hu^mkA>)EK4#m~Y-h$tv8l>LW|m<gg3%rc=>}|1tN}Pb z6|{L=Xd&tixdpBn+b;;mniEJW589n$^?_9n&}`PdaWY0<nz#?8i;G)d1?R6~ug`51 z`N1HE;@Wp!zi6;3RJ1<P(Mpc+f7iAc;tQ5aV5IsP%D%QPu^$G+Gi-f9Rs(^dm1P8f zf|3gspxBQh4D)@cwlK$c=@DtbeJaT!tGDnhtbW9-f8W8OSgW^;=_J7~#a6B&t$15d zs|jx~4P=a?@<NR#YCyP$lIg8E`WDvzl;wWTJ0gt04H8{4!Uu<TDTcghI`7M3Ye5SU zw$rQ{q*Hj^H<;G`;JGoxd&CAsd!%3@>OmF&p@vM(8<Bn0Z38k{U)>Z0C~t*l&Tls( z=gjuRwqS#UnWPI_+YE^-B{S}1VRgv8>=xp}>RoPe(bn^Rom;ldTH2`HcB`W~SW4)Z zHzyOjz0vN5eMb*tdx&Jl!L#N$3#{K5E&fzaxVld#zE|%HSN9fHA4K~WM&IKSP`Y7t zFJKOTFocdx{&wCB)W2=V0Y$SQ6vi69)hlV|?R;VN5n$q7sUE^MziQ$rXzeQI*2D<w zKLDr*G2FMk{+2MQMxY&&vZo4#6^4LCw}XmTILQ$A0|*2vCatp^8Ul_FQjyg!Qjszq zmE%zp=_L#CVqX*1zS?h=h|xP@!=oz_@)Vo2Ve}5>g{w#0ARN)=2tI19me#IHJ&9jj zrFQW!aCG6(6-p8dMlNbo#FV;X)Bl(*92VFWaLleLZu+Hh(X@IO%WsXP9iX?(-CvMI zl0(F9%sWbJ%jmc-u&^4tpxmym$3Yuv2tlH8)X>h~TWyqwa$SuGiR<h{&uEQu>0{1C zk`GNpdoPPA{4|yc1y?}D-eR)3x9k$d4Za17FUa?O$oKKP5V?dKT#6s~@E<h8<&w(w zijx1(2mi1cESEM*xHdr%-t!UOYetYuA$Aie+sU#ycK)~qW<5!ajERJ9Xe1~h@Ys$7 z?UgqSIyt>eV;DL4H<`JZadPCRw{1%Fw&y}^=pYVM<6sdenWu$z8Xg%AmWE#DqfsNS z7|h024Rd2_uNbSVVdH&;>8lCFe0>7W3m--<y5?q;a~ND0$NbkVLe3}5qy_RUAJklu zOIru&Z86#~YA>Nn_OR?-1f6nZol>k7`~G0FwV3RvYFs~^)c>_U>iIk9j5Md_WSRRj zLm9fB(d+{+&~OfYshwCzNK4Ot8S(7kyf-gogOVRp>*7a4^v5(Ll+*lNQ=8#f7%R+< z*G~kS3bmg(cb2?32+!wz`?$krc%5UN7kQQAA1d+^+qhZ3(Q5T0-X&kNOItAEp@On~ zY+82^{yf|qAP&+}Syv=vgx{o5#2lKM=E;&vx@^$)khen;m5tl5wq(zflcQ#}OA-&* zXiAZ^C)kj+MyDX5%+toC%_wc{B-wU_&KZ5<w@yUMHQ4|a999%B<bhy6e8?+I>^5*N zyUqvqaVK{~Xy!7p?Mhm?5XWP<4(KyL(bX1nxCxkXrgEe<aq&bt)~(>Q3h?%J1_*wf z4U_!W&9q?RqXlRRlHFP-UXWBQoxS&FT9zUuGc9xN@Lal3y{-h1EGy-{@@>n*VF6tf zfEJM3UF~U@U=J{2dI{FTKc6galOBw_1T3=Uj45uo`l6}Vz}a>qipWiLrKvH$;<RBx zRZuhz$yoU~KIB!8<YobYa7xn>UAb8r1zHbN9f!q1S}pp4QEEbjv~54>S>WflEKXW$ z=;t4E)`l`HKnbCk{dzyqdOIHzngS8uPNJA(CSm7ghbhy>*Kl)$x0wL(aU4m-Sf`N@ z9Tb4%EgOS9NJbYv#HNn0%$oWLKQ4!<AQMy_ln8EiR~SH?us`(awd>o=Oa#P?6QM|O zKCa6w9SzA?lQF`eJrAPPEJJqKpyfUTtnKg`F9}DBE5p%rC#?1ppQ02$IthMYDXtkN zSpx;b6Kpfm^==wF4$K$y+hnp8rv5gY&ldz1M&^?;tSopvX>88PA}-_mxF_Z^ZWcVu zWG?1Cxa-Dq5x73=?d0f+^K3uIJ5IjA&Qy+QEFZXU#ZgX71Dp5WyGJLo=m|nvZy!cq zsoyQVy&_G=92}Y(sb-#86mJBGAA*WCw?PD>kua%tP9V(_#KlRd(6pMEn#gT&Qr@$A zOuZ6^h?h$B1RS<y;z@?jY$-viIU{GfY(i~5pw7;f$V)Y-gD@Pca#>;c&BnpCkc}5Y z-8yJ)J6$gL1wzJ*=w&_{R9<mUb8=DRcbPdSK1*-)%jHiXhmZyxp{5v4X2rFRa8-QJ zWzi96>Q$d5jE(V#SD7(%Ct`~TwGj*~+AkU-3Y%p2@sQ&t4w2E>JuFpMRucf<uG(uQ z#ZThfQXo1@i6at_>a!3D<|4;T#JJV@%>%FSbraC^&$X*J3yT!QcImT<t&5Xyd20;m zPAxk{FiryOBBsF21)NOdaJBE6ZL``{hTL*wzF(EPVfBLX4pzweEiyK`)(3ygj5=u? z9qXECjWdsC^aU2Z>^-G`(0Wq6o5Ni@e^WA1h)+wGbY!|TvTH1nh#pHOqVoOK$5$4P z+Mbfd*<W2=S-zw6z_IE1xytWWkAG@#aCmf3f1{K3nsUCu!STUi1NiW<;jxj?p^+iQ zG`L)RXUE2eW@d*cCMx5V!RgVdiJ9?XwyTDxM~4P0GnLul$?@vg$V6puY;<CHbarBP zwmdjAJ~}cwHak8%JyIPX9UdH>nwcn14pu57V?$FzlT%}3Bg2!G(eg}XvP``uhexWj zQ-jlkmD!QWYI$O2dT?f9c&bvK9iAQ^8L5m+m#3?PlhcFLZfI(<GBh|jG&MC=VcTqY zYPvE$L9QbcqodXGGzC%e^kjK_Vt8z_S{a&{85$a{RHtXAr>BR@!;?d!lM^$QYPCE| z+{ux0d1_>Ec4T;HaAbD6Iy5spH8eCjJT_e!BR{&XGC@br(b1J_J9^LYqva!WmA}ib zu1wEN&Ww$y5i?b)H8eXkJTW;tJ~CddjE)aiW~VB{W1~}3L)5Z5K3<)k9vY)xC&$J| zCd*?(6O)q@bl3DGT~wK_%nr_sRmNs#C#I{DW94zWaH={nJ~lI0u1r*B=+^PcnKGSM zonVZ{Mh2^s!^8B$(9q!2?9kX~d3tEHJT*F08J!}<(AZdIW@u(~wlZBFoGni?5g6s^ z(JJFVHZ?LmI5bu%Pve@HDUS>dO$^V{q2m)XgHzR+neyo1==3CGLWhpb4vr6(s}n;r zgVV#+(b18~>50)wWoT%o!X<8ZClkNjoa&rsESDA+7LU!Bmr94{9y`2~bB?nMOGnCV zUY73Bl_In8?q~_Pt&K!tV=|F#4OSwNOC~aLo{7YcWa75F7Z#5%k>5(`Kc6k#!~W`W z$tBqNyPWtdu`DJNiQAKj0jA){*krl9b7W{@dgtiW@Yv4D@=ST>XnA<5IyE{{9vL4= zB)Da%du-R>uE||P<Ksh27!LV!`j#I$*Oe{i$e3fh;QLcIePOA*c>luDy<e_W7j@cl z|KX*D$CvG9fPePUM;}sLr7QxOAL~lYZ|UOJmpu>v*}wi5Z@l!<(R~;G`iUQpXU;v^ zMV!hf5ALrXSv>eqb-r3&t{(gXJH@o&V5<XmsqF_JUaDLNTbTaG&2-nq-?cb1t!n&# z@po=qJ>mYoBX=qGt$)AT7SDw|diTQ8p85Iv%5z5(N0uuKOV#SGnfZAO{F{%EkA9`$ zH-EoU4<xO#xD>CpKDw=i#NZ9!iuYN*2X=QQ-r|IL{P$LR6zA_H9!@;Ub8q4yT>BEA zOWcotAJ5O=*5AdBAO9a&>$2by@9x$TbMN0#Ab%Zv-3m0XJ@)WSlB<3#`!ifvs{5<= zabL9Vs@C6trP@zu8R#<Mx)a>pA8rv6=Q{4Bt{ndbu1iagCLX&%PFpR`AnkVlque)5 zA0$pEeuuQ~?$Y=d#g>8JLs`07dl&87%TFhk$a$G(nXm3RT}&Lax-8+>jo6Rz+-cXK zFInA}xT9M&)~}6~$n9b4uM%NuiAs8$T$U1FBGlc>U22x4c1^<4#`V%g;YYc{^?sjH z;rCk(D^^F<be7iZ@7_d6y0|Cz5bOGjz!mTM_O)6%LQUXjr~`&e&Afh(yq3tV)%Rn> z8{|95cPKH=|4;&K%N*(>okmf2yD#z9P4BJR->B}p+G;dIY_0kE#BJoG>(3vv95hOc z^n*rO{jC;X4=W|kT93y+%~o31S3CJRbvH*!iD8=ykQV+PusVOv=dBp3bKH;eY0Pfi z?>DOZXkr6(cURHRFjw@Gbgdq^zW-H+JFUOhr@6M*Kd8?qxoa(%xQp@858xePcI#63 p5-V%{sEyj#x^dI||IOduqaGOSVg@A=-yi>b)TZAw<yY>3{|m^{FUSA@ literal 0 HcmV?d00001 diff --git a/FineUI_v6/Newtonsoft.Json/Net35/Newtonsoft.Json.xml b/FineUI_v6/Newtonsoft.Json/Net35/Newtonsoft.Json.xml new file mode 100644 index 0000000..a374f26 --- /dev/null +++ b/FineUI_v6/Newtonsoft.Json/Net35/Newtonsoft.Json.xml @@ -0,0 +1,8105 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns> + A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + <param name="writeChildren">A flag indicating whether the current token's children should be written.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTimeOffset})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the state of the JsonWriter, + </summary> + <param name="token">The JsonToken being written.</param> + <param name="value">The value being written.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Culture"> + <summary> + Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value">The Object ID value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T">The object type to convert.</typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The created object.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.EntityKeyMemberConverter"> + <summary> + Converts an Entity Framework EntityKey to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatFormatHandling"> + <summary> + Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.String"> + <summary> + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol"> + <summary> + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue"> + <summary> + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatParseHandling"> + <summary> + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Double"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection + and write values during serialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData"> + <summary> + Gets or sets a value that indicates whether to write extension data when serializing the object. + </summary> + <value> + <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData"> + <summary> + Gets or sets a value that indicates whether to read extension data when deserializing the object. + </summary> + <value> + <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter"> + <summary> + Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ITraceWriter"> + <summary> + Represents a trace writer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks"> + <summary> + Gets or sets all methods called immediately after deserialization of the object. + </summary> + <value>The methods called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks"> + <summary> + Gets or sets all methods called during deserialization of the object. + </summary> + <value>The methods called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks"> + <summary> + Gets or sets all methods called after serialization of the object graph. + </summary> + <value>The methods called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks"> + <summary> + Gets or sets all methods called before serialization of the object. + </summary> + <value>The methods called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks"> + <summary> + Gets or sets all method called when an error is thrown during the serialization of the object. + </summary> + <value>The methods called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"> + <summary> + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages"> + <summary> + Returns an enumeration of the most recent trace messages. + </summary> + <returns>An enumeration of the most recent trace messages.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString"> + <summary> + Returns a <see cref="T:System.String"/> of the most recent trace messages. + </summary> + <returns> + A <see cref="T:System.String"/> of the most recent trace messages. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="T:Newtonsoft.Json.StringEscapeHandling"> + <summary> + Specifies how strings are escaped when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.Default"> + <summary> + Only control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii"> + <summary> + All non-ASCII and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml"> + <summary> + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTimeOffset"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTimeOffset"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTimeOffset}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTimeOffset)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTimeOffset"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTimeOffset})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Path"> + <summary> + Gets the path of the JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/> + </example> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. <c>null</c> for objects and nullable typesl; <c>0</c> for integers, + decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by + placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="T:System.Runtime.Serialization.DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="T:System.Runtime.Serialization.DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.DateTimeOffset"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" /> + </example> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset,Newtonsoft.Json.DateFormatHandling)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimiter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string using formatting. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <param name="type"> + The type of the value being serialized. + This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string using formatting. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string. + </summary> + <param name="node">The node to convert to JSON.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting. + </summary> + <param name="node">The node to convert to JSON.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XNode</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings"> + <summary> + Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>, + and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with + <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanging(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"> + <summary> + Occurs when a property value is changing. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)"> + <summary> + Copies to. + </summary> + <param name="array">The array.</param> + <param name="arrayIndex">Index of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly"> + <summary> + Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. + </summary> + <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference. + </summary> + <param name="reference">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)"> + <summary> + Gets the resolved name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray"> + <summary> + Gets a value indicating whether the collection type is a multidimensional array. + </summary> + <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter"> + <summary> + Sets extension data for an object during deserialization. + </summary> + <param name="o">The object to set extension data on.</param> + <param name="key">The extension data key.</param> + <param name="value">The extension data value.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter"> + <summary> + Gets extension data for an object during serialization. + </summary> + <param name="o">The object to set extension data on.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute. + </summary> + <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation"> + <summary> + Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>. + </summary> + <value> + <c>true</c> if items are validated using their array position; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems"> + <summary> + Gets or sets a value indicating whether additional items are allowed. + </summary> + <value> + <c>true</c> if additional items are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems"> + <summary> + Gets or sets whether the array items must be unique. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends. + </summary> + <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter"> + <summary> + Gets or sets the extension data setter. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter"> + <summary> + Gets or sets the extension data getter. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + <typeparam name="T">The object type to create.</typeparam> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc> diff --git a/FineUI_v6/Newtonsoft.Json/Net40/Newtonsoft.Json.dll b/FineUI_v6/Newtonsoft.Json/Net40/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..0a159151ba7bfd0d6199945e948ae996c9bb2912 GIT binary patch literal 456192 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≻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 V0{hT|;AHF6^Q6-YUH&Tq{{S8CnLGdh literal 0 HcmV?d00001 diff --git a/FineUI_v6/Newtonsoft.Json/Net40/Newtonsoft.Json.xml b/FineUI_v6/Newtonsoft.Json/Net40/Newtonsoft.Json.xml new file mode 100644 index 0000000..edc54c6 --- /dev/null +++ b/FineUI_v6/Newtonsoft.Json/Net40/Newtonsoft.Json.xml @@ -0,0 +1,8380 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns> + A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + <param name="writeChildren">A flag indicating whether the current token's children should be written.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTimeOffset})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the state of the JsonWriter, + </summary> + <param name="token">The JsonToken being written.</param> + <param name="value">The value being written.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Culture"> + <summary> + Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value">The Object ID value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T">The object type to convert.</typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The created object.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.EntityKeyMemberConverter"> + <summary> + Converts an Entity Framework EntityKey to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.ExpandoObjectConverter"> + <summary> + Converts an ExpandoObject to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.FloatFormatHandling"> + <summary> + Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.String"> + <summary> + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol"> + <summary> + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue"> + <summary> + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatParseHandling"> + <summary> + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Double"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection + and write values during serialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData"> + <summary> + Gets or sets a value that indicates whether to write extension data when serializing the object. + </summary> + <value> + <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData"> + <summary> + Gets or sets a value that indicates whether to read extension data when deserializing the object. + </summary> + <value> + <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter"> + <summary> + Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ITraceWriter"> + <summary> + Represents a trace writer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExpressionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ExpressionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks"> + <summary> + Gets or sets all methods called immediately after deserialization of the object. + </summary> + <value>The methods called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks"> + <summary> + Gets or sets all methods called during deserialization of the object. + </summary> + <value>The methods called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks"> + <summary> + Gets or sets all methods called after serialization of the object graph. + </summary> + <value>The methods called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks"> + <summary> + Gets or sets all methods called before serialization of the object. + </summary> + <value>The methods called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks"> + <summary> + Gets or sets all method called when an error is thrown during the serialization of the object. + </summary> + <value>The methods called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"> + <summary> + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages"> + <summary> + Returns an enumeration of the most recent trace messages. + </summary> + <returns>An enumeration of the most recent trace messages.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString"> + <summary> + Returns a <see cref="T:System.String"/> of the most recent trace messages. + </summary> + <returns> + A <see cref="T:System.String"/> of the most recent trace messages. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="T:Newtonsoft.Json.StringEscapeHandling"> + <summary> + Specifies how strings are escaped when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.Default"> + <summary> + Only control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii"> + <summary> + All non-ASCII and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml"> + <summary> + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTimeOffset"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTimeOffset"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTimeOffset}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTimeOffset)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTimeOffset"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTimeOffset})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.System#Dynamic#IDynamicMetaObjectProvider#GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Path"> + <summary> + Gets the path of the JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDynamicContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDynamicContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/> + </example> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. <c>null</c> for objects and nullable typesl; <c>0</c> for integers, + decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by + placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="T:System.Runtime.Serialization.DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="T:System.Runtime.Serialization.DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.DateTimeOffset"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" /> + </example> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset,Newtonsoft.Json.DateFormatHandling)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimiter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string using formatting. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <param name="type"> + The type of the value being serialized. + This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object)"> + <summary> + Asynchronously serializes the specified object to a JSON string. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Asynchronously serializes the specified object to a JSON string using formatting. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + Deserialization will happen on a new thread. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Deserialization will happen on a new thread. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + Deserialization will happen on a new thread. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Deserialization will happen on a new thread. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObjectAsync(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous populate operation. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string using formatting. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string. + </summary> + <param name="node">The node to convert to JSON.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting. + </summary> + <param name="node">The node to convert to JSON.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XNode</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings"> + <summary> + Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>, + and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with + <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.Collections.Specialized.NotifyCollectionChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"> + <summary> + Occurs when the items list of the collection has changed, or the collection is reset. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanging(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"> + <summary> + Occurs when a property value is changing. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)"> + <summary> + Copies to. + </summary> + <param name="array">The array.</param> + <param name="arrayIndex">Index of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly"> + <summary> + Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. + </summary> + <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference. + </summary> + <param name="reference">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDynamicContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)"> + <summary> + Gets the resolved name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToName(System.Type,System.String@,System.String@)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="serializedType">The type of the object the formatter creates a new instance of.</param> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object. </param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object. </param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray"> + <summary> + Gets a value indicating whether the collection type is a multidimensional array. + </summary> + <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter"> + <summary> + Sets extension data for an object during deserialization. + </summary> + <param name="o">The object to set extension data on.</param> + <param name="key">The extension data key.</param> + <param name="value">The extension data value.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter"> + <summary> + Gets extension data for an object during serialization. + </summary> + <param name="o">The object to set extension data on.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute. + </summary> + <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation"> + <summary> + Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>. + </summary> + <value> + <c>true</c> if items are validated using their array position; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems"> + <summary> + Gets or sets a value indicating whether additional items are allowed. + </summary> + <value> + <c>true</c> if additional items are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems"> + <summary> + Gets or sets whether the array items must be unique. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends. + </summary> + <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter"> + <summary> + Gets or sets the extension data setter. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter"> + <summary> + Gets or sets the extension data getter. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodWithResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback,Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodReturnLast(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodNoResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.GetRestrictions"> + <summary> + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + <typeparam name="T">The object type to create.</typeparam> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc> diff --git a/FineUI_v6/Newtonsoft.Json/Net45/Newtonsoft.Json.dll b/FineUI_v6/Newtonsoft.Json/Net45/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..52306fdbdce983729b500602f8e928f2203768a2 GIT binary patch literal 465408 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%0DfKx=r7K}T&(bI4y=Tf4~G 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%0Dk0w+ZheWr^8r$zD<W(UTfC4n<>q0lc_ znXhW~EII?M0sLDrSjO-Yim8ef6{`p~ko^`-taR!H-W>Vb56Ek3*(roID2v7enLh$t z0elj;+H&Y=;9B5|!1chLz-M9qKJZ20KfqUj;Z&m6fR%x}fEmC&&~E|!5ZDE{58)37 zeh&Nj<=Nh(>$Kgo=uhzVNY@3$PzA$FDDs{jwy&U^cMCAjR?Jasq1aimk77T;yrQAN z({=+I2W)LMpec%T6dw^xr;Whoj)`w;Jmr@}ZqZI)2k;Mpoq^v1y8?d)_5=nha=I)k zuh<kg&6mz&l~})L(Fw(iig8%3W_hY&Eyc!)Z58_p)+F8o)7inDxZtPl5RDPEXczEB z#N(jwbSjyK6)B{H@mrvIuIY3WILChl@HEQ)HXz44xeAvji-rKRQI?Apw<&TtdC@V? z?TSFpqWzF}M!XLx@^fO&&xeuAE93WSe?sxJ;(0|%H+n(EIK?uG<rUKvvlSaDUafeo zVh6znln3k?$f3T1(eme(UoO{!k<O{G9}fHiI0opJ=U>6cg9oY-6#>furvlw_e`}3@ zm*c_67cReyTz(ljUl_UkGIIVfa(QLs^2*5NnUTxw;DD*G_0SfqLpc0gpHqApI5iNh zKarX^a4yudC|NMC=mFr=Kwi<eimhvzcn<=$#9VTWa+8j{q9eldihfi)t@w{%I*rL7 zdJgVB2JW$vY1~2F@7pz<4%f!GC!9|2WfJuQhO%&s2yirT0&p>KI)>;U16PETsoWv# z5A1I6tL}M42eM5(k0}14_@`p1j<K(zSYHtNU)Q83tDY&hT?CE4g*}q#{jYIIXpd<A z@D780XfJrj*gju<d=c_7$nTwkQT_ekA3~q^l`-<JvJZXk4#NI5$iGoMs(4B;>JQb& zy@#<qi^7T}6w3-m^|<~NAs$@L88cyD<a@pxpW%=<fqXbt6;A<=#5(kkVp0RlNWrs! zr(-Sp6UgN>uA#xIiY<YuaTe_Z?y(wEZVuZwrcR1n51Dg)W$dQ%fr@+x)6_sR?P^3c zD<PfE0NKAsuQ1PHlj0HJt^|kv0KStDO(&=0uLM&c7`YxWa{2!Y`rNKDn)VFec{Jwm zaL)~p`;$$;Dv1ug1<V9~1>|)94r~M---Od2&7aEPyWp+{@E!R3zw*n?m%EyBcouC3 za=ZA2;#rX!|92vsPR&sMfwu$S*LZvkEC$~X<oFx}a(s^fIliAFUXQ>&2kU�FOfc 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�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 literal 0 HcmV?d00001 diff --git a/FineUI_v6/Newtonsoft.Json/Net45/Newtonsoft.Json.xml b/FineUI_v6/Newtonsoft.Json/Net45/Newtonsoft.Json.xml new file mode 100644 index 0000000..3025e68 --- /dev/null +++ b/FineUI_v6/Newtonsoft.Json/Net45/Newtonsoft.Json.xml @@ -0,0 +1,8380 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>Newtonsoft.Json</name> + </assembly> + <members> + <member name="T:Newtonsoft.Json.Bson.BsonObjectId"> + <summary> + Represents a BSON Oid (object id). + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonObjectId.#ctor(System.Byte[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> class. + </summary> + <param name="value">The Oid value.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonObjectId.Value"> + <summary> + Gets or sets the value of the Oid. + </summary> + <value>The value of the Oid.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns>true if the next token was read successfully; false if there are no more tokens to read.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns>A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Skip"> + <summary> + Skips the children of the current token. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken)"> + <summary> + Sets the current token. + </summary> + <param name="newToken">The new token.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the current token and value. + </summary> + <param name="newToken">The new token.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent"> + <summary> + Sets the state based on current token type. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.System#IDisposable#Dispose"> + <summary> + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Dispose(System.Boolean)"> + <summary> + Releases unmanaged and - optionally - managed resources + </summary> + <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CurrentState"> + <summary> + Gets the current reader state. + </summary> + <value>The current reader state.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.CloseInput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the reader is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the reader is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.ValueType"> + <summary> + Gets The Common Language Runtime (CLR) type for the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonReader.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonReader.State"> + <summary> + Specifies the state of the reader. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Start"> + <summary> + The Read method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Complete"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Property"> + <summary> + Reader is at a property. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ObjectStart"> + <summary> + Reader is at the start of an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Object"> + <summary> + Reader is in an object. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ArrayStart"> + <summary> + Reader is at the start of an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Array"> + <summary> + Reader is in an array. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Closed"> + <summary> + The Close method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.PostValue"> + <summary> + Reader has just read a value. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.ConstructorStart"> + <summary> + Reader is at the start of a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Constructor"> + <summary> + Reader in a constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Error"> + <summary> + An error occurred that prevents the read operation from continuing. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonReader.State.Finished"> + <summary> + The end of the file has been reached successfully. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.Stream,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="stream">The stream.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.#ctor(System.IO.BinaryReader,System.Boolean,System.DateTimeKind)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonReader"/> class. + </summary> + <param name="reader">The reader.</param> + <param name="readRootValueAsArray">if set to <c>true</c> the root object will be read as a JSON array.</param> + <param name="dateTimeKindHandling">The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns> + A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonReader.Close"> + <summary> + Changes the <see cref="T:Newtonsoft.Json.JsonReader.State"/> to Closed. + </summary> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.JsonNet35BinaryCompatibility"> + <summary> + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + </summary> + <value> + <c>true</c> if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.ReadRootValueAsArray"> + <summary> + Gets or sets a value indicating whether the root object will be read as a JSON array. + </summary> + <value> + <c>true</c> if the root object will be read as a JSON array; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonReader.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when reading <see cref="T:System.DateTime"/> values from BSON.</value> + </member> + <member name="T:Newtonsoft.Json.Bson.BsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.#ctor"> + <summary> + Creates an instance of the <c>JsonWriter</c> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject"> + <summary> + Writes the end of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray"> + <summary> + Writes the end of an array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEndConstructor"> + <summary> + Writes the end constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd"> + <summary> + Writes the end of the current Json object or array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token and its children. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader,System.Boolean)"> + <summary> + Writes the current <see cref="T:Newtonsoft.Json.JsonReader"/> token. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read the token from.</param> + <param name="writeChildren">A flag indicating whether the current token's children should be written.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON without changing the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt32})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt64})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Boolean})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Int16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.UInt16})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Char})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Byte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.SByte})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Decimal})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTime})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.DateTimeOffset})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.Guid})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Nullable{System.TimeSpan})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriter.SetWriteState(Newtonsoft.Json.JsonToken,System.Object)"> + <summary> + Sets the state of the JsonWriter, + </summary> + <param name="token">The JsonToken being written.</param> + <param name="value">The value being written.</param> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.CloseOutput"> + <summary> + Gets or sets a value indicating whether the underlying stream or + <see cref="T:System.IO.TextReader"/> should be closed when the writer is closed. + </summary> + <value> + true to close the underlying stream or <see cref="T:System.IO.TextReader"/> when + the writer is closed; otherwise false. The default is true. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Top"> + <summary> + Gets the top. + </summary> + <value>The top.</value> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.WriteState"> + <summary> + Gets the state of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Path"> + <summary> + Gets the path of the writer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonWriter.Culture"> + <summary> + Gets or sets the culture used when writing JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.Stream)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="stream">The stream.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.#ctor(System.IO.BinaryWriter)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Bson.BsonWriter"/> class. + </summary> + <param name="writer">The writer.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRawValue(System.String)"> + <summary> + Writes raw JSON where a value is expected and updates the writer's state. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteObjectId(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value that represents a BSON object id. + </summary> + <param name="value">The Object ID value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteRegex(System.String,System.String)"> + <summary> + Writes a BSON regex. + </summary> + <param name="pattern">The regex pattern.</param> + <param name="options">The regex options.</param> + </member> + <member name="P:Newtonsoft.Json.Bson.BsonWriter.DateTimeKindHandling"> + <summary> + Gets or sets the <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON. + When set to <see cref="F:System.DateTimeKind.Unspecified"/> no conversion will occur. + </summary> + <value>The <see cref="T:System.DateTimeKind"/> used when writing <see cref="T:System.DateTime"/> values to BSON.</value> + </member> + <member name="T:Newtonsoft.Json.ConstructorHandling"> + <summary> + Specifies how constructors are used when initializing objects during deserialization by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.Default"> + <summary> + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor"> + <summary> + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + </summary> + </member> + <member name="T:Newtonsoft.Json.Converters.BinaryConverter"> + <summary> + Converts a binary value to and from a base 64 string value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverter"> + <summary> + Converts an object to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConverter.GetSchema"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter. + </summary> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanRead"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can read JSON; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.JsonConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value><c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter"> + <summary> + Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.BsonObjectIdConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.CustomCreationConverter`1"> + <summary> + Create a custom object + </summary> + <typeparam name="T">The object type to convert.</typeparam> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.Create(System.Type)"> + <summary> + Creates an object which will then be populated by the serializer. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The created object.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.CustomCreationConverter`1.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.DataSetConverter"> + <summary> + Converts a <see cref="T:System.Data.DataSet"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataSetConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DataTableConverter"> + <summary> + Converts a <see cref="T:System.Data.DataTable"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.DataTableConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.DateTimeConverterBase"> + <summary> + Provides a base class for converting a <see cref="T:System.DateTime"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.DateTimeConverterBase.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.EntityKeyMemberConverter"> + <summary> + Converts an Entity Framework EntityKey to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.EntityKeyMemberConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.ExpandoObjectConverter"> + <summary> + Converts an ExpandoObject to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.ExpandoObjectConverter.CanWrite"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON. + </summary> + <value> + <c>true</c> if this <see cref="T:Newtonsoft.Json.JsonConverter"/> can write JSON; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.Converters.IsoDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeStyles"> + <summary> + Gets or sets the date time styles used when converting a date to and from JSON. + </summary> + <value>The date time styles used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.DateTimeFormat"> + <summary> + Gets or sets the date time format used when converting a date to and from JSON. + </summary> + <value>The date time format used when converting a date to and from JSON.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.IsoDateTimeConverter.Culture"> + <summary> + Gets or sets the culture used when converting a date to and from JSON. + </summary> + <value>The culture used when converting a date to and from JSON.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter"> + <summary> + Converts a <see cref="T:System.DateTime"/> to and from a JavaScript date constructor (e.g. new Date(52231943)). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.JavaScriptDateTimeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="T:Newtonsoft.Json.Converters.KeyValuePairConverter"> + <summary> + Converts a <see cref="T:System.Collections.Generic.KeyValuePair`2"/> to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.KeyValuePairConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.RegexConverter"> + <summary> + Converts a <see cref="T:System.Text.RegularExpressions.Regex"/> to and from JSON and BSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.RegexConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.StringEnumConverter"> + <summary> + Converts an <see cref="T:System.Enum"/> to and from its name string value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.StringEnumConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.StringEnumConverter.CamelCaseText"> + <summary> + Gets or sets a value indicating whether the written enum text should be camel case. + </summary> + <value><c>true</c> if the written enum text will be camel case; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Converters.VersionConverter"> + <summary> + Converts a <see cref="T:System.Version"/> to and from a string (e.g. "1.2.3.4"). + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="value">The value.</param> + <param name="serializer">The calling serializer.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing property value of the JSON that is being converted.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.VersionConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified object type. + </summary> + <param name="objectType">Type of the object.</param> + <returns> + <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Converters.XmlNodeConverter"> + <summary> + Converts XML to and from JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Writes the JSON representation of the object. + </summary> + <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param> + <param name="serializer">The calling serializer.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Reads the JSON representation of the object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param> + <param name="objectType">Type of the object.</param> + <param name="existingValue">The existing value of object being read.</param> + <param name="serializer">The calling serializer.</param> + <returns>The object value.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.IsNamespaceAttribute(System.String,System.String@)"> + <summary> + Checks if the attributeName is a namespace attribute. + </summary> + <param name="attributeName">Attribute name to test.</param> + <param name="prefix">The attribute name prefix if it has one, otherwise an empty string.</param> + <returns>True if attribute name is for a namespace attribute, otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(System.Type)"> + <summary> + Determines whether this instance can convert the specified value type. + </summary> + <param name="valueType">Type of the value.</param> + <returns> + <c>true</c> if this instance can convert the specified value type; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.DeserializeRootElementName"> + <summary> + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + </summary> + <value>The name of the deserialize root element.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.WriteArrayAttribute"> + <summary> + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </summary> + <value><c>true</c> if the array attibute is written to the XML; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Converters.XmlNodeConverter.OmitRootObject"> + <summary> + Gets or sets a value indicating whether to write the root JSON object. + </summary> + <value><c>true</c> if the JSON root object is omitted; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.FloatParseHandling"> + <summary> + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Double"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Double"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatParseHandling.Decimal"> + <summary> + Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateFormatHandling"> + <summary> + Specifies how dates are formatted when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.IsoDateFormat"> + <summary> + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + </summary> + </member> + <member name="F:Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat"> + <summary> + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + </summary> + </member> + <member name="T:Newtonsoft.Json.DateParseHandling"> + <summary> + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.None"> + <summary> + Date formatted strings are not parsed to a date type and are read as strings. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTime"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"> + <summary> + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to <see cref="F:Newtonsoft.Json.DateParseHandling.DateTimeOffset"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.DateTimeZoneHandling"> + <summary> + Specifies how to treat the time value when converting between string and <see cref="T:System.DateTime"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Local"> + <summary> + Treat as local time. If the <see cref="T:System.DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Utc"> + <summary> + Treat as a UTC. If the <see cref="T:System.DateTime"/> object represents a local time, it is converted to a UTC. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.Unspecified"> + <summary> + Treat as a local time if a <see cref="T:System.DateTime"/> is being converted to a string. + If a string is being converted to <see cref="T:System.DateTime"/>, convert to a local time if a time zone is specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.DateTimeZoneHandling.RoundtripKind"> + <summary> + Time zone information should be preserved when converting. + </summary> + </member> + <member name="T:Newtonsoft.Json.DefaultValueHandling"> + <summary> + Specifies default value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingObject" title="DefaultValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeDefaultValueHandlingExample" title="DefaultValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Include"> + <summary> + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Ignore"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. <c>null</c> for objects and nullable typesl; <c>0</c> for integers, + decimals and floating point numbers; and <c>false</c> for booleans). The default value ignored can be changed by + placing the <see cref="T:System.ComponentModel.DefaultValueAttribute"/> on the property. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.Populate"> + <summary> + Members with a default value but no JSON will be set to their default value when deserializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate"> + <summary> + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.FloatFormatHandling"> + <summary> + Specifies float format handling options when writing special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/> with <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.String"> + <summary> + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.Symbol"> + <summary> + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.FloatFormatHandling.DefaultValue"> + <summary> + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a <see cref="T:System.Double"/> property, null for a <see cref="T:System.Nullable`1"/> property. + </summary> + </member> + <member name="T:Newtonsoft.Json.Formatting"> + <summary> + Specifies formatting options for the <see cref="T:Newtonsoft.Json.JsonTextWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.None"> + <summary> + No special formatting is applied. This is the default. + </summary> + </member> + <member name="F:Newtonsoft.Json.Formatting.Indented"> + <summary> + Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings. + </summary> + </member> + <member name="T:Newtonsoft.Json.IJsonLineInfo"> + <summary> + Provides an interface to enable a class to return line and position information. + </summary> + </member> + <member name="M:Newtonsoft.Json.IJsonLineInfo.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value>The current line number or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="P:Newtonsoft.Json.IJsonLineInfo.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value>The current line position or 0 if no line information is available (for example, HasLineInfo returns false).</value> + </member> + <member name="T:Newtonsoft.Json.JsonArrayAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonContainerAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonContainerAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonContainerAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Id"> + <summary> + Gets or sets the id. + </summary> + <value>The id.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Title"> + <summary> + Gets or sets the title. + </summary> + <value>The title.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.Description"> + <summary> + Gets or sets the description. + </summary> + <value>The description.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemConverterType"> + <summary> + Gets the collection's items converter. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.IsReference"> + <summary> + Gets or sets a value that indicates whether to preserve object references. + </summary> + <value> + <c>true</c> to keep object reference; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemIsReference"> + <summary> + Gets or sets a value that indicates whether to preserve collection's items references. + </summary> + <value> + <c>true</c> to keep collection's items object references; otherwise, <c>false</c>. The default is <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing the collection's items. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonContainerAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing the collection's items. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with a flag indicating whether the array can contain null items + </summary> + <param name="allowNullItems">A flag indicating whether the array can contain null items.</param> + </member> + <member name="M:Newtonsoft.Json.JsonArrayAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonArrayAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonArrayAttribute.AllowNullItems"> + <summary> + Gets or sets a value indicating whether null items are allowed in the collection. + </summary> + <value><c>true</c> if null items are allowed in the collection; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConstructorAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConvert"> + <summary> + Provides methods for converting between common language runtime types and JSON types. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="SerializeObject" title="Serializing and Deserializing JSON with JsonConvert" /> + </example> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.True"> + <summary> + Represents JavaScript's boolean value true as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.False"> + <summary> + Represents JavaScript's boolean value false as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Null"> + <summary> + Represents JavaScript's null as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.Undefined"> + <summary> + Represents JavaScript's undefined as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.PositiveInfinity"> + <summary> + Represents JavaScript's positive infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NegativeInfinity"> + <summary> + Represents JavaScript's negative infinity as a string. This field is read-only. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonConvert.NaN"> + <summary> + Represents JavaScript's NaN as a string. This field is read-only. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTime,Newtonsoft.Json.DateFormatHandling,Newtonsoft.Json.DateTimeZoneHandling)"> + <summary> + Converts the <see cref="T:System.DateTime"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <param name="timeZoneHandling">The time zone handling when the date is converted to a string.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTime"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.DateTimeOffset,Newtonsoft.Json.DateFormatHandling)"> + <summary> + Converts the <see cref="T:System.DateTimeOffset"/> to its JSON string representation using the <see cref="T:Newtonsoft.Json.DateFormatHandling"/> specified. + </summary> + <param name="value">The value to convert.</param> + <param name="format">The format the date will be converted to.</param> + <returns>A JSON string representation of the <see cref="T:System.DateTimeOffset"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Boolean)"> + <summary> + Converts the <see cref="T:System.Boolean"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Boolean"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Char)"> + <summary> + Converts the <see cref="T:System.Char"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Char"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Enum)"> + <summary> + Converts the <see cref="T:System.Enum"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Enum"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int32)"> + <summary> + Converts the <see cref="T:System.Int32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int16)"> + <summary> + Converts the <see cref="T:System.Int16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt16)"> + <summary> + Converts the <see cref="T:System.UInt16"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt16"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt32)"> + <summary> + Converts the <see cref="T:System.UInt32"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt32"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Int64)"> + <summary> + Converts the <see cref="T:System.Int64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Int64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.UInt64)"> + <summary> + Converts the <see cref="T:System.UInt64"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.UInt64"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Single)"> + <summary> + Converts the <see cref="T:System.Single"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Single"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Double)"> + <summary> + Converts the <see cref="T:System.Double"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Double"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Byte)"> + <summary> + Converts the <see cref="T:System.Byte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Byte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.SByte)"> + <summary> + Converts the <see cref="T:System.SByte"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Decimal)"> + <summary> + Converts the <see cref="T:System.Decimal"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.SByte"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Guid)"> + <summary> + Converts the <see cref="T:System.Guid"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Guid"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.TimeSpan)"> + <summary> + Converts the <see cref="T:System.TimeSpan"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.TimeSpan"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Uri)"> + <summary> + Converts the <see cref="T:System.Uri"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Uri"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.String,System.Char)"> + <summary> + Converts the <see cref="T:System.String"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <param name="delimiter">The string delimiter character.</param> + <returns>A JSON string representation of the <see cref="T:System.String"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.ToString(System.Object)"> + <summary> + Converts the <see cref="T:System.Object"/> to its JSON string representation. + </summary> + <param name="value">The value to convert.</param> + <returns>A JSON string representation of the <see cref="T:System.Object"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object)"> + <summary> + Serializes the specified object to a JSON string. + </summary> + <param name="value">The object to serialize.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the specified object to a JSON string using formatting. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection converters used while serializing.</param> + <returns>A JSON string representation of the object.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObject(System.Object,System.Type,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Serializes the specified object to a JSON string using a type, formatting and <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <param name="type"> + The type of the value being serialized. + This parameter is used when <see cref="T:Newtonsoft.Json.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + <returns> + A JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object)"> + <summary> + Asynchronously serializes the specified object to a JSON string. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting)"> + <summary> + Asynchronously serializes the specified object to a JSON string using formatting. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeObjectAsync(System.Object,Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously serializes the specified object to a JSON string using formatting and a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + Serialization will happen on a new thread. + </summary> + <param name="value">The object to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="settings">The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to serialize the object. + If this is null, default serialization settings will be is used.</param> + <returns> + A task that represents the asynchronous serialize operation. The value of the <c>TResult</c> parameter contains a JSON string representation of the object. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String)"> + <summary> + Deserializes the JSON to a .NET object. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to a .NET object using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"> + <summary> + Deserializes the JSON to the specified .NET type. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns>The deserialized object from the Json string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0)"> + <summary> + Deserializes the JSON to the given anonymous type. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeAnonymousType``1(System.String,``0,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the given anonymous type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T"> + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + </typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="anonymousTypeObject">The anonymous type object.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized anonymous type from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The object to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonConverter[])"> + <summary> + Deserializes the JSON to the specified .NET type using a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize.</param> + <param name="converters">Converters to use while deserializing.</param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObject(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns>The deserialized object from the JSON string.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + Deserialization will happen on a new thread. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync``1(System.String,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Deserialization will happen on a new thread. + </summary> + <typeparam name="T">The type of the object to deserialize to.</typeparam> + <param name="value">The JSON to deserialize.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type. + Deserialization will happen on a new thread. + </summary> + <param name="value">The JSON to deserialize.</param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeObjectAsync(System.String,System.Type,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously deserializes the JSON to the specified .NET type using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Deserialization will happen on a new thread. + </summary> + <param name="value">The JSON to deserialize.</param> + <param name="type">The type of the object to deserialize to.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous deserialize operation. The value of the <c>TResult</c> parameter contains the deserialized object from the JSON string. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object)"> + <summary> + Populates the object with values from the JSON string. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObject(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.PopulateObjectAsync(System.String,System.Object,Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Asynchronously populates the object with values from the JSON string using <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + </summary> + <param name="value">The JSON to populate values from.</param> + <param name="target">The target object to populate values onto.</param> + <param name="settings"> + The <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> used to deserialize the object. + If this is null, default serialization settings will be is used. + </param> + <returns> + A task that represents the asynchronous populate operation. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode)"> + <summary> + Serializes the XML node to a JSON string. + </summary> + <param name="node">The node to serialize.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the XML node to a JSON string using formatting. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXmlNode(System.Xml.XmlNode,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the XML node to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XmlNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String)"> + <summary> + Deserializes the XmlNode from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXmlNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the XmlNode from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XmlNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string. + </summary> + <param name="node">The node to convert to JSON.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting. + </summary> + <param name="node">The node to convert to JSON.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.SerializeXNode(System.Xml.Linq.XObject,Newtonsoft.Json.Formatting,System.Boolean)"> + <summary> + Serializes the <see cref="T:System.Xml.Linq.XNode"/> to a JSON string using formatting and omits the root object if <paramref name="omitRootObject"/> is <c>true</c>. + </summary> + <param name="node">The node to serialize.</param> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="omitRootObject">Omits writing the root object.</param> + <returns>A JSON string of the XNode.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string. + </summary> + <param name="value">The JSON string.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/>. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <returns>The deserialized XNode</returns> + </member> + <member name="M:Newtonsoft.Json.JsonConvert.DeserializeXNode(System.String,System.String,System.Boolean)"> + <summary> + Deserializes the <see cref="T:System.Xml.Linq.XNode"/> from a JSON string nested in a root elment specified by <paramref name="deserializeRootElementName"/> + and writes a .NET array attribute for collections. + </summary> + <param name="value">The JSON string.</param> + <param name="deserializeRootElementName">The name of the root element to append when deserializing.</param> + <param name="writeArrayAttribute"> + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + </param> + <returns>The deserialized XNode</returns> + </member> + <member name="P:Newtonsoft.Json.JsonConvert.DefaultSettings"> + <summary> + Gets or sets a function that creates default <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + Default settings are automatically used by serialization methods on <see cref="T:Newtonsoft.Json.JsonConvert"/>, + and <see cref="M:Newtonsoft.Json.Linq.JToken.ToObject``1"/> and <see cref="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"/> on <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + To serialize without using any default settings create a <see cref="T:Newtonsoft.Json.JsonSerializer"/> with + <see cref="M:Newtonsoft.Json.JsonSerializer.Create"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonConverterAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified <see cref="T:Newtonsoft.Json.JsonConverter"/> when serializing the member or class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonConverterAttribute.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class. + </summary> + <param name="converterType">Type of the converter.</param> + </member> + <member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType"> + <summary> + Gets the type of the converter. + </summary> + <value>The type of the converter.</value> + </member> + <member name="T:Newtonsoft.Json.JsonConverterCollection"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonDictionaryAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonDictionaryAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonDictionaryAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="T:Newtonsoft.Json.JsonException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonExtensionDataAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection + and write values during serialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonExtensionDataAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonExtensionDataAttribute"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.WriteData"> + <summary> + Gets or sets a value that indicates whether to write extension data when serializing the object. + </summary> + <value> + <c>true</c> to write extension data when serializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonExtensionDataAttribute.ReadData"> + <summary> + Gets or sets a value that indicates whether to read extension data when deserializing the object. + </summary> + <value> + <c>true</c> to read extension data when deserializing the object; otherwise, <c>false</c>. The default is <c>true</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonIgnoreAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> not to serialize the public field or public read/write property value. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonObjectAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(Newtonsoft.Json.MemberSerialization)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified member serialization. + </summary> + <param name="memberSerialization">The member serialization.</param> + </member> + <member name="M:Newtonsoft.Json.JsonObjectAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonObjectAttribute"/> class with the specified container Id. + </summary> + <param name="id">The container Id.</param> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.MemberSerialization"> + <summary> + Gets or sets the member serialization. + </summary> + <value>The member serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonObjectAttribute.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonPropertyAttribute"> + <summary> + Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member with the specified name. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonPropertyAttribute.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> class with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemConverterType"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.NullValueHandling"> + <summary> + Gets or sets the null value handling used when serializing this property. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.DefaultValueHandling"> + <summary> + Gets or sets the default value handling used when serializing this property. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ReferenceLoopHandling"> + <summary> + Gets or sets the reference loop handling used when serializing this property. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ObjectCreationHandling"> + <summary> + Gets or sets the object creation handling used when deserializing this property. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.TypeNameHandling"> + <summary> + Gets or sets the type name handling used when serializing this property. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.IsReference"> + <summary> + Gets or sets whether this property's value is serialized as a reference. + </summary> + <value>Whether this property's value is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.Required"> + <summary> + Gets or sets a value indicating whether this property is required. + </summary> + <value> + A value indicating whether this property is required. + </value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonPropertyAttribute.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="T:Newtonsoft.Json.JsonReaderException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.JsonReaderException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializationException"> + <summary> + The exception thrown when an error occurs during Json serialization or deserialization. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="T:Newtonsoft.Json.JsonSerializer"> + <summary> + Serializes and deserializes objects into and from the JSON format. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> enables you to control how objects are encoded into JSON. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializer"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Create(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will not use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.CreateDefault(Newtonsoft.Json.JsonSerializerSettings)"> + <summary> + Creates a new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </summary> + <param name="settings">The settings to be applied to the <see cref="T:Newtonsoft.Json.JsonSerializer"/>.</param> + <returns> + A new <see cref="T:Newtonsoft.Json.JsonSerializer"/> instance using the specified <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/>. + The <see cref="T:Newtonsoft.Json.JsonSerializer"/> will use default settings. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(System.IO.TextReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Populate(Newtonsoft.Json.JsonReader,System.Object)"> + <summary> + Populates the JSON values onto the target object. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to reader values from.</param> + <param name="target">The target object to populate values onto.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param> + <returns>The <see cref="T:System.Object"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <typeparam name="T">The type of the object to deserialize.</typeparam> + <returns>The instance of <typeparamref name="T"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)"> + <summary> + Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/> + into an instance of the specified type. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param> + <param name="objectType">The <see cref="T:System.Type"/> of object being deserialized.</param> + <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + <param name="objectType"> + The type of the value being serialized. + This parameter is used when <see cref="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"/> is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + </param> + </member> + <member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)"> + <summary> + Serializes the specified <see cref="T:System.Object"/> and writes the Json structure + to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param> + <param name="value">The <see cref="T:System.Object"/> to serialize.</param> + </member> + <member name="E:Newtonsoft.Json.JsonSerializer.Error"> + <summary> + Occurs when the <see cref="T:Newtonsoft.Json.JsonSerializer"/> errors during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ReferenceLoopHandling"> + <summary> + Get or set how reference loops (e.g. a class referencing itself) is handled. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MissingMemberHandling"> + <summary> + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.NullValueHandling"> + <summary> + Get or set how null values are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DefaultValueHandling"> + <summary> + Get or set how null default are handled during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Converters"> + <summary> + Gets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>Collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializer.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional JSON content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonSerializerSettings"> + <summary> + Specifies the settings on a <see cref="T:Newtonsoft.Json.JsonSerializer"/> object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonSerializerSettings.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializerSettings"/> class. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceLoopHandling"> + <summary> + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + </summary> + <value>Reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MissingMemberHandling"> + <summary> + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + </summary> + <value>Missing member handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ObjectCreationHandling"> + <summary> + Gets or sets how objects are created during deserialization. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.NullValueHandling"> + <summary> + Gets or sets how null values are handled during serialization and deserialization. + </summary> + <value>Null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DefaultValueHandling"> + <summary> + Gets or sets how null default are handled during serialization and deserialization. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Converters"> + <summary> + Gets or sets a collection <see cref="T:Newtonsoft.Json.JsonConverter"/> that will be used during serialization. + </summary> + <value>The converters.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.PreserveReferencesHandling"> + <summary> + Gets or sets how object references are preserved by the serializer. + </summary> + <value>The preserve references handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameHandling"> + <summary> + Gets or sets how type name writing and reading is handled by the serializer. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TypeNameAssemblyFormat"> + <summary> + Gets or sets how a type name assembly is written and resolved by the serializer. + </summary> + <value>The type name assembly format.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ConstructorHandling"> + <summary> + Gets or sets how constructors are used during deserialization. + </summary> + <value>The constructor handling.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ContractResolver"> + <summary> + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + </summary> + <value>The contract resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references. + </summary> + <value>The reference resolver.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages. + </summary> + <value>The trace writer.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Binder"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.SerializationBinder"/> used by the serializer when resolving type names. + </summary> + <value>The binder.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Error"> + <summary> + Gets or sets the error handler called during serialization and deserialization. + </summary> + <value>The error handler called during serialization and deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Context"> + <summary> + Gets or sets the <see cref="T:System.Runtime.Serialization.StreamingContext"/> used by the serializer when invoking serialization callback methods. + </summary> + <value>The context.</value> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString"> + <summary> + Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth"> + <summary> + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a <see cref="T:Newtonsoft.Json.JsonReaderException"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Formatting"> + <summary> + Indicates how JSON text output is formatted. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatHandling"> + <summary> + Get or set how dates are written to JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateTimeZoneHandling"> + <summary> + Get or set how <see cref="T:System.DateTime"/> time zones are handling during serialization and deserialization. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.DateParseHandling"> + <summary> + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatFormatHandling"> + <summary> + Get or set how special floating point numbers, e.g. <see cref="F:System.Double.NaN"/>, + <see cref="F:System.Double.PositiveInfinity"/> and <see cref="F:System.Double.NegativeInfinity"/>, + are written as JSON. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.FloatParseHandling"> + <summary> + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.StringEscapeHandling"> + <summary> + Get or set how strings are escaped when writing JSON text. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.Culture"> + <summary> + Gets or sets the culture used when reading JSON. Defaults to <see cref="P:System.Globalization.CultureInfo.InvariantCulture"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonSerializerSettings.CheckAdditionalContent"> + <summary> + Gets a value indicating whether there will be a check for additional content after deserializing an object. + </summary> + <value> + <c>true</c> if there will be a check for additional content after deserializing an object; otherwise, <c>false</c>. + </value> + </member> + <member name="T:Newtonsoft.Json.JsonTextReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.#ctor(System.IO.TextReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReader"/> class with the specified <see cref="T:System.IO.TextReader"/>. + </summary> + <param name="reader">The <c>TextReader</c> containing the XML data to read.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.DateTimeOffset"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.Close"> + <summary> + Changes the state to closed. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextReader.HasLineInfo"> + <summary> + Gets a value indicating whether the class can return line information. + </summary> + <returns> + <c>true</c> if LineNumber and LinePosition can be provided; otherwise, <c>false</c>. + </returns> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LineNumber"> + <summary> + Gets the current line number. + </summary> + <value> + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="P:Newtonsoft.Json.JsonTextReader.LinePosition"> + <summary> + Gets the current line position. + </summary> + <value> + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + </value> + </member> + <member name="T:Newtonsoft.Json.JsonTextWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.#ctor(System.IO.TextWriter)"> + <summary> + Creates an instance of the <c>JsonWriter</c> class using the specified <see cref="T:System.IO.TextWriter"/>. + </summary> + <param name="textWriter">The <c>TextWriter</c> to write to.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the specified end token. + </summary> + <param name="token">The end token to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String,System.Boolean)"> + <summary> + Writes the property name of a name/value pair on a JSON object. + </summary> + <param name="name">The name of the property.</param> + <param name="escape">A flag to indicate whether the text should be escaped when it is written as a JSON property name.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndent"> + <summary> + Writes indent characters. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValueDelimiter"> + <summary> + Writes the JSON value delimiter. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteIndentSpace"> + <summary> + Writes an indent space. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Single})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Nullable{System.Double})"> + <summary> + Writes a <see cref="T:System.Nullable`1"/> value. + </summary> + <param name="value">The <see cref="T:System.Nullable`1"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.JsonTextWriter.WriteWhitespace(System.String)"> + <summary> + Writes out the given white space. + </summary> + <param name="ws">The string of white space characters.</param> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.Indentation"> + <summary> + Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteChar"> + <summary> + Gets or sets which character to use to quote attribute values. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.IndentChar"> + <summary> + Gets or sets which character to use for indenting when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonTextWriter.QuoteName"> + <summary> + Gets or sets a value indicating whether object names will be surrounded with quotes. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonToken"> + <summary> + Specifies the type of Json token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.None"> + <summary> + This is returned by the <see cref="T:Newtonsoft.Json.JsonReader"/> if a <see cref="M:Newtonsoft.Json.JsonReader.Read"/> method has not been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartObject"> + <summary> + An object start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartArray"> + <summary> + An array start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.StartConstructor"> + <summary> + A constructor start token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.PropertyName"> + <summary> + An object property name. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Raw"> + <summary> + Raw JSON. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Integer"> + <summary> + An integer. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Float"> + <summary> + A float. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.String"> + <summary> + A string. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Boolean"> + <summary> + A boolean. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Null"> + <summary> + A null token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Undefined"> + <summary> + An undefined token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndObject"> + <summary> + An object end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndArray"> + <summary> + An array end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.EndConstructor"> + <summary> + A constructor end token. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Date"> + <summary> + A Date. + </summary> + </member> + <member name="F:Newtonsoft.Json.JsonToken.Bytes"> + <summary> + Byte data. + </summary> + </member> + <member name="T:Newtonsoft.Json.JsonValidatingReader"> + <summary> + Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonValidatingReader"/> class that + validates the content returned from the given <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from while validating.</param> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. + </returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.JsonValidatingReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="E:Newtonsoft.Json.JsonValidatingReader.ValidationEventHandler"> + <summary> + Sets an event handler for receiving schema validation errors. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Value"> + <summary> + Gets the text value of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Depth"> + <summary> + Gets the depth of the current token in the JSON document. + </summary> + <value>The depth of the current token in the JSON document.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Path"> + <summary> + Gets the path of the current JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.QuoteChar"> + <summary> + Gets the quotation mark character used to enclose the value of a string. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.TokenType"> + <summary> + Gets the type of the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.ValueType"> + <summary> + Gets the Common Language Runtime (CLR) type for the current JSON token. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Schema"> + <summary> + Gets or sets the schema. + </summary> + <value>The schema.</value> + </member> + <member name="P:Newtonsoft.Json.JsonValidatingReader.Reader"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.JsonReader"/> used to construct this <see cref="T:Newtonsoft.Json.JsonValidatingReader"/>. + </summary> + <value>The <see cref="T:Newtonsoft.Json.JsonReader"/> specified in the constructor.</value> + </member> + <member name="T:Newtonsoft.Json.JsonWriterException"> + <summary> + The exception thrown when an error occurs while reading Json text. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.JsonWriterException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.Extensions"> + <summary> + Contains the LINQ to JSON extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Ancestors``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the ancestors of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the ancestors of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Descendants``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of tokens that contains the descendants of every token in the source collection. + </summary> + <typeparam name="T">The type of the objects in source, constrained to <see cref="T:Newtonsoft.Json.Linq.JContainer"/>.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the descendants of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Properties(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JObject})"> + <summary> + Returns a collection of child properties of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the properties of every object in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of child values of every object in the source collection with the given key. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of child values of every object in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken},System.Object)"> + <summary> + Returns a collection of converted child values of every object in the source collection with the given key. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <param name="key">The token key.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection with the given key.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Values``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns a collection of converted child values of every object in the source collection. + </summary> + <typeparam name="U">The type to convert the values to.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``1(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Converts the value. + </summary> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Value``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Converts the value. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <typeparam name="U">The type to convert the value to.</typeparam> + <param name="value">A <see cref="T:Newtonsoft.Json.Linq.JToken"/> cast as a <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A converted value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of child tokens of every array in the source collection. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.Children``2(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns a collection of converted child tokens of every array in the source collection. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <typeparam name="U">The type to convert the values to.</typeparam> + <typeparam name="T">The source collection type.</typeparam> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> that contains the converted values of every node in the source collection.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable(System.Collections.Generic.IEnumerable{Newtonsoft.Json.Linq.JToken})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.Extensions.AsJEnumerable``1(System.Collections.Generic.IEnumerable{``0})"> + <summary> + Returns the input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>. + </summary> + <typeparam name="T">The source collection type.</typeparam> + <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the source collection.</param> + <returns>The input typed as <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/>.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.IJEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="P:Newtonsoft.Json.Linq.IJEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JArray"> + <summary> + Represents a JSON array. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text" /> + </example> + </member> + <member name="T:Newtonsoft.Json.Linq.JContainer"> + <summary> + Represents a token that can contain other tokens. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JToken"> + <summary> + Represents an abstract JSON token. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepEquals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Compares the values of two tokens, including the values of all descendant tokens. + </summary> + <param name="t1">The first <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="t2">The second <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns>true if the tokens are equal; otherwise false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddAfterSelf(System.Object)"> + <summary> + Adds the specified content immediately after this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added after this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AddBeforeSelf(System.Object)"> + <summary> + Adds the specified content immediately before this token. + </summary> + <param name="content">A content object that contains simple content or a collection of content objects to be added before this token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Ancestors"> + <summary> + Returns a collection of the ancestor tokens of this token. + </summary> + <returns>A collection of the ancestor tokens of this token.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.AfterSelf"> + <summary> + Returns a collection of the sibling tokens after this token, in document order. + </summary> + <returns>A collection of the sibling tokens after this tokens, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.BeforeSelf"> + <summary> + Returns a collection of the sibling tokens before this token, in document order. + </summary> + <returns>A collection of the sibling tokens before this token, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Value``1(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key converted to the specified type. + </summary> + <typeparam name="T">The type to convert the token to.</typeparam> + <param name="key">The token key.</param> + <returns>The converted token value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Children``1"> + <summary> + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + </summary> + <typeparam name="T">The type to filter the child tokens on.</typeparam> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns>A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Remove"> + <summary> + Removes this token from its parent. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Replace(Newtonsoft.Json.Linq.JToken)"> + <summary> + Replaces this token with the specified token. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString"> + <summary> + Returns the indented JSON for this token. + </summary> + <returns> + The indented JSON for this token. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToString(Newtonsoft.Json.Formatting,Newtonsoft.Json.JsonConverter[])"> + <summary> + Returns the JSON for this token using the given formatting and converters. + </summary> + <param name="formatting">Indicates how the output is formatted.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + <returns>The JSON for this token using the given formatting and converters.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Boolean"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Boolean"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTimeOffset"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTimeOffset"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Boolean}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTime}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.DateTimeOffset}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Decimal}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Double}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Char}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Int16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Int16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt16"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt16"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Char"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Char"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.SByte"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.SByte"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt16}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Byte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.SByte}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.DateTime"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.DateTime"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Int64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Single}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Decimal"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Decimal"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt32}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.UInt64}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Nullable`1"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Double"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Double"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Single"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Single"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.String"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.String"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt32"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt32"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.UInt64"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.UInt64"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Byte[]"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Byte[]"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Guid"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.Guid}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Guid"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.TimeSpan"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Nullable{System.TimeSpan}"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.TimeSpan"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Explicit(Newtonsoft.Json.Linq.JToken)~System.Uri"> + <summary> + Performs an explicit conversion from <see cref="T:Newtonsoft.Json.Linq.JToken"/> to <see cref="T:System.Uri"/>. + </summary> + <param name="value">The value.</param> + <returns>The result of the conversion.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Boolean)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Boolean"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTimeOffset)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTimeOffset"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Byte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.SByte)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.SByte"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.SByte})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Boolean})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTime})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.DateTimeOffset})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Decimal})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Double})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt16)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt16"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Int32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Int32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.DateTime)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.DateTime"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Single})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Decimal)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Decimal"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Int16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt16})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt32})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.UInt64})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Double)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Double"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Single)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Single"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.String)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.String"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt32)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt32"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.UInt64)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.UInt64"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Byte[])~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Byte[]"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Uri)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Uri"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.TimeSpan)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.TimeSpan"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.TimeSpan})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Guid)~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Guid"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.op_Implicit(System.Nullable{System.Guid})~Newtonsoft.Json.Linq.JToken"> + <summary> + Performs an implicit conversion from <see cref="T:System.Nullable`1"/> to <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="value">The value to create a <see cref="T:Newtonsoft.Json.Linq.JValue"/> from.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JValue"/> initialized with the specified value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.CreateReader"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonReader"/> for this token. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonReader"/> that can be used to read this token and its descendants.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from an object using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when reading the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the value of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject``1(Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <typeparam name="T">The object type that the token will be deserialized to.</typeparam> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ToObject(System.Type,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates the specified .NET type from the <see cref="T:Newtonsoft.Json.Linq.JToken"/> using the specified <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <param name="objectType">The object type that the token will be deserialized to.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used when creating the object.</param> + <returns>The new object created from the JSON value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.ReadFrom(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JToken"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">An <see cref="T:Newtonsoft.Json.JsonReader"/> positioned at the token to read into this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</param> + <returns> + An <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path or a null reference if no matching token is found.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.SelectToken(System.String,System.Boolean)"> + <summary> + Selects the token that matches the object path. + </summary> + <param name="path"> + The object path from the current <see cref="T:Newtonsoft.Json.Linq.JToken"/> to the <see cref="T:Newtonsoft.Json.Linq.JToken"/> + to be returned. This must be a string of property names or array indexes separated + by periods, such as <code>Tables[0].DefaultView[0].Price</code> in C# or + <code>Tables(0).DefaultView(0).Price</code> in Visual Basic. + </param> + <param name="errorWhenNoMatch">A flag to indicate whether an error should be thrown if no token is found.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that matches the object path.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.System#Dynamic#IDynamicMetaObjectProvider#GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JToken.DeepClone"> + <summary> + Creates a new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. All child tokens are recursively cloned. + </summary> + <returns>A new instance of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.EqualityComparer"> + <summary> + Gets a comparer that can compare two tokens for value equality. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"/> that can compare two nodes for value equality.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Parent"> + <summary> + Gets or sets the parent. + </summary> + <value>The parent.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Root"> + <summary> + Gets the root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The root <see cref="T:Newtonsoft.Json.Linq.JToken"/> of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Next"> + <summary> + Gets the next sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the next sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Previous"> + <summary> + Gets the previous sibling token of this node. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> that contains the previous sibling token.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Path"> + <summary> + Gets the path of the JSON token. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.First"> + <summary> + Get the first child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JToken.Last"> + <summary> + Get the last child token of this token. + </summary> + <value>A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnAddingNew(System.ComponentModel.AddingNewEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.AddingNew"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.AddingNewEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnListChanged(System.ComponentModel.ListChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.ListChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.ComponentModel.ListChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"/> event. + </summary> + <param name="e">The <see cref="T:System.Collections.Specialized.NotifyCollectionChangedEventArgs"/> instance containing the event data.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Children"> + <summary> + Returns a collection of the child tokens of this token, in document order. + </summary> + <returns> + An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the child tokens of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Values``1"> + <summary> + Returns a collection of the child values of this token, in document order. + </summary> + <typeparam name="T">The type to convert the values to.</typeparam> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the child values of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>, in document order. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Descendants"> + <summary> + Returns a collection of the descendant tokens for this token in document order. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> containing the descendant tokens of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.Add(System.Object)"> + <summary> + Adds the specified content as children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.AddFirst(System.Object)"> + <summary> + Adds the specified content as the first children of this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="content">The content to be added.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.CreateWriter"> + <summary> + Creates an <see cref="T:Newtonsoft.Json.JsonWriter"/> that can be used to add tokens to the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.JsonWriter"/> that is ready to have content written to it.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.ReplaceAll(System.Object)"> + <summary> + Replaces the children nodes of this token with the specified content. + </summary> + <param name="content">The content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JContainer.RemoveAll"> + <summary> + Removes the child nodes from this token. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.ListChanged"> + <summary> + Occurs when the list changes or an item in the list changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.AddingNew"> + <summary> + Occurs before an item is added to the collection. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JContainer.CollectionChanged"> + <summary> + Occurs when the items list of the collection has changed, or the collection is reset. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.First"> + <summary> + Get the first child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the first child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Last"> + <summary> + Get the last child token of this token. + </summary> + <value> + A <see cref="T:Newtonsoft.Json.Linq.JToken"/> containing the last child token of the <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JContainer.Count"> + <summary> + Gets the count of child JSON tokens. + </summary> + <value>The count of child JSON tokens</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(Newtonsoft.Json.Linq.JArray)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class from another <see cref="T:Newtonsoft.Json.Linq.JArray"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JArray"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JArray"/> class with the specified content. + </summary> + <param name="content">The contents of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParseArray" title="Parsing a JSON Array from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.IndexOf(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <returns> + The index of <paramref name="item"/> if found in the list; otherwise, -1. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Insert(System.Int32,Newtonsoft.Json.Linq.JToken)"> + <summary> + Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index. + </summary> + <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param> + <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.RemoveAt(System.Int32)"> + <summary> + Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index. + </summary> + <param name="index">The zero-based index of the item to remove.</param> + <exception cref="T:System.ArgumentOutOfRangeException"> + <paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.</exception> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Add(Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Clear"> + <summary> + Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only. </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Contains(Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value. + </summary> + <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.CopyTo(Newtonsoft.Json.Linq.JToken[],System.Int32)"> + <summary> + Copies to. + </summary> + <param name="array">The array.</param> + <param name="arrayIndex">Index of the array.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JArray.Remove(Newtonsoft.Json.Linq.JToken)"> + <summary> + Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>. + </summary> + <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param> + <returns> + true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>. + </returns> + <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.Item(System.Int32)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> at the specified index. + </summary> + <value></value> + </member> + <member name="P:Newtonsoft.Json.Linq.JArray.IsReadOnly"> + <summary> + Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. + </summary> + <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JConstructor"> + <summary> + Represents a JSON constructor. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(Newtonsoft.Json.Linq.JConstructor)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class from another <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name and content. + </summary> + <param name="name">The constructor name.</param> + <param name="content">The contents of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> class with the specified name. + </summary> + <param name="name">The constructor name.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JConstructor.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JConstructor"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JConstructor"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Name"> + <summary> + Gets or sets the name of this constructor. + </summary> + <value>The constructor name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JConstructor.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JEnumerable`1"> + <summary> + Represents a collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + <typeparam name="T">The type of token</typeparam> + </member> + <member name="F:Newtonsoft.Json.Linq.JEnumerable`1.Empty"> + <summary> + An empty collection of <see cref="T:Newtonsoft.Json.Linq.JToken"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.#ctor(System.Collections.Generic.IEnumerable{`0})"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> struct. + </summary> + <param name="enumerable">The enumerable.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.System#Collections#IEnumerable#GetEnumerator"> + <summary> + Returns an enumerator that iterates through a collection. + </summary> + <returns> + An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to this instance. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with this instance.</param> + <returns> + <c>true</c> if the specified <see cref="T:System.Object"/> is equal to this instance; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JEnumerable`1.GetHashCode"> + <summary> + Returns a hash code for this instance. + </summary> + <returns> + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JEnumerable`1.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.IJEnumerable`1"/> with the specified key. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JObject"> + <summary> + Represents a JSON object. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text" /> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(Newtonsoft.Json.Linq.JObject)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class from another <see cref="T:Newtonsoft.Json.Linq.JObject"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JObject"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JObject"/> class with the specified content. + </summary> + <param name="content">The contents of the object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Properties"> + <summary> + Gets an <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties. + </summary> + <returns>An <see cref="T:System.Collections.Generic.IEnumerable`1"/> of this object's properties.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Property(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Linq.JProperty"/> the specified name. + </summary> + <param name="name">The property name.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> with the specified name or null.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.PropertyValues"> + <summary> + Gets an <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values. + </summary> + <returns>An <see cref="T:Newtonsoft.Json.Linq.JEnumerable`1"/> of this object's property values.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from a string that contains JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> populated from the string that contains JSON.</returns> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\LinqToJsonTests.cs" region="LinqToJsonCreateParse" title="Parsing a JSON Object from Text"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JObject"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JObject"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JObject"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.FromObject(System.Object,Newtonsoft.Json.JsonSerializer)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JArray"/> from an object. + </summary> + <param name="o">The object that will be used to create <see cref="T:Newtonsoft.Json.Linq.JArray"/>.</param> + <param name="jsonSerializer">The <see cref="T:Newtonsoft.Json.JsonSerializer"/> that will be used to read the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JArray"/> with the values of the specified object</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetValue(System.String,System.StringComparison)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,System.StringComparison,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries to get the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the <see cref="T:System.StringComparison"/> will be used to match a property. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <param name="comparison">One of the enumeration values that specifies how the strings will be compared.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Add(System.String,Newtonsoft.Json.Linq.JToken)"> + <summary> + Adds the specified property name. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.Remove(System.String)"> + <summary> + Removes the property with the specified name. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>true if item was successfully removed; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.TryGetValue(System.String,Newtonsoft.Json.Linq.JToken@)"> + <summary> + Tries the get value. + </summary> + <param name="propertyName">Name of the property.</param> + <param name="value">The value.</param> + <returns>true if a value was successfully retrieved; otherwise, false.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetEnumerator"> + <summary> + Returns an enumerator that iterates through the collection. + </summary> + <returns> + A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanged(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.OnPropertyChanging(System.String)"> + <summary> + Raises the <see cref="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"/> event with the provided arguments. + </summary> + <param name="propertyName">Name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties"> + <summary> + Returns the properties for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetProperties(System.Attribute[])"> + <summary> + Returns the properties for this instance of a component using the attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptorCollection"/> that represents the filtered properties for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetAttributes"> + <summary> + Returns a collection of custom attributes for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.AttributeCollection"/> containing the attributes for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetClassName"> + <summary> + Returns the class name of this instance of a component. + </summary> + <returns> + The class name of the object, or null if the class does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetComponentName"> + <summary> + Returns the name of this instance of a component. + </summary> + <returns> + The name of the object, or null if the object does not have a name. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetConverter"> + <summary> + Returns a type converter for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.TypeConverter"/> that is the converter for this object, or null if there is no <see cref="T:System.ComponentModel.TypeConverter"/> for this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultEvent"> + <summary> + Returns the default event for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptor"/> that represents the default event for this object, or null if this object does not have events. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetDefaultProperty"> + <summary> + Returns the default property for this instance of a component. + </summary> + <returns> + A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the default property for this object, or null if this object does not have properties. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEditor(System.Type)"> + <summary> + Returns an editor of the specified type for this instance of a component. + </summary> + <param name="editorBaseType">A <see cref="T:System.Type"/> that represents the editor for this object.</param> + <returns> + An <see cref="T:System.Object"/> of the specified type that is the editor for this object, or null if the editor cannot be found. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents(System.Attribute[])"> + <summary> + Returns the events for this instance of a component using the specified attribute array as a filter. + </summary> + <param name="attributes">An array of type <see cref="T:System.Attribute"/> that is used as a filter.</param> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the filtered events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetEvents"> + <summary> + Returns the events for this instance of a component. + </summary> + <returns> + An <see cref="T:System.ComponentModel.EventDescriptorCollection"/> that represents the events for this component instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.System#ComponentModel#ICustomTypeDescriptor#GetPropertyOwner(System.ComponentModel.PropertyDescriptor)"> + <summary> + Returns an object that contains the property described by the specified property descriptor. + </summary> + <param name="pd">A <see cref="T:System.ComponentModel.PropertyDescriptor"/> that represents the property whose owner is to be found.</param> + <returns> + An <see cref="T:System.Object"/> that represents the owner of the specified property. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JObject.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanged"> + <summary> + Occurs when a property value changes. + </summary> + </member> + <member name="E:Newtonsoft.Json.Linq.JObject.PropertyChanging"> + <summary> + Occurs when a property value is changing. + </summary> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.Object)"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified key.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JObject.Item(System.String)"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Linq.JToken"/> with the specified property name. + </summary> + <value></value> + </member> + <member name="T:Newtonsoft.Json.Linq.JProperty"> + <summary> + Represents a JSON property. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(Newtonsoft.Json.Linq.JProperty)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class from another <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object[])"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.#ctor(System.String,System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/> class. + </summary> + <param name="name">The property name.</param> + <param name="content">The property content.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JProperty.Load(Newtonsoft.Json.JsonReader)"> + <summary> + Loads an <see cref="T:Newtonsoft.Json.Linq.JProperty"/> from a <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">A <see cref="T:Newtonsoft.Json.JsonReader"/> that will be read for the content of the <see cref="T:Newtonsoft.Json.Linq.JProperty"/>.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JProperty"/> that contains the JSON that was read from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.</returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.ChildrenTokens"> + <summary> + Gets the container's children tokens. + </summary> + <value>The container's children tokens.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Name"> + <summary> + Gets the property name. + </summary> + <value>The property name.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Value"> + <summary> + Gets or sets the property value. + </summary> + <value>The property value.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JProperty.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="T:Newtonsoft.Json.Linq.JPropertyDescriptor"> + <summary> + Represents a view of a <see cref="T:Newtonsoft.Json.Linq.JProperty"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.#ctor(System.String,System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JPropertyDescriptor"/> class. + </summary> + <param name="name">The name.</param> + <param name="propertyType">Type of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.CanResetValue(System.Object)"> + <summary> + When overridden in a derived class, returns whether resetting an object changes its value. + </summary> + <returns> + true if resetting the component changes its value; otherwise, false. + </returns> + <param name="component">The component to test for reset capability. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.GetValue(System.Object)"> + <summary> + When overridden in a derived class, gets the current value of the property on a component. + </summary> + <returns> + The value of a property for a given component. + </returns> + <param name="component">The component with the property for which to retrieve the value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ResetValue(System.Object)"> + <summary> + When overridden in a derived class, resets the value for this property of the component to the default value. + </summary> + <param name="component">The component with the property value that is to be reset to the default value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.SetValue(System.Object,System.Object)"> + <summary> + When overridden in a derived class, sets the value of the component to a different value. + </summary> + <param name="component">The component with the property value that is to be set. + </param><param name="value">The new value. + </param> + </member> + <member name="M:Newtonsoft.Json.Linq.JPropertyDescriptor.ShouldSerializeValue(System.Object)"> + <summary> + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + </summary> + <returns> + true if the property should be persisted; otherwise, false. + </returns> + <param name="component">The component with the property to be examined for persistence. + </param> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.ComponentType"> + <summary> + When overridden in a derived class, gets the type of the component this property is bound to. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of component this property is bound to. When the <see cref="M:System.ComponentModel.PropertyDescriptor.GetValue(System.Object)"/> or <see cref="M:System.ComponentModel.PropertyDescriptor.SetValue(System.Object,System.Object)"/> methods are invoked, the object specified might be an instance of this type. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.IsReadOnly"> + <summary> + When overridden in a derived class, gets a value indicating whether this property is read-only. + </summary> + <returns> + true if the property is read-only; otherwise, false. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.PropertyType"> + <summary> + When overridden in a derived class, gets the type of the property. + </summary> + <returns> + A <see cref="T:System.Type"/> that represents the type of the property. + </returns> + </member> + <member name="P:Newtonsoft.Json.Linq.JPropertyDescriptor.NameHashCode"> + <summary> + Gets the hash code for the name of the member. + </summary> + <value></value> + <returns> + The hash code for the name of the member. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JRaw"> + <summary> + Represents a raw JSON string. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JValue"> + <summary> + Represents a value in JSON (string, integer, date, etc). + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(Newtonsoft.Json.Linq.JValue)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class from another <see cref="T:Newtonsoft.Json.Linq.JValue"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JValue"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Int64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Char)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.UInt64)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Double)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Single)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.DateTime)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Guid)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Uri)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.TimeSpan)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JValue"/> class with the given value. + </summary> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateComment(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> comment with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CreateString(System.String)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value. + </summary> + <param name="value">The value.</param> + <returns>A <see cref="T:Newtonsoft.Json.Linq.JValue"/> string with the given value.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.JsonConverter[])"> + <summary> + Writes this token to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="converters">A collection of <see cref="T:Newtonsoft.Json.JsonConverter"/> which will be used when writing the token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(Newtonsoft.Json.Linq.JValue)"> + <summary> + Indicates whether the current object is equal to another object of the same type. + </summary> + <returns> + true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false. + </returns> + <param name="other">An object to compare with this object.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.Equals(System.Object)"> + <summary> + Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>. + </summary> + <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>.</param> + <returns> + true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false. + </returns> + <exception cref="T:System.NullReferenceException"> + The <paramref name="obj"/> parameter is null. + </exception> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetHashCode"> + <summary> + Serves as a hash function for a particular type. + </summary> + <returns> + A hash code for the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.ToString(System.String,System.IFormatProvider)"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <param name="format">The format.</param> + <param name="formatProvider">The format provider.</param> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.GetMetaObject(System.Linq.Expressions.Expression)"> + <summary> + Returns the <see cref="T:System.Dynamic.DynamicMetaObject"/> responsible for binding operations performed on this object. + </summary> + <param name="parameter">The expression tree representation of the runtime value.</param> + <returns> + The <see cref="T:System.Dynamic.DynamicMetaObject"/> to bind this object. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JValue.CompareTo(Newtonsoft.Json.Linq.JValue)"> + <summary> + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + </summary> + <param name="obj">An object to compare with this instance.</param> + <returns> + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than <paramref name="obj"/>. + Zero + This instance is equal to <paramref name="obj"/>. + Greater than zero + This instance is greater than <paramref name="obj"/>. + </returns> + <exception cref="T:System.ArgumentException"> + <paramref name="obj"/> is not the same type as this instance. + </exception> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.HasValues"> + <summary> + Gets a value indicating whether this token has child tokens. + </summary> + <value> + <c>true</c> if this token has child values; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Type"> + <summary> + Gets the node type for this <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Linq.JValue.Value"> + <summary> + Gets or sets the underlying token value. + </summary> + <value>The underlying token value.</value> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(Newtonsoft.Json.Linq.JRaw)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class from another <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object. + </summary> + <param name="other">A <see cref="T:Newtonsoft.Json.Linq.JRaw"/> object to copy from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.#ctor(System.Object)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JRaw"/> class. + </summary> + <param name="rawJson">The raw json.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JRaw.Create(Newtonsoft.Json.JsonReader)"> + <summary> + Creates an instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token. + </summary> + <param name="reader">The reader.</param> + <returns>An instance of <see cref="T:Newtonsoft.Json.Linq.JRaw"/> with the content of the reader's current token.</returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenEqualityComparer"> + <summary> + Compares tokens to determine whether they are equal. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.Equals(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Linq.JToken)"> + <summary> + Determines whether the specified objects are equal. + </summary> + <param name="x">The first object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <param name="y">The second object of type <see cref="T:Newtonsoft.Json.Linq.JToken"/> to compare.</param> + <returns> + true if the specified objects are equal; otherwise, false. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenEqualityComparer.GetHashCode(Newtonsoft.Json.Linq.JToken)"> + <summary> + Returns a hash code for the specified object. + </summary> + <param name="obj">The <see cref="T:System.Object"/> for which a hash code is to be returned.</param> + <returns>A hash code for the specified object.</returns> + <exception cref="T:System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenReader"> + <summary> + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.#ctor(Newtonsoft.Json.Linq.JToken)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenReader"/> class. + </summary> + <param name="token">The token to read from.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsBytes"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:Byte[]"/>. + </summary> + <returns> + A <see cref="T:Byte[]"/> or a null reference if the next JSON token is null. This method will return <c>null</c> at the end of an array. + </returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDecimal"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsInt32"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsString"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.String"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTime"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset"> + <summary> + Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>. + </summary> + <returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenReader.Read"> + <summary> + Reads the next JSON token from the stream. + </summary> + <returns> + true if the next token was read successfully; false if there are no more tokens to read. + </returns> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenType"> + <summary> + Specifies the type of token. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.None"> + <summary> + No token type has been set. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Object"> + <summary> + A JSON object. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Array"> + <summary> + A JSON array. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Constructor"> + <summary> + A JSON constructor. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Property"> + <summary> + A JSON object property. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Comment"> + <summary> + A comment. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Integer"> + <summary> + An integer value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Float"> + <summary> + A float value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.String"> + <summary> + A string value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Boolean"> + <summary> + A boolean value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Null"> + <summary> + A null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Undefined"> + <summary> + An undefined value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Date"> + <summary> + A date value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Raw"> + <summary> + A raw JSON value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Bytes"> + <summary> + A collection of bytes value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Guid"> + <summary> + A Guid value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.Uri"> + <summary> + A Uri value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Linq.JTokenType.TimeSpan"> + <summary> + A TimeSpan value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Linq.JTokenWriter"> + <summary> + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor(Newtonsoft.Json.Linq.JContainer)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class writing to the given <see cref="T:Newtonsoft.Json.Linq.JContainer"/>. + </summary> + <param name="container">The container being written to.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Linq.JTokenWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Flush"> + <summary> + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.Close"> + <summary> + Closes this stream and the underlying stream. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject"> + <summary> + Writes the beginning of a Json object. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray"> + <summary> + Writes the beginning of a Json array. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)"> + <summary> + Writes the start of a constructor with the given name. + </summary> + <param name="name">The name of the constructor.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteEnd(Newtonsoft.Json.JsonToken)"> + <summary> + Writes the end. + </summary> + <param name="token">The token.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)"> + <summary> + Writes the property name of a name/value pair on a Json object. + </summary> + <param name="name">The name of the property.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Object)"> + <summary> + Writes a <see cref="T:System.Object"/> value. + An error will raised if the value cannot be written as a single JSON token. + </summary> + <param name="value">The <see cref="T:System.Object"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteNull"> + <summary> + Writes a null value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteUndefined"> + <summary> + Writes an undefined value. + </summary> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteRaw(System.String)"> + <summary> + Writes raw JSON. + </summary> + <param name="json">The raw JSON to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteComment(System.String)"> + <summary> + Writes out a comment <code>/*...*/</code> containing the specified text. + </summary> + <param name="text">Text to place inside the comment.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.String)"> + <summary> + Writes a <see cref="T:System.String"/> value. + </summary> + <param name="value">The <see cref="T:System.String"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int32)"> + <summary> + Writes a <see cref="T:System.Int32"/> value. + </summary> + <param name="value">The <see cref="T:System.Int32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt32)"> + <summary> + Writes a <see cref="T:System.UInt32"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt32"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int64)"> + <summary> + Writes a <see cref="T:System.Int64"/> value. + </summary> + <param name="value">The <see cref="T:System.Int64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt64)"> + <summary> + Writes a <see cref="T:System.UInt64"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt64"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Single)"> + <summary> + Writes a <see cref="T:System.Single"/> value. + </summary> + <param name="value">The <see cref="T:System.Single"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Double)"> + <summary> + Writes a <see cref="T:System.Double"/> value. + </summary> + <param name="value">The <see cref="T:System.Double"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Boolean)"> + <summary> + Writes a <see cref="T:System.Boolean"/> value. + </summary> + <param name="value">The <see cref="T:System.Boolean"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Int16)"> + <summary> + Writes a <see cref="T:System.Int16"/> value. + </summary> + <param name="value">The <see cref="T:System.Int16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.UInt16)"> + <summary> + Writes a <see cref="T:System.UInt16"/> value. + </summary> + <param name="value">The <see cref="T:System.UInt16"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Char)"> + <summary> + Writes a <see cref="T:System.Char"/> value. + </summary> + <param name="value">The <see cref="T:System.Char"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte)"> + <summary> + Writes a <see cref="T:System.Byte"/> value. + </summary> + <param name="value">The <see cref="T:System.Byte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.SByte)"> + <summary> + Writes a <see cref="T:System.SByte"/> value. + </summary> + <param name="value">The <see cref="T:System.SByte"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Decimal)"> + <summary> + Writes a <see cref="T:System.Decimal"/> value. + </summary> + <param name="value">The <see cref="T:System.Decimal"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTime)"> + <summary> + Writes a <see cref="T:System.DateTime"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTime"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.DateTimeOffset)"> + <summary> + Writes a <see cref="T:System.DateTimeOffset"/> value. + </summary> + <param name="value">The <see cref="T:System.DateTimeOffset"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Byte[])"> + <summary> + Writes a <see cref="T:Byte[]"/> value. + </summary> + <param name="value">The <see cref="T:Byte[]"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.TimeSpan)"> + <summary> + Writes a <see cref="T:System.TimeSpan"/> value. + </summary> + <param name="value">The <see cref="T:System.TimeSpan"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Guid)"> + <summary> + Writes a <see cref="T:System.Guid"/> value. + </summary> + <param name="value">The <see cref="T:System.Guid"/> value to write.</param> + </member> + <member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteValue(System.Uri)"> + <summary> + Writes a <see cref="T:System.Uri"/> value. + </summary> + <param name="value">The <see cref="T:System.Uri"/> value to write.</param> + </member> + <member name="P:Newtonsoft.Json.Linq.JTokenWriter.Token"> + <summary> + Gets the token being writen. + </summary> + <value>The token being writen.</value> + </member> + <member name="T:Newtonsoft.Json.MemberSerialization"> + <summary> + Specifies the member serialization options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptOut"> + <summary> + All public members are serialized by default. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This is the default member serialization mode. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.OptIn"> + <summary> + Only members must be marked with <see cref="T:Newtonsoft.Json.JsonPropertyAttribute"/> or <see cref="T:System.Runtime.Serialization.DataMemberAttribute"/> are serialized. + This member serialization mode can also be set by marking the class with <see cref="T:System.Runtime.Serialization.DataContractAttribute"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MemberSerialization.Fields"> + <summary> + All public and private fields are serialized. Members can be excluded using <see cref="T:Newtonsoft.Json.JsonIgnoreAttribute"/> or <see cref="T:System.NonSerializedAttribute"/>. + This member serialization mode can also be set by marking the class with <see cref="T:System.SerializableAttribute"/> + and setting IgnoreSerializableAttribute on <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> to false. + </summary> + </member> + <member name="T:Newtonsoft.Json.MissingMemberHandling"> + <summary> + Specifies missing member handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Ignore"> + <summary> + Ignore a missing member and do not attempt to deserialize it. + </summary> + </member> + <member name="F:Newtonsoft.Json.MissingMemberHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a missing member is encountered during deserialization. + </summary> + </member> + <member name="T:Newtonsoft.Json.NullValueHandling"> + <summary> + Specifies null value handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingObject" title="NullValueHandling Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeNullValueHandlingExample" title="NullValueHandling Ignore Example"/> + </example> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Include"> + <summary> + Include null values when serializing and deserializing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.NullValueHandling.Ignore"> + <summary> + Ignore null values when serializing and deserializing objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.ObjectCreationHandling"> + <summary> + Specifies how object creation is handled by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Auto"> + <summary> + Reuse existing objects, create new objects when needed. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Reuse"> + <summary> + Only reuse existing objects. + </summary> + </member> + <member name="F:Newtonsoft.Json.ObjectCreationHandling.Replace"> + <summary> + Always create new objects. + </summary> + </member> + <member name="T:Newtonsoft.Json.PreserveReferencesHandling"> + <summary> + Specifies reference handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="PreservingObjectReferencesOn" title="Preserve Object References"/> + </example> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.None"> + <summary> + Do not preserve references when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Objects"> + <summary> + Preserve references when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.Arrays"> + <summary> + Preserve references when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.PreserveReferencesHandling.All"> + <summary> + Preserve references when serializing. + </summary> + </member> + <member name="T:Newtonsoft.Json.ReferenceLoopHandling"> + <summary> + Specifies reference loop handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Error"> + <summary> + Throw a <see cref="T:Newtonsoft.Json.JsonSerializationException"/> when a loop is encountered. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Ignore"> + <summary> + Ignore loop references and do not serialize. + </summary> + </member> + <member name="F:Newtonsoft.Json.ReferenceLoopHandling.Serialize"> + <summary> + Serialize loop references. + </summary> + </member> + <member name="T:Newtonsoft.Json.Required"> + <summary> + Indicating whether a property is required. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Default"> + <summary> + The property is not required. The default state. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.AllowNull"> + <summary> + The property must be defined in JSON but can be a null value. + </summary> + </member> + <member name="F:Newtonsoft.Json.Required.Always"> + <summary> + The property must be defined in JSON and cannot be a null value. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.Extensions"> + <summary> + Contains the JSON schema extension methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)"> + <summary> + Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="errorMessages">When this method returns, contains any error messages generated while validating. </param> + <returns> + <c>true</c> if the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)"> + <summary> + Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>. + </summary> + <param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param> + <param name="schema">The schema to test with.</param> + <param name="validationEventHandler">The validation event handler.</param> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchema"> + <summary> + An in-memory representation of a JSON Schema. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Read(Newtonsoft.Json.JsonReader,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Reads a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified <see cref="T:Newtonsoft.Json.JsonReader"/>. + </summary> + <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the JSON Schema to read.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> to use when resolving schema references.</param> + <returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> object representing the JSON Schema.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String)"> + <summary> + Load a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a string that contains schema JSON. + </summary> + <param name="json">A <see cref="T:System.String"/> that contains JSON.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.Parse(System.String,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Parses the specified json. + </summary> + <param name="json">The json.</param> + <param name="resolver">The resolver.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> populated from the string that contains JSON.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.WriteTo(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Writes this schema to a <see cref="T:Newtonsoft.Json.JsonWriter"/> using the specified <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/>. + </summary> + <param name="writer">A <see cref="T:Newtonsoft.Json.JsonWriter"/> into which this method will write.</param> + <param name="resolver">The resolver used.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchema.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </summary> + <returns> + A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>. + </returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Id"> + <summary> + Gets or sets the id. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Title"> + <summary> + Gets or sets the title. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Required"> + <summary> + Gets or sets whether the object is required. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ReadOnly"> + <summary> + Gets or sets whether the object is read only. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Hidden"> + <summary> + Gets or sets whether the object is visible to users. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Transient"> + <summary> + Gets or sets whether the object is transient. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Description"> + <summary> + Gets or sets the description of the object. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Type"> + <summary> + Gets or sets the types of values allowed by the object. + </summary> + <value>The type.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Pattern"> + <summary> + Gets or sets the pattern. + </summary> + <value>The pattern.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumLength"> + <summary> + Gets or sets the minimum length. + </summary> + <value>The minimum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumLength"> + <summary> + Gets or sets the maximum length. + </summary> + <value>The maximum length.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.DivisibleBy"> + <summary> + Gets or sets a number that the value should be divisble by. + </summary> + <value>A number that the value should be divisble by.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Minimum"> + <summary> + Gets or sets the minimum. + </summary> + <value>The minimum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Maximum"> + <summary> + Gets or sets the maximum. + </summary> + <value>The maximum.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMinimum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "minimum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.ExclusiveMaximum"> + <summary> + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + </summary> + <value>A flag indicating whether the value can not equal the number defined by the "maximum" attribute.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MinimumItems"> + <summary> + Gets or sets the minimum number of items. + </summary> + <value>The minimum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.MaximumItems"> + <summary> + Gets or sets the maximum number of items. + </summary> + <value>The maximum number of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Items"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PositionalItemsValidation"> + <summary> + Gets or sets a value indicating whether items in an array are validated using the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> instance at their array position from <see cref="P:Newtonsoft.Json.Schema.JsonSchema.Items"/>. + </summary> + <value> + <c>true</c> if items are validated using their array position; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalItems"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional items.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalItems"> + <summary> + Gets or sets a value indicating whether additional items are allowed. + </summary> + <value> + <c>true</c> if additional items are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.UniqueItems"> + <summary> + Gets or sets whether the array items must be unique. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Properties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AdditionalProperties"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of additional properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.PatternProperties"> + <summary> + Gets or sets the pattern properties. + </summary> + <value>The pattern properties.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.AllowAdditionalProperties"> + <summary> + Gets or sets a value indicating whether additional properties are allowed. + </summary> + <value> + <c>true</c> if additional properties are allowed; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Requires"> + <summary> + Gets or sets the required property if this property is present. + </summary> + <value>The required property if this property is present.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Enum"> + <summary> + Gets or sets the a collection of valid enum values allowed. + </summary> + <value>A collection of valid enum values allowed.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Disallow"> + <summary> + Gets or sets disallowed types. + </summary> + <value>The disallow types.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Default"> + <summary> + Gets or sets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Extends"> + <summary> + Gets or sets the collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends. + </summary> + <value>The collection of <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> that this schema extends.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchema.Format"> + <summary> + Gets or sets the format. + </summary> + <value>The format.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaException"> + <summary> + Returns detailed information about the schema exception. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.String,System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class + with a specified error message and a reference to the inner exception that is the cause of this exception. + </summary> + <param name="message">The error message that explains the reason for the exception.</param> + <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class. + </summary> + <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param> + <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param> + <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception> + <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LineNumber"> + <summary> + Gets the line number indicating where the error occurred. + </summary> + <value>The line number indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.LinePosition"> + <summary> + Gets the line position indicating where the error occurred. + </summary> + <value>The line position indicating where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaException.Path"> + <summary> + Gets the path to the JSON where the error occurred. + </summary> + <value>The path to the JSON where the error occurred.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"> + <summary> + Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type,Newtonsoft.Json.Schema.JsonSchemaResolver,System.Boolean)"> + <summary> + Generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from the specified type. + </summary> + <param name="type">The type to generate a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from.</param> + <param name="resolver">The <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> used to resolve schema references.</param> + <param name="rootSchemaNullable">Specify whether the generated root <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> will be nullable.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> generated from the specified type.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.UndefinedSchemaIdHandling"> + <summary> + Gets or sets how undefined schemas are handled by the serializer. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaGenerator.ContractResolver"> + <summary> + Gets or sets the contract resolver. + </summary> + <value>The contract resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver"> + <summary> + Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.GetSchema(System.String)"> + <summary> + Gets a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference. + </summary> + <param name="reference">The id.</param> + <returns>A <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> for the specified reference.</returns> + </member> + <member name="P:Newtonsoft.Json.Schema.JsonSchemaResolver.LoadedSchemas"> + <summary> + Gets or sets the loaded schemas. + </summary> + <value>The loaded schemas.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.JsonSchemaType"> + <summary> + The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None"> + <summary> + No type specified. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.String"> + <summary> + String type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Float"> + <summary> + Float type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Integer"> + <summary> + Integer type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Boolean"> + <summary> + Boolean type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Object"> + <summary> + Object type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Array"> + <summary> + Array type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Null"> + <summary> + Null type. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.JsonSchemaType.Any"> + <summary> + Any type. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling"> + <summary> + Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None"> + <summary> + Do not infer a schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseTypeName"> + <summary> + Use the .NET type name as the schema Id. + </summary> + </member> + <member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.UseAssemblyQualifiedName"> + <summary> + Use the assembly qualified .NET type name as the schema Id. + </summary> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventArgs"> + <summary> + Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> associated with the validation error. + </summary> + <value>The JsonSchemaException associated with the validation error.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Path"> + <summary> + Gets the path of the JSON location where the validation error occurred. + </summary> + <value>The path of the JSON location where the validation error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Message"> + <summary> + Gets the text description corresponding to the validation error. + </summary> + <value>The text description.</value> + </member> + <member name="T:Newtonsoft.Json.Schema.ValidationEventHandler"> + <summary> + Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"> + <summary> + Resolves member mappings for a type, camel casing property names. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IContractResolver"> + <summary> + Used by <see cref="T:Newtonsoft.Json.JsonSerializer"/> to resolves a <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for a given <see cref="T:System.Type"/>. + </summary> + <example> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverObject" title="IContractResolver Class"/> + <code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ReducingSerializedJsonSizeContractResolverExample" title="IContractResolver Example"/> + </example> + </member> + <member name="M:Newtonsoft.Json.Serialization.IContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.#ctor(System.Boolean)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> class. + </summary> + <param name="shareCache"> + If set to <c>true</c> the <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse <see cref="T:Newtonsoft.Json.Serialization.DefaultContractResolver"/> instances with the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type)"> + <summary> + Resolves the contract for a given type. + </summary> + <param name="type">The type to resolve a contract for.</param> + <returns>The contract for a given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(System.Type)"> + <summary> + Gets the serializable members for the type. + </summary> + <param name="objectType">The type to get serializable members for.</param> + <returns>The serializable members for the type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(System.Reflection.ConstructorInfo,Newtonsoft.Json.Serialization.JsonPropertyCollection)"> + <summary> + Creates the constructor parameters. + </summary> + <param name="constructor">The constructor to create properties for.</param> + <param name="memberProperties">The type's member properties.</param> + <returns>Properties for the given <see cref="T:System.Reflection.ConstructorInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePropertyFromConstructorParameter(Newtonsoft.Json.Serialization.JsonProperty,System.Reflection.ParameterInfo)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>. + </summary> + <param name="matchingMemberProperty">The matching member property.</param> + <param name="parameterInfo">The constructor parameter.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.ParameterInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContractConverter(System.Type)"> + <summary> + Resolves the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for the contract. + </summary> + <param name="objectType">Type of the object.</param> + <returns>The contract's default <see cref="T:Newtonsoft.Json.JsonConverter"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDictionaryContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateArrayContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreatePrimitiveContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateLinqContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateISerializableContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateDynamicContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateStringContract(System.Type)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type)"> + <summary> + Determines which contract type is created for the given type. + </summary> + <param name="objectType">Type of the object.</param> + <returns>A <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/> for the given type.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>. + </summary> + <param name="type">The type to create properties for.</param> + /// <param name="memberSerialization">The member serialization mode for the type.</param> + <returns>Properties for the given <see cref="T:Newtonsoft.Json.Serialization.JsonContract"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateMemberValueProvider(System.Reflection.MemberInfo)"> + <summary> + Creates the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member. + </summary> + <param name="member">The member.</param> + <returns>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> used by the serializer to get and set values from a member.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(System.Reflection.MemberInfo,Newtonsoft.Json.MemberSerialization)"> + <summary> + Creates a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>. + </summary> + <param name="memberSerialization">The member's parent <see cref="T:Newtonsoft.Json.MemberSerialization"/>.</param> + <param name="member">The member to create a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for.</param> + <returns>A created <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> for the given <see cref="T:System.Reflection.MemberInfo"/>.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)"> + <summary> + Gets the resolved name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>Name of the property.</returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DynamicCodeGeneration"> + <summary> + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + </summary> + <value> + <c>true</c> if using dynamic code generation; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.DefaultMembersSearchFlags"> + <summary> + Gets or sets the default members search flags. + </summary> + <value>The default members search flags.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.SerializeCompilerGeneratedMembers"> + <summary> + Gets or sets a value indicating whether compiler generated members should be serialized. + </summary> + <value> + <c>true</c> if serialized compiler generated members; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableInterface"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.Runtime.Serialization.ISerializable"/> interface will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.DefaultContractResolver.IgnoreSerializableAttribute"> + <summary> + Gets or sets a value indicating whether to ignore the <see cref="T:System.SerializableAttribute"/> attribute when serializing and deserializing types. + </summary> + <value> + <c>true</c> if the <see cref="T:System.SerializableAttribute"/> attribute will be ignored when serializing and deserializing types; otherwise, <c>false</c>. + </value> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver.ResolvePropertyName(System.String)"> + <summary> + Resolves the name of the property. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>The property name camel cased.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.IReferenceResolver"> + <summary> + Used to resolve references when serializing and deserializing JSON by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.ResolveReference(System.Object,System.String)"> + <summary> + Resolves a reference to its object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference to resolve.</param> + <returns>The object that</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.GetReference(System.Object,System.Object)"> + <summary> + Gets the reference for the sepecified object. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to get a reference for.</param> + <returns>The reference to the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.IsReferenced(System.Object,System.Object)"> + <summary> + Determines whether the specified object is referenced. + </summary> + <param name="context">The serialization context.</param> + <param name="value">The object to test for a reference.</param> + <returns> + <c>true</c> if the specified object is referenced; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.IReferenceResolver.AddReference(System.Object,System.String,System.Object)"> + <summary> + Adds a reference to the specified object. + </summary> + <param name="context">The serialization context.</param> + <param name="reference">The reference.</param> + <param name="value">The object to reference.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.DefaultSerializationBinder"> + <summary> + The default serialization binder used when resolving and loading classes from type names. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToType(System.String,System.String)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object.</param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object.</param> + <returns> + The type of the object the formatter creates a new instance of. + </returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DefaultSerializationBinder.BindToName(System.Type,System.String@,System.String@)"> + <summary> + When overridden in a derived class, controls the binding of a serialized object to a type. + </summary> + <param name="serializedType">The type of the object the formatter creates a new instance of.</param> + <param name="assemblyName">Specifies the <see cref="T:System.Reflection.Assembly"/> name of the serialized object. </param> + <param name="typeName">Specifies the <see cref="T:System.Type"/> name of the serialized object. </param> + </member> + <member name="T:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter"> + <summary> + Represents a trace writer that writes to the application's <see cref="T:System.Diagnostics.TraceListener"/> instances. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ITraceWriter"> + <summary> + Represents a trace writer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ITraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ITraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value>The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.DiagnosticsTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.DynamicValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.IValueProvider"> + <summary> + Provides methods to get and set values. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.IValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.DynamicValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorContext"> + <summary> + Provides information surrounding an error. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Error"> + <summary> + Gets or sets the error. + </summary> + <value>The error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.OriginalObject"> + <summary> + Gets the original object that caused the error. + </summary> + <value>The original object that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Member"> + <summary> + Gets the member that caused the error. + </summary> + <value>The member that caused the error.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Path"> + <summary> + Gets the path of the JSON location where the error occurred. + </summary> + <value>The path of the JSON location where the error occurred.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorContext.Handled"> + <summary> + Gets or sets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.ErrorContext"/> is handled. + </summary> + <value><c>true</c> if handled; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ErrorEventArgs"> + <summary> + Provides data for the Error event. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ErrorEventArgs.#ctor(System.Object,Newtonsoft.Json.Serialization.ErrorContext)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ErrorEventArgs"/> class. + </summary> + <param name="currentObject">The current object.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.CurrentObject"> + <summary> + Gets the current object the error event is being raised against. + </summary> + <value>The current object the error event is being raised against.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.ErrorEventArgs.ErrorContext"> + <summary> + Gets the error context. + </summary> + <value>The error context.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExpressionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using dynamic methods. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ExpressionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ExpressionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonArrayContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContainerContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.UnderlyingType"> + <summary> + Gets the underlying type for the contract. + </summary> + <value>The underlying type for the contract.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.CreatedType"> + <summary> + Gets or sets the type created during deserialization. + </summary> + <value>The type created during deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.IsReference"> + <summary> + Gets or sets whether this type contract is serialized as a reference. + </summary> + <value>Whether this type contract is serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.Converter"> + <summary> + Gets or sets the default <see cref="T:Newtonsoft.Json.JsonConverter"/> for this contract. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializedCallbacks"> + <summary> + Gets or sets all methods called immediately after deserialization of the object. + </summary> + <value>The methods called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializingCallbacks"> + <summary> + Gets or sets all methods called during deserialization of the object. + </summary> + <value>The methods called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializedCallbacks"> + <summary> + Gets or sets all methods called after serialization of the object graph. + </summary> + <value>The methods called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializingCallbacks"> + <summary> + Gets or sets all methods called before serialization of the object. + </summary> + <value>The methods called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnErrorCallbacks"> + <summary> + Gets or sets all method called when an error is thrown during the serialization of the object. + </summary> + <value>The methods called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserialized"> + <summary> + Gets or sets the method called immediately after deserialization of the object. + </summary> + <value>The method called immediately after deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnDeserializing"> + <summary> + Gets or sets the method called during deserialization of the object. + </summary> + <value>The method called during deserialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerialized"> + <summary> + Gets or sets the method called after serialization of the object graph. + </summary> + <value>The method called after serialization of the object graph.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnSerializing"> + <summary> + Gets or sets the method called before serialization of the object. + </summary> + <value>The method called before serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.OnError"> + <summary> + Gets or sets the method called when an error is thrown during the serialization of the object. + </summary> + <value>The method called when an error is thrown during the serialization of the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreator"> + <summary> + Gets or sets the default creator method used to create the object. + </summary> + <value>The default creator method used to create the object.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContract.DefaultCreatorNonPublic"> + <summary> + Gets or sets a value indicating whether the default creator is non public. + </summary> + <value><c>true</c> if the default object creator is non-public; otherwise, <c>false</c>.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonContainerContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonContainerContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemConverter"> + <summary> + Gets or sets the default collection items <see cref="T:Newtonsoft.Json.JsonConverter"/>. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemIsReference"> + <summary> + Gets or sets a value indicating whether the collection items preserve object references. + </summary> + <value><c>true</c> if collection items preserve object references; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemReferenceLoopHandling"> + <summary> + Gets or sets the collection item reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonContainerContract.ItemTypeNameHandling"> + <summary> + Gets or sets the collection item type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonArrayContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonArrayContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.CollectionItemType"> + <summary> + Gets the <see cref="T:System.Type"/> of the collection items. + </summary> + <value>The <see cref="T:System.Type"/> of the collection items.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonArrayContract.IsMultidimensionalArray"> + <summary> + Gets a value indicating whether the collection type is a multidimensional array. + </summary> + <value><c>true</c> if the collection type is a multidimensional array; otherwise, <c>false</c>.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.SerializationErrorCallback"> + <summary> + Handles <see cref="T:Newtonsoft.Json.JsonSerializer"/> serialization error callback events. + </summary> + <param name="o">The object that raised the callback event.</param> + <param name="context">The streaming context.</param> + <param name="errorContext">The error context.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataSetter"> + <summary> + Sets extension data for an object during deserialization. + </summary> + <param name="o">The object to set extension data on.</param> + <param name="key">The extension data key.</param> + <param name="value">The extension data value.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.ExtensionDataGetter"> + <summary> + Gets extension data for an object during serialization. + </summary> + <param name="o">The object to set extension data on.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDictionaryContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDictionaryContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary keys. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary keys.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryValueType"> + <summary> + Gets the <see cref="T:System.Type"/> of the dictionary values. + </summary> + <value>The <see cref="T:System.Type"/> of the dictionary values.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonDynamicContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonDynamicContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonDynamicContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonDynamicContract.PropertyNameResolver"> + <summary> + Gets or sets the property name resolver. + </summary> + <value>The property name resolver.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonISerializableContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonISerializableContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonISerializableContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonISerializableContract.ISerializableCreator"> + <summary> + Gets or sets the ISerializable object constructor. + </summary> + <value>The ISerializable object constructor.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonLinqContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonLinqContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonLinqContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonObjectContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonObjectContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonObjectContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.MemberSerialization"> + <summary> + Gets or sets the object member serialization. + </summary> + <value>The member object serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ItemRequired"> + <summary> + Gets or sets a value that indicates whether the object's properties are required. + </summary> + <value> + A value indicating whether the object's properties are required. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.Properties"> + <summary> + Gets the object's properties. + </summary> + <value>The object's properties.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ConstructorParameters"> + <summary> + Gets the constructor parameters required for any non-default constructor + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.OverrideConstructor"> + <summary> + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + </summary> + <value>The override constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ParametrizedConstructor"> + <summary> + Gets or sets the parametrized constructor used to create the object. + </summary> + <value>The parametrized constructor.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataSetter"> + <summary> + Gets or sets the extension data setter. + </summary> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonObjectContract.ExtensionDataGetter"> + <summary> + Gets or sets the extension data getter. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPrimitiveContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPrimitiveContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonProperty"> + <summary> + Maps a JSON property to a .NET member or constructor parameter. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonProperty.ToString"> + <summary> + Returns a <see cref="T:System.String"/> that represents this instance. + </summary> + <returns> + A <see cref="T:System.String"/> that represents this instance. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyName"> + <summary> + Gets or sets the name of the property. + </summary> + <value>The name of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DeclaringType"> + <summary> + Gets or sets the type that declared this property. + </summary> + <value>The type that declared this property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Order"> + <summary> + Gets or sets the order of serialization and deserialization of a member. + </summary> + <value>The numeric order of serialization or deserialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.UnderlyingName"> + <summary> + Gets or sets the name of the underlying member or parameter. + </summary> + <value>The name of the underlying member or parameter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ValueProvider"> + <summary> + Gets the <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization. + </summary> + <value>The <see cref="T:Newtonsoft.Json.Serialization.IValueProvider"/> that will get and set the <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> during serialization.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.PropertyType"> + <summary> + Gets or sets the type of the property. + </summary> + <value>The type of the property.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Converter"> + <summary> + Gets or sets the <see cref="T:Newtonsoft.Json.JsonConverter"/> for the property. + If set this converter takes presidence over the contract converter for the property type. + </summary> + <value>The converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.MemberConverter"> + <summary> + Gets the member converter. + </summary> + <value>The member converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Ignored"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is ignored. + </summary> + <value><c>true</c> if ignored; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Readable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is readable. + </summary> + <value><c>true</c> if readable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Writable"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is writable. + </summary> + <value><c>true</c> if writable; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.HasMemberAttribute"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> has a member attribute. + </summary> + <value><c>true</c> if has a member attribute; otherwise, <c>false</c>.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValue"> + <summary> + Gets the default value. + </summary> + <value>The default value.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.Required"> + <summary> + Gets a value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required. + </summary> + <value>A value indicating whether this <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> is required.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.IsReference"> + <summary> + Gets a value indicating whether this property preserves object references. + </summary> + <value> + <c>true</c> if this instance is reference; otherwise, <c>false</c>. + </value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.NullValueHandling"> + <summary> + Gets the property null value handling. + </summary> + <value>The null value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.DefaultValueHandling"> + <summary> + Gets the property default value handling. + </summary> + <value>The default value handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ReferenceLoopHandling"> + <summary> + Gets the property reference loop handling. + </summary> + <value>The reference loop handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ObjectCreationHandling"> + <summary> + Gets the property object creation handling. + </summary> + <value>The object creation handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.TypeNameHandling"> + <summary> + Gets or sets the type name handling. + </summary> + <value>The type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialize. + </summary> + <value>A predicate used to determine whether the property should be serialize.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.GetIsSpecified"> + <summary> + Gets or sets a predicate used to determine whether the property should be serialized. + </summary> + <value>A predicate used to determine whether the property should be serialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.SetIsSpecified"> + <summary> + Gets or sets an action used to set whether the property has been deserialized. + </summary> + <value>An action used to set whether the property has been deserialized.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemConverter"> + <summary> + Gets or sets the converter used when serializing the property's collection items. + </summary> + <value>The collection's items converter.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemIsReference"> + <summary> + Gets or sets whether this property's collection items are serialized as a reference. + </summary> + <value>Whether this property's collection items are serialized as a reference.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemTypeNameHandling"> + <summary> + Gets or sets the the type name handling used when serializing the property's collection items. + </summary> + <value>The collection's items type name handling.</value> + </member> + <member name="P:Newtonsoft.Json.Serialization.JsonProperty.ItemReferenceLoopHandling"> + <summary> + Gets or sets the the reference loop handling used when serializing the property's collection items. + </summary> + <value>The collection's items reference loop handling.</value> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"> + <summary> + A collection of <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> objects. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonPropertyCollection"/> class. + </summary> + <param name="type">The type.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetKeyForItem(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + When implemented in a derived class, extracts the key from the specified element. + </summary> + <param name="item">The element from which to extract the key.</param> + <returns>The key for the specified element.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(Newtonsoft.Json.Serialization.JsonProperty)"> + <summary> + Adds a <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + </summary> + <param name="property">The property to add to the collection.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetClosestMatchProperty(System.String)"> + <summary> + Gets the closest matching <see cref="T:Newtonsoft.Json.Serialization.JsonProperty"/> object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + </summary> + <param name="propertyName">Name of the property.</param> + <returns>A matching property if found.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonPropertyCollection.GetProperty(System.String,System.StringComparison)"> + <summary> + Gets a property by property name. + </summary> + <param name="propertyName">The name of the property to get.</param> + <param name="comparisonType">Type property name string comparison.</param> + <returns>A matching property if found.</returns> + </member> + <member name="T:Newtonsoft.Json.Serialization.JsonStringContract"> + <summary> + Contract details for a <see cref="T:System.Type"/> used by the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.JsonStringContract.#ctor(System.Type)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.JsonStringContract"/> class. + </summary> + <param name="underlyingType">The underlying type for the contract.</param> + </member> + <member name="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"> + <summary> + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.MemoryTraceWriter"/> class. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.Trace(System.Diagnostics.TraceLevel,System.String,System.Exception)"> + <summary> + Writes the specified trace level, message and optional exception. + </summary> + <param name="level">The <see cref="T:System.Diagnostics.TraceLevel"/> at which to write this trace.</param> + <param name="message">The trace message.</param> + <param name="ex">The trace exception. This parameter is optional.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.GetTraceMessages"> + <summary> + Returns an enumeration of the most recent trace messages. + </summary> + <returns>An enumeration of the most recent trace messages.</returns> + </member> + <member name="M:Newtonsoft.Json.Serialization.MemoryTraceWriter.ToString"> + <summary> + Returns a <see cref="T:System.String"/> of the most recent trace messages. + </summary> + <returns> + A <see cref="T:System.String"/> of the most recent trace messages. + </returns> + </member> + <member name="P:Newtonsoft.Json.Serialization.MemoryTraceWriter.LevelFilter"> + <summary> + Gets the <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + For example a filter level of <code>Info</code> will exclude <code>Verbose</code> messages and include <code>Info</code>, + <code>Warning</code> and <code>Error</code> messages. + </summary> + <value> + The <see cref="T:System.Diagnostics.TraceLevel"/> that will be used to filter the trace messages passed to the writer. + </value> + </member> + <member name="T:Newtonsoft.Json.Serialization.ObjectConstructor`1"> + <summary> + Represents a method that constructs an object. + </summary> + <typeparam name="T">The object type to create.</typeparam> + </member> + <member name="T:Newtonsoft.Json.Serialization.OnErrorAttribute"> + <summary> + When applied to a method, specifies that the method is called when an error occurs serializing an object. + </summary> + </member> + <member name="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"> + <summary> + Get and set values for a <see cref="T:System.Reflection.MemberInfo"/> using reflection. + </summary> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.#ctor(System.Reflection.MemberInfo)"> + <summary> + Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionValueProvider"/> class. + </summary> + <param name="memberInfo">The member info.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.SetValue(System.Object,System.Object)"> + <summary> + Sets the value. + </summary> + <param name="target">The target to set the value on.</param> + <param name="value">The value to set on the target.</param> + </member> + <member name="M:Newtonsoft.Json.Serialization.ReflectionValueProvider.GetValue(System.Object)"> + <summary> + Gets the value. + </summary> + <param name="target">The target to get the value from.</param> + <returns>The value.</returns> + </member> + <member name="T:Newtonsoft.Json.StringEscapeHandling"> + <summary> + Specifies how strings are escaped when writing JSON text. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.Default"> + <summary> + Only control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii"> + <summary> + All non-ASCII and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="F:Newtonsoft.Json.StringEscapeHandling.EscapeHtml"> + <summary> + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + </summary> + </member> + <member name="T:Newtonsoft.Json.TypeNameHandling"> + <summary> + Specifies type name handling options for the <see cref="T:Newtonsoft.Json.JsonSerializer"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.None"> + <summary> + Do not include the .NET type name when serializing types. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Objects"> + <summary> + Include the .NET type name when serializing into a JSON object structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Arrays"> + <summary> + Include the .NET type name when serializing into a JSON array structure. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.All"> + <summary> + Always include the .NET type name when serializing. + </summary> + </member> + <member name="F:Newtonsoft.Json.TypeNameHandling.Auto"> + <summary> + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IsNullOrEmpty``1(System.Collections.Generic.ICollection{``0})"> + <summary> + Determines whether the collection is null or empty. + </summary> + <param name="collection">The collection.</param> + <returns> + <c>true</c> if the collection is null or empty; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})"> + <summary> + Adds the elements of the specified collection to the specified generic IList. + </summary> + <param name="initial">The list to add to.</param> + <param name="collection">The collection of elements to add.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})"> + <summary> + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + </summary> + <typeparam name="TSource">The type of the elements of source.</typeparam> + <param name="list">A sequence in which to locate a value.</param> + <param name="value">The object to locate in the sequence</param> + <param name="comparer">An equality comparer to compare values.</param> + <returns>The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.Convert(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <returns>The converted type.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.TryConvert(System.Object,System.Globalization.CultureInfo,System.Type,System.Object@)"> + <summary> + Converts the value to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert the value to.</param> + <param name="convertedValue">The converted value if the conversion was successful or the default value of <c>T</c> if it failed.</param> + <returns> + <c>true</c> if <c>initialValue</c> was converted successfully; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ConvertUtils.ConvertOrCast(System.Object,System.Globalization.CultureInfo,System.Type)"> + <summary> + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + </summary> + <param name="initialValue">The value to convert.</param> + <param name="culture">The culture to use when converting.</param> + <param name="targetType">The type to convert or cast the value to.</param> + <returns> + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodWithResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback,Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodReturnLast(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.CallMethodNoResult(System.String,System.Dynamic.DynamicMetaObjectBinder,System.Linq.Expressions.Expression[],Newtonsoft.Json.Utilities.DynamicProxyMetaObject{`0}.Fallback)"> + <summary> + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.DynamicProxyMetaObject`1.GetRestrictions"> + <summary> + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.EnumUtils.GetNamesAndValues``1(System.Type)"> + <summary> + Gets a dictionary of the names and values of an Enum type. + </summary> + <param name="enumType">The enum type to get names and values for.</param> + <returns></returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetCollectionItemType(System.Type)"> + <summary> + Gets the type of the typed collection's items. + </summary> + <param name="type">The type.</param> + <returns>The type of the typed collection's items.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberUnderlyingType(System.Reflection.MemberInfo)"> + <summary> + Gets the member's underlying type. + </summary> + <param name="member">The member.</param> + <returns>The underlying type of the member.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.MemberInfo)"> + <summary> + Determines whether the member is an indexed property. + </summary> + <param name="member">The member.</param> + <returns> + <c>true</c> if the member is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.IsIndexedProperty(System.Reflection.PropertyInfo)"> + <summary> + Determines whether the property is an indexed property. + </summary> + <param name="property">The property.</param> + <returns> + <c>true</c> if the property is an indexed property; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.GetMemberValue(System.Reflection.MemberInfo,System.Object)"> + <summary> + Gets the member's value on the object. + </summary> + <param name="member">The member.</param> + <param name="target">The target object.</param> + <returns>The member's value on the object.</returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.SetMemberValue(System.Reflection.MemberInfo,System.Object,System.Object)"> + <summary> + Sets the member's value on the target object. + </summary> + <param name="member">The member.</param> + <param name="target">The target.</param> + <param name="value">The value.</param> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanReadMemberValue(System.Reflection.MemberInfo,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be read. + </summary> + <param name="member">The MemberInfo to determine whether can be read.</param> + /// <param name="nonPublic">if set to <c>true</c> then allow the member to be gotten non-publicly.</param> + <returns> + <c>true</c> if the specified MemberInfo can be read; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.ReflectionUtils.CanSetMemberValue(System.Reflection.MemberInfo,System.Boolean,System.Boolean)"> + <summary> + Determines whether the specified MemberInfo can be set. + </summary> + <param name="member">The MemberInfo to determine whether can be set.</param> + <param name="nonPublic">if set to <c>true</c> then allow the member to be set non-publicly.</param> + <param name="canSetReadOnly">if set to <c>true</c> then allow the member to be set if read-only.</param> + <returns> + <c>true</c> if the specified MemberInfo can be set; otherwise, <c>false</c>. + </returns> + </member> + <member name="T:Newtonsoft.Json.Utilities.StringBuffer"> + <summary> + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + </summary> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.IsWhiteSpace(System.String)"> + <summary> + Determines whether the string is all white space. Empty string will return false. + </summary> + <param name="s">The string to test whether it is all white space.</param> + <returns> + <c>true</c> if the string is all white space; otherwise, <c>false</c>. + </returns> + </member> + <member name="M:Newtonsoft.Json.Utilities.StringUtils.NullEmptyString(System.String)"> + <summary> + Nulls an empty string. + </summary> + <param name="s">The string.</param> + <returns>Null if the string was null, otherwise the string unchanged.</returns> + </member> + <member name="T:Newtonsoft.Json.WriteState"> + <summary> + Specifies the state of the <see cref="T:Newtonsoft.Json.JsonWriter"/>. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Error"> + <summary> + An exception has been thrown, which has left the <see cref="T:Newtonsoft.Json.JsonWriter"/> in an invalid state. + You may call the <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method to put the <see cref="T:Newtonsoft.Json.JsonWriter"/> in the <c>Closed</c> state. + Any other <see cref="T:Newtonsoft.Json.JsonWriter"/> method calls results in an <see cref="T:System.InvalidOperationException"/> being thrown. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Closed"> + <summary> + The <see cref="M:Newtonsoft.Json.JsonWriter.Close"/> method has been called. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Object"> + <summary> + An object is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Array"> + <summary> + A array is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Constructor"> + <summary> + A constructor is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Property"> + <summary> + A property is being written. + </summary> + </member> + <member name="F:Newtonsoft.Json.WriteState.Start"> + <summary> + A write method has not been called. + </summary> + </member> + </members> +</doc>