added text widget (Qt)

Thu, 28 Aug 2014 16:34:09 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 28 Aug 2014 16:34:09 +0200
changeset 56
87e3a5dc66dd
parent 55
9076eb40454d
child 57
ddfd6b90cc54

added text widget (Qt)

application/main.c file | annotate | diff | comparison | revisions
ui/gtk/text.c file | annotate | diff | comparison | revisions
ui/qt/Makefile file | annotate | diff | comparison | revisions
ui/qt/container.cpp file | annotate | diff | comparison | revisions
ui/qt/container.h file | annotate | diff | comparison | revisions
ui/qt/qt4.pro file | annotate | diff | comparison | revisions
ui/qt/text.cpp file | annotate | diff | comparison | revisions
ui/qt/text.h file | annotate | diff | comparison | revisions
ui/qt/toolbar.h file | annotate | diff | comparison | revisions
ui/qt/window.cpp file | annotate | diff | comparison | revisions
--- a/application/main.c	Mon Aug 25 17:27:29 2014 +0200
+++ b/application/main.c	Thu Aug 28 16:34:09 2014 +0200
@@ -43,6 +43,8 @@
     UiText text;
 } Document;
 
+UiText text;
+
 void action_new(UiEvent *event, void *data) {
     printf("new\n");
 }
@@ -77,7 +79,8 @@
 void action_button(UiEvent *event, void *data) {
     printf("button: %d\n", event->intval);
     //char *s = ui_gettext(event->obj, "text");
-    //printf("{%s}\n", s);    
+    char *s = ui_getval(text);
+    printf("{%s}\n", s);
 }
 
 int main(int argc, char** argv) { 
@@ -94,11 +97,12 @@
     ui_menuitem_st(UI_STOCK_CLOSE, action_close, NULL);
     //ui_checkitem("Check", action_button, NULL);
     
-    ui_toolitem_st("button", UI_STOCK_GO_BACK, action_button, NULL);
+    ui_toolitem_st("button", UI_STOCK_OPEN, action_button, NULL);
     ui_toolbar_add_default("button");
     
     printf("create window\n");
     UiObject *window = ui_window("Mod0", NULL);
+    ui_textarea(window, &text);
     
     /*
     UiModelInfo *model = ui_model_info(window->ctx, UI_STRING, "Name", UI_STRING, "Email", -1);
--- a/ui/gtk/text.c	Mon Aug 25 17:27:29 2014 +0200
+++ b/ui/gtk/text.c	Thu Aug 28 16:34:09 2014 +0200
@@ -103,6 +103,7 @@
         
         if(value->value) {
             gtk_text_buffer_set_text(buf, value->value, -1);
+            // TODO: free value
         }
         
         value->get = ui_textarea_get;
--- a/ui/qt/Makefile	Mon Aug 25 17:27:29 2014 +0200
+++ b/ui/qt/Makefile	Thu Aug 28 16:34:09 2014 +0200
@@ -33,7 +33,9 @@
 $(QT_MAKEFILE): qt/qt4.pro
 	qmake-qt4 -o - qt/qt4.pro > $(QT_MAKEFILE)
 
-$(UI_LIB): $(QT_MAKEFILE) $(OBJ)
+$(UI_LIB): $(QT_MAKEFILE) $(OBJ) FORCE
 	$(MAKE) -f $(QT_MAKEFILE)
-	$(AR) $(ARFLAGS) $(UI_LIB) $(OBJ)	
+	$(AR) $(ARFLAGS) $(UI_LIB) $(OBJ)
 
+FORCE:
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/qt/container.cpp	Thu Aug 28 16:34:09 2014 +0200
@@ -0,0 +1,39 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2014 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 "container.h"
+
+
+UiWindowContainer::UiWindowContainer(QMainWindow* window) {
+    this->window = window;
+}
+
+void UiWindowContainer::add(QWidget* widget) {
+    window->setCentralWidget(widget);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/qt/container.h	Thu Aug 28 16:34:09 2014 +0200
@@ -0,0 +1,50 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2014 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 CONTAINER_H
+#define	CONTAINER_H
+
+#include "toolkit.h"
+#include "window.h"
+
+
+struct UiContainer {
+    virtual void add(QWidget *widget) = 0;
+};
+
+class UiWindowContainer : public UiContainer {
+public:  
+    QMainWindow *window;
+    
+    UiWindowContainer(QMainWindow *window);
+    
+    virtual void add(QWidget *widget);
+};
+
+#endif	/* CONTAINER_H */
+
--- a/ui/qt/qt4.pro	Mon Aug 25 17:27:29 2014 +0200
+++ b/ui/qt/qt4.pro	Thu Aug 28 16:34:09 2014 +0200
@@ -40,10 +40,14 @@
 SOURCES += menu.cpp
 SOURCES += toolbar.cpp
 SOURCES += stock.cpp
+SOURCES += container.cpp
+SOURCES += text.cpp
 
 HEADERS += toolkit.h
 HEADERS += window.h
 HEADERS += menu.h
 HEADERS += toolbar.h
 HEADERS += stock.h
+HEADERS += container.h
+HEADERS += text.h
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/qt/text.cpp	Thu Aug 28 16:34:09 2014 +0200
@@ -0,0 +1,121 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2014 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 "text.h"
+#include "container.h"
+
+#include "../common/context.h"
+#include "../common/document.h"
+
+UIWIDGET ui_textarea(UiObject *obj, UiText *value) {
+    UiContainer *ct = uic_get_current_container(obj); 
+    QTextEdit *textedit = new QTextEdit();
+    ct->add((textedit));
+    
+    if(value) {
+        if(value->value) {
+            // TODO: set text and free old value
+        }
+        
+        value->get = ui_textarea_get;
+        value->set = ui_textarea_set;
+        value->getsubstr = ui_textarea_getsubstr;
+        value->insert = ui_textarea_insert;
+        value->position = ui_textarea_position;
+        value->selection = ui_textarea_selection;
+        value->length = ui_textarea_length;
+        value->remove = ui_textarea_remove;
+        value->obj = textedit->document();
+        value->value = NULL;
+    }
+    
+    return textedit;
+}
+
+UIWIDGET ui_textarea_nv(UiObject *obj, char *varname) {
+    UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_TEXT);
+    if(var) {
+        UiText *value = (UiText*)var->value;
+        return ui_textarea(obj, value);
+    } else {
+        // TODO: error
+    }
+    return NULL;
+}
+
+
+char* ui_textarea_get(UiText *text) {
+    if(text->value) {
+        free(text->value);
+    }
+    
+    QTextDocument *doc = (QTextDocument*)text->obj;
+    QString str = doc->toPlainText();
+    QByteArray array = str.toLocal8Bit();
+    const char *cstr = array.constData();
+    text->value = strdup(cstr);
+    return text->value;
+}
+
+void ui_textarea_set(UiText *text, char *str) {
+    if(text->value) {
+        free(text->value);
+    }
+    text->value = NULL;
+    
+    QTextDocument *doc = (QTextDocument*)text->obj;
+    QString qstr = QString::fromUtf8(str);
+    doc->setPlainText(qstr);
+}
+
+char* ui_textarea_getsubstr(UiText *text, int begin, int end) {
+    QTextDocument *doc = (QTextDocument*)text->obj;
+    return NULL; // TODO
+}
+
+void ui_textarea_insert(UiText *text, int pos, char *str) {
+    QTextDocument *doc = (QTextDocument*)text->obj;
+}
+
+int ui_textarea_position(UiText *text) {
+    QTextDocument *doc = (QTextDocument*)text->obj;
+    return 0; // TODO
+}
+
+void ui_textarea_selection(UiText *text, int *begin, int *end) {
+    QTextDocument *doc = (QTextDocument*)text->obj;
+}
+
+int ui_textarea_length(UiText *text) {
+    QTextDocument *doc = (QTextDocument*)text->obj;
+    return 0; // TODO
+}
+
+void ui_textarea_remove(UiText *text, int begin, int end) {
+    QTextDocument *doc = (QTextDocument*)text->obj;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/qt/text.h	Thu Aug 28 16:34:09 2014 +0200
@@ -0,0 +1,51 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2014 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 TEXT_H
+#define	TEXT_H
+
+#include "toolkit.h"
+#include "../ui/text.h"
+#include <QTextEdit>
+
+// value implementations
+extern "C" {    
+    char* ui_textarea_get(UiText *text);
+    void ui_textarea_set(UiText *text, char *str);
+    char* ui_textarea_getsubstr(UiText *text, int begin, int end);
+    void ui_textarea_insert(UiText *text, int pos, char *str);
+    int ui_textarea_position(UiText *text);
+    void ui_textarea_selection(UiText *text, int *begin, int *end);
+    int ui_textarea_length(UiText *text);
+    void ui_textarea_remove(UiText *text, int begin, int end);
+}
+
+
+
+#endif	/* TEXT_H */
+
--- a/ui/qt/toolbar.h	Mon Aug 25 17:27:29 2014 +0200
+++ b/ui/qt/toolbar.h	Thu Aug 28 16:34:09 2014 +0200
@@ -39,7 +39,7 @@
     virtual void addTo(UiObject *obj, QToolBar *toolbar) = 0;
 };
 
-class UiToolItem {
+class UiToolItem : public UiToolItemI {
 public:
     char *label;
     char *image;
@@ -53,7 +53,7 @@
     virtual void addTo(UiObject *obj, QToolBar *toolbar);
 };
 
-class UiStockToolItem {
+class UiStockToolItem : public UiToolItemI {
 public:
     char *stockid;
     ui_callback callback;
--- a/ui/qt/window.cpp	Mon Aug 25 17:27:29 2014 +0200
+++ b/ui/qt/window.cpp	Thu Aug 28 16:34:09 2014 +0200
@@ -32,6 +32,7 @@
 #include "window.h"
 #include "menu.h"
 #include "toolbar.h"
+#include "container.h"
 
 UiObject* ui_window(char *title, void *window_data) {
     UcxMempool *mp = ucx_mempool_new(256);
@@ -48,6 +49,8 @@
     QToolBar *toolbar = ui_create_toolbar(obj);
     window->addToolBar(Qt::TopToolBarArea, toolbar);
     
+    obj->container = new UiWindowContainer(window);
+    
     obj->widget = window;
     return obj;
 }

mercurial