Logo Search packages:      
Sourcecode: libjsw version File versions


                             Joystick Calibrator

#ifndef JC_H
#define JC_H

#include <limits.h>
#include <sys/types.h>

#include <gtk/gtk.h>
#include <jsw.h>

#include "jcjsprops.h"

#ifndef gbool
# define gbool    guchar

 *    Command codes:
#define JC_CMD_NONE                 0

#define JC_CMD_OPEN_CALIB           10
#define JC_CMD_OPEN_DEVICE          11
#define JC_CMD_SAVE_CALIB               12
#define JC_CMD_SAVEAS_CALIB             13
#define JC_CMD_CLEANUP_CALIB        14
#define JC_CMD_EXIT                     15

#define JC_CMD_REFRESH                  20
#define JC_CMD_REOPEN_DEVICE        21
#define JC_CMD_CLOSE_DEVICE         22

#define JC_CMD_LAYOUT_LOGICAL       31

#define JC_CMD_HELP_INDEX           40
#define JC_CMD_HELP_ABOUT           51

/* Macro to call gtk_main_iteration() while there are events to
 * be handled.
# define GTK_EVENTS_FLUSH     \
{ \
 while(gtk_events_pending()) \
  gtk_main_iteration(); \
#endif  /* GTK_EVENTS_FLUSH */

 *    Cursors:
typedef struct {

      GdkCursor   *processing;      /* Hourglass or watch. */

} jc_cursor_struct;
extern jc_cursor_struct jc_cursor;

 *    Representative joystick axises layout widgets structure:
typedef struct {

      GtkWidget   *toplevel,  /* Hbox inside notebook. */
                  *axis_da,   /* First two axises drawing area. */

      GdkPixmap   *axis_buf,  /* First two axises. */

      GdkColor    c_axis_bg,  /* Background for axises. */
                  c_axis_fg,  /* Foreground for axises. */
                  c_throttle_fg;    /* Throttle axis fg. */

} layout_rep_struct;

 *    Logical joystick axises layout widgets structure:
typedef struct {

      gbool initialized;

      GtkWidget   *toplevel,  /* Parent vbox. */
                  *dz_min_spin, *dz_max_spin,
                        *corr_coeff_min1_spin, *corr_coeff_max1_spin;

      GtkObject   *nz_adj,
                  *dz_min_adj, *dz_max_adj,
                  *corr_coeff_min1_adj, *corr_coeff_max1_adj;

      GdkPixmap   *position_buf;

      GdkColor    c_axis_bg,  /* Background for axises. */
                  c_axis_fg,  /* Foreground for axises. */
                  c_axis_nz;  /* Null zone background. */

      GdkFont           *font;

} layout_logical_axis_struct;

typedef struct {

      GtkWidget       *toplevel;    /* Hbox inside notebook. */

      layout_logical_axis_struct **axis;
      gint total_axises;

} layout_logical_struct;

 *    Joystick button widgets structure:
typedef struct {

      GtkWidget *toplevel;          /* Parent vbox. */

      /* Button label widgets, corresponds with number of buttons. */
      GtkWidget **button;
      gint total_buttons;

} buttons_list_struct;

 *    Status bar structure:
typedef struct {

        GtkWidget *toplevel,  /* Parent vbox. */
                  *js_icon_fixed,   /* Dipicts js being init/shutdown. */

} status_bar_struct;

 *    Joystick calibrator main window:
typedef struct {

      gbool initialized;
      gbool map_state;
      gbool processing;

      GtkWidget   *toplevel,
                  *signal_level_da, /* JS signal meter drawing area. */
                  *axises_notebook; /* Notebook holds axis layout widgets. */

      GdkPixmap   *signal_level_pixmap;

      GdkColormap *colormap;  /* From toplevel. */

      GdkColor    c_signal_level_bg,

      GdkGC *gc;  /* General use graphics context. */

      /* Layout state, this matches the axises_notebook page number. */
#define JC_LAYOUT_LOGICAL           1
      gint layout_state;

      /* Axis layout substructures. */
      /* Logical axis layout widgets and structure, the
       * layout_logical_vp is a scrolled window that is the parent
       * for layout_logical_parent. The layout_logical_parent is
       * the parent for each axis widget group's parent widget.
      GtkWidget         *layout_logical_vp,     /* Viewport. */
                        *layout_logical_parent; /* Parent vbox. */
      layout_logical_struct   layout_logical;

      /* Representative axis layout widgets and structure, the
       * layout_rep_parent is a GtkVBox parent for 
       * layout_rep_parent_client. The layout_rep_parent_client is
       * created and destroyed whenever the axises change.
        GtkWidget       *layout_rep_parent,
                        *layout_rep_parent_client;    /* Parent vbox. */
      layout_rep_struct layout_rep;

      /* Buttons list. */
      GtkWidget         *buttons_list_vp, /* Viewport. */
                        *buttons_list_parent;   /* Parent vbox. */
      buttons_list_struct buttons_list;

      /* Status bar. */
      status_bar_struct status_bar;

      /* Manage callback timeout id. */
      guint manage_toid;

      /* Joystick properties dialog. */
      jc_jsprops_struct *jsprops;

      /* Calibration file. */
      gchar *calib_file;
      gbool tried_load_device_on_init;

      /* Modifications marker. */
      gbool has_changes;

      /* Joystick data. */
      js_data_struct jsd;

      /* Joystick signal load level history. */
      u_int16_t signal_history[JC_SIGNAL_HISTORY_MAX];

} jc_struct;
extern jc_struct *jc_core;

/* In jc.c. */
extern jc_struct *JCNew(gint argc, gchar **argv);
extern void JCSetBusy(jc_struct *jc);
extern void JCSetReady(jc_struct *jc);
extern void JCMap(jc_struct *jc);
extern void JCUnmap(jc_struct *jc);
extern void JCDelete(jc_struct *jc);

/* In jccalib.c */
extern void JCDoCalibrate(jc_struct *jc);
extern void JCDoSetAxisTolorance(jc_struct *jc, gint axis_num);

/* In jccb.c */
extern void JCSignalHandler(int s);
extern gint JCExitCB(
      GtkWidget *widget, GdkEvent *event, gpointer data
extern void JCMenuCB(GtkWidget *widget, gpointer data);
extern void JCSwitchPageCB(
      GtkNotebook *notebook, GtkNotebookPage *page, guint page_num,
      gpointer data
extern void JCJSDeviceEntryCB(GtkWidget *widget, gpointer data);
extern void JCRefreshCB(GtkWidget *widget, gpointer data);
extern void JCJSOpenDeviceCB(gpointer data);
extern void JCCalibToggleCB(GtkWidget *widget, gpointer data);
extern void JCEditableChangedCB(GtkWidget *widget, gpointer data);
extern gint JCEnterNotifyEventCB(
      GtkWidget *widget, GdkEventCrossing *crossing, gpointer data
extern gint JCLeaveNotifyEventCB(
      GtkWidget *widget, GdkEventCrossing *crossing, gpointer data
extern void JCCalibIsHatCheckCB(GtkWidget *widget, gpointer data);
extern void JCCalibFlipCheckCB(GtkWidget *widget, gpointer data);
extern gint JCExposeEventCB(
      GtkWidget *widget, GdkEventExpose *expose, gpointer data
extern gint JCButtonPressEventCB(
        GtkWidget *widget, GdkEventButton *button, gpointer data
extern gint JCButtonReleaseEventCB(
        GtkWidget *widget, GdkEventButton *button, gpointer data
extern gint JCTimeoutCB(gpointer data);
extern void JCDoPrintSpecifications(jc_struct *jc);
extern gint JCDoOpenCalibration(
      jc_struct *jc, const gchar *path
extern void JCJSOpenDeviceCB(gpointer data);
extern gint JCDoOpenJoystick(
        jc_struct *jc, const gchar *path
extern void JCDoCloseJoystick(jc_struct *jc);

/* In jcdraw.c */
extern void JCDrawAxises(jc_struct *jc);
extern void JCDrawButtons(jc_struct *jc);
extern void JCDrawSignalLevel(jc_struct *jc);

/* In jcfile.c */
extern gint JCDoSaveCalibration(jc_struct *jc, const gchar *path);
extern gint JCDoCalibrationCleanUp(jc_struct *jc, const gchar *path);

/* In jchelp.c */
extern gint JCHelpFile(
        jc_struct *jc, const gchar *help_file, gbool verbose

/* In jcwidgets.c */
extern gint JCCreateRepresentativeLayoutWidgets(
        jc_struct *jc, layout_rep_struct *lr
extern void JCDestroyRepresentativeLayoutWidgets(
        jc_struct *jc, layout_rep_struct *lr
extern gint JCCreateLogicalLayoutWidgets(
        jc_struct *jc, layout_logical_struct *ll,
        GtkWidget *parent       /* Hbox inside notebook. */
extern void JCLogicalLayoutWidgetsGetValues(
        jc_struct *jc, layout_logical_struct *ll
extern void JCDestroyLogicalLayoutWidgets(
        jc_struct *jc, layout_logical_struct *ll
extern gint JCCreateButtonsList(jc_struct *jc);
extern void JCDestroyButtonsList(jc_struct *jc);

extern void JCUpateDeviceComboList(jc_struct *jc);
extern GtkWidget *JCCreateMenuBar(jc_struct *jc);
extern gint JCCreateWidgets(jc_struct *jc, gint argc, gchar **argv);
extern void JCDestroyWidgets(jc_struct *jc);

/* In main.c */
extern gint JCInit(gint argc, gchar **argv);
extern void JCShutdown(void);

/* In statusbar.c */
extern void StatusBarSetJSIcon(
        status_bar_struct *sb, u_int8_t **icon_data
extern void StatusBarSetJSState(status_bar_struct *sb, gint state);
extern void StatusBarSetMesg(status_bar_struct *sb, const gchar *mesg);
extern gint StatusBarInit(status_bar_struct *sb, GtkWidget *parent);
extern void StatusBarDestroy(status_bar_struct *sb);

#endif      /* JC_H */

Generated by  Doxygen 1.6.0   Back to index