Patch #3030 2010-07-21 11:36
codeman
Allow dragging multiple files into virtual folders.- Download
- 3030-Allow_dragging.patch (18.7 KB)
Index: src/include/cbproject.h
===================================================================
--- src/include/cbproject.h (revision 6472)
+++ src/include/cbproject.h (working copy)
@@ -558,12 +558,12 @@
*/
bool CanDragNode(wxTreeCtrl* tree, wxTreeItemId node);
- /** Notify that a specific tree node has been dragged.
+ /** Notify that an array of tree nodes has been dragged.
*
* @note Called by ProjectManager.
* @return True if succeeded, false if not.
*/
- bool NodeDragged(wxTreeCtrl* tree, wxTreeItemId from, wxTreeItemId to);
+ bool NodeDragged(wxTreeCtrl* tree, wxArrayTreeItemIds& fromArray, wxTreeItemId to);
/** Notify that a virtual folder has been added.
* @return True if it is allowed, false if not. */
Index: src/include/projectmanager.h
===================================================================
--- src/include/projectmanager.h (revision 6472)
+++ src/include/projectmanager.h (working copy)
@@ -370,6 +370,17 @@
* @return A pointer to a wxTreeCtrl window.
*/
wxTreeCtrl* GetTree(){ return m_pTree; }
+ /** Get the selection of the project manager's tree (GUI).
+ * This must be used instead of tree->GetSelection() because the tree
+ * has the wxTR_MULTIPLE style.
+ * This usually returns the first item in the selection list, but
+ * if there is a right-click popup menu then the user may have
+ * selected several items and right-clicked on one, so return the
+ * right-click item instead.
+ * of the first
+ * @return A wxTreeItemId of the selected tree item.
+ */
+ wxTreeItemId GetTreeSelection();
/** Retrieve a pointer to the project manager's panel (GUI). This panel
* is the parent of the project manager's tree obtained through GetTree().
* @return A pointer to a wxPanel window.
@@ -507,7 +518,8 @@
bool m_IsClosingProject;
bool m_IsClosingWorkspace;
wxString m_InitialDir;
- wxTreeItemId m_DraggingItem;
+ wxArrayTreeItemIds m_DraggingSelection;
+ wxTreeItemId m_RightClickItem;
bool m_isCheckingForExternallyModifiedProjects;
bool m_CanSendWorkspaceChanged;
Index: src/plugins/astyle/astyleplugin.cpp
===================================================================
--- src/plugins/astyle/astyleplugin.cpp (revision 6472)
+++ src/plugins/astyle/astyleplugin.cpp (working copy)
@@ -131,12 +131,13 @@
void AStylePlugin::OnFormatProject( wxCommandEvent& /*event*/ )
{
- wxTreeCtrl *tree = Manager::Get()->GetProjectManager()->GetTree();
+ ProjectManager* manager = Manager::Get()->GetProjectManager();
+ wxTreeCtrl *tree = manager->GetTree();
if ( !tree )
return;
- wxTreeItemId treeItem = tree->GetSelection();
+ wxTreeItemId treeItem = manager->GetTreeSelection();
if ( !treeItem.IsOk() )
return;
Index: src/plugins/compilergcc/compilergcc.cpp
===================================================================
--- src/plugins/compilergcc/compilergcc.cpp (revision 6472)
+++ src/plugins/compilergcc/compilergcc.cpp (working copy)
@@ -982,8 +982,9 @@
FileTreeData* CompilerGCC::DoSwitchProjectTemporarily()
{
- wxTreeCtrl* tree = Manager::Get()->GetProjectManager()->GetTree();
- wxTreeItemId sel = tree->GetSelection();
+ ProjectManager* manager = Manager::Get()->GetProjectManager();
+ wxTreeCtrl* tree = manager->GetTree();
+ wxTreeItemId sel = manager->GetTreeSelection();
FileTreeData* ftd = sel.IsOk() ? (FileTreeData*)tree->GetItemData(sel) : 0;
if (!ftd)
return 0L;
@@ -3200,8 +3201,9 @@
void CompilerGCC::OnProjectCompilerOptions(wxCommandEvent& /*event*/)
{
- wxTreeCtrl* tree = Manager::Get()->GetProjectManager()->GetTree();
- wxTreeItemId sel = tree->GetSelection();
+ ProjectManager* manager = Manager::Get()->GetProjectManager();
+ wxTreeCtrl* tree = manager->GetTree();
+ wxTreeItemId sel = manager->GetTreeSelection();
FileTreeData* ftd = sel.IsOk() ? (FileTreeData*)tree->GetItemData(sel) : 0;
if (ftd)
{
Index: src/sdk/cbproject.cpp
===================================================================
--- src/sdk/cbproject.cpp (revision 6472)
+++ src/sdk/cbproject.cpp (working copy)
@@ -1170,60 +1170,88 @@
return ftd->GetKind() == FileTreeData::ftdkFile || ftd->GetKind() == FileTreeData::ftdkVirtualFolder;
}
-bool cbProject::NodeDragged(wxTreeCtrl* tree, wxTreeItemId from, wxTreeItemId to)
+bool cbProject::NodeDragged(wxTreeCtrl* tree, wxArrayTreeItemIds& fromArray, wxTreeItemId to)
{
// what items did we drag?
- if (!from.IsOk() || !to.IsOk())
+ if (!to.IsOk())
return false;
- // if no data associated with it, disallow
- FileTreeData* ftd1 = (FileTreeData*)tree->GetItemData(from);
-
download for full patch...
History
I believe this introduces a major big now:
When a project is activated (in a workspace with more than one project) and I right-click on another (!) project to go to the build options of that other project I always get the build options of the activated project. This is a wrong behaviour.
Any news on this? Because the bug I mentioned in the other comment I made is blocking this patch.
Fixed this.
There usages of tree->GetSelection() still being used in compilergcc.cpp and astyleplugin.cpp.
I think Ive replaced them all with the correct manager->GetTreeSelection().
Another issue: With this patch applied I cannot move projects within a workspace using CTRL+SHIFT + {Cursor UP/DOWN}. It works for one step and then nothing happens anymore.
Ok Ive fixed that one too.
To make it simpler/more reliable, ive changed the system of getting the selected item. Ive explained it in projectmanager.h
Is the patch ok now to go into the repository?
Finally...