From c1ef3fa0b737e3731a7c16e5b9baaf0bcc955841 Mon Sep 17 00:00:00 2001 From: John Toman Date: Mon, 3 Aug 2009 00:46:33 +0000 Subject: [PATCH] merges qt4 into trunk git-svn-id: svn://svn.code.sf.net/p/qjoypad/code/trunk@94 c05e91a0-76c8-4ec0-b377-ef19ce7cc080 --- src/.kdbgrc.qjoypad | 30 -- src/Makefile | 763 ++++++++++++++++++++++------------------- src/axis.cpp | 541 +++++++++++++++-------------- src/joypad.cpp | 395 +++++++++++++-------- src/joypad.h | 43 +-- src/layout.cpp | 567 +++++++++++++++++------------- src/layout_edit.cpp | 194 ++++++----- src/layout_edit.h | 11 +- src/main.cpp | 360 ++++++++----------- src/qjoypad | Bin 232556 -> 0 bytes src/qjoypad.pro.backup | 89 ----- src/quickset.cpp | 93 ++--- 12 files changed, 1596 insertions(+), 1490 deletions(-) delete mode 100644 src/.kdbgrc.qjoypad delete mode 100755 src/qjoypad delete mode 100644 src/qjoypad.pro.backup diff --git a/src/.kdbgrc.qjoypad b/src/.kdbgrc.qjoypad deleted file mode 100644 index d9f35ba..0000000 --- a/src/.kdbgrc.qjoypad +++ /dev/null @@ -1,30 +0,0 @@ -[Breakpoint 0] -Enabled=true -File=layout.cpp -Line=263 -Temporary=false - -[Breakpoint 1] -Enabled=true -File=moc_layout_edit.cpp -Line=58 -Temporary=false - -[Breakpoint 2] -Enabled=true -File=layout_edit.cpp -Line=107 -Temporary=false - -[General] -DebuggerCmdStr= -DriverName=GDB -FileVersion=1 -OptionsSelected= -ProgramArgs= -TTYLevel=7 -WorkingDirectory= - -[Memory] -ColumnWidths=80,0 -NumExprs=0 diff --git a/src/Makefile b/src/Makefile index f950ab4..a0b3e1c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,74 +1,48 @@ ############################################################################# # Makefile for building: qjoypad -# Generated by qmake (1.07a) (Qt 3.3.6) on: Wed Nov 1 12:59:29 2006 +# Generated by qmake (2.01a) (Qt 4.5.1) on: Mon May 25 00:43:37 2009 # Project: qjoypad.pro # Template: app -# Command: $(QMAKE) "DEVDIR=/dev/input" "PREFIX=/usr" "DEFINES += " -o Makefile qjoypad.pro +# Command: /usr/bin/qmake -unix -o Makefile qjoypad.pro ############################################################################# ####### Compiler, tools and options -CC = gcc -CXX = g++ -LEX = flex -YACC = yacc -CFLAGS = -pipe -Wall -W -O2 -D_REENTRANT -DDEVDIR='"/dev/input"' -DICON24='"/usr/share/pixmaps/qjoypad/icon24.png"' -DICON64='"/usr/share/pixmaps/qjoypad/icon64.png"' -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -CXXFLAGS = -pipe -Wall -W -O2 -D_REENTRANT -DDEVDIR='"/dev/input"' -DICON24='"/usr/share/pixmaps/qjoypad/icon24.png"' -DICON64='"/usr/share/pixmaps/qjoypad/icon64.png"' -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -LEXFLAGS = -YACCFLAGS= -d -INCPATH = -I/usr/share/qt3/mkspecs/default -I. -I. -Itrayicon -I/usr/include/qt3 -LINK = g++ -LFLAGS = -LIBS = $(SUBLIBS) -L/usr/share/qt3/lib -L/usr/X11R6/lib -lXtst -lqt-mt -lXext -lX11 -lm -lpthread -AR = ar cqs -RANLIB = -MOC = /usr/share/qt3/bin/moc -UIC = /usr/share/qt3/bin/uic -QMAKE = qmake -TAR = tar -cf -GZIP = gzip -9f -COPY = cp -f -COPY_FILE= $(COPY) -COPY_DIR = $(COPY) -r -INSTALL_FILE= $(COPY_FILE) -INSTALL_DIR = $(COPY_DIR) -DEL_FILE = rm -f -SYMLINK = ln -sf -DEL_DIR = rmdir -MOVE = mv -f +CC = gcc +CXX = g++ +DEFINES = -DDEVDIR="\"/dev/input\"" -DICON24="\"/share/pixmaps/qjoypad/icon24.png\"" -DICON64="\"/share/pixmaps/qjoypad/icon64.png\"" -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -pipe -march=i686 -mtune=generic -O2 -pipe -Wall -W -D_REENTRANT $(DEFINES) +CXXFLAGS = -g -pipe -march=i686 -mtune=generic -O2 -pipe -Wall -W -D_REENTRANT $(DEFINES) +INCPATH = -I/usr/share/qt/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I. -Itrayicon -I. -I. +LINK = g++ +LFLAGS = -Wl,-O1 -Wl,-rpath,/usr/lib +LIBS = $(SUBLIBS) -L/usr/lib -lXtst -lQtGui -L/usr/lib -L/usr/X11R6/lib -pthread -lpng -lfreetype -lgobject-2.0 -lSM -lICE -pthread -pthread -lXrender -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread +AR = ar cqs +RANLIB = +QMAKE = /usr/bin/qmake +TAR = tar -cf +COMPRESS = gzip -9f +COPY = cp -f +SED = sed +COPY_FILE = $(COPY) +COPY_DIR = $(COPY) -r +INSTALL_FILE = install -m 644 -p +INSTALL_DIR = $(COPY_DIR) +INSTALL_PROGRAM = install -m 755 -p +DEL_FILE = rm -f +SYMLINK = ln -sf +DEL_DIR = rmdir +MOVE = mv -f CHK_DIR_EXISTS= test -d -MKDIR = mkdir -p +MKDIR = mkdir -p ####### Output directory -OBJECTS_DIR = ./ +OBJECTS_DIR = ./ ####### Files -HEADERS = axis.h \ - axis_edit.h \ - axisw.h \ - button.h \ - button_edit.h \ - buttonw.h \ - component.h \ - constant.h \ - device.h \ - error.h \ - event.h \ - flash.h \ - icon.h \ - joypad.h \ - joypadw.h \ - joyslider.h \ - keycode.h \ - layout.h \ - layout_edit.h \ - loop.h \ - quickset.h \ - timer.h \ - trayicon/trayicon.h -SOURCES = axis.cpp \ +SOURCES = axis.cpp \ axis_edit.cpp \ axisw.cpp \ button.cpp \ @@ -83,12 +57,23 @@ SOURCES = axis.cpp \ keycode.cpp \ layout.cpp \ layout_edit.cpp \ - loop.cpp \ main.cpp \ quickset.cpp \ + getkey.cpp \ trayicon/trayicon.cpp \ - trayicon/trayicon_x11.cpp -OBJECTS = axis.o \ + trayicon/trayicon_x11.cpp moc_axis.cpp \ + moc_axis_edit.cpp \ + moc_button.cpp \ + moc_button_edit.cpp \ + moc_flash.cpp \ + moc_icon.cpp \ + moc_joypad.cpp \ + moc_joypadw.cpp \ + moc_keycode.cpp \ + moc_layout.cpp \ + moc_getkey.cpp \ + moc_trayicon.cpp +OBJECTS = axis.o \ axis_edit.o \ axisw.o \ button.o \ @@ -103,85 +88,126 @@ OBJECTS = axis.o \ keycode.o \ layout.o \ layout_edit.o \ - loop.o \ main.o \ quickset.o \ + getkey.o \ trayicon.o \ - trayicon_x11.o -FORMS = -UICDECLS = -UICIMPLS = -SRCMOC = moc_axis_edit.cpp \ - moc_button_edit.cpp \ - moc_flash.cpp \ - moc_icon.cpp \ - moc_joypadw.cpp \ - moc_keycode.cpp \ - moc_layout.cpp \ - trayicon/moc_trayicon.cpp -OBJMOC = moc_axis_edit.o \ + trayicon_x11.o \ + moc_axis.o \ + moc_axis_edit.o \ + moc_button.o \ moc_button_edit.o \ moc_flash.o \ moc_icon.o \ + moc_joypad.o \ moc_joypadw.o \ moc_keycode.o \ moc_layout.o \ + moc_getkey.o \ moc_trayicon.o -DIST = qjoypad.pro -QMAKE_TARGET = qjoypad -DESTDIR = -TARGET = qjoypad +DIST = /usr/share/qt/mkspecs/common/g++.conf \ + /usr/share/qt/mkspecs/common/unix.conf \ + /usr/share/qt/mkspecs/common/linux.conf \ + /usr/share/qt/mkspecs/qconfig.pri \ + /usr/share/qt/mkspecs/features/qt_functions.prf \ + /usr/share/qt/mkspecs/features/qt_config.prf \ + /usr/share/qt/mkspecs/features/exclusive_builds.prf \ + /usr/share/qt/mkspecs/features/default_pre.prf \ + /usr/share/qt/mkspecs/features/release.prf \ + /usr/share/qt/mkspecs/features/default_post.prf \ + /usr/share/qt/mkspecs/features/warn_on.prf \ + /usr/share/qt/mkspecs/features/qt.prf \ + /usr/share/qt/mkspecs/features/unix/thread.prf \ + /usr/share/qt/mkspecs/features/moc.prf \ + /usr/share/qt/mkspecs/features/resources.prf \ + /usr/share/qt/mkspecs/features/uic.prf \ + /usr/share/qt/mkspecs/features/yacc.prf \ + /usr/share/qt/mkspecs/features/lex.prf \ + /usr/share/qt/mkspecs/features/include_source_dir.prf \ + qjoypad.pro +QMAKE_TARGET = qjoypad +DESTDIR = +TARGET = qjoypad first: all ####### Implicit rules -.SUFFIXES: .c .o .cpp .cc .cxx .C +.SUFFIXES: .o .c .cpp .cc .cxx .C .cpp.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cc.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cxx.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .C.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .c.o: - $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" ####### Build rules all: Makefile $(TARGET) -$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) - $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(OBJCOMP) $(LIBS) +$(TARGET): $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) -mocables: $(SRCMOC) -uicables: $(UICDECLS) $(UICIMPLS) - -$(MOC): - ( cd $(QTDIR)/src/moc && $(MAKE) ) - -Makefile: qjoypad.pro /usr/share/qt3/mkspecs/default/qmake.conf /usr/share/qt3/lib/libqt-mt.prl - $(QMAKE) "DEVDIR=/dev/input" "PREFIX=/usr" "DEFINES += " -o Makefile qjoypad.pro -qmake: - @$(QMAKE) "DEVDIR=/dev/input" "PREFIX=/usr" "DEFINES += " -o Makefile qjoypad.pro +Makefile: qjoypad.pro /usr/share/qt/mkspecs/linux-g++/qmake.conf /usr/share/qt/mkspecs/common/g++.conf \ + /usr/share/qt/mkspecs/common/unix.conf \ + /usr/share/qt/mkspecs/common/linux.conf \ + /usr/share/qt/mkspecs/qconfig.pri \ + /usr/share/qt/mkspecs/features/qt_functions.prf \ + /usr/share/qt/mkspecs/features/qt_config.prf \ + /usr/share/qt/mkspecs/features/exclusive_builds.prf \ + /usr/share/qt/mkspecs/features/default_pre.prf \ + /usr/share/qt/mkspecs/features/release.prf \ + /usr/share/qt/mkspecs/features/default_post.prf \ + /usr/share/qt/mkspecs/features/warn_on.prf \ + /usr/share/qt/mkspecs/features/qt.prf \ + /usr/share/qt/mkspecs/features/unix/thread.prf \ + /usr/share/qt/mkspecs/features/moc.prf \ + /usr/share/qt/mkspecs/features/resources.prf \ + /usr/share/qt/mkspecs/features/uic.prf \ + /usr/share/qt/mkspecs/features/yacc.prf \ + /usr/share/qt/mkspecs/features/lex.prf \ + /usr/share/qt/mkspecs/features/include_source_dir.prf \ + /usr/lib/libQtGui.prl \ + /usr/lib/libQtCore.prl + $(QMAKE) -unix -o Makefile qjoypad.pro +/usr/share/qt/mkspecs/common/g++.conf: +/usr/share/qt/mkspecs/common/unix.conf: +/usr/share/qt/mkspecs/common/linux.conf: +/usr/share/qt/mkspecs/qconfig.pri: +/usr/share/qt/mkspecs/features/qt_functions.prf: +/usr/share/qt/mkspecs/features/qt_config.prf: +/usr/share/qt/mkspecs/features/exclusive_builds.prf: +/usr/share/qt/mkspecs/features/default_pre.prf: +/usr/share/qt/mkspecs/features/release.prf: +/usr/share/qt/mkspecs/features/default_post.prf: +/usr/share/qt/mkspecs/features/warn_on.prf: +/usr/share/qt/mkspecs/features/qt.prf: +/usr/share/qt/mkspecs/features/unix/thread.prf: +/usr/share/qt/mkspecs/features/moc.prf: +/usr/share/qt/mkspecs/features/resources.prf: +/usr/share/qt/mkspecs/features/uic.prf: +/usr/share/qt/mkspecs/features/yacc.prf: +/usr/share/qt/mkspecs/features/lex.prf: +/usr/share/qt/mkspecs/features/include_source_dir.prf: +/usr/lib/libQtGui.prl: +/usr/lib/libQtCore.prl: +qmake: FORCE + @$(QMAKE) -unix -o Makefile qjoypad.pro dist: - @mkdir -p .tmp/qjoypad && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .tmp/qjoypad/ && ( cd `dirname .tmp/qjoypad` && $(TAR) qjoypad.tar qjoypad && $(GZIP) qjoypad.tar ) && $(MOVE) `dirname .tmp/qjoypad`/qjoypad.tar.gz . && $(DEL_FILE) -r .tmp/qjoypad + @$(CHK_DIR_EXISTS) .tmp/qjoypad1.0.0 || $(MKDIR) .tmp/qjoypad1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/qjoypad1.0.0/ && $(COPY_FILE) --parents axis.h axis_edit.h axisw.h button.h button_edit.h buttonw.h constant.h device.h error.h event.h flash.h icon.h joypad.h joypadw.h joyslider.h keycode.h layout.h getkey.h layout_edit.h quickset.h trayicon/trayicon.h .tmp/qjoypad1.0.0/ && $(COPY_FILE) --parents axis.cpp axis_edit.cpp axisw.cpp button.cpp button_edit.cpp buttonw.cpp event.cpp flash.cpp icon.cpp joypad.cpp joypadw.cpp joyslider.cpp keycode.cpp layout.cpp layout_edit.cpp main.cpp quickset.cpp getkey.cpp trayicon/trayicon.cpp trayicon/trayicon_x11.cpp .tmp/qjoypad1.0.0/ && (cd `dirname .tmp/qjoypad1.0.0` && $(TAR) qjoypad1.0.0.tar qjoypad1.0.0 && $(COMPRESS) qjoypad1.0.0.tar) && $(MOVE) `dirname .tmp/qjoypad1.0.0`/qjoypad1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/qjoypad1.0.0 -mocclean: - -$(DEL_FILE) $(OBJMOC) - -$(DEL_FILE) $(SRCMOC) -uiclean: - -yaccclean: -lexclean: -clean: mocclean +clean:compiler_clean -$(DEL_FILE) $(OBJECTS) -$(DEL_FILE) *~ core *.core @@ -189,220 +215,308 @@ clean: mocclean ####### Sub-libraries distclean: clean - -$(DEL_FILE) $(TARGET) $(TARGET) + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) Makefile -FORCE: +mocclean: compiler_moc_header_clean compiler_moc_source_clean -####### Compile +mocables: compiler_moc_header_make_all compiler_moc_source_make_all -axis.o: axis.cpp axis.h \ - component.h \ - timer.h \ - event.h \ - constant.h +compiler_moc_header_make_all: moc_axis.cpp moc_axis_edit.cpp moc_button.cpp moc_button_edit.cpp moc_flash.cpp moc_icon.cpp moc_joypad.cpp moc_joypadw.cpp moc_keycode.cpp moc_layout.cpp moc_getkey.cpp moc_trayicon.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_axis.cpp moc_axis_edit.cpp moc_button.cpp moc_button_edit.cpp moc_flash.cpp moc_icon.cpp moc_joypad.cpp moc_joypadw.cpp moc_keycode.cpp moc_layout.cpp moc_getkey.cpp moc_trayicon.cpp +moc_axis.cpp: constant.h \ + axis.h + /usr/bin/moc $(DEFINES) $(INCPATH) axis.h -o moc_axis.cpp -axis_edit.o: axis_edit.cpp axis_edit.h \ - joyslider.h \ - keycode.h \ - axis.h \ - constant.h \ - component.h \ - timer.h \ - event.h - -axisw.o: axisw.cpp axisw.h \ - axis.h \ - axis_edit.h \ - flash.h \ - component.h \ - timer.h \ - event.h \ +moc_axis_edit.cpp: axis.h \ constant.h \ joyslider.h \ - keycode.h - -button.o: button.cpp button.h \ - component.h \ - timer.h \ keycode.h \ - event.h \ - constant.h + axis_edit.h + /usr/bin/moc $(DEFINES) $(INCPATH) axis_edit.h -o moc_axis_edit.cpp -button_edit.o: button_edit.cpp button_edit.h \ - button.h \ +moc_button.cpp: keycode.h \ + constant.h \ + button.h + /usr/bin/moc $(DEFINES) $(INCPATH) button.h -o moc_button.cpp + +moc_button_edit.cpp: button.h \ keycode.h \ - component.h \ - timer.h \ - event.h \ - constant.h + constant.h \ + button_edit.h + /usr/bin/moc $(DEFINES) $(INCPATH) button_edit.h -o moc_button_edit.cpp -buttonw.o: buttonw.cpp buttonw.h \ - button.h \ - button_edit.h \ - flash.h \ - component.h \ - timer.h \ +moc_flash.cpp: flash.h + /usr/bin/moc $(DEFINES) $(INCPATH) flash.h -o moc_flash.cpp + +moc_icon.cpp: constant.h \ + icon.h + /usr/bin/moc $(DEFINES) $(INCPATH) icon.h -o moc_icon.cpp + +moc_joypad.cpp: button.h \ keycode.h \ - event.h \ - constant.h - -event.o: event.cpp event.h - -flash.o: flash.cpp flash.h - -icon.o: icon.cpp icon.h \ - constant.h - -joypad.o: joypad.cpp joypad.h \ - button.h \ + constant.h \ axis.h \ joypadw.h \ - error.h \ - component.h \ - timer.h \ - keycode.h \ - event.h \ - constant.h \ axisw.h \ - buttonw.h \ - quickset.h \ - axis_edit.h \ flash.h \ + axis_edit.h \ joyslider.h \ - button_edit.h - -joypadw.o: joypadw.cpp joypadw.h \ joypad.h \ - axisw.h \ + error.h \ buttonw.h \ + button_edit.h \ quickset.h \ - button.h \ + joypad.h + /usr/bin/moc $(DEFINES) $(INCPATH) joypad.h -o moc_joypad.cpp + +moc_joypadw.cpp: axisw.h \ axis.h \ - error.h \ - component.h \ - timer.h \ - keycode.h \ - event.h \ constant.h \ - axis_edit.h \ flash.h \ + axis_edit.h \ joyslider.h \ - button_edit.h - -joyslider.o: joyslider.cpp joyslider.h \ - constant.h - -keycode.o: keycode.cpp keycode.h \ - constant.h - -layout.o: layout.cpp layout.h \ + keycode.h \ joypad.h \ + button.h \ + joypadw.h \ + buttonw.h \ + button_edit.h \ + quickset.h \ + error.h \ + joypadw.h + /usr/bin/moc $(DEFINES) $(INCPATH) joypadw.h -o moc_joypadw.cpp + +moc_keycode.cpp: constant.h \ + keycode.h + /usr/bin/moc $(DEFINES) $(INCPATH) keycode.h -o moc_keycode.cpp + +moc_layout.cpp: joypad.h \ + button.h \ + keycode.h \ + constant.h \ + axis.h \ + joypadw.h \ + axisw.h \ + flash.h \ + axis_edit.h \ + joyslider.h \ + buttonw.h \ + button_edit.h \ + quickset.h \ error.h \ device.h \ trayicon/trayicon.h \ icon.h \ layout_edit.h \ + layout.h \ + layout.h + /usr/bin/moc $(DEFINES) $(INCPATH) layout.h -o moc_layout.cpp + +moc_getkey.cpp: constant.h \ + getkey.h + /usr/bin/moc $(DEFINES) $(INCPATH) getkey.h -o moc_getkey.cpp + +moc_trayicon.cpp: trayicon/trayicon.h + /usr/bin/moc $(DEFINES) $(INCPATH) trayicon/trayicon.h -o moc_trayicon.cpp + +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_image_collection_make_all: qmake_image_collection.cpp +compiler_image_collection_clean: + -$(DEL_FILE) qmake_image_collection.cpp +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_header_clean + +####### Compile + +axis.o: axis.cpp axis.h \ + constant.h \ + event.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o axis.o axis.cpp + +axis_edit.o: axis_edit.cpp axis_edit.h \ + axis.h \ + constant.h \ + joyslider.h \ + keycode.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o axis_edit.o axis_edit.cpp + +axisw.o: axisw.cpp axisw.h \ + axis.h \ + constant.h \ + flash.h \ + axis_edit.h \ + joyslider.h \ + keycode.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o axisw.o axisw.cpp + +button.o: button.cpp button.h \ + keycode.h \ + constant.h \ + event.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o button.o button.cpp + +button_edit.o: button_edit.cpp button_edit.h \ button.h \ + keycode.h \ + constant.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o button_edit.o button_edit.cpp + +buttonw.o: buttonw.cpp buttonw.h \ + button.h \ + keycode.h \ + constant.h \ + button_edit.h \ + flash.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o buttonw.o buttonw.cpp + +event.o: event.cpp event.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o event.o event.cpp + +flash.o: flash.cpp flash.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o flash.o flash.cpp + +icon.o: icon.cpp icon.h \ + constant.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o icon.o icon.cpp + +joypad.o: joypad.cpp joypad.h \ + button.h \ + keycode.h \ + constant.h \ axis.h \ joypadw.h \ - component.h \ - timer.h \ - keycode.h \ - event.h \ - constant.h \ axisw.h \ - buttonw.h \ - quickset.h \ - axis_edit.h \ flash.h \ + axis_edit.h \ joyslider.h \ - button_edit.h + buttonw.h \ + button_edit.h \ + quickset.h \ + error.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o joypad.o joypad.cpp + +joypadw.o: joypadw.cpp joypadw.h \ + axisw.h \ + axis.h \ + constant.h \ + flash.h \ + axis_edit.h \ + joyslider.h \ + keycode.h \ + joypad.h \ + button.h \ + error.h \ + buttonw.h \ + button_edit.h \ + quickset.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o joypadw.o joypadw.cpp + +joyslider.o: joyslider.cpp joyslider.h \ + constant.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o joyslider.o joyslider.cpp + +keycode.o: keycode.cpp keycode.h \ + constant.h \ + getkey.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o keycode.o keycode.cpp + +layout.o: layout.cpp layout.h \ + joypad.h \ + button.h \ + keycode.h \ + constant.h \ + axis.h \ + joypadw.h \ + axisw.h \ + flash.h \ + axis_edit.h \ + joyslider.h \ + buttonw.h \ + button_edit.h \ + quickset.h \ + error.h \ + device.h \ + trayicon/trayicon.h \ + icon.h \ + layout_edit.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o layout.o layout.cpp layout_edit.o: layout_edit.cpp layout_edit.h \ flash.h \ layout.h \ - device.h \ - joypadw.h \ - joypad.h \ - error.h \ - trayicon/trayicon.h \ - icon.h \ - button.h \ - axis.h \ - component.h \ - timer.h \ - keycode.h \ - event.h \ - constant.h \ - axisw.h \ - buttonw.h \ - quickset.h \ - axis_edit.h \ - joyslider.h \ - button_edit.h - -loop.o: loop.cpp loop.h \ - joypad.h \ - device.h \ - button.h \ - axis.h \ - joypadw.h \ - error.h \ - component.h \ - timer.h \ - keycode.h \ - event.h \ - constant.h \ - axisw.h \ - buttonw.h \ - quickset.h \ - axis_edit.h \ - flash.h \ - joyslider.h \ - button_edit.h - -main.o: main.cpp loop.h \ - layout.h \ - event.h \ - device.h \ - error.h \ joypad.h \ button.h \ - axis.h \ - joypadw.h \ - component.h \ - timer.h \ keycode.h \ constant.h \ + axis.h \ + joypadw.h \ axisw.h \ - buttonw.h \ - quickset.h \ axis_edit.h \ - flash.h \ joyslider.h \ + buttonw.h \ button_edit.h \ + quickset.h \ + error.h \ + device.h \ + trayicon/trayicon.h \ + icon.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o layout_edit.o layout_edit.cpp + +main.o: main.cpp layout.h \ + joypad.h \ + button.h \ + keycode.h \ + constant.h \ + axis.h \ + joypadw.h \ + axisw.h \ + flash.h \ + axis_edit.h \ + joyslider.h \ + buttonw.h \ + button_edit.h \ + quickset.h \ + error.h \ + device.h \ trayicon/trayicon.h \ icon.h \ - layout_edit.h + layout_edit.h \ + event.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp quickset.o: quickset.cpp quickset.h \ - keycode.h \ joypad.h \ - constant.h \ button.h \ + keycode.h \ + constant.h \ axis.h \ joypadw.h \ - error.h \ - component.h \ - timer.h \ - event.h \ axisw.h \ - buttonw.h \ - axis_edit.h \ flash.h \ + axis_edit.h \ joyslider.h \ - button_edit.h + buttonw.h \ + button_edit.h \ + error.h \ + getkey.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o quickset.o quickset.cpp + +getkey.o: getkey.cpp getkey.h \ + constant.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o getkey.o getkey.cpp trayicon.o: trayicon/trayicon.cpp trayicon/trayicon.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o trayicon.o trayicon/trayicon.cpp @@ -410,116 +524,67 @@ trayicon.o: trayicon/trayicon.cpp trayicon/trayicon.h trayicon_x11.o: trayicon/trayicon_x11.cpp trayicon/trayicon.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o trayicon_x11.o trayicon/trayicon_x11.cpp -moc_axis_edit.o: moc_axis_edit.cpp axis_edit.h joyslider.h \ - keycode.h \ - axis.h \ - constant.h \ - component.h \ - timer.h \ - event.h +moc_axis.o: moc_axis.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_axis.o moc_axis.cpp -moc_button_edit.o: moc_button_edit.cpp button_edit.h button.h \ - keycode.h \ - component.h \ - timer.h \ - event.h \ - constant.h +moc_axis_edit.o: moc_axis_edit.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_axis_edit.o moc_axis_edit.cpp -moc_flash.o: moc_flash.cpp flash.h +moc_button.o: moc_button.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_button.o moc_button.cpp -moc_icon.o: moc_icon.cpp icon.h constant.h +moc_button_edit.o: moc_button_edit.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_button_edit.o moc_button_edit.cpp -moc_joypadw.o: moc_joypadw.cpp joypadw.h joypad.h \ - axisw.h \ - buttonw.h \ - quickset.h \ - button.h \ - axis.h \ - error.h \ - component.h \ - timer.h \ - keycode.h \ - event.h \ - constant.h \ - axis_edit.h \ - flash.h \ - joyslider.h \ - button_edit.h +moc_flash.o: moc_flash.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_flash.o moc_flash.cpp -moc_keycode.o: moc_keycode.cpp keycode.h constant.h +moc_icon.o: moc_icon.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_icon.o moc_icon.cpp -moc_layout.o: moc_layout.cpp layout.h joypad.h \ - error.h \ - device.h \ - trayicon/trayicon.h \ - icon.h \ - layout_edit.h \ - button.h \ - axis.h \ - joypadw.h \ - component.h \ - timer.h \ - keycode.h \ - event.h \ - constant.h \ - axisw.h \ - buttonw.h \ - quickset.h \ - axis_edit.h \ - flash.h \ - joyslider.h \ - button_edit.h +moc_joypad.o: moc_joypad.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_joypad.o moc_joypad.cpp -moc_trayicon.o: trayicon/moc_trayicon.cpp trayicon/trayicon.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_trayicon.o trayicon/moc_trayicon.cpp +moc_joypadw.o: moc_joypadw.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_joypadw.o moc_joypadw.cpp -moc_axis_edit.cpp: $(MOC) axis_edit.h - $(MOC) axis_edit.h -o moc_axis_edit.cpp +moc_keycode.o: moc_keycode.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_keycode.o moc_keycode.cpp -moc_button_edit.cpp: $(MOC) button_edit.h - $(MOC) button_edit.h -o moc_button_edit.cpp +moc_layout.o: moc_layout.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_layout.o moc_layout.cpp -moc_flash.cpp: $(MOC) flash.h - $(MOC) flash.h -o moc_flash.cpp +moc_getkey.o: moc_getkey.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_getkey.o moc_getkey.cpp -moc_icon.cpp: $(MOC) icon.h - $(MOC) icon.h -o moc_icon.cpp - -moc_joypadw.cpp: $(MOC) joypadw.h - $(MOC) joypadw.h -o moc_joypadw.cpp - -moc_keycode.cpp: $(MOC) keycode.h - $(MOC) keycode.h -o moc_keycode.cpp - -moc_layout.cpp: $(MOC) layout.h - $(MOC) layout.h -o moc_layout.cpp - -trayicon/moc_trayicon.cpp: $(MOC) trayicon/trayicon.h - $(MOC) trayicon/trayicon.h -o trayicon/moc_trayicon.cpp +moc_trayicon.o: moc_trayicon.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_trayicon.o moc_trayicon.cpp ####### Install -install_target: all - @$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/bin/" || $(MKDIR) "$(INSTALL_ROOT)/usr/bin/" - -$(INSTALL_FILE) "$(QMAKE_TARGET)" "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)" - -strip "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)" +install_target: first FORCE + @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/bin/ || $(MKDIR) $(INSTALL_ROOT)/bin/ + -$(INSTALL_PROGRAM) "$(QMAKE_TARGET)" "$(INSTALL_ROOT)/bin/$(QMAKE_TARGET)" + -strip "$(INSTALL_ROOT)/bin/$(QMAKE_TARGET)" -uninstall_target: - -$(DEL_FILE) "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)" - -$(DEL_DIR) "$(INSTALL_ROOT)/usr/bin/" +uninstall_target: FORCE + -$(DEL_FILE) "$(INSTALL_ROOT)/bin/$(QMAKE_TARGET)" + -$(DEL_DIR) $(INSTALL_ROOT)/bin/ -install_icons: all - @$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/share/pixmaps/qjoypad/" || $(MKDIR) "$(INSTALL_ROOT)/usr/share/pixmaps/qjoypad/" - cp ../icons/* /usr/share/pixmaps/qjoypad; cd /usr/share/pixmaps/qjoypad; ln -sf gamepad4-24x24.png icon24.png; ln -sf gamepad3-64x64.png icon64.png; chmod -R a+r /usr/share/pixmaps/qjoypad +install_icons: first FORCE + @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/share/pixmaps/qjoypad/ || $(MKDIR) $(INSTALL_ROOT)/share/pixmaps/qjoypad/ + cp ../icons/* /share/pixmaps/qjoypad; cd /share/pixmaps/qjoypad; ln -sf gamepad4-24x24.png icon24.png; ln -sf gamepad3-64x64.png icon64.png; chmod -R a+r /share/pixmaps/qjoypad -install_doc: all - @$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/doc/qjoypad3/" || $(MKDIR) "$(INSTALL_ROOT)/usr/doc/qjoypad3/" - cp ../README.txt ../LICENSE.txt /usr/doc/qjoypad3 +install_doc: first FORCE + @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/doc/qjoypad3/ || $(MKDIR) $(INSTALL_ROOT)/doc/qjoypad3/ + cp ../README.txt ../LICENSE.txt /doc/qjoypad3 -install: install_target install_icons install_doc +install: install_target install_icons install_doc FORCE -uninstall: uninstall_target +uninstall: uninstall_target FORCE + +FORCE: diff --git a/src/axis.cpp b/src/axis.cpp index 054587f..6d8d354 100644 --- a/src/axis.cpp +++ b/src/axis.cpp @@ -1,194 +1,213 @@ #include "axis.h" - +#include "event.h" +#include "time.h" #define sqr(a) ((a)*(a)) Axis::Axis( int i ) { - index = i; - isOn = false; - //to keep toDefault from calling tossTimer without first calling takeTimer - gradient = false; - toDefault(); + index = i; + isOn = false; + isDown = false; + state = 0; + gradient = false; + toDefault(); + tick = 0; + timer = new QTimer(this); + a = 0; + b = 0; + c = 0; } Axis::~Axis() { - release(); + release(); + delete timer; } bool Axis::read( QTextStream* stream ) { // At this point, toDefault has just been called. - //read in a line from the stream, and split it up into individual words - QString input = stream->readLine().lower(); - QRegExp regex("[\\s,]+"); - QStringList words = QStringList::split(regex,input); - - //used to assure QString->int conversions worked - bool ok; - //int to store values derived from strings - int val; + //read in a line from the stream, and split it up into individual words + QString input = stream->readLine().toLower(); + QRegExp regex("[\\s,]+"); + QStringList words = input.split(regex); - //step through each word, check if it's a token we recognize + //used to assure QString->int conversions worked + bool ok; + //int to store values derived from strings + int val; + + //step through each word, check if it's a token we recognize for ( QStringList::Iterator it = words.begin(); it != words.end(); ++it ) { if (*it == "maxspeed") { - ++it; //move to the next word, which should be the maximum speed. - //if no value was given, there's an error in the file, stop reading. - if (it == words.end()) return false; - //try to convert the value. - val = (*it).toInt(&ok); - //if that worked and the maximum speed is in range, set it. - if (ok && val >= 0 && val <= MAXMOUSESPEED) maxSpeed = val; - //otherwise, faulty input, give up. - else return false; - } - //pretty much the same process for getting the dead zone - else if (*it == "dzone") { - ++it; - if (it == words.end()) return false; - val = (*it).toInt(&ok); - if (ok && val >= 0 && val <= JOYMAX) dZone = val; - else return false; - } - //and again for the extreme zone, - else if (*it == "xzone") { - ++it; - if (it == words.end()) return false; - val = (*it).toInt(&ok); - if (ok && val >= 0 && val <= JOYMAX) xZone = val; - else return false; - } - //and for the positive keycode, - else if (*it == "+key") { - ++it; - if (it == words.end()) return false; - val = (*it).toInt(&ok); - if (ok && val >= 0 && val <= MAXKEY) pkeycode = val; - else return false; - } - //and finally for the negative keycode. - else if (*it == "-key") { - ++it; - if (it == words.end()) return false; - val = (*it).toInt(&ok); - if (ok && val >= 0 && val <= MAXKEY) nkeycode = val; - else return false; - } - //the rest of the options are keywords without integers - else if (*it == "gradient") { - if (!gradient) takeTimer( this ); - gradient = true; - } - else if (*it == "throttle+") { - throttle = 1; - } - else if (*it == "throttle-") { - throttle = -1; - } - else if (*it == "mouse+v") { - mode = mousepv; - } - else if (*it == "mouse-v") { - mode = mousenv; - } - else if (*it == "mouse+h") { - mode = mouseph; - } - else if (*it == "mouse-h") { - mode = mousenh; - } - //we ignore unrecognized words to be friendly and allow for additions to - //the format in later versions. Note, this means that typos will not get - //the desired effect OR produce an error message. + ++it; //move to the next word, which should be the maximum speed. + //if no value was given, there's an error in the file, stop reading. + if (it == words.end()) return false; + //try to convert the value. + val = (*it).toInt(&ok); + //if that worked and the maximum speed is in range, set it. + if (ok && val >= 0 && val <= MAXMOUSESPEED) maxSpeed = val; + //otherwise, faulty input, give up. + else return false; + } + //pretty much the same process for getting the dead zone + else if (*it == "dzone") { + ++it; + if (it == words.end()) return false; + val = (*it).toInt(&ok); + if (ok && val >= 0 && val <= JOYMAX) dZone = val; + else return false; + } + //and again for the extreme zone, + else if (*it == "xzone") { + ++it; + if (it == words.end()) return false; + val = (*it).toInt(&ok); + if (ok && val >= 0 && val <= JOYMAX) xZone = val; + else return false; + } + //and for the positive keycode, + else if (*it == "+key") { + ++it; + if (it == words.end()) return false; + val = (*it).toInt(&ok); + if (ok && val >= 0 && val <= MAXKEY) pkeycode = val; + else return false; + } + //and finally for the negative keycode. + else if (*it == "-key") { + ++it; + if (it == words.end()) return false; + val = (*it).toInt(&ok); + if (ok && val >= 0 && val <= MAXKEY) nkeycode = val; + else return false; + } + //the rest of the options are keywords without integers + else if (*it == "gradient") { + gradient = true; + } + else if (*it == "throttle+") { + throttle = 1; + } + else if (*it == "throttle-") { + throttle = -1; + } + else if (*it == "mouse+v") { + mode = mousepv; + } + else if (*it == "mouse-v") { + mode = mousenv; + } + else if (*it == "mouse+h") { + mode = mouseph; + } + else if (*it == "mouse-h") { + mode = mousenh; + } + //we ignore unrecognized words to be friendly and allow for additions to + //the format in later versions. Note, this means that typos will not get + //the desired effect OR produce an error message. } - //assume that xZone, dZone, or maxSpeed has changed, for simplicity. - //do a few floating point calculations. - adjustGradient(); - - //if we parsed through all of the words, yay! All done. - return true; + //assume that xZone, dZone, or maxSpeed has changed, for simplicity. + //do a few floating point calculations. + adjustGradient(); + + //if we parsed through all of the words, yay! All done. + return true; +} + +void Axis::timerCalled() { + timerTick(++tick); } void Axis::write( QTextStream* stream ) { - *stream << "\t" << getName() << ": "; - if (gradient) *stream << "gradient, "; - if (throttle > 0) *stream << "throttle+, "; - else if (throttle < 0) *stream << "throttle-, "; - if (dZone != DZONE) *stream << "dZone " << dZone << ", "; - if (xZone != XZONE) *stream << "xZone " << xZone << ", "; - if (mode == keybd) { - *stream << "+key " << pkeycode << ", " - << "-key " << nkeycode << "\n"; - } - else { - if (gradient) *stream << "maxSpeed " << maxSpeed << ", "; - *stream << "mouse"; - if (mode == mousepv) - *stream << "+v\n"; - else if (mode == mousenv) - *stream << "-v\n"; - else if (mode == mouseph) - *stream << "+h\n"; - else if (mode == mousenh) - *stream << "-h\n"; - } - + *stream << "\t" << getName() << ": "; + if (gradient) *stream << "gradient, "; + if (throttle > 0) *stream << "throttle+, "; + else if (throttle < 0) *stream << "throttle-, "; + if (dZone != DZONE) *stream << "dZone " << dZone << ", "; + if (xZone != XZONE) *stream << "xZone " << xZone << ", "; + if (mode == keybd) { + *stream << "+key " << pkeycode << ", " + << "-key " << nkeycode << "\n"; + } + else { + if (gradient) *stream << "maxSpeed " << maxSpeed << ", "; + *stream << "mouse"; + if (mode == mousepv) + *stream << "+v\n"; + else if (mode == mousenv) + *stream << "-v\n"; + else if (mode == mouseph) + *stream << "+h\n"; + else if (mode == mousenh) + *stream << "-h\n"; + } + } void Axis::release() { - //if we're pressing a key, let it go. - if (isDown) { - move(false); - isDown = false; - } + //if we're pressing a key, let it go. + if (isDown) { + move(false); + isDown = false; + } } void Axis::jsevent( int value ) { - //adjust real value to throttle value - if (throttle == 0) - state = value; - else if (throttle == -1) - state = (value + JOYMIN) / 2; - else - state = (value + JOYMAX) / 2; - - //set isOn, deal with state changing. - //if was on but now should be off: - if (isOn && abs(state) <= dZone) { - isOn = false; - if (gradient) release(); - } - //if was off but now should be on: - else if (!isOn && abs(state) >= dZone) { - isOn = true; - if (gradient) duration = (abs(state) * FREQ) / JOYMAX; - } - //otherwise, state doesn't change! Don't touch it. - else return; - - //gradient will trigger movement on its own via timer(). - //non-gradient needs to be told to move. - if (!gradient) { - move(isOn); - } + //adjust real value to throttle value + if (throttle == 0) + state = value; + else if (throttle == -1) + state = (value + JOYMIN) / 2; + else + state = (value + JOYMAX) / 2; + //set isOn, deal with state changing. + //if was on but now should be off: + if (isOn && abs(state) <= dZone) { + isOn = false; + if (gradient) { + duration = 0; + release(); + timer->stop(); + disconnect(timer, SIGNAL(timeout()), 0, 0); + tick = 0; + } + } + //if was off but now should be on: + else if (!isOn && abs(state) >= dZone) { + isOn = true; + if (gradient) { + duration = (abs(state) * FREQ) / JOYMAX; + connect(timer, SIGNAL(timeout()), this, SLOT(timerCalled())); + timer->start(MSEC); + } + } + //otherwise, state doesn't change! Don't touch it. + else return; + + //gradient will trigger movement on its own via timer(). + //non-gradient needs to be told to move. + if (!gradient) { + move(isOn); + } } void Axis::toDefault() { - release(); - - if (gradient) tossTimer( this ); - gradient = false; - throttle = 0; - maxSpeed = 100; - dZone = DZONE; - xZone = XZONE; - mode = keybd; - pkeycode = 0; - nkeycode = 0; - downkey = 0; - state = 0; - adjustGradient(); + release(); + gradient = false; + throttle = 0; + maxSpeed = 100; + dZone = DZONE; + tick = 0; + xZone = XZONE; + mode = keybd; + pkeycode = 0; + nkeycode = 0; + downkey = 0; + state = 0; + adjustGradient(); } bool Axis::isDefault() { @@ -203,119 +222,121 @@ bool Axis::isDefault() { } bool Axis::inDeadZone( int val ) { - int value; - if (throttle == 0) - value = val; - else if (throttle == -1) - value = (val + JOYMIN) / 2; - else - value = (val + JOYMAX) / 2; - return (abs(value) < dZone); + int value; + if (throttle == 0) + value = val; + else if (throttle == -1) + value = (val + JOYMIN) / 2; + else + value = (val + JOYMAX) / 2; + return (abs(value) < dZone); } QString Axis::status() { - QString result = getName() + " : ["; - if (mode == keybd) { - if (throttle == 0) - result += "KEYBOARD"; - else result += "THROTTLE"; - } - else result += "MOUSE"; - return result + "]"; + QString result = getName() + " : ["; + if (mode == keybd) { + if (throttle == 0) + result += "KEYBOARD"; + else result += "THROTTLE"; + } + else result += "MOUSE"; + return result + "]"; } void Axis::setKey(bool positive, int value) { - if (positive) - pkeycode = value; - else - nkeycode = value; + if (positive) + pkeycode = value; + else + nkeycode = value; } -void Axis::timer( int tick ) { - if (isOn) { - if (mode == keybd) { - if (tick % FREQ == 0) { - if (duration == FREQ) { - if (!isDown) move(true); - duration = (abs(state) * FREQ) / JOYMAX; - return; - } - move(true); - } - if (tick % FREQ == duration) { - move(false); - duration = (abs(state) * FREQ) / JOYMAX; - } - } - else { - move(true); - } - } +void Axis::timerTick( int tick ) { + if (isOn) { + if (mode == keybd) { + if (tick % FREQ == 0) + { + if (duration == FREQ) + { + if (!isDown) move(true); + duration = (abs(state) * FREQ) / JOYMAX; + return; + } + move(true); + } + if (tick % FREQ == duration) { + move(false); + duration = (abs(state) * FREQ) / JOYMAX; + } + } + else { + move(true); + } + } } void Axis::adjustGradient() { - //create a nice quadratic curve fitting it to the points - //(dZone,0) and (xZone,MaxSpeed) - a = (double) (maxSpeed) / sqr(xZone - dZone); - b = -2 * a * dZone; - c = a * sqr(dZone); - //actual equation for curve is: y = ax^2 + b - //where x is the state of the axis and y is the distance the mouse should move. + //create a nice quadratic curve fitting it to the points + //(dZone,0) and (xZone,MaxSpeed) + a = (double) (maxSpeed) / sqr(xZone - dZone); + b = -2 * a * dZone; + c = a * sqr(dZone); + //actual equation for curve is: y = ax^2 + b + //where x is the state of the axis and y is the distance the mouse should move. } void Axis::move( bool press ) { - xevent e; - if (mode == keybd) { - //prevent KeyPress-KeyPress and KeyRelease-KeyRelease pairs. - //this would only happen in odd circumstances involving the setup - //dialog being open and blocking events from happening. - if (isDown == press) return; - isDown = press; - if (press) { - e.type = KPRESS; - downkey = (state > 0)?pkeycode:nkeycode; - } - else { - e.type = KREL; - } - e.value1 = downkey; - e.value2 = 0; - } - //if using the mouse - else if (press){ - int dist; - if (gradient) { - //calculate our mouse speed curve based on calculations made in - //adjustGradient() - int absState = abs(state); - if (absState >= xZone) dist = maxSpeed; - else if (absState <= dZone) dist = 0; - else dist = (int) (a*sqr(absState) + b*absState + c); - } - //if not gradient, always go full speed. - else dist = maxSpeed; + xevent e; + if (mode == keybd) { + //prevent KeyPress-KeyPress and KeyRelease-KeyRelease pairs. + //this would only happen in odd circumstances involving the setup + //dialog being open and blocking events from happening. + if (isDown == press) return; + isDown = press; + if (press) { + e.type = KPRESS; + downkey = (state > 0)?pkeycode:nkeycode; + } + else { + e.type = KREL; + } + e.value1 = downkey; + e.value2 = 0; + } + //if using the mouse + else if (press) { + int dist; + if (gradient) { + //calculate our mouse speed curve based on calculations made in + //adjustGradient() + int absState = abs(state); + if (absState >= xZone) dist = maxSpeed; + else if (absState <= dZone) dist = 0; + else dist = (int) (a*sqr(absState) + b*absState + c); + } + //if not gradient, always go full speed. + else dist = maxSpeed; - //if we're on the negative side of the axis, must compensate for - //squaring and make distance negative. - if (state < 0) dist = -dist; - e.type = WARP; - if (mode == mousepv) { - e.value1 = 0; - e.value2 = dist; - } - else if (mode == mousenv) { - e.value1 = 0; - e.value2 = -dist; - } - else if (mode == mouseph) { - e.value1 = dist; - e.value2 = 0; - } - else if (mode == mousenh) { - e.value1 = -dist; - e.value2 = 0; - } - } - //actually create the event - sendevent(e); + //if we're on the negative side of the axis, must compensate for + //squaring and make distance negative. + if (state < 0) dist = -dist; + e.type = WARP; + if (mode == mousepv) { + e.value1 = 0; + e.value2 = dist; + } + else if (mode == mousenv) { + e.value1 = 0; + e.value2 = -dist; + } + else if (mode == mouseph) { + e.value1 = dist; + e.value2 = 0; + } + else if (mode == mousenh) { + e.value1 = -dist; + e.value2 = 0; + } + } + //actually create the event + sendevent(e); } diff --git a/src/joypad.cpp b/src/joypad.cpp index 1adbf3e..47ec700 100644 --- a/src/joypad.cpp +++ b/src/joypad.cpp @@ -1,175 +1,286 @@ - +#include "unistd.h" #include "joypad.h" +#include +#include +#include +#include JoyPad::JoyPad( int i, int dev ) { - //remember the index, - index = i; - - //load data from the joystick device, if available. - resetToDev(dev); - - //there is no JoyPadWidget yet. - jpw = NULL; + //remember the index, + index = i; + + //load data from the joystick device, if available. + joydevFileHandle = NULL; + if(dev > 0) { + resetToDev(dev); + joydevFileHandle = new QSocketNotifier(dev, QSocketNotifier::Read, this); + joydevFileException = new QSocketNotifier(dev, QSocketNotifier::Exception, this); + connect(joydevFileHandle, SIGNAL(activated(int)), this, SLOT(handleJoyEvents(int))); + connect(joydevFileException, SIGNAL(activated(int)), this, SLOT(errorRead(int))); + } + //there is no JoyPadWidget yet. + jpw = NULL; } void JoyPad::resetToDev(int dev ) { - //remember the device file descriptor - joydev = dev; + //remember the device file descriptor + joydev = dev; - //read in the number of axes / buttons - axes = 0; - ioctl (joydev, JSIOCGAXES, &axes); - buttons = 0; - ioctl (joydev, JSIOCGBUTTONS, &buttons); - - //make sure that we have the axes we need. - //if one that we need doesn't yet exist, add it in. - //Note: if the current layout has a key assigned to an axis that did not - //have a real joystick axis mapped to it, and this function suddenly brings - //that axis into use, the key assignment will not be lost because the axis - //will already exist and no new axis will be created. - for (int i = 0; i < axes; i++) { - if (Axes[i] == 0) Axes.insert(i, new Axis( i )); - } - for (int i = 0; i < buttons; i++) { - if (Buttons[i] == 0) Buttons.insert(i, new Button( i )); - } + //read in the number of axes / buttons + axes = 0; + ioctl (joydev, JSIOCGAXES, &axes); + buttons = 0; + ioctl (joydev, JSIOCGBUTTONS, &buttons); + + //make sure that we have the axes we need. + //if one that we need doesn't yet exist, add it in. + //Note: if the current layout has a key assigned to an axis that did not + //have a real joystick axis mapped to it, and this function suddenly brings + //that axis into use, the key assignment will not be lost because the axis + //will already exist and no new axis will be created. + for (int i = 0; i < axes; i++) { + if (Axes[i] == 0) Axes.insert(i, new Axis( i )); + } + for (int i = 0; i < buttons; i++) { + if (Buttons[i] == 0) Buttons.insert(i, new Button( i )); + } + struct pollfd read_struct; + read_struct.fd = joydev; + read_struct.events = POLLIN; + char buf[10]; + while(poll(&read_struct, 1, 2)!=0) { + printf("reading junk data\n"); + read(joydev, buf, 10); + } + setupJoyDeviceListener(dev); +} + +void JoyPad::setupJoyDeviceListener(int dev) { + if(joydevFileHandle != NULL) { + delete joydevFileHandle; + } + joydevFileHandle = new QSocketNotifier(dev, QSocketNotifier::Read, this); + connect(joydevFileHandle, SIGNAL(activated(int)), this, SLOT(handleJoyEvents(int))); } void JoyPad::toDefault() { - //to reset the whole, reset all the parts. - for ( QIntDictIterator it( Axes ); it.current(); ++it ) - it.current()->toDefault(); - for ( QIntDictIterator