Hi,

Find attached patch for making arrow keys usable on non-windows(Ubuntu in my 
case) platform.
this patch will work in this way
 ---> key :- If item has no child , not effect.If it has children, and is not 
expanded. This key will expand it. If it has children and already expanded, go 
to first child.

<--- key :- If item has no child, go to parent item. If it has children and 
expanded , collapse it. If it has children and already collapsed, go to parent 
item.

Remaining two keys are working as they should be. 

regards,
Prasad Somwanshi
diff --git a/pgadmin/ctl/ctlTree.cpp b/pgadmin/ctl/ctlTree.cpp
index 510d58f..dca6c5f 100644
--- a/pgadmin/ctl/ctlTree.cpp
+++ b/pgadmin/ctl/ctlTree.cpp
@@ -2,7 +2,7 @@
 //
 // pgAdmin III - PostgreSQL Tools
 //
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
 // This software is released under the PostgreSQL Licence
 //
 // ctlTree.cpp - wxTreeCtrl containing pgObjects
@@ -316,7 +316,53 @@ pgCollection *ctlTree::FindCollection(pgaFactory &factory, wxTreeItemId parent)
 		return 0;
 	return collection;
 }
-
+void ctlTree::NavigateTree(int keyCode)
+{
+        switch(keyCode)
+        {
+		case WXK_LEFT:
+		{
+			//If tree item has children and is expanded, collapse it, otherwise select it's parent if has one
+			wxTreeItemId currItem = GetSelection();
+			if (ItemHasChildren(currItem) && IsExpanded(currItem))
+			{
+				Collapse(currItem);
+			}
+			else
+			{
+				wxTreeItemId parent = GetItemParent( currItem)  ;
+				if (parent.IsOk())
+				{
+					SelectItem(currItem,false);
+					SelectItem(parent,true);
+				}
+			}
+		}
+		break;
+		case WXK_RIGHT:
+		{
+			//If tree item do not have any children ignore it,
+			//otherwise  expand it if not expanded, and select first child if already expanded
+			wxTreeItemId currItem = GetSelection();
+			if(ItemHasChildren(currItem))
+			{
+				if (!IsExpanded(currItem))
+				{
+					Expand(currItem);
+				}
+				else
+				{
+					wxCookieType cookie;
+					wxTreeItemId firstChild = GetFirstChild(currItem,cookie);
+					SelectItem(firstChild,true);
+				}
+			}
+		}
+		break;
+		default:
+		        wxASSERT_MSG(false,_("Currently handles only right and left arrow key, other keys are working"));
+        }
+}
 
 //////////////////////
 
diff --git a/pgadmin/frm/events.cpp b/pgadmin/frm/events.cpp
index 556fc73..b4f7308 100644
--- a/pgadmin/frm/events.cpp
+++ b/pgadmin/frm/events.cpp
@@ -2,7 +2,7 @@
 //
 // pgAdmin III - PostgreSQL Tools
 //
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
 // This software is released under the PostgreSQL Licence
 //
 // events.cpp - Event handlers for frmMain
@@ -130,7 +130,8 @@ void frmMain::OnSize(wxSizeEvent &event)
 // to reset m_metaDown
 void frmMain::OnTreeKeyDown(wxTreeEvent &event)
 {
-	switch (event.GetKeyCode())
+	int keyCode = event.GetKeyCode();
+	switch (keyCode)
 	{
 		case WXK_F1:
 			OnHelp(event);
@@ -141,6 +142,11 @@ void frmMain::OnTreeKeyDown(wxTreeEvent &event)
 		case WXK_DELETE:
 			OnDelete(event);
 			break;
+		//Is tempting to write all cases(this handler) in tree control itself
+		case WXK_LEFT:
+		case WXK_RIGHT:
+		        browser->NavigateTree(keyCode);
+		  break;
 		default:
 			event.Skip();
 			break;
diff --git a/pgadmin/include/ctl/ctlTree.h b/pgadmin/include/ctl/ctlTree.h
index 54a1424..1f76027 100644
--- a/pgadmin/include/ctl/ctlTree.h
+++ b/pgadmin/include/ctl/ctlTree.h
@@ -2,7 +2,7 @@
 //
 // pgAdmin III - PostgreSQL Tools
 //
-// Copyright (C) 2002 - 2014, The pgAdmin Development Team
+// Copyright (C) 2002 - 2015, The pgAdmin Development Team
 // This software is released under the PostgreSQL Licence
 //
 // ctlTree.h - wxTreeCtrl containing pgObjects
@@ -40,6 +40,7 @@ public:
 	pgObject *FindObject(pgaFactory &factory, wxTreeItemId parent);
 	pgCollection *FindCollection(pgaFactory &factory, wxTreeItemId parent);
 	wxTreeItemId FindItem(const wxTreeItemId &item, const wxString &str);
+	void NavigateTree(int keyCode);
 	virtual ~ctlTree();
 
 	DECLARE_EVENT_TABLE()
-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to