Added device_array, array util, list mainwindow

master
vhaudiquet 1 year ago
parent e231246400
commit 53d65a235a
  1. 15
      src/device/device.c
  2. 8
      src/device/device.h
  3. 4
      src/device/usb/usb.c
  4. 4
      src/main.c
  5. 46
      src/ui/main-window.c
  6. 3
      src/ui/main-window.h
  7. 74
      src/utils/array.c
  8. 17
      src/utils/array.h

@ -1,10 +1,25 @@
#include "device.h" #include "device.h"
#include "utils/array.h"
#include "usb/usb.h"
struct DEVICE 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) char* device_get_image(device_t* device)
{ {
return "/home/valentin/Documents/prjs/ginput/drivers/g-wolves/htx/htx_0.png"; return "/home/valentin/Documents/prjs/ginput/drivers/g-wolves/htx/htx_0.png";

@ -1,8 +1,16 @@
#ifndef DEVICE_H #ifndef DEVICE_H
#define DEVICE_H #define DEVICE_H
#include <stdlib.h>
#include "utils/array.h"
typedef struct DEVICE device_t; 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_image(device_t* device);
char* device_get_name(device_t* device); char* device_get_name(device_t* device);

@ -2,6 +2,8 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "device/device.h"
void usb_init() void usb_init()
{ {
// List all usb devices obtaining 'vendor:product' // List all usb devices obtaining 'vendor:product'
@ -24,5 +26,7 @@ void usb_init()
libusb_get_device_descriptor(current, &desc); libusb_get_device_descriptor(current, &desc);
printf("Found usb device %04x:%04x\n", desc.idVendor, desc.idProduct); 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 "ui/ginput-application.h"
#include "device/usb/usb.h" #include "device/device.h"
int main(gint argc, gchar** argv) int main(gint argc, gchar** argv)
{ {
usb_init(); device_init();
AdwApplication* application = ginput_application_new(); AdwApplication* application = ginput_application_new();
return g_application_run(G_APPLICATION(application), argc, argv); return g_application_run(G_APPLICATION(application), argc, argv);

@ -2,6 +2,7 @@
#include "main-window.h" #include "main-window.h"
#include "panels/empty-panel.h" #include "panels/empty-panel.h"
#include "device/device.h"
#include <gtk/gtk.h> #include <gtk/gtk.h>
@ -43,6 +44,7 @@ enum
static gboolean activate_panel(MainWindow* self, Panel* panel, const gchar* id) static gboolean activate_panel(MainWindow* self, Panel* panel, const gchar* id)
{ {
self->current_panel = GTK_WIDGET(panel); self->current_panel = GTK_WIDGET(panel);
self->active_panel = panel;
gtk_stack_add_named(self->stack, self->current_panel, id); gtk_stack_add_named(self->stack, self->current_panel, id);
gtk_stack_set_visible_child_name (self->stack, 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) switch(property_id)
{ {
// case PROP_ACTIVE_PANEL: case PROP_ACTIVE_PANEL:
// g_value_set_object (value, self->active_panel); g_value_set_object (value, self->active_panel);
// break; break;
// case PROP_MODEL: // case PROP_MODEL:
// g_value_set_object (value, self->store); // g_value_set_object (value, self->store);
@ -115,9 +117,9 @@ main_window_set_property(GObject* object,
switch(property_id) switch(property_id)
{ {
// case PROP_ACTIVE_PANEL: // case PROP_ACTIVE_PANEL:
// set_active_panel(self, g_value_get_object(value)); // set_active_panel(self, g_value_get_object(value));
// break; // break;
// case PROP_MODEL: // case PROP_MODEL:
// g_assert(self->store == NULL); // g_assert(self->store == NULL);
@ -153,6 +155,14 @@ load_window_state(MainWindow* self)
gtk_window_maximize(GTK_WINDOW(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 static void
main_window_constructed(GObject* object) main_window_constructed(GObject* object)
{ {
@ -160,6 +170,8 @@ main_window_constructed(GObject* object)
load_window_state(self); load_window_state(self);
main_window_add_all_devices(self);
/* Add the panels */ /* Add the panels */
// setup_model (self); // setup_model (self);
@ -198,12 +210,6 @@ main_window_finalize(GObject* object)
{ {
MainWindow* self = GINPUT_MAIN_WINDOW(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_clear_object(&self->settings);
G_OBJECT_CLASS(main_window_parent_class)->finalize(object); 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)); gtk_widget_init_template(GTK_WIDGET(self));
self->settings = g_settings_new("v.ginput"); 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, g_object_bind_property(self->main_leaflet,
"folded", "folded",
@ -271,3 +275,17 @@ main_window_new(AdwApplication* application)
"show-menubar", FALSE, "show-menubar", FALSE,
NULL); 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 #pragma once
#include <adwaita.h> #include <adwaita.h>
#include "device/device.h"
G_BEGIN_DECLS G_BEGIN_DECLS
@ -8,4 +9,6 @@ G_DECLARE_FINAL_TYPE(MainWindow, main_window, GINPUT, MAIN_WINDOW, AdwApplicatio
MainWindow* main_window_new(AdwApplication* application); MainWindow* main_window_new(AdwApplication* application);
void main_window_add_device_to_list(MainWindow* self, device_t* device);
G_END_DECLS G_END_DECLS

@ -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;
}

@ -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…
Cancel
Save