// 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, ) }
// 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) }
// 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 // { // cImagePath = cairo_dock_search_image_s_path (CAIRO_DOCK_DEFAULT_ICON_NAME); // if (cImagePath == NULL || ! g_file_test (cImagePath, G_FILE_TEST_EXISTS)) // { // g_free (cImagePath); // cImagePath = g_strdup (GLDI_SHARE_DATA_DIR"/icons/"CAIRO_DOCK_DEFAULT_ICON_NAME); // } // } // } // //g_print (" + %s\n", cImagePath); // if (cImagePath != NULL) // { // pixbuf = gdk_pixbuf_new_from_file_at_size (cImagePath, iDesiredIconSize, iDesiredIconSize, NULL); // } // //g_print (" -> %p\n", pixbuf); // // get the name // if (CAIRO_DOCK_IS_USER_SEPARATOR (pIcon)) // separator // cName = "---------"; // else if (CAIRO_DOCK_IS_APPLET (pIcon)) // applet // cName = pIcon->pModuleInstance->pModule->pVisitCard->cTitle; // else // launcher // cName = (pIcon->cInitialName ? pIcon->cInitialName : pIcon->cName); // // store the icon // memset (&iter, 0, sizeof (GtkTreeIter)); // gtk_list_store_append (GTK_LIST_STORE (modele), &iter); // gtk_list_store_set (GTK_LIST_STORE (modele), &iter, // CAIRO_DOCK_MODEL_NAME, cName, // CAIRO_DOCK_MODEL_RESULT, cID, // CAIRO_DOCK_MODEL_ICON, pixbuf, -1); // g_free (cImagePath); // if (pixbuf) // g_object_unref (pixbuf); // if (cValue && strcmp (cValue, cID) == 0) // gtk_combo_box_set_active_iter (GTK_COMBO_BOX (pOneWidget), &iter); // } // } // g_free (cValue); // } key.PackKeyWidget(key, getValueListCombo(widget, model, key.Log()), func(uncast interface{}) { saved.SetActive(uncast.(string)) }, widget) }