本文整理匯總了Golang中github.com/sqp/godock/widgets/cfbuild/cftype.Key.Value方法的典型用法代碼示例。如果您正苦於以下問題:Golang Key.Value方法的具體用法?Golang Key.Value怎麽用?Golang Key.Value使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/sqp/godock/widgets/cfbuild/cftype.Key
的用法示例。
在下文中一共展示了Key.Value方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: ColorSelector
// ColorSelector adds a color selector widget.
//
func ColorSelector(key *cftype.Key) {
values := key.Value().ListFloat()
if len(values) == 3 {
values = append(values, 1) // no transparency.
}
gdkColor := gdk.NewRGBA(values...)
widget := newgtk.ColorButtonWithRGBA(gdkColor)
var getValue func() interface{}
switch key.Type {
case cftype.KeyColorSelectorRGB:
key.NbElements = 3
getValue = func() interface{} { return widget.GetRGBA().Floats()[:3] } // Need to trunk ?
case cftype.KeyColorSelectorRGBA:
key.NbElements = 4
getValue = func() interface{} { return widget.GetRGBA().Floats() }
}
widget.Set("use-alpha", key.IsType(cftype.KeyColorSelectorRGBA))
key.PackKeyWidget(key,
getValue,
func(uncast interface{}) { widget.SetRGBA(gdk.NewRGBA(uncast.([]float64)...)) },
widget,
)
oldval, e := key.Storage().Default(key.Group, key.Name)
if e == nil {
PackReset(key, oldval.ListFloat())
}
}
示例2: PackComboBoxWithIndexHandbooker
// PackComboBoxWithIndexHandbooker creates a combo box filled with the getList call.
//
func PackComboBoxWithIndexHandbooker(key *cftype.Key, index map[string]datatype.Handbooker) {
model := newModelSimple()
model.SetSortColumnId(RowName, gtk.SORT_ASCENDING)
widget, getValue := NewComboBoxWithModel(model, key.Log(), false, false, false)
value := key.Value().String()
details := handbook.New(key.Log())
key.PackWidget(details, false, false, 0)
widget.Connect("changed", func() {
name := key.Value().String()
pack, ok := index[name]
if ok {
details.SetPackage(pack)
} else {
key.Log().NewErr("key missing", "ComboHandbook select preview:", name)
}
})
fields := datatype.IndexHandbooksToFields(index)
saved := indexiter.NewByString(widget, key.Log())
iter := fillModelWithFields(key, model, fields, value, saved)
widget.SetActiveIter(iter) // Set iter after connect, to update with current value.
key.PackKeyWidget(key,
getValue,
func(uncast interface{}) { saved.SetActive(uncast.(string)) },
widget,
)
}
示例3: ListDeskletDecoration
// ListDeskletDecoration adds a desklet decoration list widget.
//
func ListDeskletDecoration(key *cftype.Key) {
current := key.Value().String()
getList := key.Source().ListDeskletDecorations
if key.IsType(cftype.KeyListDeskletDecoDefault) {
getList = fieldsPrepend(getList(),
datatype.Field{Key: "default", Name: tran.Slate("default")},
)
}
PackComboBoxWithListField(key, false, false, getList)
// gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (pListStore), CAIRO_DOCK_MODEL_NAME, GTK_SORT_ASCENDING);
// _allocate_new_buffer;
// data[0] = pKeyBox;
// data[1] = (pFrameVBox != NULL ? pFrameVBox : pGroupBox);
// NbControlled = 9;
// data[2] = GINT_TO_POINTER (NbControlled);
// NbControlled --; // car dans cette fonction, on ne compte pas le separateur.
// g_signal_connect (G_OBJECT (pOneWidget), "changed", G_CALLBACK (_cairo_dock_select_custom_item_in_combo), data);
if current == "personnal" { // Disable the next widgets.
// CDControlWidget *cw = g_new0 (CDControlWidget, 1);
// pControlWidgets = g_list_prepend (pControlWidgets, cw);
// cw->NbControlled = NbControlled;
// cw->iNbSensitiveWidgets = 0;
// cw->iFirstSensitiveWidget = 1;
// cw->pControlContainer = (pFrameVBox != NULL ? pFrameVBox : pGroupBox);
}
}
示例4: IntegerSpin
// IntegerSpin adds an integer scale widget.
//
func IntegerSpin(key *cftype.Key) {
if key.NbElements > 1 { // TODO: remove temp test
key.Log().Info("integer multi ffs", key.Type.String())
}
value := key.Value().Int()
minValue, maxValue := minMaxValues(key)
w := newgtk.SpinButtonWithRange(minValue, maxValue, 1)
w.SetValue(float64(value))
PackValuerAsInt(key, w, w, value)
}
示例5: FontSelector
// FontSelector adds a font selector widget.
//
func FontSelector(key *cftype.Key) {
value := key.Value().String()
widget := newgtk.FontButtonWithFont(value)
widget.Set("show-style", true)
widget.Set("show-size", true)
widget.Set("use-size", true)
widget.Set("use-font", true)
key.PackKeyWidget(key,
func() interface{} { return widget.GetFontName() },
func(val interface{}) { widget.SetFontName(val.(string)) },
widget)
}
示例6: IntegerScale
// IntegerScale adds an integer scale widget.
//
func IntegerScale(key *cftype.Key) {
if key.NbElements > 1 { // TODO: remove temp test
key.Log().Info("IntegerScale multi", key.NbElements, key.Type.String())
}
value := key.Value().Int()
minValue, maxValue := minMaxValues(key)
step := (maxValue - minValue) / 20
if step < 1 {
step = 1
}
adjustment := newgtk.Adjustment(float64(value), minValue, maxValue, 1, step, 0)
w := newgtk.Scale(gtk.ORIENTATION_HORIZONTAL, adjustment)
w.Set("digits", 0)
PackValuerAsInt(key, WrapKeyScale(key, w), w, value)
}
示例7: Link
// Link adds a link widget.
//
func Link(key *cftype.Key) {
var text, link string
if len(key.AuthorizedValues) > 0 {
text = key.AuthorizedValues[0]
} else {
text = tran.Slate("link")
}
if len(key.AuthorizedValues) > 1 { // Custom keys have to use this input way.
link = key.AuthorizedValues[1]
} else {
link = key.Value().String()
}
widget := newgtk.LinkButtonWithLabel(link, text)
key.PackKeyWidget(key,
func() interface{} { return widget.GetUri() },
func(val interface{}) { widget.SetUri(val.(string)) },
widget)
}
示例8: ListDock
// ListDock adds a dock list widget.
//
func ListDock(key *cftype.Key) {
// Get current Icon name if its a Subdock.
iIconType, _ := key.Storage().Int(key.Group, "Icon Type")
SubdockName := ""
if iIconType == cftype.UserIconStack { // it's a stack-icon
SubdockName, _ = key.Storage().String(key.Group, "Name") // It's a subdock, get its name to remove the selection of a recursive position (inside itself).
}
list := key.Source().ListDocks("", SubdockName) // Get the list of available docks. Keep parent, but remove itself from the list.
list = append(list, datatype.Field{
Key: datatype.KeyNewDock,
Name: tran.Slate("New main dock")},
)
model := newModelSimple()
current := key.Value().String()
if current == "" {
current = datatype.KeyMainDock
}
model.SetSortColumnId(RowName, gtk.SORT_ASCENDING)
widget := newgtk.ComboBoxWithModel(model)
renderer := newgtk.CellRendererText()
widget.PackStart(renderer, false)
widget.AddAttribute(renderer, "text", RowName)
saved := indexiter.NewByString(widget, key.Log())
iter := fillModelWithFields(key, model, list, current, saved)
widget.SetActiveIter(iter)
key.PackKeyWidget(key,
getValueListCombo(widget, model, key.Log()),
func(uncast interface{}) { saved.SetActive(uncast.(string)) },
widget)
}
示例9: Handbook
// Handbook adds a handbook widget to show basic applet informations.
//
func Handbook(key *cftype.Key) {
appletName := key.Value().String()
widget := handbook.New(key.Log())
widget.ShowVersion = true
book := key.Source().Handbook(appletName)
if widget == nil || book == nil {
key.Log().NewErr("Handbook no widget")
return
}
widget.SetPackage(book)
key.BoxPage().PackStart(widget, true, true, 0)
key.PackKeyWidget(key,
func() interface{} { return appletName },
func(uncast interface{}) {
appletName = uncast.(string)
book := key.Source().Handbook(appletName)
widget.SetPackage(book)
},
)
}
示例10: TestValues
// TestValues updates the key data with test values.
//
func TestValues(key *cftype.Key) {
switch key.Type {
case cftype.KeyBoolButton,
cftype.KeyBoolCtrl:
if key.NbElements > 1 {
val := key.Value().ListBool()
newval := make([]bool, len(val))
for i, v := range val {
newval[i] = !v
}
key.ValueSet(newval)
} else {
val := key.Value().Bool()
newval := !val
key.ValueSet(newval)
}
case cftype.KeyIntSpin,
cftype.KeyIntSize,
cftype.KeyIntScale:
if key.NbElements > 1 {
val := key.Value().ListInt()
newval := make([]int, len(val))
for i, v := range val {
newval[i] = v + 1 + i
}
key.ValueSet(newval)
} else {
val := key.Value().Int()
newval := val + 1
key.ValueSet(newval)
}
case cftype.KeyFloatSpin,
cftype.KeyFloatScale:
if key.NbElements > 1 {
val := key.Value().ListFloat()
newval := make([]float64, len(val))
for i, v := range val {
newval[i] = v + 0.1 + float64(i) // hack +0.1 +i
}
key.ValueSet(newval)
} else {
val := key.Value().Float()
newval := val + 0.1
key.ValueSet(newval)
}
case cftype.KeyColorSelectorRGB,
cftype.KeyColorSelectorRGBA:
val := key.Value().ListFloat()
newval := make([]float64, len(val))
for i := range val {
newval[i] = val[i] + 0.1
if newval[i] > 1 {
newval[i]--
}
}
if len(newval) == 3 {
newval = append(newval, 1)
}
key.ValueSet(newval)
case cftype.KeyLink:
val := key.Value().String()
list := []string{urlDock, urlGoTour}
newval := cycleNextString(list, val, key)
key.ValueSet(newval)
case cftype.KeyStringEntry,
cftype.KeyFileSelector, cftype.KeyFolderSelector,
cftype.KeyImageSelector, cftype.KeySoundSelector,
cftype.KeyShortkeySelector, cftype.KeyClassSelector,
cftype.KeyPasswordEntry,
cftype.KeyListEntry:
val := key.Value().String()
newval := cycleNextString(otherStrings, val, nil)
key.ValueSet(newval)
case cftype.KeyFontSelector:
val := key.Value().String()
list := []string{"Arial 8", "Monospace 8"}
newval := cycleNextString(list, val, key)
key.ValueSet(newval)
case cftype.KeyTreeViewSortSimple,
cftype.KeyTreeViewSortModify:
val := key.Value().ListString()
newval := reverseStrings(val)
//.........這裏部分代碼省略.........
示例11: TreeView
// TreeView adds a treeview widget.
//
func TreeView(key *cftype.Key) {
values := key.Value().ListString()
// Build treeview.
model := newgtk.ListStore(
glib.TYPE_STRING, /* RowKey*/
glib.TYPE_STRING, /* RowName*/
glib.TYPE_STRING, /* RowIcon*/
glib.TYPE_STRING, /* RowDesc*/
glib.TYPE_BOOLEAN, // active
glib.TYPE_INT) // order
widget := newgtk.TreeViewWithModel(model)
widget.Set("headers-visible", false)
getValue := func() interface{} { // Grab data from all iters.
var list []string
iter, ok := model.GetIterFirst()
for ; ok; ok = model.IterNext(iter) {
str, e := gunvalue.New(model.GetValue(iter, RowName)).String()
if !key.Log().Err(e, "WidgetTreeView GetValue "+key.Name) {
list = append(list, str)
}
}
return list
}
// Add control buttons.
if key.IsType(cftype.KeyTreeViewMultiChoice) {
renderer := newgtk.CellRendererToggle()
col := newgtk.TreeViewColumnWithAttribute("", renderer, "active", 4)
widget.AppendColumn(col)
// g_signal_connect (G_OBJECT (rend), "toggled", (GCallback) _cairo_dock_activate_one_element, modele);
renderer.Set("active", 4)
}
renderer := newgtk.CellRendererText()
col := newgtk.TreeViewColumnWithAttribute("", renderer, "text", RowName)
widget.AppendColumn(col)
// cValueList = g_key_file_get_string_list (pKeyFile, cGroupName, cKeyName, &length, NULL);
model.SetSortColumnId(5, gtk.SORT_ASCENDING)
scroll := newgtk.ScrolledWindow(nil, nil)
//
// if len(key.AuthorizedValues) > 0 {
// key.Log().Info("WidgetTreeView AuthorizedValues", key.AuthorizedValues)
// }
// if (key.AuthorizedValues != NULL && key.AuthorizedValues[0] != NULL)
// for (k = 0; key.AuthorizedValues[k] != NULL; k++);
// else
// k = 1;
scroll.Set("height-request", 100) // key.IsType(cftype.KeyTreeViewSortModify) ? 100 : MIN (100, k * 25)
scroll.Set("width-request", 250)
scroll.SetPolicy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
scroll.Add(widget)
vboxItems := newgtk.Box(gtk.ORIENTATION_VERTICAL, cftype.MarginGUI)
grid := newgtk.Grid()
grid.Attach(vboxItems, 0, 0, 1, 1)
grid.Attach(scroll, 1, 0, 1, 1)
if key.IsType(cftype.KeyTreeViewSortSimple, cftype.KeyTreeViewSortModify) {
buttonUp := newgtk.Button()
buttonDn := newgtk.Button()
imgUp := newgtk.ImageFromIconName("go-up", gtk.ICON_SIZE_SMALL_TOOLBAR)
imgDn := newgtk.ImageFromIconName("go-down", gtk.ICON_SIZE_SMALL_TOOLBAR)
buttonUp.SetImage(imgUp)
buttonDn.SetImage(imgDn)
data := treeViewData{key.Log(), model, widget, nil}
buttonUp.Connect("clicked", onTreeviewMoveUp, data) // Move selection up and down callbacks.
buttonDn.Connect("clicked", onTreeviewMoveDown, data)
vboxItems.PackStart(buttonUp, false, false, 0)
vboxItems.PackStart(buttonDn, false, false, 0)
if key.IsType(cftype.KeyTreeViewSortModify) {
buttonAdd := newgtk.Button()
entry := newgtk.Entry()
buttonRm := newgtk.Button()
imgAdd := newgtk.ImageFromIconName("list-add", gtk.ICON_SIZE_SMALL_TOOLBAR)
imgRm := newgtk.ImageFromIconName("list-remove", gtk.ICON_SIZE_SMALL_TOOLBAR)
buttonAdd.SetImage(imgAdd)
buttonRm.SetImage(imgRm)
vboxItems.PackStart(buttonRm, false, false, 0)
//.........這裏部分代碼省略.........
示例12: Lists
// Lists adds a string list widget.
//
func Lists(key *cftype.Key) {
if key.IsType(cftype.KeyListNbCtrlSimple, cftype.KeyListNbCtrlSelect) && len(key.AuthorizedValues) == 0 {
key.Log().NewWarn("not enough values", "widget numbered control list:", key.Name)
return
}
// Get full value with ';'.
value := key.Value().String()
// log.DEV("LIST "+string(key.Type), key.Name, value, key.AuthorizedValues)
listIsNumbered := key.IsType(cftype.KeyListNumbered, cftype.KeyListNbCtrlSimple, cftype.KeyListNbCtrlSelect)
iSelectedItem := -1
current := ""
// Control selective use 3 AuthorizedValues fields for each "value".
step := ternary.Int(key.IsType(cftype.KeyListNbCtrlSelect), 3, 1)
if key.IsType(cftype.KeyListEntry) {
current = value
}
if listIsNumbered && value != "" {
var e error
iSelectedItem, e = strconv.Atoi(value)
switch {
case key.Log().Err(e, "selection problem", "[", value, "]", "[", iSelectedItem, "]", key.Name):
case iSelectedItem < 0:
case iSelectedItem < len(key.AuthorizedValues):
current = key.AuthorizedValues[iSelectedItem*step]
default:
key.Log().NewWarn("selection out of range", "widget numbered list:", key.Name)
}
}
var list []datatype.Field
if len(key.AuthorizedValues) > 0 {
// int iOrder1, iOrder2, iExcept;
if key.IsType(cftype.KeyListNbCtrlSimple, cftype.KeyListNbCtrlSelect) {
key.SetNbControlled(0)
}
// gchar *cResult = (listIsNumbered ? g_new0 (gchar , 10) : NULL);
for k := 0; k < len(key.AuthorizedValues); k += step { // on ajoute toutes les chaines possibles a la combo.
if !listIsNumbered && iSelectedItem == -1 && value == key.AuthorizedValues[k] {
current = value
iSelectedItem = k / step
}
// if (cResult != NULL)
// snprintf (cResult, 9, "%d", k/dk); // dk becomes step
// iExcept = 0;
// if key.IsType(cftype.KeyListNbCtrlSelect) {
// iOrder1 = atoi (key.AuthorizedValues[k+1]);
// gchar *str = strchr (key.AuthorizedValues[k+2], ',');
// if (str) // Note: this mechanism is an addition to the original {first widget, number of widgets}; it's not very generic nor beautiful, but until we need more, it's well enough (currently, only the Dock background needs it).
// {
// *str = '\0';
// iExcept = atoi (str+1);
// }
// iOrder2 = atoi (key.AuthorizedValues[k+2]);
// NbControlled = MAX (NbControlled, iOrder1 + iOrder2 - 1);
// //g_print ("iSelectedItem:%d ; k/dk:%d\n", iSelectedItem , k/dk);
// if (iSelectedItem == (int)k/dk)
// {
// iFirstSensitiveWidget = iOrder1;
// iNbSensitiveWidgets = iOrder2;
// iNonSensitiveWidget = iExcept;
// if (iNonSensitiveWidget != 0)
// NbControlled ++;
// }
// } else {
// iOrder1 = iOrder2 = k;
// }
//
name := ""
if key.IsType(cftype.KeyListEntry) {
name = key.AuthorizedValues[k]
} else {
name = key.Translate(key.AuthorizedValues[k])
}
list = append(list, datatype.Field{
Key: key.AuthorizedValues[k],
Name: name,
})
// CAIRO_DOCK_MODEL_ORDER, iOrder1,
// CAIRO_DOCK_MODEL_ORDER2, iOrder2,
// CAIRO_DOCK_MODEL_STATE, iExcept, -1);
}
}
//.........這裏部分代碼省略.........
示例13: ListIconsMainDock
// ListIconsMainDock adds an icon list widget.
//
func ListIconsMainDock(key *cftype.Key) {
// {
// if (g_pMainDock == NULL) // maintenance mode... no dock, no icons
// {
// cValue = g_key_file_get_string (pKeyFile, cGroupName, cKeyName, NULL);
// pOneWidget = gtk_entry_new ();
// gtk_entry_set_text (GTK_ENTRY (pOneWidget), cValue); // if there is a problem, we can edit it.
// _pack_subwidget (pOneWidget);
// g_free (cValue);
// break;
// }
//
//
current := key.Value().String()
model := newModelSimple()
widget := newgtk.ComboBoxWithModel(model)
rp := newgtk.CellRendererPixbuf()
widget.PackStart(rp, false)
widget.AddAttribute(rp, "pixbuf", RowIcon)
renderer := newgtk.CellRendererText()
widget.PackStart(renderer, true)
widget.AddAttribute(renderer, "text", RowName)
list := key.Source().ListIconsMainDock()
saved := indexiter.NewByString(widget, key.Log())
iter := fillModelWithFields(key, model, list, current, saved)
widget.SetActiveIter(iter)
//
// // build the modele and combo
// modele = _cairo_dock_gui_allocate_new_model ();
// pOneWidget = gtk_combo_box_new_with_model (GTK_TREE_MODEL (modele));
// rend = gtk_cell_renderer_pixbuf_new ();
// gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (pOneWidget), rend, FALSE);
// gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (pOneWidget), rend, "pixbuf", CAIRO_DOCK_MODEL_ICON, NULL);
// rend = gtk_cell_renderer_text_new ();
// gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (pOneWidget), rend, FALSE);
// gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (pOneWidget), rend, "text", CAIRO_DOCK_MODEL_NAME, NULL);
// _pack_subwidget (pOneWidget);
// // get the dock
// CairoDock *pDock = NULL;
// if (pAuthorizedValuesList != NULL && pAuthorizedValuesList[0] != NULL)
// pDock = gldi_dock_get (pAuthorizedValuesList[0]);
// if (!pDock)
// pDock = g_pMainDock;
// // insert each icon
// cValue = g_key_file_get_string (pKeyFile, cGroupName, cKeyName, NULL);
// gint iDesiredIconSize = cairo_dock_search_icon_size (GTK_ICON_SIZE_LARGE_TOOLBAR); // 24 by default
// GtkTreeIter iter;
// Icon *pIcon;
// gchar *cImagePath, *cID;
// const gchar *cName;
// GdkPixbuf *pixbuf;
// GList *ic;
// for (ic = pDock->icons; ic != NULL; ic = ic->next)
// {
// pIcon = ic->data;
// if (pIcon->cDesktopFileName != NULL
// || pIcon->pModuleInstance != NULL)
// {
// pixbuf = NULL;
// cImagePath = NULL;
// cName = NULL;
// // get the ID
// if (pIcon->cDesktopFileName != NULL)
// cID = pIcon->cDesktopFileName;
// else
// cID = pIcon->pModuleInstance->cConfFilePath;
// // get the image
// if (pIcon->cFileName != NULL)
// {
// cImagePath = cairo_dock_search_icon_s_path (pIcon->cFileName, iDesiredIconSize);
// }
// if (cImagePath == NULL || ! g_file_test (cImagePath, G_FILE_TEST_EXISTS))
// {
// g_free (cImagePath);
// if (GLDI_OBJECT_IS_SEPARATOR_ICON (pIcon))
// {
// if (myIconsParam.cSeparatorImage)
// cImagePath = cairo_dock_search_image_s_path (myIconsParam.cSeparatorImage);
// }
// else if (CAIRO_DOCK_IS_APPLET (pIcon))
// {
// cImagePath = g_strdup (pIcon->pModuleInstance->pModule->pVisitCard->cIconFilePath);
// }
// else
//.........這裏部分代碼省略.........
示例14: CheckButton
// CheckButton adds a check button widget.
//
func CheckButton(key *cftype.Key) {
if key.NbElements > 1 { // TODO: remove temp test
key.Log().Info("CheckButton multi", key.NbElements, key.Type.String())
}
values := key.Value().ListBool()
var activers []widgetActiver
for k := 0; k < key.NbElements; k++ {
var value bool
if k < len(values) {
value = values[k]
}
w := newgtk.Switch()
w.SetActive(value)
key.PackSubWidget(w)
activers = append(activers, w)
if key.IsType(cftype.KeyBoolCtrl) {
// _allocate_new_buffer;
// data[0] = pKeyBox;
// data[1] = (pFrameVBox != NULL ? pFrameVBox : pGroupBox);
// if (pAuthorizedValuesList != NULL && pAuthorizedValuesList[0] != NULL)
// NbControlled = g_ascii_strtod (pAuthorizedValuesList[0], NULL);
// else
// NbControlled = 1;
// data[2] = GINT_TO_POINTER (NbControlled);
// if (NbControlled < 0) // a negative value means that the behavior is inverted.
// {
// bValue = !bValue;
// NbControlled = -NbControlled;
// }
// g_signal_connect (G_OBJECT (pOneWidget), "toggled", G_CALLBACK(_cairo_dock_toggle_control_button), data);
// g_object_set_data (G_OBJECT (pKeyBox), "nb-ctrl-widgets", GINT_TO_POINTER (NbControlled));
// g_object_set_data (G_OBJECT (pKeyBox), "one-widget", pOneWidget);
// if (! bValue) // les widgets suivants seront inactifs.
// {
// CDControlWidget *cw = g_new0 (CDControlWidget, 1);
// pControlWidgets = g_list_prepend (pControlWidgets, cw);
// cw->iNbSensitiveWidgets = 0;
// cw->NbControlled = NbControlled;
// cw->iFirstSensitiveWidget = 1;
// cw->pControlContainer = (pFrameVBox != NULL ? pFrameVBox : pGroupBox);
// } // sinon le widget suivant est sensitif, donc rien a faire.
}
}
if key.NbElements == 1 {
key.PackKeyWidget(key,
func() interface{} { return activers[0].GetActive() },
func(uncast interface{}) { activers[0].SetActive(uncast.(bool)) },
)
} else {
key.PackKeyWidget(key,
func() interface{} { return listActiverGet(activers) },
func(uncast interface{}) { listActiverSet(activers, uncast.([]bool)) },
)
}
}
示例15: Float
// Float adds a float selector widget. SpinButton or Horizontal Scale
//
func Float(key *cftype.Key) {
if key.NbElements > 1 { // TODO: remove temp test
key.Log().Info("Float multi", key.NbElements, key.Type.String())
}
values := key.Value().ListFloat()
minValue, maxValue := minMaxValues(key)
var valuers []WidgetValuer
for k := 0; k < key.NbElements; k++ {
var value float64
if k < len(values) {
value = values[k]
}
switch key.Type {
case cftype.KeyFloatScale:
adjustment := newgtk.Adjustment(
value,
minValue,
maxValue,
(maxValue-minValue)/20,
(maxValue-minValue)/10, 0,
)
w := newgtk.Scale(gtk.ORIENTATION_HORIZONTAL, adjustment)
w.Set("digits", 3)
key.PackSubWidget(WrapKeyScale(key, w))
valuers = append(valuers, w)
case cftype.KeyFloatSpin:
w := newgtk.SpinButtonWithRange(minValue, maxValue, 1)
w.Set("digits", 3)
w.SetValue(value)
key.PackSubWidget(w)
valuers = append(valuers, w)
}
}
switch {
case key.NbElements == 1:
key.PackKeyWidget(key,
func() interface{} { return valuers[0].GetValue() },
func(uncast interface{}) { valuers[0].SetValue(uncast.(float64)) },
)
oldval, e := key.Storage().Default(key.Group, key.Name)
if e == nil {
PackReset(key, oldval.Float())
}
default:
key.PackKeyWidget(key,
func() interface{} { return listValuerGet(valuers) },
func(uncast interface{}) { listValuerSet(valuers, uncast.([]float64)) },
)
oldval, e := key.Storage().Default(key.Group, key.Name)
if e == nil {
PackReset(key, oldval.ListFloat())
}
}
}