mirror of https://gitlab.com/nakst/essence
				
				
				
			
		
			
				
	
	
		
			97 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include <essence.h>
 | |
| 
 | |
| #define COLUMN_NAME           (0)
 | |
| #define COLUMN_AGE            (1)
 | |
| #define COLUMN_FAVORITE_COLOR (2)
 | |
| 
 | |
| const EsListViewEnumString colorStrings[] = {
 | |
| 	// We are using enum strings for the favorite color.
 | |
| 	// "\a ... ]" is a bit of rich text markup.
 | |
| 	// "#" sets the color to the hex code.
 | |
| 	
 | |
| #define COLOR_RED (0)
 | |
| 	{ "\a#e00]Red", -1 },
 | |
| #define COLOR_GREEN (1)
 | |
| 	{ "\a#080]Green", -1 },
 | |
| #define COLOR_BLUE (2)
 | |
| 	{ "\a#00f]Blue", -1 },
 | |
| };
 | |
| 
 | |
| void AddPerson(EsListView *list, const char *name, int age, int favoriteColor) {
 | |
| 	// Add a new item to the list, at the end.
 | |
| 	// Use the name pointer as the unique identifier to the item.
 | |
| 	// This returns the internal index of the item.
 | |
| 	EsListViewIndex index = EsListViewFixedItemInsert(list, (void *) name);
 | |
| 
 | |
| 	// Set the name, age and favorite color for the item at the returned index.
 | |
| 	EsListViewFixedItemSetString (list, index, COLUMN_NAME,           name);
 | |
| 	EsListViewFixedItemSetInteger(list, index, COLUMN_AGE,            age);
 | |
| 	EsListViewFixedItemSetInteger(list, index, COLUMN_FAVORITE_COLOR, favoriteColor);
 | |
| }
 | |
| 
 | |
| void _start() {
 | |
| 	_init();
 | |
| 
 | |
| 	while (true) {
 | |
| 		EsMessage *message = EsMessageReceive();
 | |
| 
 | |
| 		if (message->type == ES_MSG_INSTANCE_CREATE) {
 | |
| 			// Create the instance of the application.
 | |
| 			EsInstance *instance = EsInstanceCreate(message, "List", -1);
 | |
| 
 | |
| 			// Create a wrapper panel at the root of the window with the style ES_STYLE_PANEL_WINDOW_DIVIDER.
 | |
| 			// This will draw the divider between the toolbar and window contents.
 | |
| 			EsPanel *wrapper = EsPanelCreate(instance->window, ES_CELL_FILL, ES_STYLE_PANEL_WINDOW_DIVIDER);
 | |
| 
 | |
| 			// Create the list view.
 | |
| 			EsListView *list = EsListViewCreate(
 | |
| 					wrapper,                       // The wrapper panel is the parent.
 | |
| 					ES_CELL_FILL                   // Fill the wrapper panel, which in turn fills the window.
 | |
| 					| ES_LIST_VIEW_COLUMNS         // Display a column header.
 | |
| 					| ES_LIST_VIEW_FIXED_ITEMS     // Use fixed items mode. Otherwise we'd have to provide the item data via a callback.
 | |
| 					| ES_LIST_VIEW_SINGLE_SELECT); // Allow a single item to be selected at once (or no items).
 | |
| 
 | |
| 			// Register the name column.
 | |
| 			EsListViewRegisterColumn(list, 
 | |
| 					COLUMN_NAME,                  // The column's ID.
 | |
| 					"Name", -1,                   // Its title string.
 | |
| 					ES_LIST_VIEW_COLUMN_HAS_MENU, // Allow the user to click on the column header to get the menu for sorting options.
 | |
| 					150);                         // Initial width in scaled pixels.
 | |
| 
 | |
| 			// Register the age column.
 | |
| 			EsListViewRegisterColumn(list, 
 | |
| 					COLUMN_AGE,                               // The column's ID.
 | |
| 					"Age", -1,                                // Its title string.
 | |
| 					ES_LIST_VIEW_COLUMN_HAS_MENU              // Column header has a menu.
 | |
| 					| ES_TEXT_H_RIGHT                         // Align the text in the column to the right.
 | |
| 					| ES_DRAW_CONTENT_TABULAR                 // Use the tabular digits style, so that digits between items line up.
 | |
| 					| ES_LIST_VIEW_COLUMN_FIXED_DATA_INTEGERS // We're storing integers in this column (the default is strings).
 | |
| 					| ES_LIST_VIEW_COLUMN_FIXED_SORT_SIZE,    // The items in the column can be sorted by their size.
 | |
| 					100);                                     // Initial width.
 | |
| 
 | |
| 			// Register the favorite color columns.
 | |
| 			EsListViewRegisterColumn(list, 
 | |
| 					COLUMN_FAVORITE_COLOR,                         // The column's ID.
 | |
| 					"Favorite color", -1,                          // Its title string.
 | |
| 					ES_LIST_VIEW_COLUMN_HAS_MENU                   // Column header has a menu.
 | |
| 					| ES_DRAW_CONTENT_RICH_TEXT                    // Parse rich text markup in the strings. (See colorStrings above).
 | |
| 					| ES_LIST_VIEW_COLUMN_FIXED_FORMAT_ENUM_STRING // To display an item, lookup an enum string from the array.
 | |
| 					| ES_LIST_VIEW_COLUMN_FIXED_DATA_INTEGERS,     // The enum values are stored as integers.
 | |
| 					150);                                          // Initial widths.
 | |
| 			EsListViewFixedItemSetEnumStringsForColumn(list, 
 | |
| 					COLUMN_FAVORITE_COLOR,                           // Set the enum strings for the favorite color column.
 | |
| 					colorStrings,                                    // The strings to use for the enum items in this column.
 | |
| 					sizeof(colorStrings) / sizeof(colorStrings[0])); // The number of strings in the array.
 | |
| 
 | |
| 			// Add all the registered columns to the column header.
 | |
| 			EsListViewAddAllColumns(list);
 | |
| 
 | |
| 			// Populate the list with sample data.
 | |
| 			AddPerson(list, "Alice",   40, COLOR_RED);
 | |
| 			AddPerson(list, "Bob",     10, COLOR_GREEN);
 | |
| 			AddPerson(list, "Cameron", 30, COLOR_BLUE);
 | |
| 			AddPerson(list, "Daniel",  20, COLOR_RED);
 | |
| 		}
 | |
| 	}
 | |
| }
 |