2021-09-05 20:37:52 +00:00
|
|
|
/*
|
|
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
|
|
*
|
2021-10-06 02:46:53 +00:00
|
|
|
* Copyright (C) 2021 KiCad Developers, see AUTHORS.TXT for contributors.
|
2021-09-05 20:37:52 +00:00
|
|
|
*
|
|
|
|
* 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, you may find one here:
|
|
|
|
* http://www.gnu.org/licenses/gpl-3.0.html
|
|
|
|
* or you may search the http://www.gnu.org website for the version 3 license,
|
|
|
|
* or you may write to the Free Software Foundation, Inc.,
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <tool/selection_tool.h>
|
|
|
|
|
|
|
|
|
|
|
|
SELECTION_TOOL::SELECTION_TOOL() :
|
|
|
|
m_additive( false ),
|
|
|
|
m_subtractive( false ),
|
|
|
|
m_exclusive_or( false ),
|
|
|
|
m_multiple( false ),
|
|
|
|
m_skip_heuristics( false ),
|
|
|
|
m_highlight_modifier( false ),
|
|
|
|
m_drag_additive( false ),
|
2021-09-07 17:40:08 +00:00
|
|
|
m_drag_subtractive( false ),
|
|
|
|
m_canceledMenu( false )
|
2021-09-05 20:37:52 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void SELECTION_TOOL::setModifiersState( bool aShiftState, bool aCtrlState, bool aAltState )
|
|
|
|
{
|
2021-09-05 22:15:43 +00:00
|
|
|
// Set the configuration of m_additive, m_subtractive, m_exclusive_or from the state of
|
|
|
|
// modifier keys SHIFT and CTRL
|
2021-09-05 20:37:52 +00:00
|
|
|
|
|
|
|
// ALT key cannot be used on MSW because of a conflict with the system menu
|
|
|
|
|
2021-09-06 02:34:42 +00:00
|
|
|
m_subtractive = aCtrlState && aShiftState;
|
|
|
|
m_additive = !aCtrlState && aShiftState;
|
2021-09-05 20:37:52 +00:00
|
|
|
m_exclusive_or = false;
|
2021-09-06 02:34:42 +00:00
|
|
|
m_highlight_modifier = aCtrlState && !aShiftState;
|
2021-09-05 20:37:52 +00:00
|
|
|
|
2021-09-05 22:15:43 +00:00
|
|
|
// Drag is more forgiving and allows either Ctrl+Drag or Shift+Drag to add to the selection
|
2021-09-06 02:34:42 +00:00
|
|
|
// Note, however that we cannot provide disambiguation at the same time as the box selection
|
|
|
|
m_drag_additive = ( aCtrlState || aShiftState ) && !aAltState;
|
2021-09-05 20:37:52 +00:00
|
|
|
m_drag_subtractive = aCtrlState && aShiftState && !aAltState;
|
2021-09-06 02:32:07 +00:00
|
|
|
|
|
|
|
// While the ALT key has some conflicts under MSW (and some flavors of Linux WMs), it remains
|
2021-09-25 16:04:22 +00:00
|
|
|
// useful for users who only use tap-click rather than holding the button. We disable it for
|
|
|
|
// windows because it flashes the disambiguation menu without showing data
|
|
|
|
#ifndef __WINDOWS__
|
2021-09-06 02:32:07 +00:00
|
|
|
m_skip_heuristics = aAltState;
|
2021-09-25 16:04:22 +00:00
|
|
|
#else
|
|
|
|
m_skip_heuristics = false;
|
|
|
|
#endif
|
|
|
|
|
2021-09-05 20:37:52 +00:00
|
|
|
}
|