On 22/06/07, Salvador Ortiz García <[EMAIL PROTECTED]> wrote:
Hi all,

This is my first post to the list, so forgive me if this was discussed
before.

I don't think it has been discussed before,  but I have noticed it
myself.  I didn't find it enough of an issue to want to deal with it.


Reflecting the Win32 API, Win32::GUI::TreeView has a GetParent method to
get the parent node (HTREEITEM) of a node, nothing related with the
GetParent common method of Win32::GUI.

The common call

  my $parentWin = $SomeControl->GetParent();

simply don't work when $SomeContros isa TreeView, so right now when I
need the parent window of the TV control we must use an ugly workaround:

  my $parentWin = Win32::GUI::GetParent($TreeView);

The following patch cures that, properly subclassing the TreeView with
only minimal semantic changes IMHO:

When called without NODE or with NODE equal zero (NULL, an invalid
HTREEITEM value anyway) now TreeView::GetParent() returns the parent
window, if any, or undef as Win32::GUI::GetParent() does.

Any other value for NODE returns the handler of the parent NODE (or NULL
at the root NODE) as documented.

So the following works as spected:

  sub TV_NodeClick {  # Click on a node, OEM form
    my($TreeView, $node) = @_;
    my $parentWin = $TreeView->GetParent();
    my $parentNode = $TreeView->GetParent($node);
    ...

Comments?

I'm a bit short of time at the moment, but I'd like to give this some
more though, as one of the things I strive for is backwards
compatibility and I'm not completely convinced.  I think the idea is
OK, but I'd like to tinker with the implementation a little ... give
me a couple of weeks to mull it over.

Many thanks for the contribution.

Regards,
Rob.


========= CUT ==========
--- Win32-GUI/TreeView.xs       2006-04-13 17:17:07.000000000 -0500
+++ /home/sog/dosdir/work/Win32-GUI-1.05_01/TreeView.xs 2007-06-22
00:59:20.000000000 -0500
@@ -583,15 +583,32 @@


###########################################################################     
# (@)METHOD:GetParent(NODE)
-    # Returns the handle of the parent node for the given B<NODE>.
-HTREEITEM
-GetParent(handle,item)
+    # Returns the handle of the parent node for the B<NODE>, if given
+    # or the parent window of the TV control if not.
+void
+GetParent(handle,item = 0)
     HWND handle
     HTREEITEM item
-CODE:
-    RETVAL = TreeView_GetParent(handle, item);
-OUTPUT:
-    RETVAL
+PREINIT:
+    HWND parentHandle;
+    SV* SvParent;
+PPCODE:
+    if (item) {
+       XSRETURN_IV((long) TreeView_GetParent(handle, item));
+    } else {
+      parentHandle = GetParent(handle);
+      if (parentHandle != NULL) {
+        SvParent = SV_SELF_FROM_WINDOW(parentHandle);
+       if (SvParent != NULL && SvROK(SvParent)) {
+          XPUSHs(SvParent);
+       } else {
+          XSRETURN_UNDEF;
+        }
+      } else {
+         XSRETURN_UNDEF;
+      }
+    }
+


###########################################################################     
# (@)METHOD:GetPrevSibling(NODE)
=========== CUT ==============


Bests Regards.

--
Salvador Ortiz.


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Perl-Win32-GUI-Hackers mailing list
Perl-Win32-GUI-Hackers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-hackers
http://perl-win32-gui.sourceforge.net/



--
Please update your address book with my new email address:
[EMAIL PROTECTED]

Reply via email to