UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2014 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include "text.h" 30 #include "container.h" 31 32 #include "../common/context.h" 33 #include "../common/document.h" 34 35 UIWIDGET ui_textarea(UiObject *obj, UiText *value) { 36 QTextDocument *txtdoc = value && value->obj ? (QTextDocument*)value->obj : new QTextDocument(); 37 38 if(value) { 39 if(value->value && value->obj) { 40 QString str = QString::fromUtf8(value->value); 41 txtdoc->setPlainText(str); 42 } 43 44 value->get = ui_textarea_get; 45 value->set = ui_textarea_set; 46 value->getsubstr = ui_textarea_getsubstr; 47 value->insert = ui_textarea_insert; 48 value->setposition = ui_textarea_setposition; 49 value->position = ui_textarea_position; 50 value->selection = ui_textarea_selection; 51 value->length = ui_textarea_length; 52 value->remove = ui_textarea_remove; 53 value->obj = txtdoc; 54 value->value = NULL; 55 } 56 57 UiContainer *ct = uic_get_current_container(obj); 58 QTextEdit *textedit = new QTextEdit(); 59 textedit->setDocument(txtdoc); 60 ct->add(textedit, true); 61 62 return textedit; 63 } 64 65 UIWIDGET ui_textarea_nv(UiObject *obj, char *varname) { 66 UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_TEXT); 67 if(var) { 68 UiText *value = (UiText*)var->value; 69 return ui_textarea(obj, value); 70 } else { 71 // TODO: error 72 } 73 return NULL; 74 } 75 76 77 char* ui_textarea_get(UiText *text) { 78 if(text->value) { 79 free(text->value); 80 } 81 82 QTextDocument *doc = (QTextDocument*)text->obj; 83 QString str = doc->toPlainText(); 84 QByteArray array = str.toLocal8Bit(); 85 const char *cstr = array.constData(); 86 87 if(text->value) { 88 free(text->value); 89 } 90 text->value = strdup(cstr); 91 return text->value; 92 } 93 94 void ui_textarea_set(UiText *text, char *str) { 95 // set text 96 QTextDocument *doc = (QTextDocument*)text->obj; 97 QString qstr = QString::fromUtf8(str); 98 doc->setPlainText(qstr); 99 // cleanup 100 if(text->value) { 101 free(text->value); 102 } 103 text->value = NULL; 104 } 105 106 char* ui_textarea_getsubstr(UiText *text, int begin, int end) { 107 QTextDocument *doc = (QTextDocument*)text->obj; 108 return NULL; // TODO 109 } 110 111 void ui_textarea_insert(UiText *text, int pos, char *str) { 112 QTextDocument *doc = (QTextDocument*)text->obj; 113 } 114 115 void ui_textarea_setposition(UiText *text, int pos) { 116 // TODO 117 } 118 119 int ui_textarea_position(UiText *text) { 120 QTextDocument *doc = (QTextDocument*)text->obj; 121 return 0; // TODO 122 } 123 124 void ui_textarea_selection(UiText *text, int *begin, int *end) { 125 QTextDocument *doc = (QTextDocument*)text->obj; 126 } 127 128 int ui_textarea_length(UiText *text) { 129 QTextDocument *doc = (QTextDocument*)text->obj; 130 return 0; // TODO 131 } 132 133 void ui_textarea_remove(UiText *text, int begin, int end) { 134 QTextDocument *doc = (QTextDocument*)text->obj; 135 } 136 137 138 /* ------------------- TextField ------------------- */ 139 140 UIWIDGET ui_textfield(UiObject *obj, UiString *value) { 141 QLineEdit *textfield = new QLineEdit(); 142 143 UiContainer *ct = uic_get_current_container(obj); 144 ct->add(textfield, false); 145 146 if(value) { 147 if(value->value) { 148 QString str = QString::fromUtf8(value->value); 149 textfield->setText(str); 150 free(value->value); 151 value->value = NULL; 152 } 153 value->set = ui_textfield_set; 154 value->get = ui_textfield_get; 155 value->obj = textfield; 156 } 157 158 return textfield; 159 } 160 161 UIWIDGET ui_textfield_nv(UiObject *obj, char *varname) { 162 UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_STRING); 163 if(var) { 164 UiString *value = (UiString*)var->value; 165 return ui_textfield(obj, value); 166 } else { 167 // TODO: error 168 } 169 return NULL; 170 } 171 172 char* ui_textfield_get(UiString *str) { 173 QLineEdit *textfield = (QLineEdit*)str->obj; 174 QString qstr = textfield->text(); 175 176 if(str->value) { 177 free(str->value); 178 } 179 QByteArray array = qstr.toLocal8Bit(); 180 const char *cstr = array.constData(); 181 str->value = strdup(cstr); 182 183 return str->value; 184 } 185 186 void ui_textfield_set(UiString *str, char *value) { 187 QLineEdit *textfield = (QLineEdit*)str->obj; 188 QString qstr = QString::fromUtf8(value); 189 textfield->setText(qstr); 190 191 if(str->value) { 192 free(str->value); 193 } 194 str->value = NULL; 195 } 196