From: <wda...@us...> - 2008-09-24 15:54:03
|
Revision: 3384 http://oorexx.svn.sourceforge.net/oorexx/?rev=3384&view=rev Author: wdashley Date: 2008-09-24 15:51:57 +0000 (Wed, 24 Sep 2008) Log Message: ----------- ArtifactID: None Comment: Finished classes and methods for test8-7.rex and test8-6.rex. Modified Paths: -------------- incubator/RexxGTK/4x/grxtreemodel.cpp incubator/RexxGTK/4x/grxtreeselection.cpp incubator/RexxGTK/4x/grxtreestore.cpp incubator/RexxGTK/4x/grxtreeview.cpp incubator/RexxGTK/4x/rexxgtk.cls incubator/RexxGTK/4x/rexxgtk.cpp incubator/RexxGTK/4x/rexxgtk.h incubator/RexxGTK/4x/test8-6.rex incubator/RexxGTK/4x/test8-7.rex Modified: incubator/RexxGTK/4x/grxtreemodel.cpp =================================================================== --- incubator/RexxGTK/4x/grxtreemodel.cpp 2008-09-24 13:50:40 UTC (rev 3383) +++ incubator/RexxGTK/4x/grxtreemodel.cpp 2008-09-24 15:51:57 UTC (rev 3384) @@ -268,19 +268,27 @@ * * @return Zero. **/ -RexxMethod3(int, // Return type +RexxMethod4(int, // Return type GrxTreeRowReferenceNew, // Object_method name OSELF, self, // Self RexxObjectPtr, modelobj, // Model pointer - RexxObjectPtr, pathobj) // Path pointer + RexxObjectPtr, pathobj, // Path pointer + OPTIONAL_POINTER, rxref) // self { - GtkTreeModel *model = (GtkTreeModel *)context->ObjectToCSelf(modelobj); - GtkTreePath *path = (GtkTreePath *)context->ObjectToCSelf(pathobj); + GtkTreeRowReference *ref; - GtkTreeRowReference *ref = gtk_tree_row_reference_new(model, path); + if (rxref == NULL) { + GtkTreeModel *model = (GtkTreeModel *)context->ObjectToCSelf(modelobj); + GtkTreePath *path = (GtkTreePath *)context->ObjectToCSelf(pathobj); + ref = gtk_tree_row_reference_new(model, path); - // Save ourself - context->SetObjectVariable("CSELF", context->NewPointer(ref)); + // Save ourself + context->SetObjectVariable("CSELF", context->NewPointer(ref)); + } + else { + // Save ourself + context->SetObjectVariable("CSELF", context->NewPointer(rxref)); + } return 0; } @@ -301,6 +309,22 @@ } /** + * Method: get_path + * + * Get the path from an a row reference. + * + * @return Path pointer + **/ +RexxMethod1(POINTER, // Return type + GrxTreeRowReferenceGetPath, // Object_method name + CSELF, self) // Self +{ + GtkTreePath *path = gtk_tree_row_reference_get_path((GtkTreeRowReference *)self); + + return path; +} + +/** * Method: init * * Create a tree model. @@ -352,6 +376,30 @@ } /** + * Method: get_iter + * + * Get an iterator from a path. + * + * @param path The path + * + * @return Iter pointer + **/ +RexxMethod2(POINTER, // Return type + GrxTreeModelGetIter, // Object_method name + CSELF, self, // Self + POINTER, pathptr) // The path +{ + GtkTreePath *path = (GtkTreePath *)pathptr; + GtkTreeIter iter; + + gboolean retc = gtk_tree_model_get_iter((GtkTreeModel *)self, &iter, path); + if (retc) { + return gtk_tree_iter_copy(&iter); + } + return NULL; +} + +/** * Method: get_iter_from_string * * Get an iterator from a string. @@ -474,3 +522,44 @@ return gtk_tree_model_get_path((GtkTreeModel *)self, iter); } +/** + * Method: has_parent + * + * Return boolean true if the iter has a parent. + * + * @param rxiter The iter pointer + * + * @return Path pointer + **/ +RexxMethod2(logical_t, // Return type + GrxTreeModelHasParent, // Object_method name + CSELF, self, // Self + POINTER, rxiter) // The iter +{ + GtkTreeIter *iter = (GtkTreeIter *)rxiter; + GtkTreeIter parent; + + return gtk_tree_model_iter_parent((GtkTreeModel *)self, &parent, iter); +} + +/** + * Method: get_parent + * + * Return the parent. + * + * @param rxiter The iter pointer + * + * @return Object + **/ +RexxMethod2(POINTER, // Return type + GrxTreeModelGetParent, // Object_method name + CSELF, self, // Self + POINTER, rxiter) // The iter +{ + GtkTreeIter *iter = (GtkTreeIter *)rxiter; + GtkTreeIter parent; + + gtk_tree_model_iter_parent((GtkTreeModel *)self, &parent, iter); + return gtk_tree_iter_copy(&parent); +} + Modified: incubator/RexxGTK/4x/grxtreeselection.cpp =================================================================== --- incubator/RexxGTK/4x/grxtreeselection.cpp 2008-09-24 13:50:40 UTC (rev 3383) +++ incubator/RexxGTK/4x/grxtreeselection.cpp 2008-09-24 15:51:57 UTC (rev 3384) @@ -97,24 +97,27 @@ * * @return An array **/ -RexxMethod1(RexxArrayObject, // Return type +RexxMethod3(RexxArrayObject, // Return type GrxTreeSelectionGetSelectedRows, // Object_method name - OSELF, self) // Self + OSELF, oself, // Self + CSELF, cself, // Self + RexxObjectPtr, treemodel) // The tree model { RexxArrayObject arr = context->NewArray(1); - GtkTreeModel *model; - GtkTreeRowReference *ref; + RexxObjectPtr ref; GList *list, *ptr; int i = 1; + GtkTreeModel *model = (GtkTreeModel *)context->ObjectToCSelf(treemodel); - list = gtk_tree_selection_get_selected_rows((GtkTreeSelection *)self, + list = gtk_tree_selection_get_selected_rows((GtkTreeSelection *)cself, &model); ptr = list; while (ptr != NULL) { - ref = gtk_tree_row_reference_new(model, (GtkTreePath *)ptr->data); - // TODO: fix this + GtkTreeRowReference *treeref = gtk_tree_row_reference_new(model, (GtkTreePath *)ptr->data); + ref = context->SendMessage1(oself, "create_tree_row_reference", + context->NewPointer(gtk_tree_row_reference_copy(treeref))); context->ArrayPut(arr, (RexxObjectPtr)ref, i++); - gtk_tree_row_reference_free(ref); + gtk_tree_row_reference_free(treeref); ptr = ptr->next; } g_list_foreach(list, (GFunc) gtk_tree_path_free, NULL); @@ -124,6 +127,27 @@ } /** + * Method: set_mode + * + * Set the selection mode. + * + * @param mode The mode + * + * @return Zero + **/ +RexxMethod2(int, // Return type + GrxTreeSelectionSetMode, // Object_method name + CSELF, cself, // Self + int, mode) // The mode +{ + + gtk_tree_selection_set_mode((GtkTreeSelection *)cself, + (GtkSelectionMode)mode); + + return 0; +} + +/** * Method: signal_connect * * Connect a signal to an ooRexx method. Modified: incubator/RexxGTK/4x/grxtreestore.cpp =================================================================== --- incubator/RexxGTK/4x/grxtreestore.cpp 2008-09-24 13:50:40 UTC (rev 3383) +++ incubator/RexxGTK/4x/grxtreestore.cpp 2008-09-24 15:51:57 UTC (rev 3384) @@ -197,3 +197,20 @@ return 0; } +/** + * Method: remove + * + * Remove a row + * + * @param args The object iter + * + * @return Row iterator valid flag + **/ +RexxMethod2(logical_t, // Return type + GrxTreeStoreRemove, // Object_method name + CSELF, self, // GTK self + POINTER, iter) // Parent object +{ + return gtk_tree_store_remove(GTK_TREE_STORE(self), (GtkTreeIter *)iter); +} + Modified: incubator/RexxGTK/4x/grxtreeview.cpp =================================================================== --- incubator/RexxGTK/4x/grxtreeview.cpp 2008-09-24 13:50:40 UTC (rev 3383) +++ incubator/RexxGTK/4x/grxtreeview.cpp 2008-09-24 15:51:57 UTC (rev 3384) @@ -325,6 +325,25 @@ } /** + * Method: get_selection + * + * Get the selection for the tree. + * + * @return Treeselectionh object + **/ +RexxMethod2(RexxObjectPtr, // Return type + GrxTreeViewGetSelection, // Object_method name + CSELF, cself, // GTK self + OSELF, oself) // GTK self +{ + GtkTreeSelection *sel = (GtkTreeSelection *)gtk_tree_view_get_selection(GTK_TREE_VIEW(cself)); + + // Create the Rexx object + return context->SendMessage1(oself, "create_tree_selection", + context->NewPointer((RexxPointerObject)sel)); +} + +/** * Method: expand_all * * Expand all levels of the tree. Modified: incubator/RexxGTK/4x/rexxgtk.cls =================================================================== --- incubator/RexxGTK/4x/rexxgtk.cls 2008-09-24 13:50:40 UTC (rev 3383) +++ incubator/RexxGTK/4x/rexxgtk.cls 2008-09-24 15:51:57 UTC (rev 3384) @@ -312,6 +312,11 @@ ::constant GTK_CALENDAR_SHOW_WEEK_NUMBERS 8 ::constant GTK_CALENDAR_WEEK_START_MONDAY 16 ::constant GTK_CALENDAR_SHOW_DETAILS 32 + -- GtkSelectionMode +::constant GTK_SELECTION_NONE 0 +::constant GTK_SELECTION_SINGLE 1 +::constant GTK_SELECTION_BROWSE 2 +::constant GTK_SELECTION_MULTIPLE 3 -- Pango scale factors ::constant PANGO_SCALE_XX_SMALL 0.5787037037037 ::constant PANGO_SCALE_X_SMALL 0.6444444444444 @@ -2904,6 +2909,7 @@ ::METHOD set_model EXTERNAL "LIBRARY rexxgtk GrxTreeViewSetModel" ::METHOD 'model=' EXTERNAL "LIBRARY rexxgtk GrxTreeViewSetModel" ::METHOD get_model EXTERNAL "LIBRARY rexxgtk GrxTreeViewGetModel" +::METHOD get_selection EXTERNAL "LIBRARY rexxgtk GrxTreeViewGetSelection" ::METHOD model EXTERNAL "LIBRARY rexxgtk GrxTreeViewGetModel" ::METHOD expand_all EXTERNAL "LIBRARY rexxgtk GrxTreeViewExpandAll" ::METHOD signal_connect EXTERNAL "LIBRARY rexxgtk GrxTreeViewSignalConnect" @@ -2912,6 +2918,10 @@ use strict arg ptr return .GtkTreeModel~new(ptr) +::method create_tree_selection private +use strict arg ptr +return .GtkTreeSelection~new(ptr) + -- The following are the methods that can be connected to signals. By default -- they do nothing. @@ -2965,6 +2975,17 @@ /*============================================================================*/ +/* Class: GtkTreeRowReference */ +/*============================================================================*/ + +::class GtkTreeRowReference public + +::METHOD init EXTERNAL "LIBRARY rexxgtk GrxTreeRowReferenceNew" +::METHOD valid EXTERNAL "LIBRARY rexxgtk GrxTreeRowReferenceValid" +::METHOD get_path EXTERNAL "LIBRARY rexxgtk GrxTreeRowReferenceGetPath" + + +/*============================================================================*/ /* Class: GtkTreeViewColumn */ /*============================================================================*/ @@ -3006,6 +3027,7 @@ ::METHOD init EXTERNAL "LIBRARY rexxgtk GrxTreeStoreNew" ::METHOD append EXTERNAL "LIBRARY rexxgtk GrxTreeStoreAppend" ::METHOD set_value EXTERNAL "LIBRARY rexxgtk GrxTreeStoreSetValue" +::METHOD remove EXTERNAL "LIBRARY rexxgtk GrxTreeStoreRemove" /*============================================================================*/ @@ -3016,8 +3038,14 @@ ::METHOD init EXTERNAL "LIBRARY rexxgtk GrxTreeSelectionNewFromPtr" ::METHOD get_selected_rows EXTERNAL "LIBRARY rexxgtk GrxTreeSelectionGetSelectedRows" +::METHOD set_mode EXTERNAL "LIBRARY rexxgtk GrxTreeSelectionSetMode" +::METHOD 'mode=' EXTERNAL "LIBRARY rexxgtk GrxTreeSelectionSetMode" ::METHOD signal_connect EXTERNAL "LIBRARY rexxgtk GrxTreeSelectionSignalConnect" +::method create_tree_row_reference private +use strict arg ptr +return .GtkTreeRowReference~new(.nil, .nil, ptr) + -- The following are the methods that can be connected to signals. By default -- they do nothing. @@ -3324,20 +3352,13 @@ ::METHOD n_columns EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetNColumns" ::METHOD get_column_type EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetColumnType" ::METHOD column_type EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetColumnType" +::METHOD get_iter EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetIter" ::METHOD get_iter_from_string EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetIterFromString" ::METHOD get_value EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetValue" ::METHOD value EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetValue" ::METHOD iter_next EXTERNAL "LIBRARY rexxgtk GrxTreeModelIterNext" ::METHOD get_path EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetPath" ::METHOD path EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetPath" +::METHOD has_parent EXTERNAL "LIBRARY rexxgtk GrxTreeModelHasParent" +::METHOD get_parent EXTERNAL "LIBRARY rexxgtk GrxTreeModelGetParent" - -/*============================================================================*/ -/* Class: GtkRowReference */ -/*============================================================================*/ - -::class GtkTreeRowReference public - -::METHOD init EXTERNAL "LIBRARY rexxgtk GrxTreeRowReferenceNew" -::METHOD valid EXTERNAL "LIBRARY rexxgtk GrxTreeRowReferenceValid" - Modified: incubator/RexxGTK/4x/rexxgtk.cpp =================================================================== --- incubator/RexxGTK/4x/rexxgtk.cpp 2008-09-24 13:50:40 UTC (rev 3383) +++ incubator/RexxGTK/4x/rexxgtk.cpp 2008-09-24 15:51:57 UTC (rev 3384) @@ -800,6 +800,7 @@ REXX_METHOD(GrxTreeViewRemoveColumn, GrxTreeViewRemoveColumn), REXX_METHOD(GrxTreeViewGetModel, GrxTreeViewGetModel), REXX_METHOD(GrxTreeViewSetModel, GrxTreeViewSetModel), + REXX_METHOD(GrxTreeViewGetSelection, GrxTreeViewGetSelection), REXX_METHOD(GrxTreeViewExpandAll, GrxTreeViewExpandAll), REXX_METHOD(GrxTreeViewSignalConnect, GrxTreeViewSignalConnect), REXX_METHOD(GrxTreeViewColumnNew, GrxTreeViewColumnNew), @@ -811,6 +812,7 @@ REXX_METHOD(GrxTreeViewColumnSignalConnect, GrxTreeViewColumnSignalConnect), REXX_METHOD(GrxTreeStoreNew, GrxTreeStoreNew), REXX_METHOD(GrxTreeStoreAppend, GrxTreeStoreAppend), + REXX_METHOD(GrxTreeStoreRemove, GrxTreeStoreRemove), REXX_METHOD(GrxTreeStoreSetValue, GrxTreeStoreSetValue), REXX_METHOD(GrxTreePathNew, GrxTreePathNew), REXX_METHOD(GrxTreePathToString, GrxTreePathToString), @@ -825,15 +827,20 @@ REXX_METHOD(GrxTreePathIsDescendant, GrxTreePathIsDescendant), REXX_METHOD(GrxTreeRowReferenceNew, GrxTreeRowReferenceNew), REXX_METHOD(GrxTreeRowReferenceValid, GrxTreeRowReferenceValid), + REXX_METHOD(GrxTreeRowReferenceGetPath, GrxTreeRowReferenceGetPath), REXX_METHOD(GrxTreeModelNew, GrxTreeModelNew), REXX_METHOD(GrxTreeModelGetNColumns, GrxTreeModelGetNColumns), REXX_METHOD(GrxTreeModelGetColumnType, GrxTreeModelGetColumnType), + REXX_METHOD(GrxTreeModelGetIter, GrxTreeModelGetIter), REXX_METHOD(GrxTreeModelGetIterFromString, GrxTreeModelGetIterFromString), REXX_METHOD(GrxTreeModelGetValue, GrxTreeModelGetValue), REXX_METHOD(GrxTreeModelIterNext, GrxTreeModelIterNext), REXX_METHOD(GrxTreeModelGetPath, GrxTreeModelGetPath), + REXX_METHOD(GrxTreeModelHasParent, GrxTreeModelHasParent), + REXX_METHOD(GrxTreeModelGetParent, GrxTreeModelGetParent), REXX_METHOD(GrxTreeSelectionNewFromPtr, GrxTreeSelectionNewFromPtr), REXX_METHOD(GrxTreeSelectionGetSelectedRows, GrxTreeSelectionGetSelectedRows), + REXX_METHOD(GrxTreeSelectionSetMode, GrxTreeSelectionSetMode), REXX_METHOD(GrxTreeSelectionSignalConnect, GrxTreeSelectionSignalConnect), REXX_METHOD(GrxCalendarNew, GrxCalendarNew), REXX_METHOD(GrxCalendarSelectMonth, GrxCalendarSelectMonth), Modified: incubator/RexxGTK/4x/rexxgtk.h =================================================================== --- incubator/RexxGTK/4x/rexxgtk.h 2008-09-24 13:50:40 UTC (rev 3383) +++ incubator/RexxGTK/4x/rexxgtk.h 2008-09-24 15:51:57 UTC (rev 3384) @@ -607,6 +607,7 @@ REXX_METHOD_PROTOTYPE(GrxTreeViewRemoveColumn) REXX_METHOD_PROTOTYPE(GrxTreeViewGetModel) REXX_METHOD_PROTOTYPE(GrxTreeViewSetModel) +REXX_METHOD_PROTOTYPE(GrxTreeViewGetSelection) REXX_METHOD_PROTOTYPE(GrxTreeViewExpandAll) REXX_METHOD_PROTOTYPE(GrxTreeViewSignalConnect) REXX_METHOD_PROTOTYPE(GrxTreeViewColumnNew) @@ -618,6 +619,7 @@ REXX_METHOD_PROTOTYPE(GrxTreeViewColumnSignalConnect) REXX_METHOD_PROTOTYPE(GrxTreeStoreNew) REXX_METHOD_PROTOTYPE(GrxTreeStoreAppend) +REXX_METHOD_PROTOTYPE(GrxTreeStoreRemove) REXX_METHOD_PROTOTYPE(GrxTreeStoreSetValue) REXX_METHOD_PROTOTYPE(GrxTreePathNew) REXX_METHOD_PROTOTYPE(GrxTreePathToString) @@ -632,13 +634,17 @@ REXX_METHOD_PROTOTYPE(GrxTreePathIsDescendant) REXX_METHOD_PROTOTYPE(GrxTreeRowReferenceNew) REXX_METHOD_PROTOTYPE(GrxTreeRowReferenceValid) +REXX_METHOD_PROTOTYPE(GrxTreeRowReferenceGetPath) REXX_METHOD_PROTOTYPE(GrxTreeModelNew) REXX_METHOD_PROTOTYPE(GrxTreeModelGetNColumns) REXX_METHOD_PROTOTYPE(GrxTreeModelGetColumnType) +REXX_METHOD_PROTOTYPE(GrxTreeModelGetIter) REXX_METHOD_PROTOTYPE(GrxTreeModelGetIterFromString) REXX_METHOD_PROTOTYPE(GrxTreeModelGetValue) REXX_METHOD_PROTOTYPE(GrxTreeModelIterNext) REXX_METHOD_PROTOTYPE(GrxTreeModelGetPath) +REXX_METHOD_PROTOTYPE(GrxTreeModelHasParent) +REXX_METHOD_PROTOTYPE(GrxTreeModelGetParent) REXX_METHOD_PROTOTYPE(GrxCalendarNew) REXX_METHOD_PROTOTYPE(GrxCalendarSelectMonth) REXX_METHOD_PROTOTYPE(GrxCalendarSelectDay) @@ -651,6 +657,7 @@ REXX_METHOD_PROTOTYPE(GrxCalendarSignalConnect) REXX_METHOD_PROTOTYPE(GrxTreeSelectionNewFromPtr) REXX_METHOD_PROTOTYPE(GrxTreeSelectionGetSelectedRows) +REXX_METHOD_PROTOTYPE(GrxTreeSelectionSetMode) REXX_METHOD_PROTOTYPE(GrxTreeSelectionSignalConnect) #endif /* REXXGTK_H */ Modified: incubator/RexxGTK/4x/test8-6.rex =================================================================== --- incubator/RexxGTK/4x/test8-6.rex 2008-09-24 13:50:40 UTC (rev 3383) +++ incubator/RexxGTK/4x/test8-6.rex 2008-09-24 15:51:57 UTC (rev 3384) @@ -102,9 +102,8 @@ scrolled_win = .GtkScrolledWindow~new(.nil, .nil) scrolled_win~set_policy(.gtk~GTK_POLICY_AUTOMATIC, .gtk~GTK_POLICY_AUTOMATIC) --- TODO: fix this! --- selection = treeview~get_selection() --- selection~set_node(.gtk~GTK_SELECTION_MULTIPLE) +selection = treeview~get_selection() +selection~set_mode(.gtk~GTK_SELECTION_MULTIPLE) scrolled_win~add(treeview) scrolled_win~set_policy(.gtk~GTK_POLICY_AUTOMATIC, .gtk~GTK_POLICY_AUTOMATIC) Modified: incubator/RexxGTK/4x/test8-7.rex =================================================================== --- incubator/RexxGTK/4x/test8-7.rex 2008-09-24 13:50:40 UTC (rev 3383) +++ incubator/RexxGTK/4x/test8-7.rex 2008-09-24 15:51:57 UTC (rev 3384) @@ -102,9 +102,8 @@ scrolled_win = .GtkScrolledWindow~new(.nil, .nil) scrolled_win~set_policy(.gtk~GTK_POLICY_AUTOMATIC, .gtk~GTK_POLICY_AUTOMATIC) --- TODO: fix this! --- selection = treeview~get_selection() --- selection~set_node(.gtk~GTK_SELECTION_MULTIPLE) +selection = treeview~get_selection() +selection~set_mode(.gtk~GTK_SELECTION_MULTIPLE) scrolled_win~add(treeview) scrolled_win~set_policy(.gtk~GTK_POLICY_AUTOMATIC, .gtk~GTK_POLICY_AUTOMATIC) @@ -284,9 +283,24 @@ QUANTITY = self~user_data[6] store = self~user_data[7] - - - - +selection = treeview~get_selection() +model = treeview~get_model() +rows = selection~get_selected_rows(model) +do row over rows + -- remove each row + path = row~get_path() + iter = model~get_iter(path) + if model~has_parent(iter) then do + buy = model~get_value(iter, BUY_IT) + quant = model~get_value(iter, QUANTITY) + parent = model~get_parent(iter) + num = model~get_value(parent, QUANTITY) + if buy then do + num = num - quant + store~set_value(parent, QUANTITY, num) + end + store~remove(iter); + end + end return This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |