//__________________________________________________________________ void _HYPlatformPullDown::_MarkItem (long index, char mark) { if (theMenu && index*2 < widgetList.lLength) { GtkWidget * theImage = nil; switch (mark) { case HY_PULLDOWN_CHECK_MARK: theImage = gtk_image_new_from_stock (GTK_STOCK_APPLY,GTK_ICON_SIZE_MENU); break; case HY_PULLDOWN_BULLET_MARK: theImage = gtk_image_new_from_stock (GTK_STOCK_YES,GTK_ICON_SIZE_MENU); break; case HY_PULLDOWN_DIAMOND_MARK: theImage = gtk_image_new_from_stock (GTK_STOCK_ADD,GTK_ICON_SIZE_MENU); break; } GtkWidget * menuLabel = gtk_bin_get_child (GTK_BIN(widgetList(2*index+1))); if (theImage) { gtk_widget_show (theImage); } if (GTK_IS_LABEL(menuLabel)) { if (theImage) { GtkContainer * cW = GTK_CONTAINER (widgetList(2*index+1)); GtkWidget * hBox = gtk_hbox_new (FALSE,5); gtk_widget_show (hBox); g_object_ref(menuLabel); gtk_container_remove (cW, menuLabel); gtk_box_pack_start(GTK_BOX(hBox), theImage, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hBox), menuLabel, FALSE, FALSE, 0); g_object_unref(menuLabel); gtk_container_add (cW, hBox); } } else { GList * children = gtk_container_get_children (GTK_CONTAINER(menuLabel)); GtkWidget * restoreWidget = GTK_WIDGET(children->next->data); g_object_ref (restoreWidget); if (theImage) { GtkWidget * replaceWidget = GTK_WIDGET(children->data); gtk_container_remove(GTK_CONTAINER(menuLabel),replaceWidget); gtk_container_remove(GTK_CONTAINER(menuLabel),restoreWidget); gtk_box_pack_start(GTK_BOX(menuLabel), theImage, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(menuLabel), restoreWidget, FALSE, FALSE, 0); } else { GtkWidget * parentWidget = menuLabel->parent; gtk_container_remove(GTK_CONTAINER(parentWidget),menuLabel); gtk_container_add (GTK_CONTAINER(parentWidget), restoreWidget); } gtk_widget_show (restoreWidget); g_object_unref (restoreWidget); g_list_free (children); } } }
//__________________________________________________________________ _HYRect _HYPullDown::_SuggestDimensions (void) { _HYRect res = {25,100,25,100,HY_COMPONENT_NO_SCROLL}; if (theMenu) { long naturalWidth = 0; PangoLayout * fontMeasurer = nil; for (long k=0; k<widgetList.lLength; k+=2) { GtkWidget * dropWidget = GTK_WIDGET (widgetList(k)); if (!fontMeasurer) { fontMeasurer = pango_layout_new (gtk_widget_get_pango_context (dropWidget)); } pango_layout_set_text(fontMeasurer,GetMenuItem(k/2)->sData ,GetMenuItem(k/2)->sLength); PangoRectangle extents, log_ext; pango_layout_get_pixel_extents (fontMeasurer,&extents,nil); if (extents.width > naturalWidth) { naturalWidth = extents.width; } } if (fontMeasurer) { g_object_unref (fontMeasurer); } res.right = res.left = naturalWidth+25; } return res; }
int main(int argc, char *argv[]) { int ret = -1; QApplication application(argc, argv); ListWidget* list = new ListWidget; for(int i=0;i<10;++i) { list->addWidget(new QPushButton(QString::number(i))); } WidgetList widgetList(list); widgetList.show(); ret = application.exec(); delete list; return ret; }
//__________________________________________________________________ void _HYPlatformPullDown::_EnableItem (long theItem, bool toggle) { gtk_widget_set_sensitive(GTK_WIDGET(widgetList(2*theItem)), toggle); }