adds progressbar (GTK)

Wed, 22 Nov 2017 08:47:52 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 22 Nov 2017 08:47:52 +0100
changeset 149
479209198de3
parent 148
4e0b38bbd6c4
child 150
5cee4cb5ad79

adds progressbar (GTK)

application/main.c file | annotate | diff | comparison | revisions
ui/gtk/display.c file | annotate | diff | comparison | revisions
ui/gtk/display.h file | annotate | diff | comparison | revisions
ui/gtk/label.c file | annotate | diff | comparison | revisions
ui/gtk/label.h file | annotate | diff | comparison | revisions
ui/gtk/objs.mk file | annotate | diff | comparison | revisions
ui/ui/display.h file | annotate | diff | comparison | revisions
ui/ui/toolkit.h file | annotate | diff | comparison | revisions
ui/ui/ui.h file | annotate | diff | comparison | revisions
--- a/application/main.c	Sun Nov 19 09:38:23 2017 +0100
+++ b/application/main.c	Wed Nov 22 08:47:52 2017 +0100
@@ -42,6 +42,7 @@
     UiDouble *d;
     UiRange *r;
     UiList *list;
+    UiDouble *progress;
 } Document;
 
 typedef struct Entry {
@@ -105,6 +106,8 @@
     doc->d = ui_double_new(ctx, "d");
     doc->r = ui_range_new(ctx, "r");
     
+    doc->progress = ui_double_new(ctx, "progress");
+    
     doc->list = ui_list_new(ctx, "list");
     printf("doc list: %d\n", doc->list);
     Entry *e1 = malloc(sizeof(Entry));
@@ -168,7 +171,7 @@
     
     ui_textfield_nv(obj, "t1");
     //ui_textarea_nv(obj, "text");
-    d1->t1->observers = ui_add_observer(d1->t1->observers, observ, "t1");
+    //d1->t1->observers = ui_add_observer(d1->t1->observers, observ, "t1");
     //d1->text->observers = ui_add_observer(d1->text->observers, observ, "text");
     
     UiModel *model = ui_model(obj->ctx, UI_ICON_TEXT, "name", UI_STRING, "desc", -1);
@@ -185,6 +188,7 @@
     d1->r->setextent(d1->r, 1);
     d1->d->observers = ui_add_observer(d1->d->observers, doublechanged, NULL);
     
+    ui_progressbar_nv(obj, "progress");
     ui_button(obj, "Switch Document", action_newdoc, NULL);
     
     ui_show(obj);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/gtk/display.c	Wed Nov 22 08:47:52 2017 +0100
@@ -0,0 +1,128 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2017 Olaf Wintermann. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "display.h"
+#include "container.h"
+#include "../../ucx/mempool.h"
+#include "../common/context.h"
+#include "../common/object.h"
+
+static void set_alignment(GtkWidget *widget, float xalign, float yalign) {
+#if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 16
+    gtk_label_set_xalign(GTK_LABEL(widget), xalign);
+    gtk_label_set_yalign(GTK_LABEL(widget), yalign);
+#else
+    gtk_misc_set_alignment(GTK_MISC(widget), xalign, yalign);
+#endif
+}
+
+UIWIDGET ui_label(UiObject *obj, char *label) { 
+    GtkWidget *widget = gtk_label_new(label);
+    
+    UiContainer *ct = uic_get_current_container(obj);
+    ct->add(ct, widget, FALSE);
+    
+    return widget;
+}
+
+UIWIDGET ui_llabel(UiObject *obj, char *label) {
+    UIWIDGET widget = ui_label(obj, label);
+    set_alignment(widget, 0, .5);
+    return widget;
+}
+
+UIWIDGET ui_rlabel(UiObject *obj, char *label) {
+    UIWIDGET widget = ui_label(obj, label);
+    //gtk_label_set_justify(GTK_LABEL(widget), GTK_JUSTIFY_RIGHT);
+    
+    set_alignment(widget, 1, .5);
+    return widget;
+}
+
+UIWIDGET ui_space(UiObject *obj) {
+    GtkWidget *widget = gtk_label_new("");
+    UiContainer *ct = uic_get_current_container(obj);
+    ct->add(ct, widget, TRUE);
+    
+    return widget;
+}
+
+UIWIDGET ui_separator(UiObject *obj) {
+#if UI_GTK3
+    GtkWidget *widget = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
+#else
+    GtkWidget *widget = gtk_hseparator_new();
+#endif
+    UiContainer *ct = uic_get_current_container(obj);
+    ct->add(ct, widget, FALSE);
+    
+    return widget;
+}
+
+/* ------------------------- progress bar ------------------------- */
+
+UIWIDGET ui_progressbar(UiObject *obj, UiDouble *value) {
+    UiVar *var = malloc(sizeof(UiVar));
+    var->value = value;
+    var->type = UI_VAR_SPECIAL;
+    return ui_progressbar_var(obj, var);
+}
+
+UIWIDGET ui_progressbar_nv(UiObject *obj, char *varname) {
+    UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_DOUBLE);
+    return ui_progressbar_var(obj, var);
+}
+
+UIWIDGET ui_progressbar_var(UiObject *obj, UiVar *var) {
+    GtkWidget *progressbar = gtk_progress_bar_new();
+    if(var && var->value) {
+        UiDouble *value = var->value;
+        value->get = ui_progressbar_get;
+        value->set = ui_progressbar_set;
+        value->obj = progressbar;
+        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progressbar), 0.5);
+    }
+    
+    UiContainer *ct = uic_get_current_container(obj);
+    ct->add(ct, progressbar, FALSE);
+    
+    return progressbar;
+}
+
+double ui_progressbar_get(UiDouble *d) {
+    d->value = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(d->obj));
+    return d->value;
+}
+
+void ui_progressbar_set(UiDouble *d, double value) {
+    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(d->obj), value);
+    d->value = value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/gtk/display.h	Wed Nov 22 08:47:52 2017 +0100
@@ -0,0 +1,48 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2017 Olaf Wintermann. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LABEL_H
+#define	LABEL_H
+
+#include "../ui/toolkit.h"
+#include "toolkit.h"
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+UIWIDGET ui_progressbar_var(UiObject *obj, UiVar *var);
+double ui_progressbar_get(UiDouble *d);
+void ui_progressbar_set(UiDouble *d, double value);
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* LABEL_H */
+
--- a/ui/gtk/label.c	Sun Nov 19 09:38:23 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 2017 Olaf Wintermann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   1. Redistributions of source code must retain the above copyright
- *      notice, this list of conditions and the following disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in the
- *      documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "label.h"
-#include "container.h"
-#include "../../ucx/mempool.h"
-#include "../common/context.h"
-#include "../common/object.h"
-
-static void set_alignment(GtkWidget *widget, float xalign, float yalign) {
-#if GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 16
-    gtk_label_set_xalign(GTK_LABEL(widget), xalign);
-    gtk_label_set_yalign(GTK_LABEL(widget), yalign);
-#else
-    gtk_misc_set_alignment(GTK_MISC(widget), xalign, yalign);
-#endif
-}
-
-UIWIDGET ui_label(UiObject *obj, char *label) { 
-    GtkWidget *widget = gtk_label_new(label);
-    
-    UiContainer *ct = uic_get_current_container(obj);
-    ct->add(ct, widget, FALSE);
-    
-    return widget;
-}
-
-UIWIDGET ui_llabel(UiObject *obj, char *label) {
-    UIWIDGET widget = ui_label(obj, label);
-    set_alignment(widget, 0, .5);
-    return widget;
-}
-
-UIWIDGET ui_rlabel(UiObject *obj, char *label) {
-    UIWIDGET widget = ui_label(obj, label);
-    //gtk_label_set_justify(GTK_LABEL(widget), GTK_JUSTIFY_RIGHT);
-    
-    set_alignment(widget, 1, .5);
-    return widget;
-}
-
-UIWIDGET ui_space(UiObject *obj) {
-    GtkWidget *widget = gtk_label_new("");
-    UiContainer *ct = uic_get_current_container(obj);
-    ct->add(ct, widget, TRUE);
-    
-    return widget;
-}
-
-UIWIDGET ui_separator(UiObject *obj) {
-#if UI_GTK3
-    GtkWidget *widget = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
-#else
-    GtkWidget *widget = gtk_hseparator_new();
-#endif
-    UiContainer *ct = uic_get_current_container(obj);
-    ct->add(ct, widget, FALSE);
-    
-    return widget;
-}
-
--- a/ui/gtk/label.h	Sun Nov 19 09:38:23 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 2017 Olaf Wintermann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   1. Redistributions of source code must retain the above copyright
- *      notice, this list of conditions and the following disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in the
- *      documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef LABEL_H
-#define	LABEL_H
-
-#include "../ui/toolkit.h"
-#include "toolkit.h"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-
-
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif	/* LABEL_H */
-
--- a/ui/gtk/objs.mk	Sun Nov 19 09:38:23 2017 +0100
+++ b/ui/gtk/objs.mk	Wed Nov 22 08:47:52 2017 +0100
@@ -36,7 +36,7 @@
 GTKOBJ += menu.o
 GTKOBJ += toolbar.o
 GTKOBJ += button.o
-GTKOBJ += label.o
+GTKOBJ += display.o
 GTKOBJ += text.o
 GTKOBJ += model.o
 GTKOBJ += tree.o
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/ui/display.h	Wed Nov 22 08:47:52 2017 +0100
@@ -0,0 +1,59 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2017 Olaf Wintermann. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * display widgets without user input
+ */
+
+#ifndef UI_DISPLAY_H
+#define UI_DISPLAY_H
+
+#include "toolkit.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+/* label widgets */
+UIWIDGET ui_label(UiObject *obj, char *label);
+UIWIDGET ui_llabel(UiObject *obj, char *label);
+UIWIDGET ui_rlabel(UiObject *obj, char *label);
+UIWIDGET ui_space(UiObject *obj);
+UIWIDGET ui_separator(UiObject *obj);
+
+/* progress bar */
+UIWIDGET ui_progressbar(UiObject *obj, UiDouble *value);
+UIWIDGET ui_progressbar_nv(UiObject *obj, char *varname);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* UI_DISPLAY_H */
+
--- a/ui/ui/toolkit.h	Sun Nov 19 09:38:23 2017 +0100
+++ b/ui/ui/toolkit.h	Wed Nov 22 08:47:52 2017 +0100
@@ -357,13 +357,6 @@
 void ui_set_visible(UIWIDGET widget, int visible);
 
 
-// label widgets
-UIWIDGET ui_label(UiObject *obj, char *label);
-UIWIDGET ui_llabel(UiObject *obj, char *label);
-UIWIDGET ui_rlabel(UiObject *obj, char *label);
-UIWIDGET ui_space(UiObject *obj);
-UIWIDGET ui_separator(UiObject *obj);
-
 #ifdef	__cplusplus
 }
 #endif
--- a/ui/ui/ui.h	Sun Nov 19 09:38:23 2017 +0100
+++ b/ui/ui/ui.h	Wed Nov 22 08:47:52 2017 +0100
@@ -43,6 +43,7 @@
 #include "entry.h"
 #include "range.h"
 #include "image.h"
+#include "display.h"
 #include "dnd.h"
 
 #endif	/* UI_H */

mercurial