merges qt4 into trunk
git-svn-id: svn://svn.code.sf.net/p/qjoypad/code/trunk@94 c05e91a0-76c8-4ec0-b377-ef19ce7cc080
This commit is contained in:
committed by
virtuoussin13
parent
17ed926cdf
commit
c1ef3fa0b7
@ -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
|
|
721
src/Makefile
721
src/Makefile
@ -1,37 +1,34 @@
|
|||||||
#############################################################################
|
#############################################################################
|
||||||
# Makefile for building: qjoypad
|
# 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
|
# Project: qjoypad.pro
|
||||||
# Template: app
|
# 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
|
####### Compiler, tools and options
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CXX = g++
|
CXX = g++
|
||||||
LEX = flex
|
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
|
||||||
YACC = yacc
|
CFLAGS = -pipe -march=i686 -mtune=generic -O2 -pipe -Wall -W -D_REENTRANT $(DEFINES)
|
||||||
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 = -g -pipe -march=i686 -mtune=generic -O2 -pipe -Wall -W -D_REENTRANT $(DEFINES)
|
||||||
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
|
INCPATH = -I/usr/share/qt/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I. -Itrayicon -I. -I.
|
||||||
LEXFLAGS =
|
|
||||||
YACCFLAGS= -d
|
|
||||||
INCPATH = -I/usr/share/qt3/mkspecs/default -I. -I. -Itrayicon -I/usr/include/qt3
|
|
||||||
LINK = g++
|
LINK = g++
|
||||||
LFLAGS =
|
LFLAGS = -Wl,-O1 -Wl,-rpath,/usr/lib
|
||||||
LIBS = $(SUBLIBS) -L/usr/share/qt3/lib -L/usr/X11R6/lib -lXtst -lqt-mt -lXext -lX11 -lm -lpthread
|
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
|
AR = ar cqs
|
||||||
RANLIB =
|
RANLIB =
|
||||||
MOC = /usr/share/qt3/bin/moc
|
QMAKE = /usr/bin/qmake
|
||||||
UIC = /usr/share/qt3/bin/uic
|
|
||||||
QMAKE = qmake
|
|
||||||
TAR = tar -cf
|
TAR = tar -cf
|
||||||
GZIP = gzip -9f
|
COMPRESS = gzip -9f
|
||||||
COPY = cp -f
|
COPY = cp -f
|
||||||
|
SED = sed
|
||||||
COPY_FILE = $(COPY)
|
COPY_FILE = $(COPY)
|
||||||
COPY_DIR = $(COPY) -r
|
COPY_DIR = $(COPY) -r
|
||||||
INSTALL_FILE= $(COPY_FILE)
|
INSTALL_FILE = install -m 644 -p
|
||||||
INSTALL_DIR = $(COPY_DIR)
|
INSTALL_DIR = $(COPY_DIR)
|
||||||
|
INSTALL_PROGRAM = install -m 755 -p
|
||||||
DEL_FILE = rm -f
|
DEL_FILE = rm -f
|
||||||
SYMLINK = ln -sf
|
SYMLINK = ln -sf
|
||||||
DEL_DIR = rmdir
|
DEL_DIR = rmdir
|
||||||
@ -45,29 +42,6 @@ OBJECTS_DIR = ./
|
|||||||
|
|
||||||
####### Files
|
####### 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 \
|
axis_edit.cpp \
|
||||||
axisw.cpp \
|
axisw.cpp \
|
||||||
@ -83,11 +57,22 @@ SOURCES = axis.cpp \
|
|||||||
keycode.cpp \
|
keycode.cpp \
|
||||||
layout.cpp \
|
layout.cpp \
|
||||||
layout_edit.cpp \
|
layout_edit.cpp \
|
||||||
loop.cpp \
|
|
||||||
main.cpp \
|
main.cpp \
|
||||||
quickset.cpp \
|
quickset.cpp \
|
||||||
|
getkey.cpp \
|
||||||
trayicon/trayicon.cpp \
|
trayicon/trayicon.cpp \
|
||||||
trayicon/trayicon_x11.cpp
|
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 \
|
OBJECTS = axis.o \
|
||||||
axis_edit.o \
|
axis_edit.o \
|
||||||
axisw.o \
|
axisw.o \
|
||||||
@ -103,31 +88,43 @@ OBJECTS = axis.o \
|
|||||||
keycode.o \
|
keycode.o \
|
||||||
layout.o \
|
layout.o \
|
||||||
layout_edit.o \
|
layout_edit.o \
|
||||||
loop.o \
|
|
||||||
main.o \
|
main.o \
|
||||||
quickset.o \
|
quickset.o \
|
||||||
|
getkey.o \
|
||||||
trayicon.o \
|
trayicon.o \
|
||||||
trayicon_x11.o
|
trayicon_x11.o \
|
||||||
FORMS =
|
moc_axis.o \
|
||||||
UICDECLS =
|
moc_axis_edit.o \
|
||||||
UICIMPLS =
|
moc_button.o \
|
||||||
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 \
|
|
||||||
moc_button_edit.o \
|
moc_button_edit.o \
|
||||||
moc_flash.o \
|
moc_flash.o \
|
||||||
moc_icon.o \
|
moc_icon.o \
|
||||||
|
moc_joypad.o \
|
||||||
moc_joypadw.o \
|
moc_joypadw.o \
|
||||||
moc_keycode.o \
|
moc_keycode.o \
|
||||||
moc_layout.o \
|
moc_layout.o \
|
||||||
|
moc_getkey.o \
|
||||||
moc_trayicon.o
|
moc_trayicon.o
|
||||||
DIST = qjoypad.pro
|
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
|
QMAKE_TARGET = qjoypad
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
TARGET = qjoypad
|
TARGET = qjoypad
|
||||||
@ -135,53 +132,82 @@ TARGET = qjoypad
|
|||||||
first: all
|
first: all
|
||||||
####### Implicit rules
|
####### Implicit rules
|
||||||
|
|
||||||
.SUFFIXES: .c .o .cpp .cc .cxx .C
|
.SUFFIXES: .o .c .cpp .cc .cxx .C
|
||||||
|
|
||||||
.cpp.o:
|
.cpp.o:
|
||||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
|
||||||
|
|
||||||
.cc.o:
|
.cc.o:
|
||||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
|
||||||
|
|
||||||
.cxx.o:
|
.cxx.o:
|
||||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
|
||||||
|
|
||||||
.C.o:
|
.C.o:
|
||||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
|
$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
|
||||||
|
|
||||||
####### Build rules
|
####### Build rules
|
||||||
|
|
||||||
all: Makefile $(TARGET)
|
all: Makefile $(TARGET)
|
||||||
|
|
||||||
$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
|
$(TARGET): $(OBJECTS)
|
||||||
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(OBJCOMP) $(LIBS)
|
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
|
||||||
|
|
||||||
mocables: $(SRCMOC)
|
Makefile: qjoypad.pro /usr/share/qt/mkspecs/linux-g++/qmake.conf /usr/share/qt/mkspecs/common/g++.conf \
|
||||||
uicables: $(UICDECLS) $(UICIMPLS)
|
/usr/share/qt/mkspecs/common/unix.conf \
|
||||||
|
/usr/share/qt/mkspecs/common/linux.conf \
|
||||||
$(MOC):
|
/usr/share/qt/mkspecs/qconfig.pri \
|
||||||
( cd $(QTDIR)/src/moc && $(MAKE) )
|
/usr/share/qt/mkspecs/features/qt_functions.prf \
|
||||||
|
/usr/share/qt/mkspecs/features/qt_config.prf \
|
||||||
Makefile: qjoypad.pro /usr/share/qt3/mkspecs/default/qmake.conf /usr/share/qt3/lib/libqt-mt.prl
|
/usr/share/qt/mkspecs/features/exclusive_builds.prf \
|
||||||
$(QMAKE) "DEVDIR=/dev/input" "PREFIX=/usr" "DEFINES += " -o Makefile qjoypad.pro
|
/usr/share/qt/mkspecs/features/default_pre.prf \
|
||||||
qmake:
|
/usr/share/qt/mkspecs/features/release.prf \
|
||||||
@$(QMAKE) "DEVDIR=/dev/input" "PREFIX=/usr" "DEFINES += " -o Makefile qjoypad.pro
|
/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:
|
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:
|
clean:compiler_clean
|
||||||
|
|
||||||
yaccclean:
|
|
||||||
lexclean:
|
|
||||||
clean: mocclean
|
|
||||||
-$(DEL_FILE) $(OBJECTS)
|
-$(DEL_FILE) $(OBJECTS)
|
||||||
-$(DEL_FILE) *~ core *.core
|
-$(DEL_FILE) *~ core *.core
|
||||||
|
|
||||||
@ -189,220 +215,308 @@ clean: mocclean
|
|||||||
####### Sub-libraries
|
####### Sub-libraries
|
||||||
|
|
||||||
distclean: clean
|
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 \
|
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
|
||||||
component.h \
|
compiler_moc_header_clean:
|
||||||
timer.h \
|
-$(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
|
||||||
event.h \
|
moc_axis.cpp: constant.h \
|
||||||
constant.h
|
axis.h
|
||||||
|
/usr/bin/moc $(DEFINES) $(INCPATH) axis.h -o moc_axis.cpp
|
||||||
|
|
||||||
axis_edit.o: axis_edit.cpp axis_edit.h \
|
moc_axis_edit.cpp: axis.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 \
|
|
||||||
constant.h \
|
constant.h \
|
||||||
joyslider.h \
|
joyslider.h \
|
||||||
keycode.h
|
|
||||||
|
|
||||||
button.o: button.cpp button.h \
|
|
||||||
component.h \
|
|
||||||
timer.h \
|
|
||||||
keycode.h \
|
keycode.h \
|
||||||
event.h \
|
axis_edit.h
|
||||||
constant.h
|
/usr/bin/moc $(DEFINES) $(INCPATH) axis_edit.h -o moc_axis_edit.cpp
|
||||||
|
|
||||||
button_edit.o: button_edit.cpp button_edit.h \
|
moc_button.cpp: keycode.h \
|
||||||
button.h \
|
constant.h \
|
||||||
|
button.h
|
||||||
|
/usr/bin/moc $(DEFINES) $(INCPATH) button.h -o moc_button.cpp
|
||||||
|
|
||||||
|
moc_button_edit.cpp: button.h \
|
||||||
keycode.h \
|
keycode.h \
|
||||||
component.h \
|
constant.h \
|
||||||
timer.h \
|
button_edit.h
|
||||||
event.h \
|
/usr/bin/moc $(DEFINES) $(INCPATH) button_edit.h -o moc_button_edit.cpp
|
||||||
constant.h
|
|
||||||
|
|
||||||
buttonw.o: buttonw.cpp buttonw.h \
|
moc_flash.cpp: flash.h
|
||||||
button.h \
|
/usr/bin/moc $(DEFINES) $(INCPATH) flash.h -o moc_flash.cpp
|
||||||
button_edit.h \
|
|
||||||
flash.h \
|
moc_icon.cpp: constant.h \
|
||||||
component.h \
|
icon.h
|
||||||
timer.h \
|
/usr/bin/moc $(DEFINES) $(INCPATH) icon.h -o moc_icon.cpp
|
||||||
|
|
||||||
|
moc_joypad.cpp: button.h \
|
||||||
keycode.h \
|
keycode.h \
|
||||||
event.h \
|
constant.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 \
|
|
||||||
axis.h \
|
axis.h \
|
||||||
joypadw.h \
|
joypadw.h \
|
||||||
error.h \
|
|
||||||
component.h \
|
|
||||||
timer.h \
|
|
||||||
keycode.h \
|
|
||||||
event.h \
|
|
||||||
constant.h \
|
|
||||||
axisw.h \
|
axisw.h \
|
||||||
buttonw.h \
|
|
||||||
quickset.h \
|
|
||||||
axis_edit.h \
|
|
||||||
flash.h \
|
flash.h \
|
||||||
|
axis_edit.h \
|
||||||
joyslider.h \
|
joyslider.h \
|
||||||
button_edit.h
|
|
||||||
|
|
||||||
joypadw.o: joypadw.cpp joypadw.h \
|
|
||||||
joypad.h \
|
joypad.h \
|
||||||
axisw.h \
|
error.h \
|
||||||
buttonw.h \
|
buttonw.h \
|
||||||
|
button_edit.h \
|
||||||
quickset.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 \
|
axis.h \
|
||||||
error.h \
|
|
||||||
component.h \
|
|
||||||
timer.h \
|
|
||||||
keycode.h \
|
|
||||||
event.h \
|
|
||||||
constant.h \
|
constant.h \
|
||||||
axis_edit.h \
|
|
||||||
flash.h \
|
flash.h \
|
||||||
|
axis_edit.h \
|
||||||
joyslider.h \
|
joyslider.h \
|
||||||
button_edit.h
|
keycode.h \
|
||||||
|
|
||||||
joyslider.o: joyslider.cpp joyslider.h \
|
|
||||||
constant.h
|
|
||||||
|
|
||||||
keycode.o: keycode.cpp keycode.h \
|
|
||||||
constant.h
|
|
||||||
|
|
||||||
layout.o: layout.cpp layout.h \
|
|
||||||
joypad.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 \
|
error.h \
|
||||||
device.h \
|
device.h \
|
||||||
trayicon/trayicon.h \
|
trayicon/trayicon.h \
|
||||||
icon.h \
|
icon.h \
|
||||||
layout_edit.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 \
|
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 \
|
axis.h \
|
||||||
joypadw.h \
|
joypadw.h \
|
||||||
component.h \
|
|
||||||
timer.h \
|
|
||||||
keycode.h \
|
|
||||||
event.h \
|
|
||||||
constant.h \
|
|
||||||
axisw.h \
|
axisw.h \
|
||||||
buttonw.h \
|
|
||||||
quickset.h \
|
|
||||||
axis_edit.h \
|
|
||||||
flash.h \
|
flash.h \
|
||||||
|
axis_edit.h \
|
||||||
joyslider.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 \
|
layout_edit.o: layout_edit.cpp layout_edit.h \
|
||||||
flash.h \
|
flash.h \
|
||||||
layout.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 \
|
joypad.h \
|
||||||
button.h \
|
button.h \
|
||||||
axis.h \
|
|
||||||
joypadw.h \
|
|
||||||
component.h \
|
|
||||||
timer.h \
|
|
||||||
keycode.h \
|
keycode.h \
|
||||||
constant.h \
|
constant.h \
|
||||||
|
axis.h \
|
||||||
|
joypadw.h \
|
||||||
axisw.h \
|
axisw.h \
|
||||||
buttonw.h \
|
|
||||||
quickset.h \
|
|
||||||
axis_edit.h \
|
axis_edit.h \
|
||||||
flash.h \
|
|
||||||
joyslider.h \
|
joyslider.h \
|
||||||
|
buttonw.h \
|
||||||
button_edit.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 \
|
trayicon/trayicon.h \
|
||||||
icon.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 \
|
quickset.o: quickset.cpp quickset.h \
|
||||||
keycode.h \
|
|
||||||
joypad.h \
|
joypad.h \
|
||||||
constant.h \
|
|
||||||
button.h \
|
button.h \
|
||||||
|
keycode.h \
|
||||||
|
constant.h \
|
||||||
axis.h \
|
axis.h \
|
||||||
joypadw.h \
|
joypadw.h \
|
||||||
error.h \
|
|
||||||
component.h \
|
|
||||||
timer.h \
|
|
||||||
event.h \
|
|
||||||
axisw.h \
|
axisw.h \
|
||||||
buttonw.h \
|
|
||||||
axis_edit.h \
|
|
||||||
flash.h \
|
flash.h \
|
||||||
|
axis_edit.h \
|
||||||
joyslider.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
|
trayicon.o: trayicon/trayicon.cpp trayicon/trayicon.h
|
||||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o trayicon.o trayicon/trayicon.cpp
|
$(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
|
trayicon_x11.o: trayicon/trayicon_x11.cpp trayicon/trayicon.h
|
||||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o trayicon_x11.o trayicon/trayicon_x11.cpp
|
$(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 \
|
moc_axis.o: moc_axis.cpp
|
||||||
keycode.h \
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_axis.o moc_axis.cpp
|
||||||
axis.h \
|
|
||||||
constant.h \
|
|
||||||
component.h \
|
|
||||||
timer.h \
|
|
||||||
event.h
|
|
||||||
|
|
||||||
moc_button_edit.o: moc_button_edit.cpp button_edit.h button.h \
|
moc_axis_edit.o: moc_axis_edit.cpp
|
||||||
keycode.h \
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_axis_edit.o moc_axis_edit.cpp
|
||||||
component.h \
|
|
||||||
timer.h \
|
|
||||||
event.h \
|
|
||||||
constant.h
|
|
||||||
|
|
||||||
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 \
|
moc_flash.o: moc_flash.cpp
|
||||||
axisw.h \
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_flash.o moc_flash.cpp
|
||||||
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_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 \
|
moc_joypad.o: moc_joypad.cpp
|
||||||
error.h \
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_joypad.o moc_joypad.cpp
|
||||||
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_trayicon.o: trayicon/moc_trayicon.cpp trayicon/trayicon.h
|
moc_joypadw.o: moc_joypadw.cpp
|
||||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_trayicon.o trayicon/moc_trayicon.cpp
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_joypadw.o moc_joypadw.cpp
|
||||||
|
|
||||||
moc_axis_edit.cpp: $(MOC) axis_edit.h
|
moc_keycode.o: moc_keycode.cpp
|
||||||
$(MOC) axis_edit.h -o moc_axis_edit.cpp
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_keycode.o moc_keycode.cpp
|
||||||
|
|
||||||
moc_button_edit.cpp: $(MOC) button_edit.h
|
moc_layout.o: moc_layout.cpp
|
||||||
$(MOC) button_edit.h -o moc_button_edit.cpp
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_layout.o moc_layout.cpp
|
||||||
|
|
||||||
moc_flash.cpp: $(MOC) flash.h
|
moc_getkey.o: moc_getkey.cpp
|
||||||
$(MOC) flash.h -o moc_flash.cpp
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_getkey.o moc_getkey.cpp
|
||||||
|
|
||||||
moc_icon.cpp: $(MOC) icon.h
|
moc_trayicon.o: moc_trayicon.cpp
|
||||||
$(MOC) icon.h -o moc_icon.cpp
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_trayicon.o moc_trayicon.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
|
|
||||||
|
|
||||||
####### Install
|
####### Install
|
||||||
|
|
||||||
install_target: all
|
install_target: first FORCE
|
||||||
@$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/bin/" || $(MKDIR) "$(INSTALL_ROOT)/usr/bin/"
|
@$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/bin/ || $(MKDIR) $(INSTALL_ROOT)/bin/
|
||||||
-$(INSTALL_FILE) "$(QMAKE_TARGET)" "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)"
|
-$(INSTALL_PROGRAM) "$(QMAKE_TARGET)" "$(INSTALL_ROOT)/bin/$(QMAKE_TARGET)"
|
||||||
-strip "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)"
|
-strip "$(INSTALL_ROOT)/bin/$(QMAKE_TARGET)"
|
||||||
|
|
||||||
uninstall_target:
|
uninstall_target: FORCE
|
||||||
-$(DEL_FILE) "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)"
|
-$(DEL_FILE) "$(INSTALL_ROOT)/bin/$(QMAKE_TARGET)"
|
||||||
-$(DEL_DIR) "$(INSTALL_ROOT)/usr/bin/"
|
-$(DEL_DIR) $(INSTALL_ROOT)/bin/
|
||||||
|
|
||||||
|
|
||||||
install_icons: all
|
install_icons: first FORCE
|
||||||
@$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/share/pixmaps/qjoypad/" || $(MKDIR) "$(INSTALL_ROOT)/usr/share/pixmaps/qjoypad/"
|
@$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/share/pixmaps/qjoypad/ || $(MKDIR) $(INSTALL_ROOT)/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
|
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
|
install_doc: first FORCE
|
||||||
@$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)/usr/doc/qjoypad3/" || $(MKDIR) "$(INSTALL_ROOT)/usr/doc/qjoypad3/"
|
@$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/doc/qjoypad3/ || $(MKDIR) $(INSTALL_ROOT)/doc/qjoypad3/
|
||||||
cp ../README.txt ../LICENSE.txt /usr/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:
|
||||||
|
|
||||||
|
47
src/axis.cpp
47
src/axis.cpp
@ -1,28 +1,36 @@
|
|||||||
#include "axis.h"
|
#include "axis.h"
|
||||||
|
#include "event.h"
|
||||||
|
#include "time.h"
|
||||||
#define sqr(a) ((a)*(a))
|
#define sqr(a) ((a)*(a))
|
||||||
|
|
||||||
|
|
||||||
Axis::Axis( int i ) {
|
Axis::Axis( int i ) {
|
||||||
index = i;
|
index = i;
|
||||||
isOn = false;
|
isOn = false;
|
||||||
//to keep toDefault from calling tossTimer without first calling takeTimer
|
isDown = false;
|
||||||
|
state = 0;
|
||||||
gradient = false;
|
gradient = false;
|
||||||
toDefault();
|
toDefault();
|
||||||
|
tick = 0;
|
||||||
|
timer = new QTimer(this);
|
||||||
|
a = 0;
|
||||||
|
b = 0;
|
||||||
|
c = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Axis::~Axis() {
|
Axis::~Axis() {
|
||||||
release();
|
release();
|
||||||
|
delete timer;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Axis::read( QTextStream* stream ) {
|
bool Axis::read( QTextStream* stream ) {
|
||||||
// At this point, toDefault has just been called.
|
// At this point, toDefault has just been called.
|
||||||
|
|
||||||
//read in a line from the stream, and split it up into individual words
|
//read in a line from the stream, and split it up into individual words
|
||||||
QString input = stream->readLine().lower();
|
QString input = stream->readLine().toLower();
|
||||||
QRegExp regex("[\\s,]+");
|
QRegExp regex("[\\s,]+");
|
||||||
QStringList words = QStringList::split(regex,input);
|
QStringList words = input.split(regex);
|
||||||
|
|
||||||
//used to assure QString->int conversions worked
|
//used to assure QString->int conversions worked
|
||||||
bool ok;
|
bool ok;
|
||||||
@ -76,7 +84,6 @@ bool Axis::read( QTextStream* stream ) {
|
|||||||
}
|
}
|
||||||
//the rest of the options are keywords without integers
|
//the rest of the options are keywords without integers
|
||||||
else if (*it == "gradient") {
|
else if (*it == "gradient") {
|
||||||
if (!gradient) takeTimer( this );
|
|
||||||
gradient = true;
|
gradient = true;
|
||||||
}
|
}
|
||||||
else if (*it == "throttle+") {
|
else if (*it == "throttle+") {
|
||||||
@ -110,6 +117,10 @@ bool Axis::read( QTextStream* stream ) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Axis::timerCalled() {
|
||||||
|
timerTick(++tick);
|
||||||
|
}
|
||||||
|
|
||||||
void Axis::write( QTextStream* stream ) {
|
void Axis::write( QTextStream* stream ) {
|
||||||
*stream << "\t" << getName() << ": ";
|
*stream << "\t" << getName() << ": ";
|
||||||
if (gradient) *stream << "gradient, ";
|
if (gradient) *stream << "gradient, ";
|
||||||
@ -152,17 +163,26 @@ void Axis::jsevent( int value ) {
|
|||||||
state = (value + JOYMIN) / 2;
|
state = (value + JOYMIN) / 2;
|
||||||
else
|
else
|
||||||
state = (value + JOYMAX) / 2;
|
state = (value + JOYMAX) / 2;
|
||||||
|
|
||||||
//set isOn, deal with state changing.
|
//set isOn, deal with state changing.
|
||||||
//if was on but now should be off:
|
//if was on but now should be off:
|
||||||
if (isOn && abs(state) <= dZone) {
|
if (isOn && abs(state) <= dZone) {
|
||||||
isOn = false;
|
isOn = false;
|
||||||
if (gradient) release();
|
if (gradient) {
|
||||||
|
duration = 0;
|
||||||
|
release();
|
||||||
|
timer->stop();
|
||||||
|
disconnect(timer, SIGNAL(timeout()), 0, 0);
|
||||||
|
tick = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//if was off but now should be on:
|
//if was off but now should be on:
|
||||||
else if (!isOn && abs(state) >= dZone) {
|
else if (!isOn && abs(state) >= dZone) {
|
||||||
isOn = true;
|
isOn = true;
|
||||||
if (gradient) duration = (abs(state) * FREQ) / JOYMAX;
|
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.
|
//otherwise, state doesn't change! Don't touch it.
|
||||||
else return;
|
else return;
|
||||||
@ -176,12 +196,11 @@ void Axis::jsevent( int value ) {
|
|||||||
|
|
||||||
void Axis::toDefault() {
|
void Axis::toDefault() {
|
||||||
release();
|
release();
|
||||||
|
|
||||||
if (gradient) tossTimer( this );
|
|
||||||
gradient = false;
|
gradient = false;
|
||||||
throttle = 0;
|
throttle = 0;
|
||||||
maxSpeed = 100;
|
maxSpeed = 100;
|
||||||
dZone = DZONE;
|
dZone = DZONE;
|
||||||
|
tick = 0;
|
||||||
xZone = XZONE;
|
xZone = XZONE;
|
||||||
mode = keybd;
|
mode = keybd;
|
||||||
pkeycode = 0;
|
pkeycode = 0;
|
||||||
@ -231,11 +250,13 @@ void Axis::setKey(bool positive, int value) {
|
|||||||
nkeycode = value;
|
nkeycode = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Axis::timer( int tick ) {
|
void Axis::timerTick( int tick ) {
|
||||||
if (isOn) {
|
if (isOn) {
|
||||||
if (mode == keybd) {
|
if (mode == keybd) {
|
||||||
if (tick % FREQ == 0) {
|
if (tick % FREQ == 0)
|
||||||
if (duration == FREQ) {
|
{
|
||||||
|
if (duration == FREQ)
|
||||||
|
{
|
||||||
if (!isDown) move(true);
|
if (!isDown) move(true);
|
||||||
duration = (abs(state) * FREQ) / JOYMAX;
|
duration = (abs(state) * FREQ) / JOYMAX;
|
||||||
return;
|
return;
|
||||||
|
159
src/joypad.cpp
159
src/joypad.cpp
@ -1,12 +1,22 @@
|
|||||||
|
#include "unistd.h"
|
||||||
#include "joypad.h"
|
#include "joypad.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <poll.h>
|
||||||
|
#include <QApplication>
|
||||||
JoyPad::JoyPad( int i, int dev ) {
|
JoyPad::JoyPad( int i, int dev ) {
|
||||||
//remember the index,
|
//remember the index,
|
||||||
index = i;
|
index = i;
|
||||||
|
|
||||||
//load data from the joystick device, if available.
|
//load data from the joystick device, if available.
|
||||||
|
joydevFileHandle = NULL;
|
||||||
|
if(dev > 0) {
|
||||||
resetToDev(dev);
|
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.
|
//there is no JoyPadWidget yet.
|
||||||
jpw = NULL;
|
jpw = NULL;
|
||||||
}
|
}
|
||||||
@ -33,26 +43,69 @@ void JoyPad::resetToDev(int dev ) {
|
|||||||
for (int i = 0; i < buttons; i++) {
|
for (int i = 0; i < buttons; i++) {
|
||||||
if (Buttons[i] == 0) Buttons.insert(i, new Button( 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() {
|
void JoyPad::toDefault() {
|
||||||
//to reset the whole, reset all the parts.
|
//to reset the whole, reset all the parts.
|
||||||
for ( QIntDictIterator<Axis> it( Axes ); it.current(); ++it )
|
do
|
||||||
it.current()->toDefault();
|
{
|
||||||
for ( QIntDictIterator<Button> it( Buttons ); it.current(); ++it )
|
QHashIterator<int, Axis*> it( Axes );
|
||||||
it.current()->toDefault();
|
while (it.hasNext())
|
||||||
|
{
|
||||||
|
it.next();
|
||||||
|
it.value()->toDefault();
|
||||||
|
}
|
||||||
|
} while (0);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
QHashIterator<int, Button*> it( Buttons );
|
||||||
|
while (it.hasNext())
|
||||||
|
{
|
||||||
|
it.next();
|
||||||
|
it.value()->toDefault();
|
||||||
|
}
|
||||||
|
} while (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JoyPad::isDefault() {
|
bool JoyPad::isDefault() {
|
||||||
//if any of the parts are not at default, then the whole isn't either.
|
//if any of the parts are not at default, then the whole isn't either.
|
||||||
for ( QIntDictIterator<Axis> it( Axes ); it.current(); ++it )
|
do {
|
||||||
if (!it.current()->isDefault()) return false;
|
QHashIterator<int, Axis*> it( Axes );
|
||||||
for ( QIntDictIterator<Button> it( Buttons ); it.current(); ++it )
|
while (it.hasNext())
|
||||||
if (!it.current()->isDefault()) return false;
|
{
|
||||||
|
it.next();
|
||||||
|
if (!it.value()->isDefault()) return false;
|
||||||
|
}
|
||||||
|
} while (0);
|
||||||
|
do {
|
||||||
|
QHashIterator<int, Button*> it( Buttons );
|
||||||
|
while (it.hasNext())
|
||||||
|
{
|
||||||
|
it.next();
|
||||||
|
if (!it.value()->isDefault()) return false;
|
||||||
|
}
|
||||||
|
} while (0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JoyPad::read( QTextStream* stream ) {
|
bool JoyPad::readConfig( QTextStream* stream ) {
|
||||||
toDefault();
|
toDefault();
|
||||||
|
|
||||||
QString word;
|
QString word;
|
||||||
@ -61,7 +114,7 @@ bool JoyPad::read( QTextStream* stream ) {
|
|||||||
|
|
||||||
*stream >> word;
|
*stream >> word;
|
||||||
while (word != NULL && word != "}") {
|
while (word != NULL && word != "}") {
|
||||||
word = word.lower();
|
word = word.toLower();
|
||||||
if (word == "button") {
|
if (word == "button") {
|
||||||
*stream >> num;
|
*stream >> num;
|
||||||
if (num > 0) {
|
if (num > 0) {
|
||||||
@ -112,18 +165,23 @@ bool JoyPad::read( QTextStream* stream ) {
|
|||||||
void JoyPad::write( QTextStream* stream ) {
|
void JoyPad::write( QTextStream* stream ) {
|
||||||
int i = 0; //use to test if this is default or not.
|
int i = 0; //use to test if this is default or not.
|
||||||
QString result;
|
QString result;
|
||||||
QTextStream* s = new QTextStream(&result, IO_WriteOnly);
|
QTextStream* s = new QTextStream(&result, QIODevice::WriteOnly);
|
||||||
*s << getName() << " {\n";
|
*s << getName() << " {\n";
|
||||||
for ( QIntDictIterator<Axis> it( Axes ); it.current(); ++it ) {
|
do {
|
||||||
//only write an axis if it is not at the default settings :)
|
QHashIterator<int, Axis*> it( Axes );
|
||||||
if (!it.current()->isDefault()) {
|
while (it.hasNext()) {
|
||||||
it.current()->write( s );
|
it.next();
|
||||||
|
if (!it.value()->isDefault()) {
|
||||||
|
it.value()->write( s );
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for ( QIntDictIterator<Button> it( Buttons ); it.current(); ++it ) {
|
} while (0);
|
||||||
if (!it.current()->isDefault()) {
|
QHashIterator<int, Button*> it( Buttons );
|
||||||
it.current()->write( s );
|
while (it.hasNext()) {
|
||||||
|
it.next();
|
||||||
|
if (!it.value()->isDefault()) {
|
||||||
|
it.value()->write( s );
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -134,12 +192,20 @@ void JoyPad::write( QTextStream* stream ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JoyPad::release() {
|
void JoyPad::release() {
|
||||||
for ( QIntDictIterator<Axis> it( Axes ); it.current(); ++it ) {
|
do {
|
||||||
it.current()->release();
|
QHashIterator<int, Axis*> it( Axes );
|
||||||
|
while (it.hasNext()) {
|
||||||
|
it.next();
|
||||||
|
it.value()->release();
|
||||||
}
|
}
|
||||||
for ( QIntDictIterator<Button> it( Buttons ); it.current(); ++it ) {
|
} while (0);
|
||||||
it.current()->release();
|
do {
|
||||||
|
QHashIterator<int, Button*> it( Buttons );
|
||||||
|
while (it.hasNext()) {
|
||||||
|
it.next();
|
||||||
|
it.value()->release();
|
||||||
}
|
}
|
||||||
|
} while (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JoyPad::jsevent( js_event msg ) {
|
void JoyPad::jsevent( js_event msg ) {
|
||||||
@ -148,6 +214,7 @@ void JoyPad::jsevent( js_event msg ) {
|
|||||||
//tell the dialog there was an event. It will use this to flash
|
//tell the dialog there was an event. It will use this to flash
|
||||||
//the appropriate button, if necesary.
|
//the appropriate button, if necesary.
|
||||||
jpw->jsevent(msg);
|
jpw->jsevent(msg);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
//if the dialog is open, stop here. We don't want to signal ourselves with
|
//if the dialog is open, stop here. We don't want to signal ourselves with
|
||||||
//the input we generate.
|
//the input we generate.
|
||||||
@ -156,9 +223,13 @@ void JoyPad::jsevent( js_event msg ) {
|
|||||||
//otherwise, lets create us a fake event! Pass on the event to whichever
|
//otherwise, lets create us a fake event! Pass on the event to whichever
|
||||||
//Button or Axis was pressed and let them decide what to do with it.
|
//Button or Axis was pressed and let them decide what to do with it.
|
||||||
if (msg.type & JS_EVENT_AXIS) {
|
if (msg.type & JS_EVENT_AXIS) {
|
||||||
|
printf("DEBUG: passing on an axis event\n");
|
||||||
|
printf("DEBUG: %d %d\n", msg.number, msg.value);
|
||||||
Axes[msg.number]->jsevent(msg.value);
|
Axes[msg.number]->jsevent(msg.value);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
printf("DEBUG: passing on a button event\n");
|
||||||
|
printf("DEBUG: %d %d\n", msg.number, msg.value);
|
||||||
Buttons[msg.number]->jsevent(msg.value);
|
Buttons[msg.number]->jsevent(msg.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -169,7 +240,47 @@ JoyPadWidget* JoyPad::widget( QWidget* parent, int i) {
|
|||||||
return jpw;
|
return jpw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JoyPad::handleJoyEvents(int fd) {
|
||||||
|
js_event msg;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = read( joydev, &msg, sizeof(js_event));
|
||||||
|
//if there was a real event waiting,
|
||||||
|
if (len == (int) sizeof(js_event)) {
|
||||||
|
//pass that event on to the joypad!
|
||||||
|
jsevent(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
//sleep for a moment. This is just to keep us from throwing all the
|
||||||
|
//available processer power into madly checking for new events.
|
||||||
|
//usleep(10000);
|
||||||
|
}
|
||||||
|
|
||||||
void JoyPad::releaseWidget() {
|
void JoyPad::releaseWidget() {
|
||||||
//this is how we know that there is no longer a JoyPadWidget around.
|
//this is how we know that there is no longer a JoyPadWidget around.
|
||||||
jpw = NULL;
|
jpw = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JoyPad::unsetDev() {
|
||||||
|
close(joydev);
|
||||||
|
joydev = -1;
|
||||||
|
if(joydevFileHandle != NULL) {
|
||||||
|
delete joydevFileHandle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JoyPad::errorRead(int fd) {
|
||||||
|
joydevFileHandle->blockSignals(true);
|
||||||
|
joydevFileHandle->setEnabled(false);
|
||||||
|
close(joydev);
|
||||||
|
if(disconnect(joydevFileHandle , 0, 0, 0)) {
|
||||||
|
joydevFileHandle->deleteLater();
|
||||||
|
joydevFileHandle = NULL;
|
||||||
|
}
|
||||||
|
if(disconnect(joydevFileException, 0, 0, 0)) {
|
||||||
|
joydevFileException->setEnabled(false);
|
||||||
|
joydevFileException->deleteLater();
|
||||||
|
joydevFileException = NULL;
|
||||||
|
}
|
||||||
|
joydev = -1;
|
||||||
|
}
|
||||||
|
37
src/joypad.h
37
src/joypad.h
@ -1,19 +1,6 @@
|
|||||||
#ifndef JOYPAD_H
|
#ifndef JOYPAD_H
|
||||||
#define JOYPAD_H
|
#define JOYPAD_H
|
||||||
|
|
||||||
//to have dictionaries of buttons and axes
|
|
||||||
#include <qintdict.h>
|
|
||||||
//the parent of JoyPadWidget
|
|
||||||
#include <qobject.h>
|
|
||||||
|
|
||||||
//for access to qApp so I can check if the application has active windows :)
|
|
||||||
#include <qapplication.h>
|
|
||||||
|
|
||||||
//for actually interacting with the joystick devices
|
|
||||||
#include <linux/joystick.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
//parts of the joypad
|
//parts of the joypad
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
#include "axis.h"
|
#include "axis.h"
|
||||||
@ -24,16 +11,27 @@
|
|||||||
//for raising errors
|
//for raising errors
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
|
||||||
|
//for actually interacting with the joystick devices
|
||||||
|
#include <linux/joystick.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <QTextStream>
|
||||||
|
#include <QHash>
|
||||||
|
#include <QSocketNotifier>
|
||||||
|
|
||||||
|
|
||||||
class JoyPadWidget;
|
class JoyPadWidget;
|
||||||
|
|
||||||
//represents an actual joystick device
|
//represents an actual joystick device
|
||||||
class JoyPad : public QObject{
|
class JoyPad : public QObject{
|
||||||
|
Q_OBJECT
|
||||||
friend class JoyPadWidget;
|
friend class JoyPadWidget;
|
||||||
friend class QuickSet;
|
friend class QuickSet;
|
||||||
public:
|
public:
|
||||||
|
void setupJoyDeviceListener(int dev);
|
||||||
JoyPad( int i, int dev );
|
JoyPad( int i, int dev );
|
||||||
//read from a stream
|
//read from a stream
|
||||||
bool read( QTextStream* stream );
|
bool readConfig( QTextStream* stream );
|
||||||
//write to a stream
|
//write to a stream
|
||||||
void write( QTextStream* stream );
|
void write( QTextStream* stream );
|
||||||
//release any pushed buttons and return to a neutral state
|
//release any pushed buttons and return to a neutral state
|
||||||
@ -45,7 +43,7 @@ class JoyPad : public QObject{
|
|||||||
//true iff this is currently at default settings
|
//true iff this is currently at default settings
|
||||||
bool isDefault();
|
bool isDefault();
|
||||||
//release the connection to the real joystick
|
//release the connection to the real joystick
|
||||||
void unsetDev() {close(joydev); joydev = -1;};
|
void unsetDev();
|
||||||
//read the dimensions on the real joystick and use them
|
//read the dimensions on the real joystick and use them
|
||||||
void resetToDev( int dev );
|
void resetToDev( int dev );
|
||||||
//generates a name ("Joystick 1")
|
//generates a name ("Joystick 1")
|
||||||
@ -66,14 +64,19 @@ class JoyPad : public QObject{
|
|||||||
//layouts with different numbers of axes/buttons than the current
|
//layouts with different numbers of axes/buttons than the current
|
||||||
//devices. Note that with the current layout settings, the defined
|
//devices. Note that with the current layout settings, the defined
|
||||||
//buttons that don't actually exist on the device may not be contiguous.
|
//buttons that don't actually exist on the device may not be contiguous.
|
||||||
QIntDict<Axis> Axes;
|
QHash<int, Axis*> Axes;
|
||||||
QIntDict<Button> Buttons;
|
QHash<int, Button*> Buttons;
|
||||||
//the index of this device (devicenum)
|
//the index of this device (devicenum)
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
//the widget that edits this. Mainly I keep track of this to know if
|
//the widget that edits this. Mainly I keep track of this to know if
|
||||||
//the joypad is currently being edited.
|
//the joypad is currently being edited.
|
||||||
JoyPadWidget* jpw;
|
JoyPadWidget* jpw;
|
||||||
|
QSocketNotifier *joydevFileHandle;
|
||||||
|
QSocketNotifier *joydevFileException;
|
||||||
|
public slots:
|
||||||
|
void handleJoyEvents(int fd);
|
||||||
|
void errorRead(int fd);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
161
src/layout.cpp
161
src/layout.cpp
@ -1,4 +1,5 @@
|
|||||||
#include "layout.h"
|
#include "layout.h"
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
//initialize things and set up an icon :)
|
//initialize things and set up an icon :)
|
||||||
LayoutManager::LayoutManager( bool useTrayIcon ) {
|
LayoutManager::LayoutManager( bool useTrayIcon ) {
|
||||||
@ -6,9 +7,9 @@ LayoutManager::LayoutManager( bool useTrayIcon ) {
|
|||||||
le = NULL;
|
le = NULL;
|
||||||
|
|
||||||
//prepare the popup first.
|
//prepare the popup first.
|
||||||
Popup = new QPopupMenu();
|
Popup = new QMenu();
|
||||||
fillPopup();
|
fillPopup();
|
||||||
connect(Popup,SIGNAL(activated(int)),this, SLOT(trayMenu(int)));
|
connect(Popup,SIGNAL(triggered(QAction*)),this, SLOT(trayMenu(QAction*)));
|
||||||
|
|
||||||
//make a tray icon
|
//make a tray icon
|
||||||
if (useTrayIcon) {
|
if (useTrayIcon) {
|
||||||
@ -47,8 +48,8 @@ bool LayoutManager::load(const QString& name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//if the file isn't readable,
|
//if the file isn't readable,
|
||||||
if (!file.open(IO_ReadOnly)) {
|
if (!file.open(QIODevice::ReadOnly)) {
|
||||||
error("Load error","Error reading from file " + file.name());
|
error("Load error","Error reading from file " + file.fileName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,20 +57,22 @@ bool LayoutManager::load(const QString& name) {
|
|||||||
//note that we don't use available here, but joypads instead. This is so
|
//note that we don't use available here, but joypads instead. This is so
|
||||||
//if one layout has more joypads than this one does, this won't have the
|
//if one layout has more joypads than this one does, this won't have the
|
||||||
//extra settings left over after things are supposed to be "cleared"
|
//extra settings left over after things are supposed to be "cleared"
|
||||||
QIntDictIterator<JoyPad> it( joypads );
|
QHashIterator<int, JoyPad*> it( joypads );
|
||||||
for ( ; it.current(); ++it ) {
|
while (it.hasNext())
|
||||||
it.current()->toDefault();
|
{
|
||||||
|
it.next();
|
||||||
|
it.value()->toDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
//start reading joypads!
|
//start reading joypads!
|
||||||
QTextStream stream( &file );
|
QTextStream stream( &file );
|
||||||
QString input = stream.readLine().lower();
|
QString input = stream.readLine().toLower();
|
||||||
QRegExp quoted("\"(.*)\"");
|
QRegExp quoted("\"(.*)\"");
|
||||||
bool okay;
|
bool okay;
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
while (input != QString::null) {
|
while (input != QString::null) {
|
||||||
QStringList words = QStringList::split(" ",input);
|
QStringList words = input.split(" ");
|
||||||
//if this line is specifying a joystick
|
//if this line is specifying a joystick
|
||||||
if (words[0] == "joystick") {
|
if (words[0] == "joystick") {
|
||||||
num = words[1].toInt(&okay);
|
num = words[1].toInt(&okay);
|
||||||
@ -85,7 +88,7 @@ bool LayoutManager::load(const QString& name) {
|
|||||||
joypads.insert(num-1, new JoyPad(num-1, 0));
|
joypads.insert(num-1, new JoyPad(num-1, 0));
|
||||||
}
|
}
|
||||||
//try to read the joypad, report error on fail.
|
//try to read the joypad, report error on fail.
|
||||||
if (!joypads[num-1]->read(&stream)) {
|
if (!joypads[num-1]->readConfig(&stream)) {
|
||||||
error( "Load error", "Error reading definition for joystick " + QString::number(num-1));
|
error( "Load error", "Error reading definition for joystick " + QString::number(num-1));
|
||||||
//if this was attempting to change to a new layout and it failed,
|
//if this was attempting to change to a new layout and it failed,
|
||||||
//revert back to the old layout.
|
//revert back to the old layout.
|
||||||
@ -97,7 +100,7 @@ bool LayoutManager::load(const QString& name) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//read a new line.
|
//read a new line.
|
||||||
input = stream.readLine().lower();
|
input = stream.readLine().toLower();
|
||||||
}
|
}
|
||||||
//if loading succeeded, this is our new layout.
|
//if loading succeeded, this is our new layout.
|
||||||
setLayoutName(name);
|
setLayoutName(name);
|
||||||
@ -108,7 +111,7 @@ bool LayoutManager::load() {
|
|||||||
//try to load the file named "layout" to retrieve the last used layout name
|
//try to load the file named "layout" to retrieve the last used layout name
|
||||||
QFile file( settingsDir + "layout");
|
QFile file( settingsDir + "layout");
|
||||||
QString name;
|
QString name;
|
||||||
if (file.open(IO_ReadOnly)) {
|
if (file.open(QIODevice::ReadOnly)) {
|
||||||
QTextStream stream(&file);
|
QTextStream stream(&file);
|
||||||
name = stream.readLine();
|
name = stream.readLine();
|
||||||
file.close();
|
file.close();
|
||||||
@ -130,8 +133,11 @@ bool LayoutManager::reload() {
|
|||||||
|
|
||||||
void LayoutManager::clear() {
|
void LayoutManager::clear() {
|
||||||
//reset all the joypads...
|
//reset all the joypads...
|
||||||
for (QIntDictIterator<JoyPad> it(joypads); it.current(); ++it) {
|
QHashIterator<int, JoyPad*> it (joypads);
|
||||||
it.current()->toDefault();
|
while (it.hasNext())
|
||||||
|
{
|
||||||
|
it.next();
|
||||||
|
it.value()->toDefault();
|
||||||
}
|
}
|
||||||
//and call our layout NL
|
//and call our layout NL
|
||||||
setLayoutName(NL);
|
setLayoutName(NL);
|
||||||
@ -147,11 +153,14 @@ void LayoutManager::save() {
|
|||||||
QString filename = getFileName( CurrentLayout );
|
QString filename = getFileName( CurrentLayout );
|
||||||
QFile file(filename);
|
QFile file(filename);
|
||||||
//if it's good, start writing the file
|
//if it's good, start writing the file
|
||||||
if (file.open(IO_WriteOnly)) {
|
if (file.open(QIODevice::WriteOnly)) {
|
||||||
QTextStream stream( &file );
|
QTextStream stream( &file );
|
||||||
stream << "# "NAME" Layout File\n\n";
|
stream << "# "NAME" Layout File\n\n";
|
||||||
for (QIntDictIterator<JoyPad> it(joypads); it.current(); ++it) {
|
QHashIterator<int, JoyPad*> it (joypads);
|
||||||
it.current()->write( &stream );
|
while (it.hasNext())
|
||||||
|
{
|
||||||
|
it.next();
|
||||||
|
it.value()->write( &stream );
|
||||||
}
|
}
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
@ -160,11 +169,14 @@ void LayoutManager::save() {
|
|||||||
error("Save error", "Could not open file " + filename + ", layout not saved.");
|
error("Save error", "Could not open file " + filename + ", layout not saved.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LayoutManager::saveAs() {
|
void LayoutManager::saveAs() {
|
||||||
bool ok;
|
bool ok;
|
||||||
//request a new name!
|
//request a new name!
|
||||||
QString name = QInputDialog::getText(NAME" - Name new layout","Enter a name for the new layout:", QLineEdit::Normal, QString::null, &ok );
|
QString name = QInputDialog::getText(0, NAME" - Name new layout","Enter a name for the new layout:", QLineEdit::Normal, QString::null, &ok );
|
||||||
if (!ok) return;
|
if (!ok) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
QFile file(settingsDir + name + ".lyt");
|
QFile file(settingsDir + name + ".lyt");
|
||||||
//don't overwrite an existing layout.
|
//don't overwrite an existing layout.
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
@ -187,7 +199,7 @@ void LayoutManager::saveAs() {
|
|||||||
|
|
||||||
void LayoutManager::saveDefault() {
|
void LayoutManager::saveDefault() {
|
||||||
QFile file( settingsDir + "layout");
|
QFile file( settingsDir + "layout");
|
||||||
if (file.open(IO_WriteOnly)) {
|
if (file.open(QIODevice::WriteOnly)) {
|
||||||
QTextStream stream(&file);
|
QTextStream stream(&file);
|
||||||
stream << CurrentLayout;
|
stream << CurrentLayout;
|
||||||
file.close();
|
file.close();
|
||||||
@ -211,7 +223,7 @@ void LayoutManager::remove() {
|
|||||||
|
|
||||||
QStringList LayoutManager::getLayoutNames() {
|
QStringList LayoutManager::getLayoutNames() {
|
||||||
//goes through the list of .lyt files and removes the file extensions ;)
|
//goes through the list of .lyt files and removes the file extensions ;)
|
||||||
QStringList result = QDir(settingsDir).entryList("*.lyt");
|
QStringList result = QDir(settingsDir).entryList(QStringList("*.lyt"));
|
||||||
|
|
||||||
for ( QStringList::Iterator it = result.begin(); it != result.end(); ++it ) {
|
for ( QStringList::Iterator it = result.begin(); it != result.end(); ++it ) {
|
||||||
*it = (*it).left((*it).length() - 4);
|
*it = (*it).left((*it).length() - 4);
|
||||||
@ -231,11 +243,6 @@ void LayoutManager::setLayoutName(QString name) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void LayoutManager::trayClick() {
|
void LayoutManager::trayClick() {
|
||||||
//don't show the dialog if there aren't any joystick devices plugged in
|
//don't show the dialog if there aren't any joystick devices plugged in
|
||||||
if (available.count() == 0) {
|
if (available.count() == 0) {
|
||||||
@ -255,11 +262,14 @@ void LayoutManager::trayClick() {
|
|||||||
le = NULL;
|
le = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LayoutManager::trayMenu(int id) {
|
void LayoutManager::trayMenu(QAction *menuItemAction) {
|
||||||
//if they clicked on a Layout name, load it!
|
//if they clicked on a Layout name, load it!
|
||||||
//note that the other options are handled with their own special functions
|
//note that the other options are handled with their own special functions
|
||||||
if (Popup->indexOf(id) > 4 && Popup->text(id) != "Quit") {
|
printf("%s\n", qPrintable(menuItemAction->text()));
|
||||||
load(Popup->text(id));
|
if (Popup->actions().indexOf(menuItemAction) > 1 && menuItemAction->text() != "Quit" &&
|
||||||
|
menuItemAction->text() != "Update lyaout list" &&
|
||||||
|
menuItemAction->text() != "Update joystick devices") {
|
||||||
|
load(menuItemAction->text());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,33 +279,100 @@ void LayoutManager::fillPopup() {
|
|||||||
|
|
||||||
//make a list of joystick devices
|
//make a list of joystick devices
|
||||||
QString devs = "Joysticks: ";
|
QString devs = "Joysticks: ";
|
||||||
QIntDictIterator<JoyPad> it( available );
|
QHashIterator<int, JoyPad*> it( available );
|
||||||
for ( ; it.current(); ++it ) {
|
while (it.hasNext())
|
||||||
devs += QString::number(it.currentKey() + 1) + " ";
|
{
|
||||||
|
it.next();
|
||||||
|
devs += QString::number(it.key() + 1) + " ";
|
||||||
}
|
}
|
||||||
Popup->insertItem(devs);
|
QAction *temp = Popup->addAction(devs);
|
||||||
Popup->insertSeparator();
|
Popup->addSeparator(/*temp*/);
|
||||||
|
|
||||||
//add in the Update options
|
//add in the Update options
|
||||||
Popup->insertItem("Update layout list", this, SLOT(fillPopup()));
|
QAction *tempAdd = new QAction("Update layout list", this);
|
||||||
Popup->insertItem("Update joystick devices", this, SLOT(updateJoyDevs()));
|
connect(tempAdd, SIGNAL(triggered(bool)), this, SLOT(fillPopup()));
|
||||||
Popup->insertSeparator();
|
Popup->addAction(tempAdd);
|
||||||
|
tempAdd = new QAction("Update joystick devices", this);
|
||||||
|
connect(tempAdd, SIGNAL(triggered(bool)), this, SLOT(updateJoyDevs()));
|
||||||
|
Popup->addAction(tempAdd);
|
||||||
|
Popup->addSeparator(/*temp*/);
|
||||||
|
|
||||||
//then add all the layout names
|
//then add all the layout names
|
||||||
QStringList names = getLayoutNames();
|
QStringList names = getLayoutNames();
|
||||||
for ( QStringList::Iterator it = names.begin(); it != names.end(); ++it ) {
|
for ( QStringList::Iterator it = names.begin(); it != names.end(); ++it ) {
|
||||||
int id = Popup->insertItem(*it);
|
temp = Popup->addAction(*it);
|
||||||
|
temp->setCheckable(true);
|
||||||
//put a check by the current one ;)
|
//put a check by the current one ;)
|
||||||
if (CurrentLayout == (*it)) Popup->setItemChecked(id,true);
|
if (CurrentLayout == (*it)) {
|
||||||
|
temp->setChecked(true);
|
||||||
}
|
}
|
||||||
Popup->insertSeparator();
|
}
|
||||||
|
Popup->addSeparator();
|
||||||
|
|
||||||
//and, at the end, quit!
|
//and, at the end, quit!
|
||||||
Popup->insertItem("Quit",qApp,SLOT(quit()));
|
Popup->addAction("Quit",qApp,SLOT(quit()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void LayoutManager::updateJoyDevs() {
|
void LayoutManager::updateJoyDevs() {
|
||||||
|
QString devdir = DEVDIR;
|
||||||
|
//reset all joydevs to sentinal value (-1)
|
||||||
|
do {
|
||||||
|
QHashIterator<int, JoyPad*> it( joypads );
|
||||||
|
while (it.hasNext() ) {
|
||||||
|
it.next();
|
||||||
|
it.value()->unsetDev();
|
||||||
|
}
|
||||||
|
} while (0);
|
||||||
|
|
||||||
|
//clear out the list of previously available joysticks
|
||||||
|
available.clear();
|
||||||
|
|
||||||
|
//set all joydevs anew (create new JoyPad's if necesary)
|
||||||
|
QDir DeviceDir(devdir);
|
||||||
|
QStringList devices = DeviceDir.entryList(QStringList("js*"), QDir::System );
|
||||||
|
QRegExp devicename(".*\\js(\\d+)");
|
||||||
|
int joydev;
|
||||||
|
int index;
|
||||||
|
//for every joystick device in the directory listing...
|
||||||
|
//(note, with devfs, only available devices are listed)
|
||||||
|
for (QStringList::Iterator it = devices.begin(); it != devices.end(); ++it) {
|
||||||
|
//try opening the device.
|
||||||
|
joydev = open( qPrintable(devdir + "/" + (*it)), O_RDONLY | O_NONBLOCK);
|
||||||
|
//if it worked, then we have a live joystick! Make sure it's properly
|
||||||
|
//setup.
|
||||||
|
if (joydev > 0) {
|
||||||
|
devicename.indexIn(*it);
|
||||||
|
index = QString(devicename.cap(1)).toInt();
|
||||||
|
JoyPad* joypad;
|
||||||
|
//if we've never seen this device before, make a new one!
|
||||||
|
if (joypads[index] == 0) {
|
||||||
|
struct pollfd read_struct;
|
||||||
|
read_struct.fd = joydev;
|
||||||
|
read_struct.events = POLLIN;
|
||||||
|
char buf[10];
|
||||||
|
while(poll(&read_struct, 1, 5)!=0) {
|
||||||
|
printf("reading junk data\n");
|
||||||
|
read(joydev, buf, 10);
|
||||||
|
}
|
||||||
|
joypad = new JoyPad( index, joydev );
|
||||||
|
joypads.insert(index,joypad);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
joypad = joypads[index];
|
||||||
|
joypad->resetToDev(joydev);
|
||||||
|
}
|
||||||
|
//make this joystick device available.
|
||||||
|
available.insert(index,joypad);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int errsv = errno;
|
||||||
|
printf("%s\n", strerror(errsv));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//when it's all done, rebuild the popup menu so it displays the correct
|
||||||
|
//information.
|
||||||
|
fillPopup();
|
||||||
//the actual update process is handled by main.cpp, we just need to signal
|
//the actual update process is handled by main.cpp, we just need to signal
|
||||||
//ourselves to do it.
|
//ourselves to do it.
|
||||||
raise(SIGUSR1);
|
//raise(SIGUSR1);
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
#include "layout_edit.h"
|
#include "layout_edit.h"
|
||||||
|
|
||||||
|
|
||||||
//build the dialog
|
//build the dialog
|
||||||
LayoutEdit::LayoutEdit( LayoutManager* l ) {
|
LayoutEdit::LayoutEdit( LayoutManager* l ) {
|
||||||
lm = l;
|
lm = l;
|
||||||
|
|
||||||
setCaption( NAME );
|
setWindowTitle( NAME );
|
||||||
setIcon(QPixmap(ICON24));
|
setWindowIcon(QPixmap(ICON24));
|
||||||
|
|
||||||
LMain = new QVBoxLayout( this,5,5 );
|
LMain = new QVBoxLayout( this);
|
||||||
|
LMain->setSpacing(5);
|
||||||
|
LMain->setMargin(5);
|
||||||
|
|
||||||
QFrame* frame = new QFrame(this);
|
QFrame* frame = new QFrame(this);
|
||||||
frame->setFrameStyle(QFrame::Box | QFrame::Sunken );
|
frame->setFrameStyle(QFrame::Box | QFrame::Sunken );
|
||||||
QGridLayout* g = new QGridLayout(frame,2,1,5,5);
|
QGridLayout* g = new QGridLayout(frame);
|
||||||
|
g->setMargin(5);
|
||||||
|
g->setSpacing(5);
|
||||||
CLayouts = new QComboBox(frame);
|
CLayouts = new QComboBox(frame);
|
||||||
connect( CLayouts, SIGNAL(activated( const QString& )), lm, SLOT(load(const QString&)));
|
connect( CLayouts, SIGNAL(activated( const QString& )), lm, SLOT(load(const QString&)));
|
||||||
g->addMultiCellWidget(CLayouts,0,0,0,3);
|
g->addWidget(CLayouts,0,0,1,4);
|
||||||
|
|
||||||
//most of these buttons can link directly into slots in the LayoutManager
|
//most of these buttons can link directly into slots in the LayoutManager
|
||||||
BAdd = new QPushButton("Add", frame);
|
BAdd = new QPushButton("Add", frame);
|
||||||
@ -32,43 +35,56 @@ LayoutEdit::LayoutEdit( LayoutManager* l ) {
|
|||||||
g->addWidget(BRev,1,3);
|
g->addWidget(BRev,1,3);
|
||||||
LMain->addWidget( frame );
|
LMain->addWidget( frame );
|
||||||
|
|
||||||
//we have a WidgetStack to represent the multiple joypads
|
|
||||||
PadStack = new QWidgetStack( this );
|
|
||||||
PadStack->setFrameStyle(QFrame::Box | QFrame::Sunken );
|
|
||||||
LMain->addWidget(PadStack);
|
|
||||||
|
|
||||||
//produce a list of names for the FlashRadioArray
|
//produce a list of names for the FlashRadioArray
|
||||||
//this is only necesary since joystick devices need not always be
|
//this is only necesary since joystick devices need not always be
|
||||||
//contiguous
|
//contiguous
|
||||||
int padcount = available.count();
|
int padcount = available.count();
|
||||||
QString names[padcount];
|
QString names[padcount];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
QIntDictIterator<JoyPad> it( available );
|
do
|
||||||
for ( ; it.current(); ++it ) {
|
{
|
||||||
names[i] = it.current()->getName();
|
QHashIterator<int, JoyPad*> it( available );
|
||||||
|
while (it.hasNext())
|
||||||
|
{
|
||||||
|
it.next();
|
||||||
|
names[i] = it.value()->getName();
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
} while (0);
|
||||||
|
|
||||||
//flash radio array
|
//flash radio array
|
||||||
JoyButtons = new FlashRadioArray(padcount, names, true, this );
|
JoyButtons = new FlashRadioArray(padcount, names, true, this );
|
||||||
LMain->insertWidget( 1, JoyButtons );
|
LMain->addWidget( JoyButtons );
|
||||||
|
|
||||||
|
//we have a WidgetStack to represent the multiple joypads
|
||||||
|
PadStack = new QStackedWidget( this );
|
||||||
|
PadStack->setFrameStyle(QFrame::Box | QFrame::Sunken );
|
||||||
|
LMain->addWidget(PadStack);
|
||||||
|
|
||||||
//go through each of the available joysticks
|
//go through each of the available joysticks
|
||||||
i = 0; // i is the current index into PadStack
|
i = 0; // i is the current index into PadStack
|
||||||
for (it.toFirst() ; it.current(); ++it ) {
|
do
|
||||||
|
{
|
||||||
|
QHashIterator<int, JoyPad*> it(available);
|
||||||
|
while (it.hasNext())
|
||||||
|
{
|
||||||
|
it.next();
|
||||||
//add a new JoyPadWidget to the stack
|
//add a new JoyPadWidget to the stack
|
||||||
PadStack->addWidget( it.current()->widget(PadStack,i),i );
|
PadStack->insertWidget( i,it.value()->widget(PadStack,i) );
|
||||||
//every time it "flashes", flash the associated tab.
|
//every time it "flashes", flash the associated tab.
|
||||||
connect( PadStack->widget(i), SIGNAL( flashed( int ) ), JoyButtons, SLOT( flash( int )));
|
connect( PadStack->widget(i), SIGNAL( flashed( int ) ), JoyButtons, SLOT( flash( int )));
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
} while (0);
|
||||||
//whenever a new tab is selected, raise the appropriate JoyPadWidget
|
//whenever a new tab is selected, raise the appropriate JoyPadWidget
|
||||||
connect( JoyButtons, SIGNAL( changed( int ) ), PadStack, SLOT( raiseWidget( int )));
|
connect( JoyButtons, SIGNAL( changed( int ) ), PadStack, SLOT( setCurrentIndex( int )));
|
||||||
|
|
||||||
updateLayoutList();
|
updateLayoutList();
|
||||||
|
|
||||||
//add the buttons at the bottom.
|
//add the buttons at the bottom.
|
||||||
QHBoxLayout* h = new QHBoxLayout(0,0,5);
|
QHBoxLayout* h = new QHBoxLayout(0);
|
||||||
|
h->setMargin(0);
|
||||||
|
h->setSpacing(5);
|
||||||
QPushButton* close = new QPushButton( "-- Close Dialog --", this );
|
QPushButton* close = new QPushButton( "-- Close Dialog --", this );
|
||||||
connect(close, SIGNAL(clicked()), this, SLOT(close()));
|
connect(close, SIGNAL(clicked()), this, SLOT(close()));
|
||||||
h->addWidget(close);
|
h->addWidget(close);
|
||||||
@ -80,7 +96,7 @@ LayoutEdit::LayoutEdit( LayoutManager* l ) {
|
|||||||
|
|
||||||
void LayoutEdit::setLayout(QString layout) {
|
void LayoutEdit::setLayout(QString layout) {
|
||||||
//change the text,
|
//change the text,
|
||||||
CLayouts->setCurrentText(layout);
|
CLayouts->setItemText(CLayouts->currentIndex(), layout);
|
||||||
//update all the JoyPadWidgets.
|
//update all the JoyPadWidgets.
|
||||||
for (uint i = 0; i < available.count(); i++) {
|
for (uint i = 0; i < available.count(); i++) {
|
||||||
((JoyPadWidget*)PadStack->widget(i))->update();
|
((JoyPadWidget*)PadStack->widget(i))->update();
|
||||||
@ -91,20 +107,20 @@ void LayoutEdit::updateLayoutList() {
|
|||||||
//blank the list, then load in new names from the LayoutManager.
|
//blank the list, then load in new names from the LayoutManager.
|
||||||
CLayouts->clear();
|
CLayouts->clear();
|
||||||
QStringList layouts = lm->getLayoutNames();
|
QStringList layouts = lm->getLayoutNames();
|
||||||
//For some reason, insertStringList doesn't want to work for me!
|
CLayouts->insertItems(-1, layouts);
|
||||||
for ( QStringList::Iterator it = layouts.begin(); it != layouts.end(); ++it ) {
|
CLayouts->setCurrentIndex(layouts.indexOf(lm->CurrentLayout));
|
||||||
CLayouts->insertItem(*it);
|
|
||||||
}
|
|
||||||
CLayouts->setCurrentText(lm->CurrentLayout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LayoutEdit::windowActivationChange( bool oldActive ) {
|
void LayoutEdit::windowActivationChange( bool oldActive ) {
|
||||||
if (oldActive) return;
|
if (oldActive) return;
|
||||||
|
|
||||||
//whenever the window becomes active, release all pressed buttons! This way
|
//whenever the window becomes active, release all pressed buttons! This way
|
||||||
//you don't get any presses without releases to confuse things.
|
//you don't get any presses without releases to confuse things.
|
||||||
QIntDictIterator<JoyPad> it( available );
|
QHashIterator<int, JoyPad*> it( available );
|
||||||
for ( ; it.current(); ++it ) {
|
while (it.hasNext())
|
||||||
it.current()->release();
|
{
|
||||||
|
printf("iterating and releasing\n");
|
||||||
|
it.next();
|
||||||
|
it.value()->release();
|
||||||
}
|
}
|
||||||
|
printf("done releasing!\n");
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
#ifndef LAYOUT_EDIT_H
|
#ifndef LAYOUT_EDIT_H
|
||||||
#define LAYOUT_EDIT_H
|
#define LAYOUT_EDIT_H
|
||||||
|
|
||||||
//needed to build the dialog
|
#include <QStackedWidget>
|
||||||
#include <qdialog.h>
|
|
||||||
#include <qlayout.h>
|
|
||||||
#include <qcombobox.h>
|
|
||||||
#include <qwidgetstack.h>
|
|
||||||
|
|
||||||
//for the tab list of joypads
|
//for the tab list of joypads
|
||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
@ -32,15 +28,12 @@ class LayoutEdit : public QDialog {
|
|||||||
|
|
||||||
//find out when the window is activated.
|
//find out when the window is activated.
|
||||||
virtual void windowActivationChange( bool oldActive );
|
virtual void windowActivationChange( bool oldActive );
|
||||||
|
|
||||||
//parts of the dialog:
|
//parts of the dialog:
|
||||||
QVBoxLayout *LMain;
|
QVBoxLayout *LMain;
|
||||||
QWidgetStack *PadStack;
|
QStackedWidget *PadStack;
|
||||||
FlashRadioArray *JoyButtons;
|
FlashRadioArray *JoyButtons;
|
||||||
|
|
||||||
QComboBox* CLayouts;
|
QComboBox* CLayouts;
|
||||||
QPushButton *BAdd, *BRem, *BUpd, *BRev;
|
QPushButton *BAdd, *BRem, *BUpd, *BRev;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
96
src/main.cpp
96
src/main.cpp
@ -1,22 +1,13 @@
|
|||||||
#define MAIN
|
#define MAIN
|
||||||
|
|
||||||
//to create a qapplication
|
//to create a qapplication
|
||||||
#include <qapplication.h>
|
#include <QFile>
|
||||||
//for basic file i/o and argument parsing
|
|
||||||
#include <qstring.h>
|
|
||||||
#include <qdir.h>
|
|
||||||
#include <qfile.h>
|
|
||||||
#include <qstringlist.h>
|
|
||||||
#include <qregexp.h>
|
|
||||||
|
|
||||||
//for ouput when there is no GUI going
|
//for ouput when there is no GUI going
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
//to create and handle signals for various events
|
//to create and handle signals for various events
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
//for our custom-made event loop
|
|
||||||
#include "loop.h"
|
|
||||||
//to load layouts
|
//to load layouts
|
||||||
#include "layout.h"
|
#include "layout.h"
|
||||||
//to give event.h the current X11 display
|
//to give event.h the current X11 display
|
||||||
@ -25,77 +16,19 @@
|
|||||||
#include "device.h"
|
#include "device.h"
|
||||||
//to produce errors!
|
//to produce errors!
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
#include <QX11Info>
|
||||||
|
#include <poll.h>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
//for making universally available variables
|
//for making universally available variables
|
||||||
extern Display* display; //from event.h
|
extern Display* display; //from event.h
|
||||||
QIntDict<JoyPad> available; //to device.h
|
QHash<int, JoyPad*> available; //to device.h
|
||||||
QIntDict<JoyPad> joypads; //to device.h
|
QHash<int, JoyPad*> joypads; //to device.h
|
||||||
QPtrList<Component> timerList; //to timer.h
|
|
||||||
|
|
||||||
//to be made available in timer.h
|
|
||||||
//they simply pass on the message to JoyLoop
|
|
||||||
void takeTimer( Component* c ) {
|
|
||||||
((JoyLoop*) qApp->eventLoop())->takeTimer( c );
|
|
||||||
}
|
|
||||||
void tossTimer( Component* c ) {
|
|
||||||
((JoyLoop*) qApp->eventLoop())->tossTimer( c );
|
|
||||||
}
|
|
||||||
|
|
||||||
//variables needed in various functions in this file
|
//variables needed in various functions in this file
|
||||||
LayoutManager* lm;
|
LayoutManager* lm;
|
||||||
QString devdir = DEVDIR;
|
QString devdir = DEVDIR;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//update the joystick devices!
|
|
||||||
void buildJoyDevices() {
|
|
||||||
//reset all joydevs to sentinal value (-1)
|
|
||||||
QIntDictIterator<JoyPad> it( joypads );
|
|
||||||
for ( ; it.current(); ++it ) {
|
|
||||||
it.current()->unsetDev();
|
|
||||||
}
|
|
||||||
|
|
||||||
//clear out the list of previously available joysticks
|
|
||||||
available.clear();
|
|
||||||
|
|
||||||
//set all joydevs anew (create new JoyPad's if necesary)
|
|
||||||
QDir DeviceDir(devdir);
|
|
||||||
QStringList devices = DeviceDir.entryList("js*", QDir::System );
|
|
||||||
QRegExp devicename(".*\\js(\\d+)");
|
|
||||||
int joydev;
|
|
||||||
int index;
|
|
||||||
//for every joystick device in the directory listing...
|
|
||||||
//(note, with devfs, only available devices are listed)
|
|
||||||
for (QStringList::Iterator it = devices.begin(); it != devices.end(); ++it) {
|
|
||||||
//try opening the device.
|
|
||||||
joydev = open( devdir + "/" + (*it), O_RDONLY | O_NONBLOCK);
|
|
||||||
//if it worked, then we have a live joystick! Make sure it's properly
|
|
||||||
//setup.
|
|
||||||
if (joydev > 0) {
|
|
||||||
devicename.match(*it);
|
|
||||||
index = QString(devicename.cap(1)).toInt();
|
|
||||||
JoyPad* joypad;
|
|
||||||
//if we've never seen this device before, make a new one!
|
|
||||||
if (joypads[index] == 0) {
|
|
||||||
joypad = new JoyPad( index, joydev );
|
|
||||||
joypads.insert(index,joypad);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
joypad = joypads[index];
|
|
||||||
joypad->resetToDev(joydev);
|
|
||||||
}
|
|
||||||
//make this joystick device available.
|
|
||||||
available.insert(index,joypad);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//when it's all done, rebuild the popup menu so it displays the correct
|
|
||||||
//information.
|
|
||||||
lm->fillPopup();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//signal handler for SIGIO
|
//signal handler for SIGIO
|
||||||
//SIGIO means that a new layout should be loaded. It is saved in
|
//SIGIO means that a new layout should be loaded. It is saved in
|
||||||
// ~/.qjoypad/layout, where the last used layout is put.
|
// ~/.qjoypad/layout, where the last used layout is put.
|
||||||
@ -111,7 +44,8 @@ void catchSIGIO( int sig )
|
|||||||
//signal handler for SIGUSR1
|
//signal handler for SIGUSR1
|
||||||
//SIGUSR1 means that we should update the available joystick device list.
|
//SIGUSR1 means that we should update the available joystick device list.
|
||||||
void catchSIGUSR1( int sig ) {
|
void catchSIGUSR1( int sig ) {
|
||||||
buildJoyDevices();
|
//buildJoyDevices();
|
||||||
|
lm->updateJoyDevs();
|
||||||
//remember to catch this signal again next time.
|
//remember to catch this signal again next time.
|
||||||
signal( sig, catchSIGUSR1 );
|
signal( sig, catchSIGUSR1 );
|
||||||
}
|
}
|
||||||
@ -130,7 +64,6 @@ int main( int argc, char **argv )
|
|||||||
{
|
{
|
||||||
//create a new event loop. This will be captured by the QApplication
|
//create a new event loop. This will be captured by the QApplication
|
||||||
//when it gets created
|
//when it gets created
|
||||||
JoyLoop loop;
|
|
||||||
QApplication a( argc, argv );
|
QApplication a( argc, argv );
|
||||||
|
|
||||||
|
|
||||||
@ -139,7 +72,7 @@ int main( int argc, char **argv )
|
|||||||
|
|
||||||
//if there is no new directory and we can't make it, complain
|
//if there is no new directory and we can't make it, complain
|
||||||
if (!dir.exists() && !dir.mkdir(settingsDir)) {
|
if (!dir.exists() && !dir.mkdir(settingsDir)) {
|
||||||
printf("Couldn't create the QJoyPad save directory (" + settingsDir + ")!");
|
printf("Couldn't create the QJoyPad save directory (%s)!", settingsDir.toStdString().c_str());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +124,7 @@ int main( int argc, char **argv )
|
|||||||
//then we try to store that layout in the last-used layout spot, to be
|
//then we try to store that layout in the last-used layout spot, to be
|
||||||
//loaded by default.
|
//loaded by default.
|
||||||
QFile file( settingsDir + "layout");
|
QFile file( settingsDir + "layout");
|
||||||
if (file.open(IO_WriteOnly))
|
if (file.open(QIODevice::WriteOnly))
|
||||||
{
|
{
|
||||||
QTextStream stream( &file );
|
QTextStream stream( &file );
|
||||||
stream << layout;
|
stream << layout;
|
||||||
@ -209,7 +142,7 @@ int main( int argc, char **argv )
|
|||||||
if (pidFile.exists())
|
if (pidFile.exists())
|
||||||
{
|
{
|
||||||
int pid;
|
int pid;
|
||||||
if (pidFile.open( IO_ReadOnly ));
|
if (pidFile.open( QIODevice::ReadOnly ));
|
||||||
{
|
{
|
||||||
//try to get that pid...
|
//try to get that pid...
|
||||||
QTextStream( &pidFile ) >> pid;
|
QTextStream( &pidFile ) >> pid;
|
||||||
@ -234,7 +167,7 @@ int main( int argc, char **argv )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//now we can try to create and write our pid to the lock file.
|
//now we can try to create and write our pid to the lock file.
|
||||||
if (pidFile.open( IO_WriteOnly ))
|
if (pidFile.open( QIODevice::WriteOnly ))
|
||||||
{
|
{
|
||||||
QTextStream( &pidFile ) << getpid();
|
QTextStream( &pidFile ) << getpid();
|
||||||
pidFile.close();
|
pidFile.close();
|
||||||
@ -252,14 +185,15 @@ int main( int argc, char **argv )
|
|||||||
|
|
||||||
|
|
||||||
//capture the current display for event.h
|
//capture the current display for event.h
|
||||||
display = QPaintDevice::x11AppDisplay();
|
display = QX11Info::display();
|
||||||
|
|
||||||
//create a new LayoutManager with a tray icon / floating icon, depending
|
//create a new LayoutManager with a tray icon / floating icon, depending
|
||||||
//on the user's request
|
//on the user's request
|
||||||
lm = new LayoutManager(useTrayIcon);
|
lm = new LayoutManager(useTrayIcon);
|
||||||
|
|
||||||
//build the joystick device list for the first time,
|
//build the joystick device list for the first time,
|
||||||
buildJoyDevices();
|
//buildJoyDevices();
|
||||||
|
lm->updateJoyDevs();
|
||||||
|
|
||||||
//load the last used layout (Or the one given as a command-line argument)
|
//load the last used layout (Or the one given as a command-line argument)
|
||||||
lm->load();
|
lm->load();
|
||||||
|
BIN
src/qjoypad
BIN
src/qjoypad
Binary file not shown.
@ -1,89 +0,0 @@
|
|||||||
########################################
|
|
||||||
# #
|
|
||||||
# QMake project file for QJoyPad #
|
|
||||||
# #
|
|
||||||
########################################
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### Setup Targets #####
|
|
||||||
|
|
||||||
target.path = $$PREFIX/bin
|
|
||||||
|
|
||||||
icons.path = $$PREFIX/share/pixmaps/qjoypad
|
|
||||||
icons.extra = cp ../icons/* $${icons.path}; cd $${icons.path}; ln -sf gamepad4-24x24.png icon24.png; ln -sf gamepad3-64x64.png icon64.png; chmod -R a+r $${icons.path}
|
|
||||||
|
|
||||||
doc.path = $$PREFIX/doc/qjoypad3
|
|
||||||
doc.extra = cp ../README.txt ../LICENSE.txt $${doc.path}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### Setup Compile #####
|
|
||||||
|
|
||||||
DEFINES += DEVDIR='"$$DEVDIR"'
|
|
||||||
DEFINES += ICON24='"$${icons.path}/icon24.png"'
|
|
||||||
DEFINES += ICON64='"$${icons.path}/icon64.png"'
|
|
||||||
|
|
||||||
TEMPLATE = app
|
|
||||||
DEPENDPATH += trayicon
|
|
||||||
INCLUDEPATH += . trayicon
|
|
||||||
QMAKE_LIBS += -lXtst
|
|
||||||
|
|
||||||
# Input
|
|
||||||
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 \
|
|
||||||
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 \
|
|
||||||
loop.cpp \
|
|
||||||
main.cpp \
|
|
||||||
quickset.cpp \
|
|
||||||
trayicon/trayicon.cpp \
|
|
||||||
trayicon/trayicon_x11.cpp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### Install #####
|
|
||||||
|
|
||||||
INSTALLS += target icons doc
|
|
@ -1,16 +1,21 @@
|
|||||||
#include "quickset.h"
|
#include "quickset.h"
|
||||||
|
#include "getkey.h"
|
||||||
|
|
||||||
//build the dialog
|
//build the dialog
|
||||||
QuickSet::QuickSet( JoyPad* jp)
|
QuickSet::QuickSet( JoyPad* jp)
|
||||||
: QDialog() {
|
: QDialog() {
|
||||||
setting = false;
|
setting = false;
|
||||||
joypad = jp;
|
joypad = jp;
|
||||||
setCaption("Quick set " + joypad->getName());
|
setWindowTitle("Set " + jp->getName());
|
||||||
QVBoxLayout* LMain = new QVBoxLayout(this,5,5);
|
QVBoxLayout* LMain = new QVBoxLayout(this);
|
||||||
LMain->setAutoAdd(true);
|
LMain->setMargin(5);
|
||||||
|
LMain->setSpacing(5);
|
||||||
|
//LMain->setAutoAdd(true);
|
||||||
|
|
||||||
new QLabel("Press any button or axis and\nyou will be prompted for a key.",this);
|
QLabel *temp = new QLabel("Press any button or axis and\nyou will be prompted for a key.",this);
|
||||||
|
LMain->addWidget(temp);
|
||||||
QPushButton* button = new QPushButton("Done",this);
|
QPushButton* button = new QPushButton("Done",this);
|
||||||
|
LMain->addWidget(button);
|
||||||
connect( button, SIGNAL(clicked()), this, SLOT(accept()));
|
connect( button, SIGNAL(clicked()), this, SLOT(accept()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user