/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ #include <ProToolkit.h> #include <ProUI.h> #include <ProUIDialog.h> #include <ProUIPushbutton.h> #include <ProUITable.h> #include <ProUIOptionmenu.h> #define UGUITABLEDLG "uguitableexample" /*====================================================================*\ FUNCTION: UserTableDialogCloseAction PURPOSE: Close action for "Close" button in table examples \*====================================================================*/ static void UserTableDialogCloseAction (char* dialog, char* button, ProAppData data) { ProUIDialogExit (UGUITABLEDLG, PRO_TK_NO_ERROR); } /*====================================================================*\ FUNCTION: UserUITableRedesignExample PURPOSE: Change the table columns and rows before displaying the dialog \*====================================================================*/ int UserUITableRedesignExample () { int status; int column_count; wchar_t** column_labels; char** column_names; int new_column_count = 3; char* new_column_names [] = {"Column A", "Column B", "Column C"}; wchar_t* new_column_labels [] = {L"First", L"Second", L"Third"}; /*--------------------------------------------------------------------*\ Load the dialog from the resource file \*--------------------------------------------------------------------*/ ProUIDialogCreate(UGUITABLEDLG, UGUITABLEDLG); /*--------------------------------------------------------------------*\ Set the Close button actions \*--------------------------------------------------------------------*/ ProUIPushbuttonActivateActionSet(UGUITABLEDLG,"CloseButton", UserTableDialogCloseAction, NULL); /*--------------------------------------------------------------------*\ Get the list of column names and labels \*--------------------------------------------------------------------*/ ProUITableColumnnamesGet (UGUITABLEDLG, "LargeTable", &column_count, &column_names); ProUITableColumnlabelsGet (UGUITABLEDLG, "LargeTable", &column_count, &column_labels); /*--------------------------------------------------------------------*\ Assign the column names to the rows \*--------------------------------------------------------------------*/ ProUITableRownamesSet (UGUITABLEDLG, "LargeTable", column_count, column_names); ProUITableRowlabelsSet (UGUITABLEDLG, "LargeTable", column_count, column_labels); /*--------------------------------------------------------------------*\ Free the retrieved arrays \*--------------------------------------------------------------------*/ ProStringarrayFree (column_names, column_count); ProWstringarrayFree (column_labels, column_count); /*--------------------------------------------------------------------*\ Modify the column names and labels \*--------------------------------------------------------------------*/ ProUITableColumnnamesSet (UGUITABLEDLG, "LargeTable", new_column_count, new_column_names); ProUITableColumnlabelsSet (UGUITABLEDLG, "LargeTable", new_column_count, new_column_labels); /*--------------------------------------------------------------------*\ Display and activate the dialog \*--------------------------------------------------------------------*/ ProUIDialogActivate(UGUITABLEDLG, &status); /*--------------------------------------------------------------------*\ Remove the dialog from memory \*--------------------------------------------------------------------*/ ProUIDialogDestroy(UGUITABLEDLG); return(1); } /*====================================================================*\ FUNCTION: UserTableDialogSelectionsToggle PURPOSE: UI callback function to toggle contents of table cells \*====================================================================*/ static void UserTableDialogSelectionsToggle (char* dialog, char* button, ProAppData data) { char** selections; int selection_count; wchar_t* label; int i; ProUITableSelectednamesGet (UGUITABLEDLG, "LargeTable", &selection_count, &selections); /*--------------------------------------------------------------------*\ Selected names are arranged in sets of 2 ("Row", "Column") \*--------------------------------------------------------------------*/ for (i = 0; i < selection_count; i = i + 2) { ProUITableCellLabelGet (UGUITABLEDLG, "LargeTable", selections [i], selections [i+1], &label); if (label != NULL && ProUtilWstrcmp (label, L"ON") == 0) { ProUITableCellLabelSet (UGUITABLEDLG, "LargeTable", selections [i], selections [i+1], L"OFF"); } else { ProUITableCellLabelSet (UGUITABLEDLG, "LargeTable", selections [i], selections [i+1], L"ON"); } if (label != NULL) ProWstringFree (label); } ProStringarrayFree (selections, selection_count); } /*====================================================================*\ FUNCTION: UserUITableSelectionExample PURPOSE: Change the table columns and rows before displaying the dialog \*====================================================================*/ int UserUITableSelectionExample () { int status; /*--------------------------------------------------------------------*\ Load the dialog from the resource file \*--------------------------------------------------------------------*/ ProUIDialogCreate(UGUITABLEDLG, UGUITABLEDLG); /*--------------------------------------------------------------------*\ Set the Close button actions \*--------------------------------------------------------------------*/ ProUIPushbuttonActivateActionSet(UGUITABLEDLG,"CloseButton", UserTableDialogCloseAction, NULL); /*--------------------------------------------------------------------*\ Set up the Modify Select button \*--------------------------------------------------------------------*/ ProUIPushbuttonShow (UGUITABLEDLG, "ModifySelectButton"); ProUIPushbuttonActivateActionSet(UGUITABLEDLG,"ModifySelectButton", UserTableDialogSelectionsToggle, NULL); /*--------------------------------------------------------------------*\ Set the selection policy to multiple \*--------------------------------------------------------------------*/ ProUITableSelectionpolicySet (UGUITABLEDLG, "LargeTable", PROUISELPOLICY_MULTIPLE); /*--------------------------------------------------------------------*\ Display and activate the dialog \*--------------------------------------------------------------------*/ ProUIDialogActivate(UGUITABLEDLG, &status); /*--------------------------------------------------------------------*\ Remove the dialog from memory \*--------------------------------------------------------------------*/ ProUIDialogDestroy(UGUITABLEDLG); return(1); } /*====================================================================*\ FUNCTION: UserUITableComponentExample PURPOSE: Add components to the table cells \*====================================================================*/ int UserUITableComponentExample () { int status; /*--------------------------------------------------------------------*\ Load the dialog from the resource file \*--------------------------------------------------------------------*/ ProUIDialogCreate(UGUITABLEDLG, UGUITABLEDLG); /*--------------------------------------------------------------------*\ Set the Close button actions \*--------------------------------------------------------------------*/ ProUIPushbuttonActivateActionSet(UGUITABLEDLG,"CloseButton", UserTableDialogCloseAction, NULL); /*--------------------------------------------------------------------*\ Assign a predefined table components from the table layout \*--------------------------------------------------------------------*/ ProUITableCellComponentNameSet (UGUITABLEDLG, "LargeTable", "A", "1", "BaseButton"); /*--------------------------------------------------------------------*\ Copy a table component into a table cell \*--------------------------------------------------------------------*/ ProUITableCellComponentCopy (UGUITABLEDLG, "LargeTable", "C", "3", UGUITABLEDLG, "BaseCheckButton", "CheckButtonC3"); ProUICheckbuttonSet (UGUITABLEDLG, "CheckButtonC3"); /*--------------------------------------------------------------------*\ Copy a non-table component into a table & assign it to a table cell \*--------------------------------------------------------------------*/ ProUITableComponentCopy (UGUITABLEDLG, "LargeTable", UGUITABLEDLG, "ToCopy", "CopyOfOptionMenu"); ProUITableCellComponentNameSet (UGUITABLEDLG, "LargeTable", "B", "2", "CopyOfOptionMenu"); ProUIOptionmenuShow (UGUITABLEDLG, "CopyOfOptionMenu"); /*--------------------------------------------------------------------*\ Copy a component from another dialog and assign it to a table cell \*--------------------------------------------------------------------*/ ProUIDialogCreate ("uguitablecomponents", "uguitablecomponents"); ProUITableCellComponentCopy (UGUITABLEDLG, "LargeTable", "D", "4", "uguitablecomponents", "ExternalButtonToCopy", "CopyOfExternalButton"); ProUIDialogDestroy ("uguitablecomponents"); /*--------------------------------------------------------------------*\ Display and activate the dialog \*--------------------------------------------------------------------*/ ProUIDialogActivate(UGUITABLEDLG, &status); /*--------------------------------------------------------------------*\ Remove the dialog from memory \*--------------------------------------------------------------------*/ ProUIDialogDestroy(UGUITABLEDLG); return(1); }