From 581f29e212990f63d47f3ed724a3f71219507135 Mon Sep 17 00:00:00 2001 From: Alexei Anoshenko <2277098+anoshenko@users.noreply.github.com> Date: Thu, 5 Nov 2026 13:31:38 +0300 Subject: [PATCH] Bug fixing --- absoluteLayout.go | 5 ++ audioPlayer.go | 5 ++ button.go | 5 ++ canvasView.go | 5 ++ checkbox.go | 5 ++ colorPicker.go | 5 ++ columnLayout.go | 5 ++ customView.go | 10 +++ datePicker.go | 5 ++ detailsView.go | 5 ++ dropDownList.go | 5 ++ editView.go | 5 ++ filePicker.go | 5 ++ gridLayout.go | 5 ++ image.go | 5 ++ imageView.go | 5 ++ listLayout.go | 5 ++ listView.go | 5 ++ numberPicker.go | 5 ++ popup.go | 13 ++- progressBar.go | 5 ++ resizable.go | 5 ++ ruiWriter.go | 224 ---------------------------------------------- stackLayout.go | 5 ++ svgImageView.go | 5 ++ tableView.go | 5 ++ tabsLayout.go | 5 ++ textView.go | 5 ++ timePicker.go | 5 ++ videoPlayer.go | 5 ++ view.go | 5 ++ 31 files changed, 162 insertions(+), 225 deletions(-) delete mode 100644 ruiWriter.go diff --git a/absoluteLayout.go b/absoluteLayout.go index c8df84e..d54f8b4 100644 --- a/absoluteLayout.go +++ b/absoluteLayout.go @@ -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) diff --git a/audioPlayer.go b/audioPlayer.go index 2ac46d8..60a965a 100644 --- a/audioPlayer.go +++ b/audioPlayer.go @@ -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) diff --git a/button.go b/button.go index f060a0c..ce716f5 100644 --- a/button.go +++ b/button.go @@ -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) diff --git a/canvasView.go b/canvasView.go index 19f46d9..5675316 100644 --- a/canvasView.go +++ b/canvasView.go @@ -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) diff --git a/checkbox.go b/checkbox.go index 43b7790..0f80c32 100644 --- a/checkbox.go +++ b/checkbox.go @@ -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) diff --git a/colorPicker.go b/colorPicker.go index 63b27a5..24dcb5c 100644 --- a/colorPicker.go +++ b/colorPicker.go @@ -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) diff --git a/columnLayout.go b/columnLayout.go index 1b43749..9f4e47e 100644 --- a/columnLayout.go +++ b/columnLayout.go @@ -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) diff --git a/customView.go b/customView.go index 753fe87..907a9bf 100644 --- a/customView.go +++ b/customView.go @@ -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) diff --git a/datePicker.go b/datePicker.go index 4fc10bf..afdac39 100644 --- a/datePicker.go +++ b/datePicker.go @@ -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) diff --git a/detailsView.go b/detailsView.go index 815a1f8..aec112e 100644 --- a/detailsView.go +++ b/detailsView.go @@ -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) diff --git a/dropDownList.go b/dropDownList.go index c16e663..21ccce0 100644 --- a/dropDownList.go +++ b/dropDownList.go @@ -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) diff --git a/editView.go b/editView.go index 076bb60..64b29a7 100644 --- a/editView.go +++ b/editView.go @@ -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) diff --git a/filePicker.go b/filePicker.go index 7c1cc8f..125fcd0 100644 --- a/filePicker.go +++ b/filePicker.go @@ -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) diff --git a/gridLayout.go b/gridLayout.go index a1de0a2..2e03b93 100644 --- a/gridLayout.go +++ b/gridLayout.go @@ -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) diff --git a/image.go b/image.go index 4425db2..e9e8e2a 100644 --- a/image.go +++ b/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 diff --git a/imageView.go b/imageView.go index ca1e90b..8cfaf35 100644 --- a/imageView.go +++ b/imageView.go @@ -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) diff --git a/listLayout.go b/listLayout.go index 1eae12a..eda4e70 100644 --- a/listLayout.go +++ b/listLayout.go @@ -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) diff --git a/listView.go b/listView.go index 6977462..6869b0f 100644 --- a/listView.go +++ b/listView.go @@ -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) diff --git a/numberPicker.go b/numberPicker.go index e57362b..84f365d 100644 --- a/numberPicker.go +++ b/numberPicker.go @@ -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) diff --git a/popup.go b/popup.go index b951791..ed44699 100644 --- a/popup.go +++ b/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" } diff --git a/progressBar.go b/progressBar.go index 2f121dc..68d9633 100644 --- a/progressBar.go +++ b/progressBar.go @@ -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) diff --git a/resizable.go b/resizable.go index f95bb15..d1c0463 100644 --- a/resizable.go +++ b/resizable.go @@ -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) diff --git a/ruiWriter.go b/ruiWriter.go deleted file mode 100644 index f4bc473..0000000 --- a/ruiWriter.go +++ /dev/null @@ -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 -} -*/ diff --git a/stackLayout.go b/stackLayout.go index 1a9616d..d21ced6 100644 --- a/stackLayout.go +++ b/stackLayout.go @@ -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) diff --git a/svgImageView.go b/svgImageView.go index 8b650a4..06792bf 100644 --- a/svgImageView.go +++ b/svgImageView.go @@ -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) diff --git a/tableView.go b/tableView.go index 42e6eec..b20b94d 100644 --- a/tableView.go +++ b/tableView.go @@ -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) diff --git a/tabsLayout.go b/tabsLayout.go index 3d0db3e..446d4fc 100644 --- a/tabsLayout.go +++ b/tabsLayout.go @@ -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) diff --git a/textView.go b/textView.go index bbc870a..6fc4c6b 100644 --- a/textView.go +++ b/textView.go @@ -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) diff --git a/timePicker.go b/timePicker.go index 98b1326..e11cc7c 100644 --- a/timePicker.go +++ b/timePicker.go @@ -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) diff --git a/videoPlayer.go b/videoPlayer.go index 992f502..6c140c7 100644 --- a/videoPlayer.go +++ b/videoPlayer.go @@ -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) diff --git a/view.go b/view.go index f702101..d1b9537 100644 --- a/view.go +++ b/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)