diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..553ebee --- /dev/null +++ b/Makefile @@ -0,0 +1,365 @@ +############################################################################# +# Makefile for building: musickit.app/Contents/MacOS/musickit +# Generated by qmake (2.01a) (Qt 4.6.2) on: Mon Mar 22 18:02:31 2010 +# Project: musickit.pro +# Template: app +# Command: /usr/bin/qmake -spec /usr/local/Qt4.6/mkspecs/macx-g++ -macx -o Makefile musickit.pro +############################################################################# + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_WEBKIT_LIB -DQT_PHONON_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -pipe -g -gdwarf-2 -arch i386 -Wall -W $(DEFINES) +CXXFLAGS = -pipe -g -gdwarf-2 -arch i386 -Wall -W $(DEFINES) +INCPATH = -I/usr/local/Qt4.6/mkspecs/macx-g++ -I. -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/Library/Frameworks/QtNetwork.framework/Versions/4/Headers -I/usr/include/QtNetwork -I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/Library/Frameworks/QtXml.framework/Versions/4/Headers -I/usr/include/QtXml -I/Library/Frameworks/phonon.framework/Versions/4/Headers -I/usr/include/phonon -I/Library/Frameworks/QtWebKit.framework/Versions/4/Headers -I/usr/include/QtWebKit -I/usr/include -Iqplaydarclient/include -I/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Headers -I/usr/include/phonon_compat -I. -F/Library/Frameworks +LINK = g++ +LFLAGS = -headerpad_max_install_names -arch i386 +LIBS = $(SUBLIBS) -F/Library/Frameworks -L/Library/Frameworks -L/usr/local/lib -lqjson -framework JavaVM -framework QtWebKit -framework QtXmlPatterns -framework phonon -framework QtDBus -framework QtXml -framework QtGui -framework QtNetwork -framework QtCore +AR = ar cq +RANLIB = ranlib -s +QMAKE = /usr/bin/qmake +TAR = tar -cf +COMPRESS = gzip -9f +COPY = cp -f +SED = sed +COPY_FILE = cp -f +COPY_DIR = cp -f -R +STRIP = +INSTALL_FILE = $(COPY_FILE) +INSTALL_DIR = $(COPY_DIR) +INSTALL_PROGRAM = $(COPY_FILE) +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +export MACOSX_DEPLOYMENT_TARGET = 10.4 + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp \ + WebkitApi.cpp \ + qplaydarclient/src/query.cpp \ + qplaydarclient/src/result.cpp \ + qplaydarclient/src/client.cpp \ + player/playengine.cpp \ + spoon/SpoonCore.cpp \ + spoon/JavaBridge.cpp moc_mainwindow.cpp \ + moc_WebkitApi.cpp \ + moc_client.cpp \ + moc_query.cpp \ + moc_result.cpp \ + moc_playengine.cpp \ + moc_SpoonCore.cpp +OBJECTS = main.o \ + mainwindow.o \ + WebkitApi.o \ + query.o \ + result.o \ + client.o \ + playengine.o \ + SpoonCore.o \ + JavaBridge.o \ + moc_mainwindow.o \ + moc_WebkitApi.o \ + moc_client.o \ + moc_query.o \ + moc_result.o \ + moc_playengine.o \ + moc_SpoonCore.o +DIST = /usr/local/Qt4.6/mkspecs/common/unix.conf \ + /usr/local/Qt4.6/mkspecs/common/mac.conf \ + /usr/local/Qt4.6/mkspecs/common/mac-g++.conf \ + /usr/local/Qt4.6/mkspecs/qconfig.pri \ + /usr/local/Qt4.6/mkspecs/features/qt_functions.prf \ + /usr/local/Qt4.6/mkspecs/features/qt_config.prf \ + /usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf \ + /usr/local/Qt4.6/mkspecs/features/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/dwarf2.prf \ + /usr/local/Qt4.6/mkspecs/features/debug.prf \ + /usr/local/Qt4.6/mkspecs/features/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf \ + /usr/local/Qt4.6/mkspecs/features/warn_on.prf \ + /usr/local/Qt4.6/mkspecs/features/qt.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/thread.prf \ + /usr/local/Qt4.6/mkspecs/features/moc.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/rez.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/sdk.prf \ + /usr/local/Qt4.6/mkspecs/features/resources.prf \ + /usr/local/Qt4.6/mkspecs/features/uic.prf \ + /usr/local/Qt4.6/mkspecs/features/yacc.prf \ + /usr/local/Qt4.6/mkspecs/features/lex.prf \ + /usr/local/Qt4.6/mkspecs/features/include_source_dir.prf \ + musickit.pro +QMAKE_TARGET = musickit +DESTDIR = +TARGET = musickit.app/Contents/MacOS/musickit + +####### Custom Compiler Variables +QMAKE_COMP_QMAKE_OBJECTIVE_CFLAGS = -pipe \ + -g \ + -gdwarf-2 \ + -arch \ + i386 \ + -Wall \ + -W + + +first: all +####### Implicit rules + +.SUFFIXES: .o .c .cpp .cc .cxx .C + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cc.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cxx.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.C.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.c.o: + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" + +####### Build rules + +all: Makefile musickit.app/Contents/PkgInfo musickit.app/Contents/Resources/empty.lproj musickit.app/Contents/Info.plist $(TARGET) + +$(TARGET): $(OBJECTS) + @$(CHK_DIR_EXISTS) musickit.app/Contents/MacOS/ || $(MKDIR) musickit.app/Contents/MacOS/ + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: musickit.pro /usr/local/Qt4.6/mkspecs/macx-g++/qmake.conf /usr/local/Qt4.6/mkspecs/common/unix.conf \ + /usr/local/Qt4.6/mkspecs/common/mac.conf \ + /usr/local/Qt4.6/mkspecs/common/mac-g++.conf \ + /usr/local/Qt4.6/mkspecs/qconfig.pri \ + /usr/local/Qt4.6/mkspecs/features/qt_functions.prf \ + /usr/local/Qt4.6/mkspecs/features/qt_config.prf \ + /usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf \ + /usr/local/Qt4.6/mkspecs/features/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/dwarf2.prf \ + /usr/local/Qt4.6/mkspecs/features/debug.prf \ + /usr/local/Qt4.6/mkspecs/features/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf \ + /usr/local/Qt4.6/mkspecs/features/warn_on.prf \ + /usr/local/Qt4.6/mkspecs/features/qt.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/thread.prf \ + /usr/local/Qt4.6/mkspecs/features/moc.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/rez.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/sdk.prf \ + /usr/local/Qt4.6/mkspecs/features/resources.prf \ + /usr/local/Qt4.6/mkspecs/features/uic.prf \ + /usr/local/Qt4.6/mkspecs/features/yacc.prf \ + /usr/local/Qt4.6/mkspecs/features/lex.prf \ + /usr/local/Qt4.6/mkspecs/features/include_source_dir.prf \ + /Library/Frameworks/QtWebKit.framework/QtWebKit.prl \ + /Library/Frameworks/phonon.framework/phonon.prl \ + /Library/Frameworks/QtDBus.framework/QtDBus.prl \ + /Library/Frameworks/QtXml.framework/QtXml.prl \ + /Library/Frameworks/QtCore.framework/QtCore.prl \ + /Library/Frameworks/QtGui.framework/QtGui.prl \ + /Library/Frameworks/QtXmlPatterns.framework/QtXmlPatterns.prl \ + /Library/Frameworks/QtNetwork.framework/QtNetwork.prl + $(QMAKE) -spec /usr/local/Qt4.6/mkspecs/macx-g++ -macx -o Makefile musickit.pro +/usr/local/Qt4.6/mkspecs/common/unix.conf: +/usr/local/Qt4.6/mkspecs/common/mac.conf: +/usr/local/Qt4.6/mkspecs/common/mac-g++.conf: +/usr/local/Qt4.6/mkspecs/qconfig.pri: +/usr/local/Qt4.6/mkspecs/features/qt_functions.prf: +/usr/local/Qt4.6/mkspecs/features/qt_config.prf: +/usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf: +/usr/local/Qt4.6/mkspecs/features/default_pre.prf: +/usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf: +/usr/local/Qt4.6/mkspecs/features/mac/dwarf2.prf: +/usr/local/Qt4.6/mkspecs/features/debug.prf: +/usr/local/Qt4.6/mkspecs/features/default_post.prf: +/usr/local/Qt4.6/mkspecs/features/mac/default_post.prf: +/usr/local/Qt4.6/mkspecs/features/mac/x86.prf: +/usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf: +/usr/local/Qt4.6/mkspecs/features/warn_on.prf: +/usr/local/Qt4.6/mkspecs/features/qt.prf: +/usr/local/Qt4.6/mkspecs/features/unix/thread.prf: +/usr/local/Qt4.6/mkspecs/features/moc.prf: +/usr/local/Qt4.6/mkspecs/features/mac/rez.prf: +/usr/local/Qt4.6/mkspecs/features/mac/sdk.prf: +/usr/local/Qt4.6/mkspecs/features/resources.prf: +/usr/local/Qt4.6/mkspecs/features/uic.prf: +/usr/local/Qt4.6/mkspecs/features/yacc.prf: +/usr/local/Qt4.6/mkspecs/features/lex.prf: +/usr/local/Qt4.6/mkspecs/features/include_source_dir.prf: +/Library/Frameworks/QtWebKit.framework/QtWebKit.prl: +/Library/Frameworks/phonon.framework/phonon.prl: +/Library/Frameworks/QtDBus.framework/QtDBus.prl: +/Library/Frameworks/QtXml.framework/QtXml.prl: +/Library/Frameworks/QtCore.framework/QtCore.prl: +/Library/Frameworks/QtGui.framework/QtGui.prl: +/Library/Frameworks/QtXmlPatterns.framework/QtXmlPatterns.prl: +/Library/Frameworks/QtNetwork.framework/QtNetwork.prl: +qmake: FORCE + @$(QMAKE) -spec /usr/local/Qt4.6/mkspecs/macx-g++ -macx -o Makefile musickit.pro + +musickit.app/Contents/PkgInfo: + @$(CHK_DIR_EXISTS) musickit.app/Contents || $(MKDIR) musickit.app/Contents + @$(DEL_FILE) musickit.app/Contents/PkgInfo + @echo "APPL????" >musickit.app/Contents/PkgInfo +musickit.app/Contents/Resources/empty.lproj: + @$(CHK_DIR_EXISTS) musickit.app/Contents/Resources || $(MKDIR) musickit.app/Contents/Resources + @touch musickit.app/Contents/Resources/empty.lproj + +musickit.app/Contents/Info.plist: + @$(CHK_DIR_EXISTS) musickit.app/Contents || $(MKDIR) musickit.app/Contents + @$(DEL_FILE) musickit.app/Contents/Info.plist + @sed -e "s,@ICON@,,g" -e "s,@EXECUTABLE@,musickit,g" -e "s,@TYPEINFO@,????,g" /usr/local/Qt4.6/mkspecs/macx-g++/Info.plist.app >musickit.app/Contents/Info.plist +dist: + @$(CHK_DIR_EXISTS) .tmp/musickit1.0.0 || $(MKDIR) .tmp/musickit1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/musickit1.0.0/ && $(COPY_FILE) --parents mainwindow.h WebkitApi.h qplaydarclient/include/qplaydar.h qplaydarclient/include/qplaydar/client.h qplaydarclient/include/qplaydar/query.h qplaydarclient/include/qplaydar/result.h player/playengine.h spoon/SpoonCore.h spoon/JavaBridge.h .tmp/musickit1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp WebkitApi.cpp qplaydarclient/src/query.cpp qplaydarclient/src/result.cpp qplaydarclient/src/client.cpp player/playengine.cpp spoon/SpoonCore.cpp spoon/JavaBridge.cpp .tmp/musickit1.0.0/ && (cd `dirname .tmp/musickit1.0.0` && $(TAR) musickit1.0.0.tar musickit1.0.0 && $(COMPRESS) musickit1.0.0.tar) && $(MOVE) `dirname .tmp/musickit1.0.0`/musickit1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/musickit1.0.0 + + +clean:compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +####### Sub-libraries + +distclean: clean + -$(DEL_FILE) -r musickit.app + -$(DEL_FILE) Makefile + + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +compiler_objective_c_make_all: +compiler_objective_c_clean: +compiler_moc_header_make_all: moc_mainwindow.cpp moc_WebkitApi.cpp moc_client.cpp moc_query.cpp moc_result.cpp moc_playengine.cpp moc_SpoonCore.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_mainwindow.cpp moc_WebkitApi.cpp moc_client.cpp moc_query.cpp moc_result.cpp moc_playengine.cpp moc_SpoonCore.cpp +moc_mainwindow.cpp: player/playengine.h \ + WebkitApi.h \ + mainwindow.h + /Developer/Tools/Qt/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ mainwindow.h -o moc_mainwindow.cpp + +moc_WebkitApi.cpp: player/playengine.h \ + WebkitApi.h + /Developer/Tools/Qt/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ WebkitApi.h -o moc_WebkitApi.cpp + +moc_client.cpp: qplaydarclient/include/qplaydar/client.h + /Developer/Tools/Qt/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ qplaydarclient/include/qplaydar/client.h -o moc_client.cpp + +moc_query.cpp: qplaydarclient/include/qplaydar/query.h + /Developer/Tools/Qt/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ qplaydarclient/include/qplaydar/query.h -o moc_query.cpp + +moc_result.cpp: qplaydarclient/include/qplaydar/result.h + /Developer/Tools/Qt/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ qplaydarclient/include/qplaydar/result.h -o moc_result.cpp + +moc_playengine.cpp: player/playengine.h + /Developer/Tools/Qt/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ player/playengine.h -o moc_playengine.cpp + +moc_SpoonCore.cpp: spoon/JavaBridge.h \ + spoon/SpoonCore.h + /Developer/Tools/Qt/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ spoon/SpoonCore.h -o moc_SpoonCore.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_rez_source_make_all: +compiler_rez_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 + +main.o: main.cpp mainwindow.h \ + player/playengine.h \ + WebkitApi.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp + +mainwindow.o: mainwindow.cpp mainwindow.h \ + player/playengine.h \ + WebkitApi.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp + +WebkitApi.o: WebkitApi.cpp WebkitApi.h \ + player/playengine.h \ + mainwindow.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o WebkitApi.o WebkitApi.cpp + +query.o: qplaydarclient/src/query.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o query.o qplaydarclient/src/query.cpp + +result.o: qplaydarclient/src/result.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o result.o qplaydarclient/src/result.cpp + +client.o: qplaydarclient/src/client.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o client.o qplaydarclient/src/client.cpp + +playengine.o: player/playengine.cpp player/playengine.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o playengine.o player/playengine.cpp + +SpoonCore.o: spoon/SpoonCore.cpp spoon/SpoonCore.h \ + spoon/JavaBridge.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o SpoonCore.o spoon/SpoonCore.cpp + +JavaBridge.o: spoon/JavaBridge.cpp spoon/JavaBridge.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o JavaBridge.o spoon/JavaBridge.cpp + +moc_mainwindow.o: moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp + +moc_WebkitApi.o: moc_WebkitApi.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_WebkitApi.o moc_WebkitApi.cpp + +moc_client.o: moc_client.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_client.o moc_client.cpp + +moc_query.o: moc_query.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_query.o moc_query.cpp + +moc_result.o: moc_result.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_result.o moc_result.cpp + +moc_playengine.o: moc_playengine.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_playengine.o moc_playengine.cpp + +moc_SpoonCore.o: moc_SpoonCore.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_SpoonCore.o moc_SpoonCore.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/WebkitApi.cpp b/WebkitApi.cpp index 5598c5a..466ca7b 100644 --- a/WebkitApi.cpp +++ b/WebkitApi.cpp @@ -11,6 +11,8 @@ WebkitApi::WebkitApi( Playdar::Client * client, Playengine * p, QObject *parent { pc = client; player = p; + spoonCore = new SpoonCore(); + qDebug() << "WebkitAPI CTOR"; connect(player, SIGNAL(tick(int,int)), @@ -39,6 +41,7 @@ void WebkitApi::setWebView( QWebView *view ) void WebkitApi::attachObject() { frame->addToJavaScriptWindowObject( QString("MK"), this ); + frame->addToJavaScriptWindowObject( QString("Spoon"), spoonCore ); } void WebkitApi::reemitStatusChanged(Playengine::STATUS s) diff --git a/WebkitApi.h b/WebkitApi.h index 5834897..00043bb 100644 --- a/WebkitApi.h +++ b/WebkitApi.h @@ -7,10 +7,13 @@ #include #include #include +#include class QWebView; class QWebFrame; +#include + class WebkitApi : public QObject { Q_OBJECT @@ -52,6 +55,7 @@ private slots: Playdar::Client * pc; Playengine * player; QJson::Serializer serializer; + SpoonCore* spoonCore; }; diff --git a/java/buildAndPackage.sh b/java/buildAndPackage.sh new file mode 100755 index 0000000..5e23b8b --- /dev/null +++ b/java/buildAndPackage.sh @@ -0,0 +1,6 @@ +mkdir classes +javac -sourcepath src -d classes -cp lib/hsqldb.jar:lib/jsontools-core-1.7.jar:lib/antlr-3.2.jar src/Main.java src/TestDB.java +jar cf main.jar -C classes . +mv main.jar lib + + diff --git a/java/lib/antlr-3.2.jar b/java/lib/antlr-3.2.jar new file mode 100644 index 0000000..fdd167d Binary files /dev/null and b/java/lib/antlr-3.2.jar differ diff --git a/java/lib/hsqldb.jar b/java/lib/hsqldb.jar new file mode 100644 index 0000000..7f8c0a3 Binary files /dev/null and b/java/lib/hsqldb.jar differ diff --git a/java/lib/jsontools-core-1.7.jar b/java/lib/jsontools-core-1.7.jar new file mode 100644 index 0000000..ef3d927 Binary files /dev/null and b/java/lib/jsontools-core-1.7.jar differ diff --git a/java/lib/main.jar b/java/lib/main.jar new file mode 100644 index 0000000..d20ebd4 Binary files /dev/null and b/java/lib/main.jar differ diff --git a/java/src/Main.java b/java/src/Main.java new file mode 100644 index 0000000..5701128 --- /dev/null +++ b/java/src/Main.java @@ -0,0 +1,80 @@ +import java.io.StringReader; +import java.sql.SQLException; + +import antlr.RecognitionException; +import antlr.TokenStreamException; + +import com.sdicons.json.model.JSONArray; +import com.sdicons.json.model.JSONDecimal; +import com.sdicons.json.model.JSONInteger; +import com.sdicons.json.model.JSONObject; +import com.sdicons.json.model.JSONString; +import com.sdicons.json.model.JSONValue; +import com.sdicons.json.parser.JSONParser; + +public class Main { + + + public static void init() { + TestDB.init(); + } + + // , String jsonEncodedArguments, String callbackName, String errorCallbackName + static public String post(String actionName, String jsonEncodedArguments, String callbackName, String errorCallbackName) { + System.out.println("called post with action name <" + actionName + "> and arguments <" + jsonEncodedArguments + ">"); + if (actionName.equals("queryDB")) { + try { + JSONParser p = new JSONParser(new StringReader(jsonEncodedArguments)); + JSONValue all = p.nextValue(); + JSONObject outerBrackets = (JSONObject) all; + int startInt = 0; + JSONInteger startIntJSON = (JSONInteger) outerBrackets.getValue().get("startRow"); + if (startIntJSON != null) { + startInt = startIntJSON.getValue().intValue(); + } + + int endInt = 100; + JSONInteger endIntJSON = (JSONInteger) outerBrackets.getValue().get("endRow"); + if (endIntJSON != null) { + endInt = endIntJSON.getValue().intValue(); + } + + long recordedTime = System.currentTimeMillis(); + + int numberOfResults = endInt - startInt; + String[] results = TestDB.query("SELECT * FROM tracks OFFSET " + startInt + " LIMIT " + numberOfResults); + + System.out.println("query speed <" + (System.currentTimeMillis() - recordedTime) + ">" ); + + final JSONArray jsonArray = new JSONArray(); + for (String result : results) { + jsonArray.getValue().add(new JSONString(result)); + } + //System.out.println("time creating json array: " + (System.currentTimeMillis() - recordedTime)); + recordedTime = System.currentTimeMillis(); + String renderedJSONString = jsonArray.render(true); + //System.out.println("time rendering json array: " + (System.currentTimeMillis() - recordedTime)); + //System.out.println(renderedJSONString); + + return renderedJSONString; + } catch (TokenStreamException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (RecognitionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + return ""; + } + + static public void test(int arg) { + System.out.println("called test with arg " + arg); + } + +} diff --git a/java/src/TestDB.java b/java/src/TestDB.java new file mode 100644 index 0000000..0edef84 --- /dev/null +++ b/java/src/TestDB.java @@ -0,0 +1,137 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +public class TestDB { + private static Connection conn; + private static TestDB db = null; + + public TestDB(String db_file_name_prefix) throws Exception { // note more + Class.forName("org.hsqldb.jdbcDriver"); + conn = DriverManager.getConnection( + "jdbc:hsqldb:" + db_file_name_prefix, "sa", ""); + } + + public static void init() { + try { + db = new TestDB("db_file"); + db.createDBIfNeeded(); + } catch (Exception ignored) { + } + } + + public void createDBIfNeeded() { + try { + Statement dummyQuery = conn.createStatement(); + dummyQuery.execute("SELECT COUNT(*) FROM tracks"); + } catch (Exception ignored) { + // Looks like the db needs some work, try clearing it. + createDB(); + } + } + + public void createDB() { + + long recordTime = System.currentTimeMillis(); + try { + db = new TestDB("db_file"); + + //db.update("drop index filename_index"); + try + { + db.update("drop table tracks"); + } + catch(Exception exc) {} + + db.update("CREATE TABLE tracks ( id INTEGER IDENTITY, name VARCHAR(256))"); + //db.update("CREATE INDEX filename_index ON tracks (name)"); + System.out.println("create time: " + (System.currentTimeMillis() - recordTime)); + recordTime = System.currentTimeMillis(); + insertData(db); + System.out.println("insert time: " + (System.currentTimeMillis() - recordTime)); + recordTime = System.currentTimeMillis(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public static void main(String[] args) throws Exception { + TestDB db = null; + db = new TestDB("db_file"); + long recordTime = System.currentTimeMillis(); + db.update("drop table tracks"); + System.out.println("drop time: " + (System.currentTimeMillis() - recordTime)); + recordTime = System.currentTimeMillis(); + db.update("CREATE TABLE tracks ( id INTEGER IDENTITY, name VARCHAR(256))"); + System.out.println("create time: " + (System.currentTimeMillis() - recordTime)); + recordTime = System.currentTimeMillis(); + insertData(db); + System.out.println("insert time: " + (System.currentTimeMillis() - recordTime)); + recordTime = System.currentTimeMillis(); + db.query("SELECT * FROM tracks order by name"); + System.out.println("query time: " + (System.currentTimeMillis() - recordTime)); + recordTime = System.currentTimeMillis(); + db.shutdown(); + System.out.println("shutdown time: " + (System.currentTimeMillis() - recordTime)); + } + + private static void insertData(TestDB db) throws SQLException { + int index = 0; + while (index < 100000) { + String name = "file" + index++; + db.update("INSERT INTO tracks(name) VALUES('" + name + "')"); + } + } + + public void shutdown() throws SQLException { + Statement st = conn.createStatement(); + st.execute("SHUTDOWN"); + conn.close(); + } + + public synchronized static String[] query(String expression) throws SQLException { + Statement st = conn.createStatement(); + ResultSet rs = st.executeQuery(expression); + List resultList = new ArrayList(); + //dump(rs); + while (rs.next()) { + long id = rs.getLong(1); + String name = rs.getString(2); + resultList.add(name); + } + st.close(); + + return resultList.toArray(new String[resultList.size()]); + } + + public synchronized void update(String expression) throws SQLException { + Statement st = conn.createStatement(); + int i = st.executeUpdate(expression); + + if (i == -1) { + System.out.println("db error : " + expression); + } + st.close(); + } + + public static void dump(ResultSet rs) throws SQLException { + ResultSetMetaData meta = rs.getMetaData(); + int colmax = meta.getColumnCount(); + int i; + Object o = null; + for (; rs.next();) { + for (i = 0; i < colmax; ++i) { + o = rs.getObject(i + 1); + System.out.print(o.toString() + " "); + } + System.out.println(" "); + } + } + +} diff --git a/mainwindow.cpp b/mainwindow.cpp index a34b851..6b4da9c 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -11,6 +11,7 @@ #include #include #include +#include //#include //#include @@ -18,7 +19,6 @@ MainWindow::MainWindow() { - nam = new QNetworkAccessManager(this); pc = new Playdar::Client(nam, this); player = new Playengine(this); @@ -36,7 +36,7 @@ MainWindow::MainWindow() connect(audioOutput, SIGNAL(volumeChanged(qreal)), this, SLOT(volumeChanged(qreal))); */ - webView->load(QUrl("www/demo/index.html")); + webView->load(QUrl("www/demo_of_library/index.html")); show(); } diff --git a/moc_SpoonCore.cpp b/moc_SpoonCore.cpp new file mode 100644 index 0000000..ab16e12 --- /dev/null +++ b/moc_SpoonCore.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'SpoonCore.h' +** +** Created: Mon Mar 22 18:02:33 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "spoon/SpoonCore.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'SpoonCore.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_SpoonCore[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 1, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: signature, parameters, type, tag, flags + 80, 19, 11, 10, 0x0a, + + 0 // eod +}; + +static const char qt_meta_stringdata_SpoonCore[] = { + "SpoonCore\0\0QString\0" + "actionName,jsonEncodedArguments,resultCallback,errorCallback\0" + "post(QString,QString,QString,QString)\0" +}; + +const QMetaObject SpoonCore::staticMetaObject = { + { &QObject::staticMetaObject, qt_meta_stringdata_SpoonCore, + qt_meta_data_SpoonCore, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &SpoonCore::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *SpoonCore::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *SpoonCore::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_SpoonCore)) + return static_cast(const_cast< SpoonCore*>(this)); + return QObject::qt_metacast(_clname); +} + +int SpoonCore::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: { QString _r = post((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QString(*)>(_a[3])),(*reinterpret_cast< const QString(*)>(_a[4]))); + if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break; + default: ; + } + _id -= 1; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/moc_WebkitApi.cpp b/moc_WebkitApi.cpp new file mode 100644 index 0000000..1d18d4e --- /dev/null +++ b/moc_WebkitApi.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'WebkitApi.h' +** +** Created: Mon Mar 22 18:06:21 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "WebkitApi.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'WebkitApi.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_WebkitApi[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 14, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 5, // signalCount + + // signals: signature, parameters, type, tag, flags + 13, 11, 10, 10, 0x05, + 27, 10, 10, 10, 0x05, + 48, 10, 10, 10, 0x05, + 63, 10, 10, 10, 0x05, + 82, 11, 10, 10, 0x05, + + // slots: signature, parameters, type, tag, flags + 106, 10, 10, 10, 0x0a, + 120, 10, 10, 10, 0x0a, + 135, 10, 10, 10, 0x0a, + 149, 10, 10, 10, 0x0a, + 156, 10, 10, 10, 0x0a, + 173, 169, 10, 10, 0x0a, + 190, 10, 10, 10, 0x08, + 205, 10, 10, 10, 0x08, + 245, 11, 10, 10, 0x08, + + 0 // eod +}; + +static const char qt_meta_stringdata_WebkitApi[] = { + "WebkitApi\0\0,\0tick(int,int)\0" + "stateChange(QString)\0buffering(int)\0" + "volumeChanged(int)\0result(QString,QString)\0" + "togglePause()\0setVolume(int)\0play(QString)\0" + "stop()\0log(QString)\0str\0resolve(QString)\0" + "attachObject()\0reemitStatusChanged(Playengine::STATUS)\0" + "onResult(Playdar::q_ptr,Playdar::r_ptr)\0" +}; + +const QMetaObject WebkitApi::staticMetaObject = { + { &QObject::staticMetaObject, qt_meta_stringdata_WebkitApi, + qt_meta_data_WebkitApi, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &WebkitApi::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *WebkitApi::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *WebkitApi::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_WebkitApi)) + return static_cast(const_cast< WebkitApi*>(this)); + return QObject::qt_metacast(_clname); +} + +int WebkitApi::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: tick((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; + case 1: stateChange((*reinterpret_cast< QString(*)>(_a[1]))); break; + case 2: buffering((*reinterpret_cast< int(*)>(_a[1]))); break; + case 3: volumeChanged((*reinterpret_cast< int(*)>(_a[1]))); break; + case 4: result((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break; + case 5: togglePause(); break; + case 6: setVolume((*reinterpret_cast< int(*)>(_a[1]))); break; + case 7: play((*reinterpret_cast< QString(*)>(_a[1]))); break; + case 8: stop(); break; + case 9: log((*reinterpret_cast< QString(*)>(_a[1]))); break; + case 10: resolve((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 11: attachObject(); break; + case 12: reemitStatusChanged((*reinterpret_cast< Playengine::STATUS(*)>(_a[1]))); break; + case 13: onResult((*reinterpret_cast< Playdar::q_ptr(*)>(_a[1])),(*reinterpret_cast< Playdar::r_ptr(*)>(_a[2]))); break; + default: ; + } + _id -= 14; + } + return _id; +} + +// SIGNAL 0 +void WebkitApi::tick(int _t1, int _t2) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)), const_cast(reinterpret_cast(&_t2)) }; + QMetaObject::activate(this, &staticMetaObject, 0, _a); +} + +// SIGNAL 1 +void WebkitApi::stateChange(QString _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 1, _a); +} + +// SIGNAL 2 +void WebkitApi::buffering(int _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 2, _a); +} + +// SIGNAL 3 +void WebkitApi::volumeChanged(int _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 3, _a); +} + +// SIGNAL 4 +void WebkitApi::result(QString _t1, QString _t2) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)), const_cast(reinterpret_cast(&_t2)) }; + QMetaObject::activate(this, &staticMetaObject, 4, _a); +} +QT_END_MOC_NAMESPACE diff --git a/moc_client.cpp b/moc_client.cpp new file mode 100644 index 0000000..29a02ea --- /dev/null +++ b/moc_client.cpp @@ -0,0 +1,127 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'client.h' +** +** Created: Mon Mar 22 17:17:43 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "qplaydarclient/include/qplaydar/client.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'client.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_Playdar__Client[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 10, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 3, // signalCount + + // signals: signature, parameters, type, tag, flags + 17, 16, 16, 16, 0x05, + 42, 16, 16, 16, 0x05, + 62, 60, 16, 16, 0x05, + + // slots: signature, parameters, type, tag, flags + 106, 102, 16, 16, 0x0a, + 127, 123, 16, 16, 0x0a, + 152, 150, 142, 16, 0x0a, + 169, 102, 142, 16, 0x0a, + 188, 16, 16, 16, 0x08, + 212, 16, 16, 16, 0x08, + 234, 16, 16, 16, 0x08, + + 0 // eod +}; + +static const char qt_meta_stringdata_Playdar__Client[] = { + "Playdar::Client\0\0handshakeOk(QVariantMap)\0" + "handshakeFailed()\0,\0" + "onResult(Playdar::q_ptr,Playdar::r_ptr)\0" + "str\0resolve(QString)\0qry\0resolve(q_ptr)\0" + "QString\0r\0resultUrl(r_ptr)\0" + "resultUrl(QString)\0handshakeCallFinished()\0" + "resolveCallFinished()\0cometReadyRead()\0" +}; + +const QMetaObject Playdar::Client::staticMetaObject = { + { &QObject::staticMetaObject, qt_meta_stringdata_Playdar__Client, + qt_meta_data_Playdar__Client, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &Playdar::Client::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *Playdar::Client::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *Playdar::Client::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_Playdar__Client)) + return static_cast(const_cast< Client*>(this)); + return QObject::qt_metacast(_clname); +} + +int Playdar::Client::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: handshakeOk((*reinterpret_cast< QVariantMap(*)>(_a[1]))); break; + case 1: handshakeFailed(); break; + case 2: onResult((*reinterpret_cast< Playdar::q_ptr(*)>(_a[1])),(*reinterpret_cast< Playdar::r_ptr(*)>(_a[2]))); break; + case 3: resolve((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 4: resolve((*reinterpret_cast< q_ptr(*)>(_a[1]))); break; + case 5: { QString _r = resultUrl((*reinterpret_cast< r_ptr(*)>(_a[1]))); + if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break; + case 6: { QString _r = resultUrl((*reinterpret_cast< const QString(*)>(_a[1]))); + if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break; + case 7: handshakeCallFinished(); break; + case 8: resolveCallFinished(); break; + case 9: cometReadyRead(); break; + default: ; + } + _id -= 10; + } + return _id; +} + +// SIGNAL 0 +void Playdar::Client::handshakeOk(QVariantMap _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 0, _a); +} + +// SIGNAL 1 +void Playdar::Client::handshakeFailed() +{ + QMetaObject::activate(this, &staticMetaObject, 1, 0); +} + +// SIGNAL 2 +void Playdar::Client::onResult(Playdar::q_ptr _t1, Playdar::r_ptr _t2) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)), const_cast(reinterpret_cast(&_t2)) }; + QMetaObject::activate(this, &staticMetaObject, 2, _a); +} +QT_END_MOC_NAMESPACE diff --git a/moc_mainwindow.cpp b/moc_mainwindow.cpp new file mode 100644 index 0000000..ece3477 --- /dev/null +++ b/moc_mainwindow.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'mainwindow.h' +** +** Created: Mon Mar 22 18:06:18 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "mainwindow.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'mainwindow.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_MainWindow[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 0, 0, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + 0 // eod +}; + +static const char qt_meta_stringdata_MainWindow[] = { + "MainWindow\0" +}; + +const QMetaObject MainWindow::staticMetaObject = { + { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow, + qt_meta_data_MainWindow, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &MainWindow::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *MainWindow::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *MainWindow::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_MainWindow)) + return static_cast(const_cast< MainWindow*>(this)); + return QMainWindow::qt_metacast(_clname); +} + +int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QMainWindow::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/moc_playengine.cpp b/moc_playengine.cpp new file mode 100644 index 0000000..e52b6cb --- /dev/null +++ b/moc_playengine.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'playengine.h' +** +** Created: Mon Mar 22 17:17:47 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "player/playengine.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'playengine.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_Playengine[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 15, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 4, // signalCount + + // signals: signature, parameters, type, tag, flags + 12, 11, 11, 11, 0x05, + 24, 11, 11, 11, 0x05, + 58, 11, 11, 11, 0x05, + 75, 73, 11, 11, 0x05, + + // slots: signature, parameters, type, tag, flags + 89, 11, 11, 11, 0x0a, + 107, 103, 11, 11, 0x0a, + 118, 11, 11, 11, 0x0a, + 127, 125, 11, 11, 0x0a, + 160, 142, 11, 11, 0x08, + 207, 202, 11, 11, 0x08, + 231, 224, 11, 11, 0x08, + 266, 142, 11, 11, 0x08, + 312, 11, 11, 11, 0x08, + 328, 11, 11, 11, 0x08, + 347, 11, 11, 11, 0x08, + + 0 // eod +}; + +static const char qt_meta_stringdata_Playengine[] = { + "Playengine\0\0volume(int)\0" + "statusChanged(Playengine::STATUS)\0" + "buffering(int)\0,\0tick(int,int)\0" + "togglePause()\0url\0play(QUrl)\0stop()\0" + "v\0setVolume(int)\0newState,oldState\0" + "stateChanged(Phonon::State,Phonon::State)\0" + "time\0tickslot(qint64)\0source\0" + "sourceChanged(Phonon::MediaSource)\0" + "metaStateChanged(Phonon::State,Phonon::State)\0" + "aboutToFinish()\0bufferPercent(int)\0" + "volumeChanged(qreal)\0" +}; + +const QMetaObject Playengine::staticMetaObject = { + { &QObject::staticMetaObject, qt_meta_stringdata_Playengine, + qt_meta_data_Playengine, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &Playengine::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *Playengine::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *Playengine::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_Playengine)) + return static_cast(const_cast< Playengine*>(this)); + return QObject::qt_metacast(_clname); +} + +int Playengine::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: volume((*reinterpret_cast< int(*)>(_a[1]))); break; + case 1: statusChanged((*reinterpret_cast< Playengine::STATUS(*)>(_a[1]))); break; + case 2: buffering((*reinterpret_cast< int(*)>(_a[1]))); break; + case 3: tick((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; + case 4: togglePause(); break; + case 5: play((*reinterpret_cast< const QUrl(*)>(_a[1]))); break; + case 6: stop(); break; + case 7: setVolume((*reinterpret_cast< int(*)>(_a[1]))); break; + case 8: stateChanged((*reinterpret_cast< Phonon::State(*)>(_a[1])),(*reinterpret_cast< Phonon::State(*)>(_a[2]))); break; + case 9: tickslot((*reinterpret_cast< qint64(*)>(_a[1]))); break; + case 10: sourceChanged((*reinterpret_cast< const Phonon::MediaSource(*)>(_a[1]))); break; + case 11: metaStateChanged((*reinterpret_cast< Phonon::State(*)>(_a[1])),(*reinterpret_cast< Phonon::State(*)>(_a[2]))); break; + case 12: aboutToFinish(); break; + case 13: bufferPercent((*reinterpret_cast< int(*)>(_a[1]))); break; + case 14: volumeChanged((*reinterpret_cast< qreal(*)>(_a[1]))); break; + default: ; + } + _id -= 15; + } + return _id; +} + +// SIGNAL 0 +void Playengine::volume(int _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 0, _a); +} + +// SIGNAL 1 +void Playengine::statusChanged(Playengine::STATUS _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 1, _a); +} + +// SIGNAL 2 +void Playengine::buffering(int _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 2, _a); +} + +// SIGNAL 3 +void Playengine::tick(int _t1, int _t2) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)), const_cast(reinterpret_cast(&_t2)) }; + QMetaObject::activate(this, &staticMetaObject, 3, _a); +} +QT_END_MOC_NAMESPACE diff --git a/moc_query.cpp b/moc_query.cpp new file mode 100644 index 0000000..86b985a --- /dev/null +++ b/moc_query.cpp @@ -0,0 +1,130 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'query.h' +** +** Created: Mon Mar 22 17:17:45 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "qplaydarclient/include/qplaydar/query.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'query.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_Playdar__Query[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 1, 14, // methods + 5, 19, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 1, // signalCount + + // signals: signature, parameters, type, tag, flags + 20, 16, 15, 15, 0x05, + + // properties: name, type, flags + 53, 45, 0x0a095103, + 57, 45, 0x0a095103, + 64, 45, 0x0a095103, + 70, 45, 0x0a095103, + 80, 76, 0x02095103, + + 0 // eod +}; + +static const char qt_meta_stringdata_Playdar__Query[] = { + "Playdar::Query\0\0res\0onResult(Playdar::r_ptr)\0" + "QString\0qid\0artist\0album\0track\0int\0" + "duration\0" +}; + +const QMetaObject Playdar::Query::staticMetaObject = { + { &QObject::staticMetaObject, qt_meta_stringdata_Playdar__Query, + qt_meta_data_Playdar__Query, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &Playdar::Query::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *Playdar::Query::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *Playdar::Query::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_Playdar__Query)) + return static_cast(const_cast< Query*>(this)); + return QObject::qt_metacast(_clname); +} + +int Playdar::Query::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: onResult((*reinterpret_cast< Playdar::r_ptr(*)>(_a[1]))); break; + default: ; + } + _id -= 1; + } +#ifndef QT_NO_PROPERTIES + else if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast< QString*>(_v) = qid(); break; + case 1: *reinterpret_cast< QString*>(_v) = artist(); break; + case 2: *reinterpret_cast< QString*>(_v) = album(); break; + case 3: *reinterpret_cast< QString*>(_v) = track(); break; + case 4: *reinterpret_cast< int*>(_v) = duration(); break; + } + _id -= 5; + } else if (_c == QMetaObject::WriteProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: setQid(*reinterpret_cast< QString*>(_v)); break; + case 1: setArtist(*reinterpret_cast< QString*>(_v)); break; + case 2: setAlbum(*reinterpret_cast< QString*>(_v)); break; + case 3: setTrack(*reinterpret_cast< QString*>(_v)); break; + case 4: setDuration(*reinterpret_cast< int*>(_v)); break; + } + _id -= 5; + } else if (_c == QMetaObject::ResetProperty) { + _id -= 5; + } else if (_c == QMetaObject::QueryPropertyDesignable) { + _id -= 5; + } else if (_c == QMetaObject::QueryPropertyScriptable) { + _id -= 5; + } else if (_c == QMetaObject::QueryPropertyStored) { + _id -= 5; + } else if (_c == QMetaObject::QueryPropertyEditable) { + _id -= 5; + } else if (_c == QMetaObject::QueryPropertyUser) { + _id -= 5; + } +#endif // QT_NO_PROPERTIES + return _id; +} + +// SIGNAL 0 +void Playdar::Query::onResult(Playdar::r_ptr _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 0, _a); +} +QT_END_MOC_NAMESPACE diff --git a/moc_result.cpp b/moc_result.cpp new file mode 100644 index 0000000..e44358e --- /dev/null +++ b/moc_result.cpp @@ -0,0 +1,129 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'result.h' +** +** Created: Mon Mar 22 17:17:46 2010 +** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "qplaydarclient/include/qplaydar/result.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'result.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.6.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_Playdar__Result[] = { + + // content: + 4, // revision + 0, // classname + 0, 0, // classinfo + 0, 0, // methods + 10, 14, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // properties: name, type, flags + 24, 16, 0x0a095103, + 28, 16, 0x0a095103, + 35, 16, 0x0a095103, + 41, 16, 0x0a095103, + 47, 16, 0x0a095103, + 56, 16, 0x0a095103, + 67, 63, 0x02095103, + 72, 63, 0x02095103, + 80, 63, 0x02095103, + 95, 89, 0x87095103, + + 0 // eod +}; + +static const char qt_meta_stringdata_Playdar__Result[] = { + "Playdar::Result\0QString\0sid\0artist\0" + "album\0track\0mimetype\0source\0int\0size\0" + "bitrate\0duration\0float\0score\0" +}; + +const QMetaObject Playdar::Result::staticMetaObject = { + { &QObject::staticMetaObject, qt_meta_stringdata_Playdar__Result, + qt_meta_data_Playdar__Result, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &Playdar::Result::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *Playdar::Result::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *Playdar::Result::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_Playdar__Result)) + return static_cast(const_cast< Result*>(this)); + return QObject::qt_metacast(_clname); +} + +int Playdar::Result::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + +#ifndef QT_NO_PROPERTIES + if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast< QString*>(_v) = sid(); break; + case 1: *reinterpret_cast< QString*>(_v) = artist(); break; + case 2: *reinterpret_cast< QString*>(_v) = album(); break; + case 3: *reinterpret_cast< QString*>(_v) = track(); break; + case 4: *reinterpret_cast< QString*>(_v) = mimetype(); break; + case 5: *reinterpret_cast< QString*>(_v) = source(); break; + case 6: *reinterpret_cast< int*>(_v) = size(); break; + case 7: *reinterpret_cast< int*>(_v) = bitrate(); break; + case 8: *reinterpret_cast< int*>(_v) = duration(); break; + case 9: *reinterpret_cast< float*>(_v) = score(); break; + } + _id -= 10; + } else if (_c == QMetaObject::WriteProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: setSid(*reinterpret_cast< QString*>(_v)); break; + case 1: setArtist(*reinterpret_cast< QString*>(_v)); break; + case 2: setAlbum(*reinterpret_cast< QString*>(_v)); break; + case 3: setTrack(*reinterpret_cast< QString*>(_v)); break; + case 4: setMimetype(*reinterpret_cast< QString*>(_v)); break; + case 5: setSource(*reinterpret_cast< QString*>(_v)); break; + case 6: setSize(*reinterpret_cast< int*>(_v)); break; + case 7: setBitrate(*reinterpret_cast< int*>(_v)); break; + case 8: setDuration(*reinterpret_cast< int*>(_v)); break; + case 9: setScore(*reinterpret_cast< float*>(_v)); break; + } + _id -= 10; + } else if (_c == QMetaObject::ResetProperty) { + _id -= 10; + } else if (_c == QMetaObject::QueryPropertyDesignable) { + _id -= 10; + } else if (_c == QMetaObject::QueryPropertyScriptable) { + _id -= 10; + } else if (_c == QMetaObject::QueryPropertyStored) { + _id -= 10; + } else if (_c == QMetaObject::QueryPropertyEditable) { + _id -= 10; + } else if (_c == QMetaObject::QueryPropertyUser) { + _id -= 10; + } +#endif // QT_NO_PROPERTIES + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/musickit.app/Contents/Info.plist b/musickit.app/Contents/Info.plist new file mode 100644 index 0000000..a7e4f37 --- /dev/null +++ b/musickit.app/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIconFile + + CFBundlePackageType + APPL + CFBundleGetInfoString + Created by Qt/QMake + CFBundleSignature + ???? + CFBundleExecutable + musickit + CFBundleIdentifier + com.yourcompany.musickit + NOTE + This file was generated by Qt/QMake. + + diff --git a/musickit.app/Contents/MacOS/musickit b/musickit.app/Contents/MacOS/musickit new file mode 100755 index 0000000..bd2cfce Binary files /dev/null and b/musickit.app/Contents/MacOS/musickit differ diff --git a/musickit.app/Contents/PkgInfo b/musickit.app/Contents/PkgInfo new file mode 100644 index 0000000..6f749b0 --- /dev/null +++ b/musickit.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPL???? diff --git a/musickit.app/Contents/Resources/empty.lproj b/musickit.app/Contents/Resources/empty.lproj new file mode 100644 index 0000000..e69de29 diff --git a/musickit.pro b/musickit.pro index 95229d5..f84ed70 100644 --- a/musickit.pro +++ b/musickit.pro @@ -11,7 +11,9 @@ SOURCES += main.cpp \ qplaydarclient/src/query.cpp \ qplaydarclient/src/result.cpp \ qplaydarclient/src/client.cpp \ - player/playengine.cpp + player/playengine.cpp \ + spoon/SpoonCore.cpp \ + spoon/JavaBridge.cpp HEADERS += mainwindow.h \ WebkitApi.h \ @@ -19,16 +21,16 @@ HEADERS += mainwindow.h \ qplaydarclient/include/qplaydar/client.h \ qplaydarclient/include/qplaydar/query.h \ qplaydarclient/include/qplaydar/result.h \ - player/playengine.h + player/playengine.h \ + spoon/SpoonCore.h \ + spoon/JavaBridge.h -LIBS += -L/usr/local/lib -lqjson +LIBS += -L/usr/local/lib -lqjson -framework JavaVM -INCLUDEPATH += qplaydarclient/include +INCLUDEPATH += qplaydarclient/include /Library/Java/Home/include #CONFIG += static warn_off # for static qt #windows:LIBS += -lws2_32 # explicitly link to winsock (not sure why this is needed) - - diff --git a/musickit.pro.user b/musickit.pro.user new file mode 100644 index 0000000..2851aab --- /dev/null +++ b/musickit.pro.user @@ -0,0 +1,113 @@ + + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + System + + + + ProjectExplorer.Project.Target.0 + + Desktop + Qt4ProjectManager.Target.DesktopTarget + 0 + 0 + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + 2 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /Users/gkellum/Code/musickit_gkellum/musickit + false + 2 + 0 + false + + + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + 2 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + + false + 2 + 0 + false + + + 2 + + musickit + Qt4ProjectManager.Qt4RunConfiguration + 2 + + musickit.pro + false + false + + false + true + /Users/gkellum/Code/musickit_gkellum/musickit + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 2 + + diff --git a/qplaydarclient/src/client.cpp b/qplaydarclient/src/client.cpp index 5ceae38..7ef1ad5 100644 --- a/qplaydarclient/src/client.cpp +++ b/qplaydarclient/src/client.cpp @@ -26,6 +26,8 @@ QString Client::resultUrl(const QString &str) const } else { qDebug() << "Failed to parse result in resultUrl call"; } + + return QString(); } QString Client::resultUrl(r_ptr r) const diff --git a/spoon/JavaBridge.cpp b/spoon/JavaBridge.cpp new file mode 100644 index 0000000..306f067 --- /dev/null +++ b/spoon/JavaBridge.cpp @@ -0,0 +1,78 @@ +#include "JavaBridge.h" + +#include +#include + +JavaBridge::JavaBridge() + : mainClass(NULL), postMethodId(NULL) +{ + createJavaVM(); + initialize(); +} + +JavaBridge::~JavaBridge() +{ + destroyJavaVM(); +} + +void JavaBridge::createJavaVM() +{ + JavaVMInitArgs vm_args; + + JavaVMOption option1; + option1.optionString = "-Djava.class.path=java/lib/main.jar:java/lib/hsqldb.jar:java/lib/antlr-3.2.jar:java/lib/jsontools-core-1.7.jar"; + + JavaVMOption options[1]; + options[0] = option1; + + vm_args.version = JNI_VERSION_1_6; + vm_args.options = options; + vm_args.nOptions = 1; + vm_args.ignoreUnrecognized = JNI_TRUE; + + /* load and initialize a Java VM, return a JNI interface + * pointer in env */ + JNI_CreateJavaVM(&jvm, (void **) &env, &vm_args); +} + +void JavaBridge::initialize() +{ + mainClass = env->FindClass("Main"); + //"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" + postMethodId = env->GetStaticMethodID(mainClass, "post", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"); + + QTime time; + qDebug("starting init call"); + time.start(); + jmethodID initMethodId = env->GetStaticMethodID(mainClass, "init", "()V"); + env->CallStaticVoidMethod(mainClass, initMethodId); + qDebug() << "finished initializing the JavaBridge with time " << time.elapsed(); +} + +QString JavaBridge::post(const QString& actionName, const QString& jsonEncodedArguments, const QString& resultCallback, const QString& errorCallback) +{ + jstring actionNameJStr = env->NewString((const jchar*) actionName.data(), actionName.length()); + jstring jsonEncodedArgumentsJStr = env->NewString((const jchar*) jsonEncodedArguments.data(), jsonEncodedArguments.length()); + jstring resultCallbackJStr = env->NewString((const jchar*) resultCallback.data(), resultCallback.length()); + jstring errorCallbackJStr = env->NewString((const jchar*) errorCallback.data(), errorCallback.length()); + + QTime time; + time.start(); + jstring responseJString = (jstring) env->CallStaticObjectMethod(mainClass, postMethodId, actionNameJStr, jsonEncodedArgumentsJStr, resultCallbackJStr, errorCallbackJStr); + + QString responseQString; + if (responseJString != NULL) { + jboolean isCopy = false; + const jchar* responseChars = env->GetStringChars(responseJString, &isCopy); + responseQString = QString((const QChar *)(responseChars), env->GetStringLength(responseJString)); + env->ReleaseStringChars(responseJString, responseChars); + } + + return responseQString; +} + +void JavaBridge::destroyJavaVM() +{ + /* We are done. */ + jvm->DestroyJavaVM(); +} diff --git a/spoon/JavaBridge.h b/spoon/JavaBridge.h new file mode 100644 index 0000000..ce894b1 --- /dev/null +++ b/spoon/JavaBridge.h @@ -0,0 +1,31 @@ +#ifndef JAVABRIDGE_H +#define JAVABRIDGE_H + +#include + +#include + +class JavaBridge +{ +public: + JavaBridge(); + ~JavaBridge(); + + void initialize(); + + QString post(const QString& actionName, const QString& jsonEncodedArguments, const QString& resultCallback, const QString& errorCallback); + + void test(int value); + +private: + void createJavaVM(); + void destroyJavaVM(); + + JavaVM *jvm; /* denotes a Java VM */ + JNIEnv *env; /* pointer to native method interface */ + + jclass mainClass; + jmethodID postMethodId; +}; + +#endif // JAVABRIDGE_H diff --git a/spoon/SpoonCore.cpp b/spoon/SpoonCore.cpp new file mode 100644 index 0000000..2ffd2a1 --- /dev/null +++ b/spoon/SpoonCore.cpp @@ -0,0 +1,11 @@ +#include "SpoonCore.h" + +SpoonCore::SpoonCore(QObject *parent) : + QObject(parent), javaBridge(new JavaBridge()) +{ +} + +const QString SpoonCore::post(const QString& actionName, const QString& jsonEncodedArguments, const QString& resultCallback, const QString& errorCallback) +{ + return javaBridge->post(actionName, jsonEncodedArguments, resultCallback, errorCallback); +} diff --git a/spoon/SpoonCore.h b/spoon/SpoonCore.h new file mode 100644 index 0000000..f9cf999 --- /dev/null +++ b/spoon/SpoonCore.h @@ -0,0 +1,25 @@ +#ifndef SPOONCORE_H +#define SPOONCORE_H + +#include "JavaBridge.h" + +#include + +#include + +class SpoonCore : public QObject +{ +Q_OBJECT +public: + explicit SpoonCore(QObject *parent = 0); + +signals: + +public slots: + const QString post(const QString& actionName, const QString& jsonEncodedArguments, const QString& resultCallback, const QString& errorCallback); + +private: + std::tr1::shared_ptr javaBridge; +}; + +#endif // SPOONCORE_H diff --git a/www/demo_of_library/index.html b/www/demo_of_library/index.html new file mode 100644 index 0000000..5d73ff4 --- /dev/null +++ b/www/demo_of_library/index.html @@ -0,0 +1,29 @@ + + + + + + +

demo

+
+

Click submit button to query database.

+Start Row: +End Row: + + +
+

+ + + diff --git a/www/demo_of_library/jquery-1.3.1.min.js b/www/demo_of_library/jquery-1.3.1.min.js new file mode 100644 index 0000000..c327fae --- /dev/null +++ b/www/demo_of_library/jquery-1.3.1.min.js @@ -0,0 +1,19 @@ +/* + * jQuery JavaScript Library v1.3.1 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-01-21 20:42:16 -0500 (Wed, 21 Jan 2009) + * Revision: 6158 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.makeArray(E))},selector:"",jquery:"1.3.1",size:function(){return this.length},get:function(E){return E===g?o.makeArray(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,find:function(E){if(this.length===1&&!/,/.test(E)){var G=this.pushStack([],"find",E);G.length=0;o.find(E,this[0],G);return G}else{var F=o.map(this,function(H){return o.find(E,H)});return this.pushStack(/[^+>] [^+>]/.test(E)?o.unique(F):F,"find",E)}},clone:function(F){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.cloneNode(true),H=document.createElement("div");H.appendChild(I);return o.clean([H.innerHTML])[0]}else{return this.cloneNode(true)}});var G=E.find("*").andSelf().each(function(){if(this[h]!==g){this[h]=null}});if(F===true){this.find("*").andSelf().each(function(I){if(this.nodeType==3){return}var H=o.data(this,"events");for(var K in H){for(var J in H[K]){o.event.add(G[I],K,H[K][J],H[K][J].data)}}})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var F=o.expr.match.POS.test(E)?o(E):null;return this.map(function(){var G=this;while(G&&G.ownerDocument){if(F?F.index(G)>-1:o(G).is(E)){return G}G=G.parentNode}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML:null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(K,N,M){if(this[0]){var J=(this[0].ownerDocument||this[0]).createDocumentFragment(),G=o.clean(K,(this[0].ownerDocument||this[0]),J),I=J.firstChild,E=this.length>1?J.cloneNode(true):J;if(I){for(var H=0,F=this.length;H0?E.cloneNode(true):J)}}if(G){o.each(G,z)}}return this;function L(O,P){return N&&o.nodeName(O,"table")&&o.nodeName(P,"tr")?(O.getElementsByTagName("tbody")[0]||O.appendChild(O.ownerDocument.createElement("tbody"))):O}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(G,E,I){if(E=="width"||E=="height"){var K,F={position:"absolute",visibility:"hidden",display:"block"},J=E=="width"?["Left","Right"]:["Top","Bottom"];function H(){K=E=="width"?G.offsetWidth:G.offsetHeight;var M=0,L=0;o.each(J,function(){M+=parseFloat(o.curCSS(G,"padding"+this,true))||0;L+=parseFloat(o.curCSS(G,"border"+this+"Width",true))||0});K-=Math.round(M+L)}if(o(G).is(":visible")){H()}else{o.swap(G,F,H)}return Math.max(0,K)}return o.curCSS(G,E,I)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,R){if(typeof R==="number"){R+=""}if(!R){return}if(typeof R==="string"){R=R.replace(/(<(\w+)[^>]*?)\/>/g,function(T,U,S){return S.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?T:U+">"});var O=o.trim(R).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+R+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var N=!O.indexOf(""&&O.indexOf("=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(R)){L.insertBefore(K.createTextNode(R.match(/^\s*/)[0]),L.firstChild)}R=o.makeArray(L.childNodes)}if(R.nodeType){G.push(R)}else{G=o.merge(G,R)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E*",this).remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var Q=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]+['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,K=0,G=Object.prototype.toString;var F=function(X,T,aa,ab){aa=aa||[];T=T||document;if(T.nodeType!==1&&T.nodeType!==9){return[]}if(!X||typeof X!=="string"){return aa}var Y=[],V,ae,ah,S,ac,U,W=true;Q.lastIndex=0;while((V=Q.exec(X))!==null){Y.push(V[1]);if(V[2]){U=RegExp.rightContext;break}}if(Y.length>1&&L.exec(X)){if(Y.length===2&&H.relative[Y[0]]){ae=I(Y[0]+Y[1],T)}else{ae=H.relative[Y[0]]?[T]:F(Y.shift(),T);while(Y.length){X=Y.shift();if(H.relative[X]){X+=Y.shift()}ae=I(X,ae)}}}else{var ad=ab?{expr:Y.pop(),set:E(ab)}:F.find(Y.pop(),Y.length===1&&T.parentNode?T.parentNode:T,P(T));ae=F.filter(ad.expr,ad.set);if(Y.length>0){ah=E(ae)}else{W=false}while(Y.length){var ag=Y.pop(),af=ag;if(!H.relative[ag]){ag=""}else{af=Y.pop()}if(af==null){af=T}H.relative[ag](ah,af,P(T))}}if(!ah){ah=ae}if(!ah){throw"Syntax error, unrecognized expression: "+(ag||X)}if(G.call(ah)==="[object Array]"){if(!W){aa.push.apply(aa,ah)}else{if(T.nodeType===1){for(var Z=0;ah[Z]!=null;Z++){if(ah[Z]&&(ah[Z]===true||ah[Z].nodeType===1&&J(T,ah[Z]))){aa.push(ae[Z])}}}else{for(var Z=0;ah[Z]!=null;Z++){if(ah[Z]&&ah[Z].nodeType===1){aa.push(ae[Z])}}}}}else{E(ah,aa)}if(U){F(U,T,aa,ab)}return aa};F.matches=function(S,T){return F(S,null,null,T)};F.find=function(Z,S,aa){var Y,W;if(!Z){return[]}for(var V=0,U=H.order.length;V":function(X,T,Y){if(typeof T==="string"&&!/\W/.test(T)){T=Y?T:T.toUpperCase();for(var U=0,S=X.length;U=0){if(!U){S.push(X)}}else{if(U){T[W]=false}}}}return false},ID:function(S){return S[1].replace(/\\/g,"")},TAG:function(T,S){for(var U=0;S[U]===false;U++){}return S[U]&&P(S[U])?T[1]:T[1].toUpperCase()},CHILD:function(S){if(S[1]=="nth"){var T=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(S[2]=="even"&&"2n"||S[2]=="odd"&&"2n+1"||!/\D/.test(S[2])&&"0n+"+S[2]||S[2]);S[2]=(T[1]+(T[2]||1))-0;S[3]=T[3]-0}S[0]="done"+(K++);return S},ATTR:function(T){var S=T[1].replace(/\\/g,"");if(H.attrMap[S]){T[1]=H.attrMap[S]}if(T[2]==="~="){T[4]=" "+T[4]+" "}return T},PSEUDO:function(W,T,U,S,X){if(W[1]==="not"){if(W[3].match(Q).length>1){W[3]=F(W[3],null,null,T)}else{var V=F.filter(W[3],T,U,true^X);if(!U){S.push.apply(S,V)}return false}}else{if(H.match.POS.test(W[0])){return true}}return W},POS:function(S){S.unshift(true);return S}},filters:{enabled:function(S){return S.disabled===false&&S.type!=="hidden"},disabled:function(S){return S.disabled===true},checked:function(S){return S.checked===true},selected:function(S){S.parentNode.selectedIndex;return S.selected===true},parent:function(S){return !!S.firstChild},empty:function(S){return !S.firstChild},has:function(U,T,S){return !!F(S[3],U).length},header:function(S){return/h\d/i.test(S.nodeName)},text:function(S){return"text"===S.type},radio:function(S){return"radio"===S.type},checkbox:function(S){return"checkbox"===S.type},file:function(S){return"file"===S.type},password:function(S){return"password"===S.type},submit:function(S){return"submit"===S.type},image:function(S){return"image"===S.type},reset:function(S){return"reset"===S.type},button:function(S){return"button"===S.type||S.nodeName.toUpperCase()==="BUTTON"},input:function(S){return/input|select|textarea|button/i.test(S.nodeName)}},setFilters:{first:function(T,S){return S===0},last:function(U,T,S,V){return T===V.length-1},even:function(T,S){return S%2===0},odd:function(T,S){return S%2===1},lt:function(U,T,S){return TS[3]-0},nth:function(U,T,S){return S[3]-0==T},eq:function(U,T,S){return S[3]-0==T}},filter:{CHILD:function(S,V){var Y=V[1],Z=S.parentNode;var X=V[0];if(Z&&(!Z[X]||!S.nodeIndex)){var W=1;for(var T=Z.firstChild;T;T=T.nextSibling){if(T.nodeType==1){T.nodeIndex=W++}}Z[X]=W-1}if(Y=="first"){return S.nodeIndex==1}else{if(Y=="last"){return S.nodeIndex==Z[X]}else{if(Y=="only"){return Z[X]==1}else{if(Y=="nth"){var ab=false,U=V[2],aa=V[3];if(U==1&&aa==0){return true}if(U==0){if(S.nodeIndex==aa){ab=true}}else{if((S.nodeIndex-aa)%U==0&&(S.nodeIndex-aa)/U>=0){ab=true}}return ab}}}}},PSEUDO:function(Y,U,V,Z){var T=U[1],W=H.filters[T];if(W){return W(Y,V,U,Z)}else{if(T==="contains"){return(Y.textContent||Y.innerText||"").indexOf(U[3])>=0}else{if(T==="not"){var X=U[3];for(var V=0,S=X.length;V=0:V==="~="?(" "+X+" ").indexOf(T)>=0:!U[4]?S:V==="!="?X!=T:V==="^="?X.indexOf(T)===0:V==="$="?X.substr(X.length-T.length)===T:V==="|="?X===T||X.substr(0,T.length+1)===T+"-":false},POS:function(W,T,U,X){var S=T[2],V=H.setFilters[S];if(V){return V(W,U,T,X)}}}};var L=H.match.POS;for(var N in H.match){H.match[N]=RegExp(H.match[N].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(T,S){T=Array.prototype.slice.call(T);if(S){S.push.apply(S,T);return S}return T};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(M){E=function(W,V){var T=V||[];if(G.call(W)==="[object Array]"){Array.prototype.push.apply(T,W)}else{if(typeof W.length==="number"){for(var U=0,S=W.length;U";var S=document.documentElement;S.insertBefore(T,S.firstChild);if(!!document.getElementById(U)){H.find.ID=function(W,X,Y){if(typeof X.getElementById!=="undefined"&&!Y){var V=X.getElementById(W[1]);return V?V.id===W[1]||typeof V.getAttributeNode!=="undefined"&&V.getAttributeNode("id").nodeValue===W[1]?[V]:g:[]}};H.filter.ID=function(X,V){var W=typeof X.getAttributeNode!=="undefined"&&X.getAttributeNode("id");return X.nodeType===1&&W&&W.nodeValue===V}}S.removeChild(T)})();(function(){var S=document.createElement("div");S.appendChild(document.createComment(""));if(S.getElementsByTagName("*").length>0){H.find.TAG=function(T,X){var W=X.getElementsByTagName(T[1]);if(T[1]==="*"){var V=[];for(var U=0;W[U];U++){if(W[U].nodeType===1){V.push(W[U])}}W=V}return W}}S.innerHTML="";if(S.firstChild&&S.firstChild.getAttribute("href")!=="#"){H.attrHandle.href=function(T){return T.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var S=F,T=document.createElement("div");T.innerHTML="

";if(T.querySelectorAll&&T.querySelectorAll(".TEST").length===0){return}F=function(X,W,U,V){W=W||document;if(!V&&W.nodeType===9&&!P(W)){try{return E(W.querySelectorAll(X),U)}catch(Y){}}return S(X,W,U,V)};F.find=S.find;F.filter=S.filter;F.selectors=S.selectors;F.matches=S.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){H.order.splice(1,0,"CLASS");H.find.CLASS=function(S,T){return T.getElementsByClassName(S[1])}}function O(T,Z,Y,ac,aa,ab){for(var W=0,U=ac.length;W0){W=S;break}}}S=S[T]}ab[V]=W}}}var J=document.compareDocumentPosition?function(T,S){return T.compareDocumentPosition(S)&16}:function(T,S){return T!==S&&(T.contains?T.contains(S):true)};var P=function(S){return S.nodeType===9&&S.documentElement.nodeName!=="HTML"||!!S.ownerDocument&&P(S.ownerDocument)};var I=function(S,Z){var V=[],W="",X,U=Z.nodeType?[Z]:Z;while((X=H.match.PSEUDO.exec(S))){W+=X[0];S=S.replace(H.match.PSEUDO,"")}S=H.relative[S]?S+"*":S;for(var Y=0,T=U.length;Y=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}this[H].style.display=o.data(this[H],"olddisplay",K)}}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)==1){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(H,F){var E=H?"Left":"Top",G=H?"Right":"Bottom";o.fn["inner"+F]=function(){return this[F.toLowerCase()]()+j(this,"padding"+E)+j(this,"padding"+G)};o.fn["outer"+F]=function(J){return this["inner"+F]()+j(this,"border"+E+"Width")+j(this,"border"+G+"Width")+(J?j(this,"margin"+E)+j(this,"margin"+G):0)};var I=F.toLowerCase();o.fn[I]=function(J){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+F]||document.body["client"+F]:this[0]==document?Math.max(document.documentElement["client"+F],document.body["scroll"+F],document.documentElement["scroll"+F],document.body["offset"+F],document.documentElement["offset"+F]):J===g?(this.length?o.css(this[0],I):null):this.css(I,typeof J==="string"?J:J+"px")}})})(); \ No newline at end of file