mirror of https://github.com/anoshenko/rui.git
Bug fixing
This commit is contained in:
parent
17bed2389b
commit
581f29e212
|
|
@ -13,6 +13,11 @@ type absoluteLayoutData struct {
|
|||
|
||||
// NewAbsoluteLayout create new AbsoluteLayout object and return it
|
||||
func NewAbsoluteLayout(session Session, params Params) AbsoluteLayout {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(absoluteLayoutData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -11,6 +11,11 @@ type audioPlayerData struct {
|
|||
|
||||
// NewAudioPlayer create new MediaPlayer object and return it
|
||||
func NewAudioPlayer(session Session, params Params) AudioPlayer {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(audioPlayerData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,11 @@ type buttonData struct {
|
|||
|
||||
// NewButton create new Button object and return it
|
||||
func NewButton(session Session, params Params) Button {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
button := new(buttonData)
|
||||
button.init(session)
|
||||
setInitParams(button, params)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,11 @@ type canvasViewData struct {
|
|||
|
||||
// NewCanvasView creates the new custom draw view
|
||||
func NewCanvasView(session Session, params Params) CanvasView {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(canvasViewData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -35,6 +35,11 @@ type checkboxData struct {
|
|||
|
||||
// NewCheckbox create new Checkbox object and return it
|
||||
func NewCheckbox(session Session, params Params) Checkbox {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(checkboxData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -50,6 +50,11 @@ type colorPickerData struct {
|
|||
|
||||
// NewColorPicker create new ColorPicker object and return it
|
||||
func NewColorPicker(session Session, params Params) ColorPicker {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(colorPickerData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -126,6 +126,11 @@ type columnLayoutData struct {
|
|||
|
||||
// NewColumnLayout create new ColumnLayout object and return it
|
||||
func NewColumnLayout(session Session, params Params) ColumnLayout {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(columnLayoutData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -28,6 +28,16 @@ type CustomViewData struct {
|
|||
|
||||
// InitCustomView initializes fields of CustomView by default values
|
||||
func InitCustomView(customView CustomView, tag string, session Session, params Params) bool {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return false
|
||||
}
|
||||
|
||||
if customView == nil {
|
||||
ErrorLog(`the customView argument cannot be nil`)
|
||||
return false
|
||||
}
|
||||
|
||||
customView.setTag(tag)
|
||||
if view := customView.CreateSuperView(session); view != nil {
|
||||
customView.setSuperView(view)
|
||||
|
|
|
|||
|
|
@ -123,6 +123,11 @@ type datePickerData struct {
|
|||
|
||||
// NewDatePicker create new DatePicker object and return it
|
||||
func NewDatePicker(session Session, params Params) DatePicker {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(datePickerData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -53,6 +53,11 @@ type detailsViewData struct {
|
|||
|
||||
// NewDetailsView create new DetailsView object and return it
|
||||
func NewDetailsView(session Session, params Params) DetailsView {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(detailsViewData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -37,6 +37,11 @@ type dropDownListData struct {
|
|||
|
||||
// NewDropDownList create new DropDownList object and return it
|
||||
func NewDropDownList(session Session, params Params) DropDownList {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(dropDownListData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -106,6 +106,11 @@ type editViewData struct {
|
|||
|
||||
// NewEditView create new EditView object and return it
|
||||
func NewEditView(session Session, params Params) EditView {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(editViewData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -114,6 +114,11 @@ func (file FileInfo) key() string {
|
|||
|
||||
// NewFilePicker create new FilePicker object and return it
|
||||
func NewFilePicker(session Session, params Params) FilePicker {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(filePickerData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -119,6 +119,11 @@ type gridLayoutData struct {
|
|||
|
||||
// NewGridLayout create new GridLayout object and return it
|
||||
func NewGridLayout(session Session, params Params) GridLayout {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(gridLayoutData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
5
image.go
5
image.go
|
|
@ -143,6 +143,11 @@ func (manager *imageManager) imageLoadError(obj DataObject) {
|
|||
|
||||
// LoadImage starts the async image loading by url
|
||||
func LoadImage(url string, onLoaded func(Image), session Session) Image {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
if ok, constName := isConstantName(url); ok {
|
||||
if image, ok := session.ImageConstant(constName); ok {
|
||||
url = image
|
||||
|
|
|
|||
|
|
@ -81,6 +81,11 @@ type imageViewData struct {
|
|||
|
||||
// NewImageView create new ImageView object and return it
|
||||
func NewImageView(session Session, params Params) ImageView {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(imageViewData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -46,6 +46,11 @@ type listLayoutData struct {
|
|||
|
||||
// NewListLayout create new ListLayout object and return it
|
||||
func NewListLayout(session Session, params Params) ListLayout {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(listLayoutData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -139,6 +139,11 @@ type listViewData struct {
|
|||
|
||||
// NewListView creates the new list view
|
||||
func NewListView(session Session, params Params) ListView {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(listViewData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -114,6 +114,11 @@ type numberPickerData struct {
|
|||
|
||||
// NewNumberPicker create new NumberPicker object and return it
|
||||
func NewNumberPicker(session Session, params Params) NumberPicker {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(numberPickerData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
13
popup.go
13
popup.go
|
|
@ -1538,6 +1538,7 @@ func (popup *popupData) createLayerView() {
|
|||
// NewPopup creates a new Popup
|
||||
func NewPopup(view View, param Params) Popup {
|
||||
if view == nil {
|
||||
ErrorLog(`the View argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -1567,7 +1568,7 @@ func NewPopup(view View, param Params) Popup {
|
|||
// If the function fails, it returns nil and an error message is written to the log.
|
||||
func CreatePopupFromObject(session Session, object DataObject, binding any) Popup {
|
||||
if session == nil {
|
||||
ErrorLog(`"session" argument is nil`)
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -1604,6 +1605,11 @@ func CreatePopupFromObject(session Session, object DataObject, binding any) Popu
|
|||
//
|
||||
// If the function fails, it returns nil and an error message is written to the log.
|
||||
func CreatePopupFromText(session Session, text string, binding any) Popup {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
data, err := ParseDataText(text)
|
||||
if err != nil {
|
||||
ErrorLog(err.Error())
|
||||
|
|
@ -1621,6 +1627,11 @@ func CreatePopupFromText(session Session, text string, binding any) Popup {
|
|||
//
|
||||
// If the function fails, it returns nil and an error message is written to the log.
|
||||
func CreatePopupFromResources(session Session, name string, binding any) Popup {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
if strings.ToLower(filepath.Ext(name)) != ".rui" {
|
||||
name += ".rui"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,11 @@ type progressBarData struct {
|
|||
|
||||
// NewProgressBar create new ProgressBar object and return it
|
||||
func NewProgressBar(session Session, params Params) ProgressBar {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(progressBarData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -67,6 +67,11 @@ type resizableData struct {
|
|||
|
||||
// NewResizable create new Resizable object and return it
|
||||
func NewResizable(session Session, params Params) Resizable {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(resizableData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
224
ruiWriter.go
224
ruiWriter.go
|
|
@ -1,224 +0,0 @@
|
|||
package rui
|
||||
|
||||
/*
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type ruiWriter interface {
|
||||
startObject(tag string)
|
||||
startObjectProperty(tag, objectTag string)
|
||||
endObject()
|
||||
startArrayProperty(tag string)
|
||||
endObArray()
|
||||
writeProperty(tag string, value any)
|
||||
finish() string
|
||||
}
|
||||
|
||||
type ruiStringer interface {
|
||||
ruiString(writer ruiWriter)
|
||||
}
|
||||
|
||||
type ruiWriterData struct {
|
||||
buffer *strings.Builder
|
||||
indent string
|
||||
}
|
||||
|
||||
func newRUIWriter() ruiWriter {
|
||||
writer := new(ruiWriterData)
|
||||
return writer
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) writeIndent() {
|
||||
if writer.buffer == nil {
|
||||
writer.buffer = allocStringBuilder()
|
||||
writer.indent = ""
|
||||
return
|
||||
}
|
||||
|
||||
if writer.indent != "" {
|
||||
writer.buffer.WriteString(writer.indent)
|
||||
}
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) writeString(str string) {
|
||||
hasEsc := strings.ContainsAny(str, "\t\"\r\n")
|
||||
if hasEsc || strings.ContainsAny(str, " ,;'`[]{}()") {
|
||||
if !strings.Contains(str, "`") && (hasEsc || strings.Contains(str, `\`)) {
|
||||
writer.buffer.WriteRune('`')
|
||||
writer.buffer.WriteString(str)
|
||||
writer.buffer.WriteRune('`')
|
||||
} else {
|
||||
replace := []struct{ old, new string }{
|
||||
{old: `\`, new: `\\`},
|
||||
{old: "\t", new: `\t`},
|
||||
{old: "\r", new: `\r`},
|
||||
{old: "\n", new: `\n`},
|
||||
{old: "\"", new: `\"`},
|
||||
}
|
||||
for _, s := range replace {
|
||||
str = strings.ReplaceAll(str, s.old, s.new)
|
||||
}
|
||||
writer.buffer.WriteRune('"')
|
||||
writer.buffer.WriteString(str)
|
||||
writer.buffer.WriteRune('"')
|
||||
}
|
||||
} else {
|
||||
writer.buffer.WriteString(str)
|
||||
}
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) startObject(tag string) {
|
||||
writer.writeIndent()
|
||||
writer.indent += "\t"
|
||||
writer.writeString(tag)
|
||||
writer.buffer.WriteString(" {\n")
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) startObjectProperty(tag, objectTag string) {
|
||||
writer.writeIndent()
|
||||
writer.indent += "\t"
|
||||
writer.writeString(tag)
|
||||
writer.writeString(" = ")
|
||||
if objectTag == "" {
|
||||
objectTag = "_"
|
||||
}
|
||||
writer.writeString(objectTag)
|
||||
writer.buffer.WriteString(" {\n")
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) endObject() {
|
||||
if len(writer.indent) > 0 {
|
||||
writer.indent = writer.indent[1:]
|
||||
}
|
||||
writer.writeIndent()
|
||||
writer.buffer.WriteRune('}')
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) startArrayProperty(tag string) {
|
||||
writer.writeIndent()
|
||||
writer.writeString(tag)
|
||||
writer.buffer.WriteString(" = [\n")
|
||||
writer.indent += "\t"
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) endObArray() {
|
||||
if len(writer.indent) > 0 {
|
||||
writer.indent = writer.indent[1:]
|
||||
}
|
||||
writer.writeIndent()
|
||||
writer.buffer.WriteString("],\n")
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) writeValue(value any) {
|
||||
|
||||
switch value := value.(type) {
|
||||
case string:
|
||||
writer.writeString(value)
|
||||
|
||||
case ruiStringer:
|
||||
value.ruiString(writer)
|
||||
// TODO
|
||||
|
||||
case fmt.Stringer:
|
||||
writer.writeString(value.String())
|
||||
|
||||
case float32:
|
||||
writer.writeString(fmt.Sprintf("%g", float64(value)))
|
||||
|
||||
case float64:
|
||||
writer.writeString(fmt.Sprintf("%g", value))
|
||||
|
||||
case []string:
|
||||
switch len(value) {
|
||||
case 0:
|
||||
writer.buffer.WriteString("[]\n")
|
||||
|
||||
case 1:
|
||||
writer.writeString(value[0])
|
||||
|
||||
default:
|
||||
writer.buffer.WriteString("[\n")
|
||||
writer.indent += "\t"
|
||||
for _, v := range value {
|
||||
writer.buffer.WriteString(writer.indent)
|
||||
writer.writeString(v)
|
||||
writer.buffer.WriteString(",\n")
|
||||
}
|
||||
|
||||
writer.indent = writer.indent[1:]
|
||||
writer.buffer.WriteString(writer.indent)
|
||||
writer.buffer.WriteRune(']')
|
||||
}
|
||||
|
||||
case []View:
|
||||
switch len(value) {
|
||||
case 0:
|
||||
writer.buffer.WriteString("[]\n")
|
||||
|
||||
case 1:
|
||||
writer.writeValue(value[0])
|
||||
|
||||
default:
|
||||
writer.buffer.WriteString("[\n")
|
||||
writer.indent += "\t"
|
||||
for _, v := range value {
|
||||
writer.buffer.WriteString(writer.indent)
|
||||
v.ruiString(writer)
|
||||
writer.buffer.WriteString(",\n")
|
||||
}
|
||||
|
||||
writer.indent = writer.indent[1:]
|
||||
writer.buffer.WriteString(writer.indent)
|
||||
writer.buffer.WriteRune(']')
|
||||
}
|
||||
|
||||
case []any:
|
||||
switch len(value) {
|
||||
case 0:
|
||||
writer.buffer.WriteString("[]\n")
|
||||
|
||||
case 1:
|
||||
writer.writeValue(value[0])
|
||||
|
||||
default:
|
||||
writer.buffer.WriteString("[\n")
|
||||
writer.indent += "\t"
|
||||
for _, v := range value {
|
||||
writer.buffer.WriteString(writer.indent)
|
||||
writer.writeValue(v)
|
||||
writer.buffer.WriteString(",\n")
|
||||
}
|
||||
|
||||
writer.indent = writer.indent[1:]
|
||||
writer.buffer.WriteString(writer.indent)
|
||||
writer.buffer.WriteRune(']')
|
||||
}
|
||||
|
||||
default:
|
||||
if n, ok := isInt(value); ok {
|
||||
writer.buffer.WriteString(strconv.Itoa(n))
|
||||
}
|
||||
}
|
||||
writer.buffer.WriteString(",\n")
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) writeProperty(tag string, value any) {
|
||||
writer.writeIndent()
|
||||
writer.writeString(tag)
|
||||
writer.buffer.WriteString(" = ")
|
||||
writer.writeValue(value)
|
||||
}
|
||||
|
||||
func (writer *ruiWriterData) finish() string {
|
||||
result := ""
|
||||
if writer.buffer != nil {
|
||||
result = writer.buffer.String()
|
||||
freeStringBuilder(writer.buffer)
|
||||
writer.buffer = nil
|
||||
}
|
||||
return result
|
||||
}
|
||||
*/
|
||||
|
|
@ -311,6 +311,11 @@ type stackLayoutData struct {
|
|||
|
||||
// NewStackLayout create new StackLayout object and return it
|
||||
func NewStackLayout(session Session, params Params) StackLayout {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(stackLayoutData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -18,6 +18,11 @@ type svgImageViewData struct {
|
|||
|
||||
// NewSvgImageView create new SvgImageView object and return it
|
||||
func NewSvgImageView(session Session, params Params) SvgImageView {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(svgImageViewData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -578,6 +578,11 @@ type tableCellView struct {
|
|||
|
||||
// NewTableView create new TableView object and return it
|
||||
func NewTableView(session Session, params Params) TableView {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(tableViewData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -147,6 +147,11 @@ type tabsLayoutData struct {
|
|||
|
||||
// NewTabsLayout create new TabsLayout object and return it
|
||||
func NewTabsLayout(session Session, params Params) TabsLayout {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(tabsLayoutData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,11 @@ type textViewData struct {
|
|||
|
||||
// NewTextView create new TextView object and return it
|
||||
func NewTextView(session Session, params Params) TextView {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(textViewData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -105,6 +105,11 @@ type timePickerData struct {
|
|||
|
||||
// NewTimePicker create new TimePicker object and return it
|
||||
func NewTimePicker(session Session, params Params) TimePicker {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(timePickerData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
|
|
@ -48,6 +48,11 @@ type videoPlayerData struct {
|
|||
|
||||
// NewVideoPlayer create new MediaPlayer object and return it
|
||||
func NewVideoPlayer(session Session, params Params) VideoPlayer {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(videoPlayerData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
5
view.go
5
view.go
|
|
@ -142,6 +142,11 @@ func newView(session Session) View {
|
|||
|
||||
// NewView create new View object and return it
|
||||
func NewView(session Session, params Params) View {
|
||||
if session == nil {
|
||||
ErrorLog(`the Session argument cannot be nil`)
|
||||
return nil
|
||||
}
|
||||
|
||||
view := new(viewData)
|
||||
view.init(session)
|
||||
setInitParams(view, params)
|
||||
|
|
|
|||
Loading…
Reference in New Issue