+
+static gboolean hbtk_combo_box_is_separator (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+{
+//GtkTreePath *path;
+gboolean retval;
+gchar *txt;
+
+ gtk_tree_model_get (model, iter, 0, &txt, -1);
+ retval = *txt == 0 ? TRUE : FALSE;
+ //leak
+ g_free(txt);
+
+ return retval;
+}
+
+
+guint32 hbtk_combo_box_get_active_id (GtkComboBoxText *combobox)
+{
+const gchar* buf;
+guint32 retval;
+
+ buf = gtk_combo_box_get_active_id(GTK_COMBO_BOX(combobox));
+ retval = buf != NULL ? atoi(buf) : 0;
+
+ return retval;
+}
+
+
+void hbtk_combo_box_set_active_id (GtkComboBoxText *combobox, guint32 key)
+{
+gchar buf[HB_KV_BUFFER_MAX_LEN];
+
+ g_snprintf(buf, HB_KV_BUFFER_MAX_LEN-1, "%d", key);
+ gtk_combo_box_set_active_id(GTK_COMBO_BOX(combobox), buf);
+}
+
+
+void hbtk_combo_box_text_append (GtkComboBoxText *combobox, guint32 key, gchar *text)
+{
+gchar buf[HB_KV_BUFFER_MAX_LEN];
+
+ g_snprintf(buf, HB_KV_BUFFER_MAX_LEN-1, "%d", key);
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combobox), buf, text);
+}
+
+
+GtkWidget *hbtk_combo_box_new (GtkWidget *label)
+{
+GtkWidget *combobox;
+
+ combobox = gtk_combo_box_text_new();
+
+ if(label)
+ gtk_label_set_mnemonic_widget (GTK_LABEL(label), combobox);
+
+ return combobox;
+}
+
+
+GtkWidget *hbtk_combo_box_new_with_data (GtkWidget *label, HbKvData *kvdata)
+{
+GtkWidget *combobox = hbtk_combo_box_new(label);
+HbKvData *tmp;
+gboolean hassep;
+guint32 i;
+
+ hassep = FALSE;
+ for(i=0;i<HB_KV_ITEMS_MAX_LEN;i++)