From: <wda...@us...> - 2008-05-06 21:25:40
|
Revision: 2485 http://oorexx.svn.sourceforge.net/oorexx/?rev=2485&view=rev Author: wdashley Date: 2008-05-06 14:25:32 -0700 (Tue, 06 May 2008) Log Message: ----------- ArtifactID: None Comment: Added the menushell class. Modified Paths: -------------- sandbox/david/4x/Makefile sandbox/david/4x/rexxgtk.cls sandbox/david/4x/rexxgtk.cpp sandbox/david/4x/rexxgtk.h Added Paths: ----------- sandbox/david/4x/grxmenushell.cpp Modified: sandbox/david/4x/Makefile =================================================================== --- sandbox/david/4x/Makefile 2008-05-06 20:48:45 UTC (rev 2484) +++ sandbox/david/4x/Makefile 2008-05-06 21:25:32 UTC (rev 2485) @@ -74,6 +74,7 @@ grxscrolledwindow.o \ grxliststore.o \ grxeventbox.o \ + grxmenushell.o \ grxmenu.o \ grxmenuitem.o @@ -168,6 +169,9 @@ grxeventbox.o: grxeventbox.cpp rexxgtk.h gcc -c $(GRXCFLAGS) grxeventbox.cpp +grxmenushell.o: grxmenushell.cpp rexxgtk.h + gcc -c $(GRXCFLAGS) grxmenushell.cpp + grxmenu.o: grxmenu.cpp rexxgtk.h gcc -c $(GRXCFLAGS) grxmenu.cpp Added: sandbox/david/4x/grxmenushell.cpp =================================================================== --- sandbox/david/4x/grxmenushell.cpp (rev 0) +++ sandbox/david/4x/grxmenushell.cpp 2008-05-06 21:25:32 UTC (rev 2485) @@ -0,0 +1,225 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2007-2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* Authors; */ +/* W. David Ashley <da...@us...> */ +/* */ +/*----------------------------------------------------------------------------*/ + + +/* include the linux headers and our local stuff */ +#include "rexxgtk.h" + + +/*----------------------------------------------------------------------------*/ +/* Global variables */ +/*----------------------------------------------------------------------------*/ + + +/*----------------------------------------------------------------------------*/ +/* Local Definitions */ +/*----------------------------------------------------------------------------*/ + + +/*============================================================================*/ +/* Private Functions */ +/*============================================================================*/ + +static void signal_func_0(GtkWidget *window, + gpointer data) +{ + cbcb *cblock = (cbcb *)data; + RexxObjectPtr rxobj = (RexxObjectPtr)g_object_get_data(G_OBJECT(window), "OORXOBJECT"); + RexxThreadContext *context; + + cblock->instance->AttachThread(&context); + context->SendMessage0(rxobj, ((cbcb *)data)->signal_name); + context->DetachThread(); + return; +} + +static void signal_func_1(GtkWidget *window, + gboolean arg1, + gpointer data) +{ + cbcb *cblock = (cbcb *)data; + RexxObjectPtr rxobj = (RexxObjectPtr)g_object_get_data(G_OBJECT(window), "OORXOBJECT"); + RexxThreadContext *context; + + cblock->instance->AttachThread(&context); + RexxObjectPtr arg1type = context->NumberToObject((wholenumber_t)arg1);; + context->SendMessage1(rxobj, ((cbcb *)data)->signal_name, arg1type); + context->DetachThread(); + return; +} + +static void signal_func_1a(GtkWidget *window, + GtkDirectionType arg1, + gpointer data) +{ + cbcb *cblock = (cbcb *)data; + RexxObjectPtr rxobj = (RexxObjectPtr)g_object_get_data(G_OBJECT(window), "OORXOBJECT"); + RexxThreadContext *context; + + cblock->instance->AttachThread(&context); + RexxObjectPtr arg1type = context->NumberToObject((wholenumber_t)arg1);; + context->SendMessage1(rxobj, ((cbcb *)data)->signal_name, arg1type); + context->DetachThread(); + return; +} + +static gboolean signal_func_1b(GtkWidget *window, + gint arg1, + gpointer data) +{ + cbcb *cblock = (cbcb *)data; + RexxObjectPtr rxobj = (RexxObjectPtr)g_object_get_data(G_OBJECT(window), "OORXOBJECT"); + RexxThreadContext *context; + RexxObjectPtr retc; + gboolean rc; + + cblock->instance->AttachThread(&context); + RexxObjectPtr arg1type = context->NumberToObject((wholenumber_t)arg1);; + retc = context->SendMessage1(rxobj, ((cbcb *)data)->signal_name, arg1type); + context->ObjectToNumber(retc, &rc); + context->DetachThread(); + return rc; +} + + +/*============================================================================*/ +/* Public Functions */ +/*============================================================================*/ + +/** + * Method: append + * + * Append a widget to a menu. + * + * @param child The child widget. + * + * @return Zero + **/ +RexxMethod1(int, // Return type + GrxMenuShellAppend, // Object_method name + RexxObjectPtr, child) // The child widget +{ + RexxPointerObject rxptr = (RexxPointerObject)context->GetObjectVariable("!POINTER"); + GtkMenuShell *myWidget = (GtkMenuShell *)context->PointerValue(rxptr); + RexxPointerObject childptr = (RexxPointerObject)context->SendMessage0(child, "POINTER"); + GtkWidget *childWidget = (GtkWidget *)context->PointerValue(childptr); + + gtk_menu_shell_append(myWidget, childWidget); + + return 0; +} + +/** + * Method: signal_connect + * + * Connect a signal to an ooRexx method. + * + * @param name The signal name + * + * @return Zero + **/ +RexxMethod2(RexxObjectPtr, // Return type + GrxMenuShellSignalConnect, // Object_method name + CSTRING, name, // Signal name + ARGLIST, args) // The whole argument list as an array +{ + RexxPointerObject rxptr = (RexxPointerObject)context->GetObjectVariable("!POINTER"); + GtkWidget *myWidget = (GtkWidget *)context->PointerValue(rxptr); + cbcb *cblock; + + if (strcmp(name, "activate_current") == 0) { + cblock = (cbcb *)malloc(sizeof(cbcb)); + cblock->instance = context->threadContext->instance; + cblock->signal_name = "signal_activate_current"; + g_signal_connect(G_OBJECT(myWidget), "activate-current", + G_CALLBACK(signal_func_1), cblock); + return context->True(); + } + else if (strcmp(name, "cancel") == 0) { + cblock = (cbcb *)malloc(sizeof(cbcb)); + cblock->instance = context->threadContext->instance; + cblock->signal_name = "signal_cancel"; + g_signal_connect(G_OBJECT(myWidget), "cancel", + G_CALLBACK(signal_func_0), cblock); + return context->True(); + } + else if (strcmp(name, "cycle_focus") == 0) { + cblock = (cbcb *)malloc(sizeof(cbcb)); + cblock->instance = context->threadContext->instance; + cblock->signal_name = "signal_cycle_focus"; + g_signal_connect(G_OBJECT(myWidget), "cycle-focus", + G_CALLBACK(signal_func_1a), cblock); + return context->True(); + } + else if (strcmp(name, "deactivate") == 0) { + cblock = (cbcb *)malloc(sizeof(cbcb)); + cblock->instance = context->threadContext->instance; + cblock->signal_name = "signal_deactivate"; + g_signal_connect(G_OBJECT(myWidget), "deactivate", + G_CALLBACK(signal_func_0), cblock); + return context->True(); + } + else if (strcmp(name, "move_current") == 0) { + cblock = (cbcb *)malloc(sizeof(cbcb)); + cblock->instance = context->threadContext->instance; + cblock->signal_name = "signal_move_current"; + g_signal_connect(G_OBJECT(myWidget), "move-current", + G_CALLBACK(signal_func_1a), cblock); + return context->True(); + } + else if (strcmp(name, "move_selected") == 0) { + cblock = (cbcb *)malloc(sizeof(cbcb)); + cblock->instance = context->threadContext->instance; + cblock->signal_name = "signal_move_selected"; + g_signal_connect(G_OBJECT(myWidget), "move-selected", + G_CALLBACK(signal_func_1), cblock); + return context->True(); + } + else if (strcmp(name, "selection_done") == 0) { + cblock = (cbcb *)malloc(sizeof(cbcb)); + cblock->instance = context->threadContext->instance; + cblock->signal_name = "signal_selection_done"; + g_signal_connect(G_OBJECT(myWidget), "selection-done", + G_CALLBACK(signal_func_0), cblock); + return context->True(); + } + return context->SendSuperMessage("signal_connect", args); +} + Property changes on: sandbox/david/4x/grxmenushell.cpp ___________________________________________________________________ Name: svn:eol-style + native Modified: sandbox/david/4x/rexxgtk.cls =================================================================== --- sandbox/david/4x/rexxgtk.cls 2008-05-06 20:48:45 UTC (rev 2484) +++ sandbox/david/4x/rexxgtk.cls 2008-05-06 21:25:32 UTC (rev 2485) @@ -1760,14 +1760,53 @@ /*============================================================================*/ +/* Class: GtkMenuShell */ +/* Note: This is strictly a base class. It should never be instantiated on */ +/* its own. You should instantiate one of its subclasses instead. */ +/*============================================================================*/ + +::class GtkMenuShell public subclass GtkContainer + +::METHOD append EXTERNAL "LIBRARY rexxgtk GrxMenuShellAppend" +::METHOD signal_connect EXTERNAL "LIBRARY rexxgtk GrxMenuShellSignalConnect" + +-- The following are the methods that can be connected to signals. By default +-- they do nothing. + +::method signal_activate_current +return + +::method signal_cancel +return + +::method signal_cycle_focus +return + +::method signal_deactivate +return + +::method signal_move_current +return + +::method signal_move_selected +return + +::method signal_selection_done +return + + +/*============================================================================*/ /* Class: GtkMenu */ /*============================================================================*/ -::class GtkMenu public subclass GtkContainer +::class GtkMenu public subclass GtkmenuShell ::METHOD init EXTERNAL "LIBRARY rexxgtk GrxMenuNew" ::METHOD signal_connect EXTERNAL "LIBRARY rexxgtk GrxMenuSignalConnect" +-- The following are the methods that can be connected to signals. By default +-- they do nothing. + ::method signal_move_scroll return @@ -1781,6 +1820,9 @@ ::METHOD init EXTERNAL "LIBRARY rexxgtk GrxMenuItemNew" ::METHOD signal_connect EXTERNAL "LIBRARY rexxgtk GrxMenuItemSignalConnect" +-- The following are the methods that can be connected to signals. By default +-- they do nothing. + ::method signal_activate return Modified: sandbox/david/4x/rexxgtk.cpp =================================================================== --- sandbox/david/4x/rexxgtk.cpp 2008-05-06 20:48:45 UTC (rev 2484) +++ sandbox/david/4x/rexxgtk.cpp 2008-05-06 21:25:32 UTC (rev 2485) @@ -675,6 +675,8 @@ REXX_METHOD(GrxMenuItemNew, GrxMenuItemNew), REXX_METHOD(GrxMenuItemSignalConnect, GrxMenuItemSignalConnect), REXX_METHOD(GrxSeparatorMenuItemNew, GrxSeparatorMenuItemNew), + REXX_METHOD(GrxMenuShellAppend, GrxMenuShellAppend), + REXX_METHOD(GrxMenuShellSignalConnect, GrxMenuShellSignalConnect), REXX_LAST_METHOD() }; Modified: sandbox/david/4x/rexxgtk.h =================================================================== --- sandbox/david/4x/rexxgtk.h 2008-05-06 20:48:45 UTC (rev 2484) +++ sandbox/david/4x/rexxgtk.h 2008-05-06 21:25:32 UTC (rev 2485) @@ -375,6 +375,8 @@ REXX_METHOD_PROTOTYPE(GrxMenuItemNew) REXX_METHOD_PROTOTYPE(GrxMenuItemSignalConnect) REXX_METHOD_PROTOTYPE(GrxSeparatorMenuItemNew) +REXX_METHOD_PROTOTYPE(GrxMenuShellAppend) +REXX_METHOD_PROTOTYPE(GrxMenuShellSignalConnect) #endif /* REXXGTK_H */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |