Browse Source
Move wxDataViewCtrl manipulators out of dialog_choose_component.cpp
Move wxDataViewCtrl manipulators out of dialog_choose_component.cpp
Fixes: lp:1677925 * https://bugs.launchpad.net/kicad/+bug/1677925pull/3/merge
4 changed files with 188 additions and 104 deletions
-
1common/CMakeLists.txt
-
119common/wxdataviewctrl_helpers.cpp
-
105eeschema/dialogs/dialog_choose_component.cpp
-
67include/wxdataviewctrl_helpers.h
@ -0,0 +1,119 @@ |
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors. |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License as published by the |
|||
* Free Software Foundation, either version 3 of the License, or (at your |
|||
* option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, but |
|||
* WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|||
* General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License along |
|||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
#include <wx/dataview.h>
|
|||
#include <wxdataviewctrl_helpers.h>
|
|||
|
|||
wxDataViewItem GetPrevItem( wxDataViewCtrl const& aView, wxDataViewItem const& aItem ) |
|||
{ |
|||
auto prevItem = GetPrevSibling( aView, aItem ); |
|||
|
|||
if( !prevItem.IsOk() ) |
|||
{ |
|||
prevItem = aView.GetModel()->GetParent( aItem ); |
|||
} |
|||
else if( aView.IsExpanded( prevItem ) ) |
|||
{ |
|||
wxDataViewItemArray children; |
|||
aView.GetModel()->GetChildren( prevItem, children ); |
|||
prevItem = children[children.size() - 1]; |
|||
} |
|||
|
|||
return prevItem; |
|||
} |
|||
|
|||
|
|||
wxDataViewItem GetNextItem( wxDataViewCtrl const& aView, wxDataViewItem const& aItem ) |
|||
{ |
|||
wxDataViewItem nextItem; |
|||
|
|||
if( !aItem.IsOk() ) |
|||
{ |
|||
// No selection. Select the first.
|
|||
wxDataViewItemArray children; |
|||
aView.GetModel()->GetChildren( aItem, children ); |
|||
return children[0]; |
|||
} |
|||
|
|||
if( aView.IsExpanded( aItem ) ) |
|||
{ |
|||
wxDataViewItemArray children; |
|||
aView.GetModel()->GetChildren( aItem, children ); |
|||
nextItem = children[0]; |
|||
} |
|||
else |
|||
{ |
|||
// Walk up levels until we find one that has a next sibling.
|
|||
for( wxDataViewItem walk = aItem; walk.IsOk(); walk = aView.GetModel()->GetParent( walk ) ) |
|||
{ |
|||
nextItem = GetNextSibling( aView, walk ); |
|||
|
|||
if( nextItem.IsOk() ) |
|||
break; |
|||
} |
|||
} |
|||
|
|||
return nextItem; |
|||
} |
|||
|
|||
|
|||
wxDataViewItem GetPrevSibling( wxDataViewCtrl const& aView, wxDataViewItem const& aItem ) |
|||
{ |
|||
wxDataViewItemArray siblings; |
|||
wxDataViewItem invalid; |
|||
wxDataViewItem parent = aView.GetModel()->GetParent( aItem ); |
|||
|
|||
aView.GetModel()->GetChildren( parent, siblings ); |
|||
|
|||
for( size_t i = 0; i < siblings.size(); ++i ) |
|||
{ |
|||
if( siblings[i] == aItem ) |
|||
{ |
|||
if( i == 0 ) |
|||
return invalid; |
|||
else |
|||
return siblings[i - 1]; |
|||
} |
|||
} |
|||
|
|||
return invalid; |
|||
} |
|||
|
|||
|
|||
wxDataViewItem GetNextSibling( wxDataViewCtrl const& aView, wxDataViewItem const& aItem ) |
|||
{ |
|||
wxDataViewItemArray siblings; |
|||
wxDataViewItem invalid; |
|||
wxDataViewItem parent = aView.GetModel()->GetParent( aItem ); |
|||
|
|||
aView.GetModel()->GetChildren( parent, siblings ); |
|||
|
|||
for( size_t i = 0; i < siblings.size(); ++i ) |
|||
{ |
|||
if( siblings[i] == aItem ) |
|||
{ |
|||
if( i == siblings.size() - 1 ) |
|||
return invalid; |
|||
else |
|||
return siblings[i + 1]; |
|||
} |
|||
} |
|||
|
|||
return invalid; |
|||
} |
|||
@ -0,0 +1,67 @@ |
|||
/* |
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors. |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License as published by the |
|||
* Free Software Foundation, either version 3 of the License, or (at your |
|||
* option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, but |
|||
* WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|||
* General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License along |
|||
* with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
*/ |
|||
|
|||
/** |
|||
* @file |
|||
* wxDataViewCtrl helper functions. These are functions that should be methods |
|||
* of wxDataViewCtrl, but aren't. |
|||
*/ |
|||
|
|||
#ifndef WXDATAVIEWCTRL_HELPERS_H |
|||
#define WXDATAVIEWCTRL_HELPERS_H |
|||
|
|||
#include <wx/dataview.h> |
|||
|
|||
/** |
|||
* Get the previous item in list order. |
|||
* |
|||
* @param aView - a wxDataViewCtrl with valid model |
|||
* @param aItem - a valid item in the model |
|||
* @return the item before aItem, or an invalid item if aItem is at the top. |
|||
*/ |
|||
wxDataViewItem GetPrevItem( wxDataViewCtrl const& aView, wxDataViewItem const& aItem ); |
|||
|
|||
/** |
|||
* Get the next item in list order. |
|||
* |
|||
* @param aView - a wxDataViewCtrl with valid model |
|||
* @param aItem - a valid item in the model |
|||
* @return the item after aItem, or an invalid item if aItem is at the bottom. |
|||
*/ |
|||
wxDataViewItem GetNextItem( wxDataViewCtrl const& aView, wxDataViewItem const& aItem ); |
|||
|
|||
/** |
|||
* Get the previous sibling of an item. |
|||
* |
|||
* @param aView - awxDataViewCtrl with valid model |
|||
* @param aItem - a valid item in the model |
|||
* @return the sibling before aItem, or an invalid item if aItem has no siblings before it. |
|||
*/ |
|||
wxDataViewItem GetPrevSibling( wxDataViewCtrl const& aView, wxDataViewItem const& aItem ); |
|||
|
|||
/** |
|||
* Get the next sibling of an item. |
|||
* |
|||
* @param aView - awxDataViewCtrl with valid model |
|||
* @param aItem - a valid item in the model |
|||
* @return the sibling after aItem, or an invalid item if aItem has no siblings after it. |
|||
*/ |
|||
wxDataViewItem GetNextSibling( wxDataViewCtrl const& aView, wxDataViewItem const& aItem ); |
|||
|
|||
#endif // WXDATAVIEWCTRL_HELPERS_H |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue