/[classpath]/classpath/native/jni/qt-peer/qtmenupeer.cpp
ViewVC logotype

Diff of /classpath/native/jni/qt-peer/qtmenupeer.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2.2.1 by gnu_andrew, Tue Aug 16 16:22:39 2005 UTC revision 1.2.2.2 by gnu_andrew, Sat Sep 10 15:32:04 2005 UTC
# Line 35  this exception to your version of the li Line 35  this exception to your version of the li
35  obligated to do so.  If you do not wish to do so, delete this  obligated to do so.  If you do not wish to do so, delete this
36  exception statement from your version. */  exception statement from your version. */
37    
38    #include <assert.h>
39  #include <QMenu>  #include <QMenu>
40  #include <gnu_java_awt_peer_qt_QtMenuPeer.h>  #include <gnu_java_awt_peer_qt_QtMenuPeer.h>
41  #include "nativewrapper.h"  #include "nativewrapper.h"
# Line 81  class MenuAction : public AWTEvent { Line 82  class MenuAction : public AWTEvent {
82    QMenu *menu;    QMenu *menu;
83    QAction *action;    QAction *action;
84    int isMenu; // 0 to add a menu, 1 to add an item, 2 to add a seperator    int isMenu; // 0 to add a menu, 1 to add an item, 2 to add a seperator
85    QAction **newAction; // adding an action creates a new duplicate.    JavaVM *vm;
86      jobject menuPeer;
87      jobject itemPeer;
88    
89  public:  public:
90    MenuAction(QMenu *m, QAction *a, QAction **na, bool ismenu) : AWTEvent()    MenuAction(JNIEnv *env, jobject mp, jobject ip, QMenu *m, QAction *a,
91                 bool ismenu) : AWTEvent()
92    {    {
93      menu = m;      menu = m;
94      action = a;      action = a;
95      isMenu = ismenu;      isMenu = ismenu;
96      newAction = na;      env->GetJavaVM( &vm );
97        menuPeer = env->NewGlobalRef( mp );
98        if( ip != NULL )
99          itemPeer = env->NewGlobalRef( ip );
100        else
101          itemPeer = NULL;
102    }    }
103      
104    void runEvent()    void runEvent()
105    {    {
106        JNIEnv *env;
107        QAction *newAction; // adding an action creates a new duplicate.
108        vm->GetEnv((void **)&env, JNI_VERSION_1_1);
109    
110      switch(isMenu)      switch(isMenu)
111        {        {
112        case ADDMENU:        case ADDMENU:
113          *newAction = menu->addMenu( (QMenu *)action );          newAction = menu->addMenu( (QMenu *)action );
114          break;          break;
115        case ADDITEM:        case ADDITEM:
116          *newAction = menu->addAction(action->text());          newAction = menu->addAction(action->text());
117          (*newAction)->setSeparator(action->isSeparator());          newAction->setSeparator(action->isSeparator());
118          (*newAction)->setCheckable(action->isCheckable());          newAction->setCheckable(action->isCheckable());
119          delete action;          //      delete action;
120          break;          break;
121        case ADDSEPA:        case ADDSEPA:
122          *newAction = menu->addSeparator();          newAction = menu->addSeparator();
123          break;          break;
124        }        }
125    
126        jclass menuCls = env->GetObjectClass( menuPeer );
127        jmethodID mid = env->GetMethodID(menuCls, "add", "(J)V");
128        env->CallVoidMethod( menuPeer, mid, (jlong)newAction );
129    
130        env->DeleteGlobalRef( menuPeer );
131        if( itemPeer != NULL )
132          {
133            setNativeObject( env, itemPeer, newAction );
134            connectAction(newAction, env, itemPeer);
135            env->DeleteGlobalRef( itemPeer );
136          }
137    }    }
138  };  };
139    
# Line 158  JNIEXPORT void JNICALL Java_gnu_java_awt Line 183  JNIEXPORT void JNICALL Java_gnu_java_awt
183  /*  /*
184   * Inserts a seperator.   * Inserts a seperator.
185   */   */
186  JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_insertSeperator  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_insertSeperator
187  (JNIEnv *env, jobject obj)  (JNIEnv *env, jobject obj)
188  {  {
189    QMenu *menu = (QMenu *)getNativeObject( env, obj );    QMenu *menu = (QMenu *)getNativeObject( env, obj );
190    assert( menu );    assert( menu );
191    QAction *newAction = NULL;    mainThread->postEventToMain( new MenuAction( env, obj, NULL,
192    MenuAction *ma = new MenuAction( menu, NULL, &newAction, ADDSEPA );                                                 menu, NULL, ADDSEPA ) );
   
   while (newAction == NULL);   // Wait for new action.  
   
   return (jlong)newAction;  
193  }  }
194    
195  /*  /*
196   * Inserts an item.   * Inserts an item.
197   */   */
198  JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_insertItem  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_insertItem
199  (JNIEnv *env, jobject obj, jobject item)  (JNIEnv *env, jobject obj, jobject item)
200  {  {
201    QMenu *menu = (QMenu *)getNativeObject( env, obj );    QMenu *menu = (QMenu *)getNativeObject( env, obj );
202    assert( menu );    assert( menu );
203    
204    QAction *action = (QAction *)getNativeObject( env, item );    QAction *action = (QAction *)getNativeObject( env, item );
205    assert( action );    assert( action );
206    
207    QAction *newAction = NULL;    mainThread->postEventToMain( new MenuAction( env, obj, item, menu, action, ADDITEM ));
   MenuAction *ma = new MenuAction( menu, action, &newAction, ADDITEM );  
   mainThread->postEventToMain( ma );  
   
   while (newAction == NULL);   // Wait for new action.  
   
   connectAction(newAction, env, item);  
   setNativeObject(env, item, newAction); // update the MenuItemPeer action.  
       
   return (jlong)newAction;  
208  }  }
209    
210  /*  /*
211   * Inserts a sub-menu   * Inserts a sub-menu
212   */   */
213  JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_insertMenu  JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtMenuPeer_insertMenu
214  (JNIEnv *env, jobject obj, jobject menu)  (JNIEnv *env, jobject obj, jobject menu)
215  {  {
216    assert( menu );    assert( menu );
# Line 206  JNIEXPORT jlong JNICALL Java_gnu_java_aw Line 219  JNIEXPORT jlong JNICALL Java_gnu_java_aw
219    QMenu *insMenu = (QMenu *)getNativeObject(env, menu);    QMenu *insMenu = (QMenu *)getNativeObject(env, menu);
220    assert( insMenu );    assert( insMenu );
221    
222    QAction *newAction = NULL;    mainThread->postEventToMain( new MenuAction( env, obj, menu, thisMenu, (QAction *)insMenu, ADDMENU ) );
   MenuAction *ma = new MenuAction( thisMenu, (QAction *)insMenu,  
                                    &newAction, ADDMENU );  
   mainThread->postEventToMain( ma );  
   
   while (newAction == NULL);   // Wait for new action.  
   
   connectAction(newAction, env, menu);  
   return (jlong) newAction;  
223  }  }
224    
225  /*  /*

Legend:
Removed from v.1.2.2.1  
changed lines
  Added in v.1.2.2.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26