Ejemplo n.º 1
0
Archivo: dialog.go Proyecto: sqp/godock
func dialogWidgetText(data cdtype.DialogWidgetText) (*gtk.Widget, func() interface{}) {
	var widget *gtk.Widget
	var getValue func() interface{}

	if data.MultiLines {
		textview := newgtk.TextView()
		scroll := newgtk.ScrolledWindow(nil, nil)
		scroll.SetPolicy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
		scroll.Add(textview)
		scroll.Set("width-request", 230)
		scroll.Set("height-request", 130)

		if data.InitialValue != "" {
			buffer, e := textview.GetBuffer()
			if e == nil {
				buffer.SetText(data.InitialValue)
			}
		}
		if data.Locked {
			textview.SetEditable(false)
		}

		widget = &scroll.Widget
		getValue = func() interface{} {
			buffer, e := textview.GetBuffer()
			if e != nil {
				return ""
			}
			start, end := buffer.GetBounds()
			answer, _ := buffer.GetText(start, end, true)
			return answer
		}

	} else {
		entry := newgtk.Entry()
		entry.SetHasFrame(false)
		if data.InitialValue != "" {
			entry.SetText(data.InitialValue)
		}
		if data.Locked {
			entry.SetEditable(false)
		}
		if data.Hidden {
			entry.SetVisibility(false)
		}

		widget = &entry.Widget
		getValue = func() interface{} {
			answer, _ := entry.GetText()
			return answer
		}

		// 	g_object_set (pOneWidget, "width-request", CAIRO_DIALOG_MIN_ENTRY_WIDTH, NULL);

	}

	// 					if (iNbCharsMax != 0)
	// 					{
	// 						gchar *cLabel = g_strdup_printf ("<b>%zd</b>", cInitialText ? strlen (cInitialText) : 0);
	// 						GtkWidget *pLabel = gtk_label_new (cLabel);
	// 						g_free (cLabel);
	// 						gtk_label_set_use_markup (GTK_LABEL (pLabel), TRUE);
	// 						GtkWidget *pBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
	// 						gtk_box_pack_start (GTK_BOX (pBox), pInteractiveWidget, TRUE, TRUE, 0);
	// 						gtk_box_pack_start (GTK_BOX (pBox), pLabel, FALSE, FALSE, 0);
	// 						pInteractiveWidget = pBox;

	// 						if (bMultiLines)
	// 						{
	// 							GtkTextBuffer *pBuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (pOneWidget));
	// 							g_signal_connect (pBuffer, "changed", G_CALLBACK (_on_text_changed), pLabel);
	// 							g_object_set_data (G_OBJECT (pBuffer), "nb-chars-max", GINT_TO_POINTER (iNbCharsMax));
	// 						}
	// 						else
	// 						{
	// 							g_signal_connect (pOneWidget, "changed", G_CALLBACK (_on_text_changed), pLabel);
	// 							g_object_set_data (G_OBJECT (pOneWidget), "nb-chars-max", GINT_TO_POINTER (iNbCharsMax));
	// 							gtk_entry_set_width_chars (GTK_ENTRY (pOneWidget), MIN (iNbCharsMax/2, 100));  // a rough estimate is: 140 chars ~ 1024 pixels
	// 						}
	// 					}

	// cstr := (*C.gchar)(C.CString("cd-widget"))
	// defer C.free(unsafe.Pointer((*C.char)(cstr)))
	// p := unsafe.Pointer(widget.GObject)
	// C.g_object_set_data((*C.GObject)(p), cstr, C.gpointer(p))

	widget.GrabFocus()
	return widget, getValue
}