Added device_array, array util, list mainwindow
This commit is contained in:
parent
e231246400
commit
53d65a235a
@ -1,10 +1,25 @@
|
||||
#include "device.h"
|
||||
#include "utils/array.h"
|
||||
#include "usb/usb.h"
|
||||
|
||||
struct DEVICE
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
array_t* device_array;
|
||||
|
||||
void device_init()
|
||||
{
|
||||
device_array = array_alloc();
|
||||
usb_init();
|
||||
}
|
||||
|
||||
array_t* device_get_array()
|
||||
{
|
||||
return device_array;
|
||||
}
|
||||
|
||||
char* device_get_image(device_t* device)
|
||||
{
|
||||
return "/home/valentin/Documents/prjs/ginput/drivers/g-wolves/htx/htx_0.png";
|
||||
|
@ -1,8 +1,16 @@
|
||||
#ifndef DEVICE_H
|
||||
#define DEVICE_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "utils/array.h"
|
||||
|
||||
typedef struct DEVICE device_t;
|
||||
|
||||
// Device layer
|
||||
void device_init();
|
||||
array_t* device_get_array();
|
||||
|
||||
// Handling a single device
|
||||
char* device_get_image(device_t* device);
|
||||
char* device_get_name(device_t* device);
|
||||
|
||||
|
@ -2,6 +2,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "device/device.h"
|
||||
|
||||
void usb_init()
|
||||
{
|
||||
// List all usb devices obtaining 'vendor:product'
|
||||
@ -24,5 +26,7 @@ void usb_init()
|
||||
libusb_get_device_descriptor(current, &desc);
|
||||
|
||||
printf("Found usb device %04x:%04x\n", desc.idVendor, desc.idProduct);
|
||||
array_t* array = device_get_array();
|
||||
array_add(array, 0);
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
#include "ui/ginput-application.h"
|
||||
#include "device/usb/usb.h"
|
||||
#include "device/device.h"
|
||||
|
||||
int main(gint argc, gchar** argv)
|
||||
{
|
||||
usb_init();
|
||||
device_init();
|
||||
|
||||
AdwApplication* application = ginput_application_new();
|
||||
return g_application_run(G_APPLICATION(application), argc, argv);
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include "main-window.h"
|
||||
#include "panels/empty-panel.h"
|
||||
#include "device/device.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
@ -43,6 +44,7 @@ enum
|
||||
static gboolean activate_panel(MainWindow* self, Panel* panel, const gchar* id)
|
||||
{
|
||||
self->current_panel = GTK_WIDGET(panel);
|
||||
self->active_panel = panel;
|
||||
gtk_stack_add_named(self->stack, self->current_panel, id);
|
||||
gtk_stack_set_visible_child_name (self->stack, id);
|
||||
}
|
||||
@ -88,9 +90,9 @@ main_window_get_property(GObject* object, guint property_id, GValue* value, GPar
|
||||
|
||||
switch(property_id)
|
||||
{
|
||||
// case PROP_ACTIVE_PANEL:
|
||||
// g_value_set_object (value, self->active_panel);
|
||||
// break;
|
||||
case PROP_ACTIVE_PANEL:
|
||||
g_value_set_object (value, self->active_panel);
|
||||
break;
|
||||
|
||||
// case PROP_MODEL:
|
||||
// g_value_set_object (value, self->store);
|
||||
@ -115,9 +117,9 @@ main_window_set_property(GObject* object,
|
||||
|
||||
switch(property_id)
|
||||
{
|
||||
// case PROP_ACTIVE_PANEL:
|
||||
// set_active_panel(self, g_value_get_object(value));
|
||||
// break;
|
||||
// case PROP_ACTIVE_PANEL:
|
||||
// set_active_panel(self, g_value_get_object(value));
|
||||
// break;
|
||||
|
||||
// case PROP_MODEL:
|
||||
// g_assert(self->store == NULL);
|
||||
@ -153,6 +155,14 @@ load_window_state(MainWindow* self)
|
||||
gtk_window_maximize(GTK_WINDOW(self));
|
||||
}
|
||||
|
||||
void main_window_add_all_devices(MainWindow* self)
|
||||
{
|
||||
// Obtain devices, and iterate over the array to add them
|
||||
array_t* devices = device_get_array();
|
||||
for(size_t i = 0; i < array_count(devices); i++)
|
||||
main_window_add_device_to_list(self, array_get(devices, i));
|
||||
}
|
||||
|
||||
static void
|
||||
main_window_constructed(GObject* object)
|
||||
{
|
||||
@ -160,6 +170,8 @@ main_window_constructed(GObject* object)
|
||||
|
||||
load_window_state(self);
|
||||
|
||||
main_window_add_all_devices(self);
|
||||
|
||||
/* Add the panels */
|
||||
// setup_model (self);
|
||||
|
||||
@ -198,12 +210,6 @@ main_window_finalize(GObject* object)
|
||||
{
|
||||
MainWindow* self = GINPUT_MAIN_WINDOW(object);
|
||||
|
||||
// if (self->previous_panels)
|
||||
// {
|
||||
// g_queue_free_full (self->previous_panels, g_free);
|
||||
// self->previous_panels = NULL;
|
||||
// }
|
||||
|
||||
g_clear_object(&self->settings);
|
||||
|
||||
G_OBJECT_CLASS(main_window_parent_class)->finalize(object);
|
||||
@ -243,8 +249,6 @@ main_window_init(MainWindow* self)
|
||||
gtk_widget_init_template(GTK_WIDGET(self));
|
||||
|
||||
self->settings = g_settings_new("v.ginput");
|
||||
// self->previous_panels = g_queue_new ();
|
||||
// self->previous_list_view = cc_panel_list_get_view (self->panel_list);
|
||||
|
||||
g_object_bind_property(self->main_leaflet,
|
||||
"folded",
|
||||
@ -271,3 +275,17 @@ main_window_new(AdwApplication* application)
|
||||
"show-menubar", FALSE,
|
||||
NULL);
|
||||
}
|
||||
|
||||
void main_window_add_device_to_list(MainWindow* self, device_t* device)
|
||||
{
|
||||
// Setup row
|
||||
GtkListBoxRow* row = (GtkListBoxRow*) gtk_list_box_row_new();
|
||||
GtkLabel* label = (GtkLabel*) gtk_label_new(device_get_name(device));
|
||||
gtk_widget_add_css_class(GTK_WIDGET(label), "body");
|
||||
gtk_widget_set_margin_top(GTK_WIDGET(label), 7);
|
||||
gtk_widget_set_margin_bottom(GTK_WIDGET(label), 7);
|
||||
gtk_list_box_row_set_child(row, GTK_WIDGET(label));
|
||||
|
||||
// Add row to listbox
|
||||
gtk_list_box_append(GTK_LIST_BOX(self->device_list), GTK_WIDGET(row));
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <adwaita.h>
|
||||
#include "device/device.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
@ -8,4 +9,6 @@ G_DECLARE_FINAL_TYPE(MainWindow, main_window, GINPUT, MAIN_WINDOW, AdwApplicatio
|
||||
|
||||
MainWindow* main_window_new(AdwApplication* application);
|
||||
|
||||
void main_window_add_device_to_list(MainWindow* self, device_t* device);
|
||||
|
||||
G_END_DECLS
|
||||
|
74
src/utils/array.c
Normal file
74
src/utils/array.c
Normal file
@ -0,0 +1,74 @@
|
||||
#include "array.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#define DEFAULT_ARRAY_SIZE 16
|
||||
|
||||
struct ARRAY
|
||||
{
|
||||
void** data;
|
||||
size_t count;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
array_t* array_alloc()
|
||||
{
|
||||
array_t* tr = malloc(sizeof(array_t));
|
||||
tr->data = malloc(sizeof(void*) * DEFAULT_ARRAY_SIZE);
|
||||
tr->size = DEFAULT_ARRAY_SIZE;
|
||||
tr->count = 0;
|
||||
|
||||
return tr;
|
||||
}
|
||||
|
||||
void array_free(array_t* array)
|
||||
{
|
||||
free(array->data);
|
||||
free(array);
|
||||
}
|
||||
|
||||
void array_put(array_t* array, size_t index, void* elem)
|
||||
{
|
||||
// Make sure allocated space is big enough
|
||||
if(index >= array->size)
|
||||
{
|
||||
array->data = realloc(array->data, (index + 1) * 2);
|
||||
if(!array->data)
|
||||
{
|
||||
perror("Catastrophic memory allocation failure:");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
array->size = (index + 1) * 2;
|
||||
}
|
||||
|
||||
// Put element in array
|
||||
array->data[index] = elem;
|
||||
|
||||
// Update array count (max element position) if necessary
|
||||
if(array->count <= index) array->count = index + 1;
|
||||
}
|
||||
|
||||
void array_add(array_t* array, void* elem)
|
||||
{
|
||||
array_put(array, array->count, elem);
|
||||
}
|
||||
|
||||
void* array_get(array_t* array, size_t index)
|
||||
{
|
||||
if(index >= array->size)
|
||||
{
|
||||
fprintf(stderr, "Catastrophic memory access failure: Trying to access index %lu of %lu-sized array\n", index, array->size);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if(index >= array->count)
|
||||
{
|
||||
fprintf(stderr, "Warning: Trying to access index %lu of array with %lu element, uninitialized access\n", index, array->count);
|
||||
}
|
||||
|
||||
return array->data[index];
|
||||
}
|
||||
|
||||
size_t array_count(array_t* array)
|
||||
{
|
||||
return array->count;
|
||||
}
|
17
src/utils/array.h
Normal file
17
src/utils/array.h
Normal file
@ -0,0 +1,17 @@
|
||||
#ifndef ARRAY_H
|
||||
#define ARRAY_H
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct ARRAY array_t;
|
||||
|
||||
array_t* array_alloc();
|
||||
void array_free(array_t* array);
|
||||
|
||||
void array_add(array_t* array, void* elem);
|
||||
void array_put(array_t* array, size_t index, void* elem);
|
||||
|
||||
void* array_get(array_t* array, size_t index);
|
||||
size_t array_count(array_t* array);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user