WVselMotif::WVselMotif ( pwr_tStatus *status, void *wv_parent_ctx, Widget wv_parent_wid, const char *wv_name, ldh_tWBContext wv_wbctx, char *volumename, int (*bc_success)( void *, pwr_tVolumeId *, int), void (*bc_cancel)(), int (*bc_time_to_exit)( void *), int show_volumes, wb_eType wv_wb_type) : WVsel(status,wv_parent_ctx,wv_name,wv_wbctx,volumename,bc_success,bc_cancel, bc_time_to_exit,show_volumes,wv_wb_type), parent_wid(wv_parent_wid) { Arg args[20]; int sts; int i; pwr_tVolumeId volid, *volume_ptr; pwr_tVolumeId volume; pwr_tClassId classid; char volname[80]; int size; int volume_count; int display_window; /* DRM database hierarchy related variables */ MrmHierarchy s_DRMh; MrmType dclass; char uid_filename[200] = {"pwr_exe:wb_vsel.uid"}; char *uid_filename_p = uid_filename; static MrmRegisterArg reglist[] = { /* First the context variable */ {(char*) "vsel_ctx", 0 }, {(char*) "vsel_write_priv", 0 }, /* Callbacks for the controlled login widget */ {(char*) "vsel_create_adb",(caddr_t)create_adb}, {(char*) "vsel_destroy_adb",(caddr_t)destroy_adb}, {(char*) "vsel_create_label",(caddr_t)create_label}, {(char*) "vsel_activate_ok",(caddr_t)activate_ok}, {(char*) "vsel_activate_cancel",(caddr_t)activate_cancel}, {(char*) "vsel_activate_close",(caddr_t)activate_close}, {(char*) "vsel_activate_showall",(caddr_t)activate_showall}, {(char*) "vsel_create_volumelist",(caddr_t)create_volumelist}, {(char*) "vsel_action_volumelist",(caddr_t)action_volumelist} }; static int reglist_num = (sizeof reglist / sizeof reglist[0]); sts = dcli_translate_filename( uid_filename, uid_filename); if ( EVEN(sts)) { printf( "** pwr_exe is not defined\n"); exit(0); } strcpy( volname, ""); if ( volumename != NULL && *volumename != 0 && !show_volumes) /* Start the navigater for this volume */ strcpy( volname, volumename); else if ( !show_volumes && wb_type != wb_eType_Buffer) { /* If there is only one volume in the db, select this volume */ volume_count = 0; sts = ldh_GetVolumeList( wbctx, &volume); while ( ODD(sts) ) { sts = ldh_GetVolumeClass( wbctx, volume, &classid); if (EVEN(sts)) { *status = sts; return; } if ( cdh_isClassVolumeClass( classid) || classid == pwr_eClass_WorkBenchVolume || volume == ldh_cRtVolume) { sts = ldh_GetNextVolume( wbctx, volume, &volume); continue; } sts = ldh_VolumeIdToName( wbctx, volume, volname, sizeof(volname), &size); if (EVEN(sts)) { *status = sts; return; } volume_count++; sts = ldh_GetNextVolume( wbctx, volume, &volume); } if ( volume_count != 1) strcpy( volname, ""); } // If volume name is supplied, find this volume and open the navigator. if ( strcmp( volname, "") && wb_type != wb_eType_Buffer) /* Check syntax, if new volumes is found, show the window */ sts = check_volumelist( 1, &display_window); if ( strcmp( volname, "") && !display_window) { sts = ldh_VolumeNameToId( wbctx, volname, &volid); WFoe::error_msg(sts); if ( ODD(sts)) { volume_ptr = (pwr_tVolumeId *) calloc( 1, sizeof( pwr_tVolumeId)); *volume_ptr = volid; (vsel_bc_success) ( (void *)this, volume_ptr, 1); if (vsel_bc_cancel != NULL) (vsel_bc_cancel) (); *status = LOGIN__SUCCESS; return; } else printf( "-- Unable to open volume '%s', volume doesn't exist\n", volname); } // Now start the module creation // set initialization values in context */ // Save the context structure in the widget */ XtSetArg (args[0], XmNuserData, (XtPointer) this); /* * Create a new widget * Open the UID files (the output of the UIL compiler) in the hierarchy * Register the items DRM needs to bind for us. * Create a new widget * Close the hierarchy * Compile the additional button translations and augment and add actions */ sts = MrmOpenHierarchy( 1, &uid_filename_p, NULL, &s_DRMh); if (sts != MrmSUCCESS) printf("can't open hierarchy\n"); reglist[0].value = (caddr_t) this; reglist[1].value = (caddr_t) write_priv; MrmRegisterNames(reglist, reglist_num); i=0; XtSetArg(args[i],XmNiconName,name); i++; /* Save the id of the top in the context */ widgets.toplevel = XtCreatePopupShell ( "selectvolume", topLevelShellWidgetClass, parent_wid, args, i); /* the positioning of a top level can only be define after the creation * of the widget . So i do it now: * use the parameters received x and y */ i=0; XtSetArg(args[i],XmNx,100);i++; XtSetArg(args[i],XmNy,100);i++; XtSetArg(args[i],XtNallowShellResize,TRUE), i++; XtSetValues( widgets.toplevel ,args,i); /* now that we have a top level we can get the main window */ sts = MrmFetchWidgetOverride(s_DRMh, (char*) "vsel_window", widgets.toplevel, name, args, 1, &widgets.vsel_window, &dclass); if (sts != MrmSUCCESS) printf("can't fetch utedit widget\n"); XtManageChild( widgets.vsel_window); /* SG 09.02.91 a top level should always be realized ! */ XtPopup( widgets.toplevel, XtGrabNone ); MrmCloseHierarchy(s_DRMh); wow = new CoWowMotif( widgets.vsel_window); if ( wb_type != wb_eType_Buffer) sts = check_volumelist( 0, &display_window); // Set input focus to the scrolled list widget XmProcessTraversal( widgets.volumelist, XmTRAVERSE_CURRENT); *status = LOGIN__SUCCESS; }
WVselGtk::WVselGtk ( pwr_tStatus *status, void *wv_parent_ctx, GtkWidget *wv_parent_wid, const char *wv_name, ldh_tWBContext wv_wbctx, char *volumename, int (*bc_success)( void *, pwr_tVolumeId *, int), void (*bc_cancel)(), int (*bc_time_to_exit)( void *), int show_volumes, wb_eType wv_wb_type) : WVsel(status,wv_parent_ctx,wv_name,wv_wbctx,volumename,bc_success,bc_cancel, bc_time_to_exit,show_volumes,wv_wb_type), parent_wid(wv_parent_wid) { int sts; pwr_tVolumeId volid, *volume_ptr; pwr_tVolumeId volume; pwr_tClassId classid; char volname[80]; int size; int volume_count; int display_window; GtkCellRenderer *text_renderer; GtkTreeViewColumn *name_column; strcpy( volname, ""); if ( volumename != NULL && *volumename != 0 && !show_volumes) /* Start the navigater for this volume */ strcpy( volname, volumename); else if ( !show_volumes && wb_type != wb_eType_Buffer) { /* If there is only one volume in the db, select this volume */ volume_count = 0; sts = ldh_GetVolumeList( wbctx, &volume); while ( ODD(sts) ) { sts = ldh_GetVolumeClass( wbctx, volume, &classid); if (EVEN(sts)) { *status = sts; return; } if ( cdh_isClassVolumeClass( classid) || classid == pwr_eClass_WorkBenchVolume || volume == ldh_cRtVolume) { sts = ldh_GetNextVolume( wbctx, volume, &volume); continue; } sts = ldh_VolumeIdToName( wbctx, volume, volname, sizeof(volname), &size); if (EVEN(sts)) { *status = sts; return; } volume_count++; sts = ldh_GetNextVolume( wbctx, volume, &volume); } if ( volume_count != 1) strcpy( volname, ""); } // If volume name is supplied, find this volume and open the navigator. if ( strcmp( volname, "") && wb_type != wb_eType_Buffer) /* Check syntax, if new volumes is found, show the window */ sts = check_volumelist( 1, &display_window); if ( strcmp( volname, "") && !display_window) { sts = ldh_VolumeNameToId( wbctx, volname, &volid); WFoe::error_msg(sts); if ( ODD(sts)) { volume_ptr = (pwr_tVolumeId *) calloc( 1, sizeof( pwr_tVolumeId)); *volume_ptr = volid; (vsel_bc_success) ( (void *)this, volume_ptr, 1); if (vsel_bc_cancel != NULL) (vsel_bc_cancel) (); *status = LOGIN__SUCCESS; return; } else printf( "-- Unable to open volume '%s', volume doesn't exist\n", volname); } // Create the window widgets.toplevel = (GtkWidget *) g_object_new( GTK_TYPE_WINDOW, "default-height", 400, "default-width", 500, "title", name, NULL); CoWowGtk::SetWindowIcon( widgets.toplevel); // Menu GtkAccelGroup *accel_g = (GtkAccelGroup *) g_object_new(GTK_TYPE_ACCEL_GROUP, NULL); gtk_window_add_accel_group(GTK_WINDOW(widgets.toplevel), accel_g); GtkMenuBar *menu_bar = (GtkMenuBar *) g_object_new(GTK_TYPE_MENU_BAR, NULL); // File Entry GtkWidget *file_close = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLOSE, accel_g); g_signal_connect(file_close, "activate", G_CALLBACK(WVselGtk::activate_close), this); GtkMenu *file_menu = (GtkMenu *) g_object_new( GTK_TYPE_MENU, NULL); gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), file_close); GtkWidget *file = gtk_menu_item_new_with_mnemonic("_File"); gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), file); gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), GTK_WIDGET(file_menu)); // Functions Entry GtkWidget *functions_showall = gtk_check_menu_item_new_with_mnemonic( "_Show All Volumes"); g_signal_connect( functions_showall, "activate", G_CALLBACK(WVselGtk::activate_showall), this); gtk_widget_add_accelerator( functions_showall, "activate", accel_g, 'a', GdkModifierType(GDK_CONTROL_MASK), GTK_ACCEL_VISIBLE); GtkMenu *functions_menu = (GtkMenu *) g_object_new( GTK_TYPE_MENU, NULL); gtk_menu_shell_append(GTK_MENU_SHELL(functions_menu), functions_showall); GtkWidget *functions = gtk_menu_item_new_with_mnemonic("F_unctions"); gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), functions); gtk_menu_item_set_submenu(GTK_MENU_ITEM(functions), GTK_WIDGET(functions_menu)); // List widget store = gtk_list_store_new( 1, G_TYPE_STRING); widgets.volumelist = (GtkWidget *) g_object_new(GTK_TYPE_TREE_VIEW, "model", store, "rules-hint", TRUE, "headers-visible", FALSE, "reorderable", TRUE, "enable-search", TRUE, "search-column", 0, NULL); text_renderer = gtk_cell_renderer_text_new(); name_column = gtk_tree_view_column_new_with_attributes( NULL, text_renderer, "text", 0, NULL); g_object_set( name_column, "resizable", TRUE, "clickable", TRUE, NULL); gtk_tree_view_append_column( GTK_TREE_VIEW(widgets.volumelist), name_column); GtkWidget *ok_button = gtk_button_new_with_label( "Ok"); gtk_widget_set_size_request( ok_button, 70, 25); g_signal_connect( ok_button, "clicked", G_CALLBACK(activate_ok), this); GtkWidget *cancel_button = gtk_button_new_with_label( "Cancel"); gtk_widget_set_size_request( cancel_button, 70, 25); g_signal_connect( cancel_button, "clicked", G_CALLBACK(activate_cancel), this); GtkWidget *hboxbuttons = gtk_hbox_new( TRUE, 40); gtk_box_pack_start( GTK_BOX(hboxbuttons), ok_button, FALSE, FALSE, 20); gtk_box_pack_end( GTK_BOX(hboxbuttons), cancel_button, FALSE, FALSE, 20); GtkWidget *scrolled_window = gtk_scrolled_window_new( NULL, NULL); gtk_container_add( GTK_CONTAINER( scrolled_window), widgets.volumelist); GtkWidget *vbox = gtk_vbox_new( FALSE, 0); gtk_box_pack_start( GTK_BOX(vbox), GTK_WIDGET(menu_bar), FALSE, FALSE, 0); gtk_box_pack_start( GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0); gtk_box_pack_end( GTK_BOX(vbox), hboxbuttons, FALSE, FALSE, 10); gtk_container_add( GTK_CONTAINER(widgets.toplevel), vbox); gtk_widget_show_all( widgets.toplevel); // GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(widgets.volumelist)); // gtk_tree_selection_set_mode( selection, GTK_SELECTION_SINGLE); sts = load_volumelist(); WFoe::error_msg(sts); // Set input focus to the scrolled list widget gtk_widget_grab_focus( widgets.volumelist); wow = new CoWowGtk( widgets.toplevel); if ( wb_type != wb_eType_Buffer) sts = check_volumelist( 0, &display_window); *status = LOGIN__SUCCESS; }