summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xexamples/example_02_controls.nim5
-rwxr-xr-xsrc/nigui.nim38
-rwxr-xr-xsrc/nigui/private/gtk3/gtk3.nim3
-rwxr-xr-xsrc/nigui/private/gtk3/platform_impl.nim15
-rwxr-xr-xsrc/nigui/private/gtk3/platform_types2.nim2
-rwxr-xr-xsrc/nigui/private/windows/platform_impl.nim17
-rwxr-xr-xsrc/nigui/private/windows/platform_types2.nim2
-rwxr-xr-xsrc/nigui/private/windows/windows.nim2
8 files changed, 84 insertions, 0 deletions
diff --git a/examples/example_02_controls.nim b/examples/example_02_controls.nim
index b2a9e1c..402a652 100755
--- a/examples/example_02_controls.nim
+++ b/examples/example_02_controls.nim
@@ -21,6 +21,11 @@ container.add(checkbox)
var label = newLabel("Label")
container.add(label)
+# Add a Progress Bar control:
+var progressBar = newProgressBar()
+progressBar.value = 0.5
+container.add(progressBar)
+
# Add a TextBox control:
var textBox = newTextBox("TextBox")
container.add(textBox)
diff --git a/src/nigui.nim b/src/nigui.nim
index 86381af..2068e3b 100755
--- a/src/nigui.nim
+++ b/src/nigui.nim
@@ -377,6 +377,9 @@ type
Label* = ref object of ControlImpl
fText: string
+ ProgressBar* = ref object of ControlImpl
+ fValue: float # should be between 0.0 and 1.0
+
TextBox* = ref object of ControlImpl
fEditable: bool
fOnTextChange: TextChangeProc
@@ -944,6 +947,20 @@ method `text=`*(label: Label, text: string) {.base.}
# ----------------------------------------------------------------------------------------
+# ProgressBar
+# ----------------------------------------------------------------------------------------
+
+proc newProgressBar*(): ProgressBar
+
+proc init*(progressBar: ProgressBar)
+proc init*(progressBar: NativeProgressBar)
+
+method value*(progressBar: ProgressBar): float {.base.}
+method `value=`*(progressBar: ProgressBar, value: float) {.base.}
+## value should be between 0.0 and 1.0
+
+
+# ----------------------------------------------------------------------------------------
# TextBox
# ----------------------------------------------------------------------------------------
@@ -2496,6 +2513,27 @@ method `onDraw=`(container: NativeLabel, callback: DrawProc) = raiseError("Nativ
# ----------------------------------------------------------------------------------------
+# ProgressBar
+# ----------------------------------------------------------------------------------------
+
+proc newProgressBar(): ProgressBar =
+ result = new NativeProgressBar
+ result.NativeProgressBar.init()
+
+proc init(progressBar: ProgressBar) =
+ progressBar.ControlImpl.init()
+ progressBar.fWidthMode = WidthMode_Expand
+ progressBar.height = 15.scaleToDpi
+
+method value*(progressBar: ProgressBar): float = progressBar.fValue
+
+method `value=`*(progressBar: ProgressBar, value: float) =
+ # should be overridden by native control
+ progressBar.fValue = value
+ progressBar.forceRedraw()
+
+
+# ----------------------------------------------------------------------------------------
# TextBox
# ----------------------------------------------------------------------------------------
diff --git a/src/nigui/private/gtk3/gtk3.nim b/src/nigui/private/gtk3/gtk3.nim
index 61fc8d4..4992f88 100755
--- a/src/nigui/private/gtk3/gtk3.nim
+++ b/src/nigui/private/gtk3/gtk3.nim
@@ -335,6 +335,9 @@ proc gtk_label_set_ellipsize*(label: pointer, mode: cint) {.importc: "gtk_label_
proc gtk_label_set_xalign*(label: pointer, xalign: cfloat) {.importc: "gtk_label_set_xalign", libgtk3.}
proc gtk_label_set_yalign*(label: pointer, yalign: cfloat) {.importc: "gtk_label_set_yalign", libgtk3.}
+proc gtk_progress_bar_new*(): pointer {.importc: "gtk_progress_bar_new", libgtk3.}
+proc gtk_progress_bar_set_fraction*(pbar: pointer, fraction: cdouble) {.importc: "gtk_progress_bar_set_fraction", libgtk3.}
+
# proc gtk_box_new*(orientation: GtkOrientation, spacing: cint): pointer {.importc: "gtk_box_new", libgtk3.}
proc gtk_box_pack_start*(box, child: pointer, expand, fill: cint, padding: cint) {.importc: "gtk_box_pack_start", libgtk3.}
diff --git a/src/nigui/private/gtk3/platform_impl.nim b/src/nigui/private/gtk3/platform_impl.nim
index c5a7fdb..8717198 100755
--- a/src/nigui/private/gtk3/platform_impl.nim
+++ b/src/nigui/private/gtk3/platform_impl.nim
@@ -1357,6 +1357,21 @@ method naturalWidth(label: NativeLabel): int {.locks: "unknown".} = label.getTex
# ----------------------------------------------------------------------------------------
+# ProgressBar
+# ----------------------------------------------------------------------------------------
+
+proc init(progressBar: NativeProgressBar) =
+ progressBar.fHandle = gtk_progress_bar_new()
+ progressBar.ProgressBar.init()
+ progressBar.height = 8.scaleToDpi # adjust control height to bar height
+
+method `value=`(progressBar: NativeProgressBar, value: float) =
+ procCall progressBar.ProgressBar.`value=`(value)
+ gtk_progress_bar_set_fraction(progressBar.fHandle, value)
+ app.processEvents()
+
+
+# ----------------------------------------------------------------------------------------
# TextBox
# ----------------------------------------------------------------------------------------
diff --git a/src/nigui/private/gtk3/platform_types2.nim b/src/nigui/private/gtk3/platform_types2.nim
index 12cf897..a9b5674 100755
--- a/src/nigui/private/gtk3/platform_types2.nim
+++ b/src/nigui/private/gtk3/platform_types2.nim
@@ -15,4 +15,6 @@ type
NativeLabel* = ref object of Label
+ NativeProgressBar* = ref object of ProgressBar
+
NativeTextBox* = ref object of TextBox
diff --git a/src/nigui/private/windows/platform_impl.nim b/src/nigui/private/windows/platform_impl.nim
index c1f9790..2876448 100755
--- a/src/nigui/private/windows/platform_impl.nim
+++ b/src/nigui/private/windows/platform_impl.nim
@@ -1476,6 +1476,23 @@ method `text=`(label: NativeLabel, text: string) =
# ----------------------------------------------------------------------------------------
+# ProgressBar
+# ----------------------------------------------------------------------------------------
+
+const pProgressBarMaxValue = 10_000
+
+proc init(progressBar: NativeProgressBar) =
+ progressBar.fHandle = pCreateWindowExWithUserdata("msctls_progress32", WS_CHILD, 0, pDefaultParentWindow, cast[pointer](progressBar))
+ discard SendMessageA(progressBar.fHandle, PBM_SETRANGE32, cast[pointer](0), cast[pointer](pProgressBarMaxValue))
+ progressBar.ProgressBar.init()
+
+method `value=`(progressBar: NativeProgressBar, value: float) =
+ procCall progressBar.ProgressBar.`value=`(value)
+ discard SendMessageA(progressBar.fHandle, PBM_SETPOS, cast[pointer]((value * pProgressBarMaxValue).int32), nil)
+ app.processEvents()
+
+
+# ----------------------------------------------------------------------------------------
# TextBox
# ----------------------------------------------------------------------------------------
diff --git a/src/nigui/private/windows/platform_types2.nim b/src/nigui/private/windows/platform_types2.nim
index 0dfe32b..986b847 100755
--- a/src/nigui/private/windows/platform_types2.nim
+++ b/src/nigui/private/windows/platform_types2.nim
@@ -15,4 +15,6 @@ type
NativeLabel* = ref object of Label
+ NativeProgressBar* = ref object of ProgressBar
+
NativeTextBox* = ref object of TextBox
diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim
index c3a8845..5defd80 100755
--- a/src/nigui/private/windows/windows.nim
+++ b/src/nigui/private/windows/windows.nim
@@ -76,6 +76,8 @@ const
IMAGE_ICON* = 1
# LR_LOADFROMFILE* = 16
OBJ_BRUSH* = 2
+ PBM_SETPOS* = 1026
+ PBM_SETRANGE32* = 1030
PM_REMOVE* = 1
SB_HORZ* = 0
SB_THUMBPOSITION* = 4