fsadiagramcontroller.h

Go to the documentation of this file.
00001 /*  -*- c++ -*-  (for Emacs)
00002  *
00003  *  fsadiagramcontroller.h
00004  *  Digest
00005  * 
00006  *  Created by Aidan Lane on Fri Sep 30 2005.
00007  *  Copyright (c) 2005 Optimisation and Constraint Solving Group,
00008  *  Monash University. All rights reserved.
00009  *
00010  *  This program is free software; you can redistribute it and/or modify
00011  *  it under the terms of the GNU General Public License as published by
00012  *  the Free Software Foundation; either version 2 of the License, or
00013  *  (at your option) any later version.
00014  *
00015  *  This program is distributed in the hope that it will be useful,
00016  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018  *  GNU General Public License for more details.
00019  *
00020  *  You should have received a copy of the GNU General Public License
00021  *  along with this program; if not, write to the Free Software
00022  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
00023  */
00024 
00025 #ifndef FSADIAGRAMCONTROLLER_H
00026 #define FSADIAGRAMCONTROLLER_H
00027 
00028 
00029 #include <QHash>
00030 
00031 #include "guidiagramcontroller.h"
00032 
00033 
00034 class FsaDiagramController: public GuiDiagramController {
00035 
00036   Q_OBJECT
00037 
00038   friend void JNICALL Java_CiderInterface_native_symbolAdded( JNIEnv*, jclass, jint );
00039   friend void JNICALL Java_CiderInterface_native_symbolRemoved( JNIEnv*, jclass, jint );
00040   friend void JNICALL Java_FSACiderInterface_native_arrowPointsModified( JNIEnv*, jclass,
00041                                                                          jint,
00042                                                                          jdouble, jdouble,
00043                                                                          jdouble, jdouble,
00044                                                                          jdouble, jdouble );
00045   friend void JNICALL Java_FSACiderInterface_native_circleModified( JNIEnv*, jclass, jint,
00046                                                                     jdouble, jdouble, jdouble );
00047   friend void JNICALL Java_FSACiderInterface_native_textRectModified( JNIEnv*, jclass, jint,
00048                                                                       jdouble, jdouble,
00049                                                                       jdouble, jdouble );
00050 
00051 
00052 public:
00053   FsaDiagramController( JavaVM* jvm, QObject* parent = 0 );
00054   virtual ~FsaDiagramController();
00055 
00056 
00057 protected:
00058   virtual void elementAddEvent( CElementAddEvent* );
00059   virtual void elementRemoveEvent( CElementRemoveEvent* );
00060   virtual void elementAttributeAddEvent( CElementAttributeAddEvent* );
00061   virtual void elementAttributeRemoveEvent( CElementAttributeRemoveEvent* );
00062   virtual void elementAttributeChangeDataEvent( CElementAttributeChangeDataEvent* );
00063 
00064   // Called by CiderInterface (in Java)
00065   void onSymbolAdded( jint symbolId );
00066   void onSymbolRemoved( jint symbolId );
00067   void setElementAttributeData( jint symbolId,
00068                                 int attributeType,
00069                                 const QVariant& newAttributeData );
00070 
00071   bool tryCiderElementAdd( AbstractElement* element );
00072   bool tryCiderElementRemove( AbstractElement* element );
00073   bool tryCiderElementModify( AbstractElement* element,
00074                               AbstractElementAttribute* attribute,
00075                               const QVariant& newAttributeData );
00076 
00077   jmethodID tryGetMethodID( jclass cls, const char* name, const char* sig );
00078 
00079 
00080 private:
00081   void cleanup();
00082 
00083   JavaVM* m_jvm;
00084 
00085   // The following is tied to the thread - do not use them outside of it
00086   // TODO: move what doesn't need to be global back into run()
00087   // TODO: share MIDs!
00088   JNIEnv*    env;
00089   jclass     fsaCiderInterface_cls;
00090   jobject    fsaCiderInterface_gref;
00091   jmethodID  fsaCiderInterfaceConstructor_mid;
00092   jmethodID  add_mid;
00093   jmethodID  remove_mid;
00094   jmethodID  getIDNumber_mid;
00095   jmethodID  printForest_mid;
00096   jmethodID  createDrawableArrow_mid;
00097   jmethodID  createDrawableCircle_mid;
00098   jmethodID  createDrawableText_mid;
00099   jmethodID  setArrowPoints_mid;
00100   jmethodID  setCirclePos_mid;
00101   jmethodID  setCircleRadius_mid;
00102   jmethodID  setTextPos_mid;
00103   jmethodID  setTextHalfDimensions_mid;
00104 
00105   // Note: m_symbolIdToElementPtr uses the symbol ID as a key, not a ref, as each
00106   //       ref has a different jobject pointer - preventing their use in QHash.
00107   QHash<int, AbstractElement*>     m_symbolIdToElementPtr;
00108   QHash<AbstractElement*, jobject> m_elementPtrToSymbol;
00109 };
00110 
00111 
00112 #endif // ! FSADIAGRAMCONTROLLER_H

Generated on Mon Jul 30 09:46:50 2007 for Digest by  doxygen 1.5.2