File indexing completed on 2024-05-05 17:57:13

0001 /*
0002     SPDX-FileCopyrightText: 2002 Shie Erlich <erlich@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2002 Rafi Yanai <yanai@users.sourceforge.net>
0004     SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef KRSELECTIONMODE_H
0010 #define KRSELECTIONMODE_H
0011 
0012 // QtCore
0013 #include <QString>
0014 
0015 /**
0016  Every selection mode inherits this class, and has to implement init().
0017  Usage:
0018   KrSelectionMode::getSelectionHandler()->whateverFunctionYouNeed()
0019 
0020  \note You can call KrSelectionMode::resetSelectionHandler() if you want the
0021  selection mode to be re-read. This is useful after a configuration where you
0022  changed the selection mode. calling resetSelectionHandler() will cause the next
0023  call to getSelectionHandler() to (possibly) select a different mode.
0024 */
0025 class KrSelectionMode
0026 {
0027 public:
0028     static KrSelectionMode *getSelectionHandlerForMode(const QString &mode);
0029     static KrSelectionMode *getSelectionHandler();
0030     static void resetSelectionHandler();
0031 
0032     virtual void init() = 0; // everyone must implement this in order to be a selection mode
0033     inline bool useQTSelection()
0034     {
0035         return _useQTSelection;
0036     }
0037     inline bool spaceMovesDown()
0038     {
0039         return _spaceMovesDown;
0040     }
0041     inline bool insertMovesDown()
0042     {
0043         return _insertMovesDown;
0044     }
0045     inline bool spaceCalculatesDiskSpace()
0046     {
0047         return _spaceCalculatesDiskSpace;
0048     }
0049     inline bool rightButtonSelects()
0050     {
0051         return _rightButtonSelects;
0052     }
0053     inline bool leftButtonSelects()
0054     {
0055         return _leftButtonSelects;
0056     }
0057     inline bool rightButtonPreservesSelection()
0058     {
0059         return _rightButtonPreservesSelection;
0060     }
0061     inline bool leftButtonPreservesSelection()
0062     {
0063         return _leftButtonPreservesSelection;
0064     }
0065     inline bool shiftCtrlRightButtonSelects()
0066     {
0067         return _shiftCtrlRightButtonSelects;
0068     }
0069     inline bool shiftCtrlLeftButtonSelects()
0070     {
0071         return _shiftCtrlLeftButtonSelects;
0072     }
0073     inline int showContextMenu()
0074     {
0075         return _showContextMenu;
0076     } // 0: no, -1: yes, n>0: after n milliseconds
0077     inline int resetSelectionItems()
0078     {
0079         return _resetSelectionItems;
0080     }
0081 
0082     virtual ~KrSelectionMode()
0083     {
0084     }
0085 
0086 protected:
0087     bool _useQTSelection, _spaceMovesDown, _insertMovesDown, _spaceCalculatesDiskSpace;
0088     bool _rightButtonSelects, _leftButtonSelects, _rightButtonPreservesSelection;
0089     bool _leftButtonPreservesSelection, _shiftCtrlRightButtonSelects, _shiftCtrlLeftButtonSelects;
0090     int _showContextMenu;
0091     int _resetSelectionItems;
0092 };
0093 
0094 class KonqSelectionMode : public KrSelectionMode
0095 {
0096 public:
0097     void init() override
0098     {
0099         _useQTSelection = true;
0100         _spaceMovesDown = false;
0101         _insertMovesDown = true;
0102         _spaceCalculatesDiskSpace = false;
0103         _rightButtonSelects = true;
0104         _leftButtonSelects = true;
0105         _rightButtonPreservesSelection = false;
0106         _leftButtonPreservesSelection = false;
0107         _shiftCtrlRightButtonSelects = false;
0108         _shiftCtrlLeftButtonSelects = false;
0109         _showContextMenu = -1;
0110         _resetSelectionItems = false;
0111     }
0112 };
0113 
0114 class OriginalSelectionMode : public KrSelectionMode
0115 {
0116 public:
0117     void init() override
0118     {
0119         _useQTSelection = false;
0120         _spaceMovesDown = true;
0121         _insertMovesDown = true;
0122         _spaceCalculatesDiskSpace = true;
0123         _rightButtonSelects = true;
0124         _leftButtonSelects = true;
0125         _rightButtonPreservesSelection = false;
0126         _leftButtonPreservesSelection = false;
0127         _shiftCtrlRightButtonSelects = false;
0128         _shiftCtrlLeftButtonSelects = false;
0129         _showContextMenu = -1;
0130         _resetSelectionItems = false;
0131     }
0132 };
0133 
0134 class TCSelectionMode : public KrSelectionMode
0135 {
0136 public:
0137     void init() override
0138     {
0139         _useQTSelection = false;
0140         _spaceMovesDown = false;
0141         _insertMovesDown = true;
0142         _spaceCalculatesDiskSpace = true;
0143         _rightButtonSelects = true;
0144         _leftButtonSelects = false;
0145         _rightButtonPreservesSelection = true;
0146         _leftButtonPreservesSelection = false;
0147         _shiftCtrlRightButtonSelects = false;
0148         _shiftCtrlLeftButtonSelects = true;
0149         _showContextMenu = 500;
0150         _resetSelectionItems = false;
0151     }
0152 };
0153 
0154 class ErgonomicSelectionMode : public KrSelectionMode
0155 {
0156 public:
0157     void init() override
0158     {
0159         _useQTSelection = false;
0160         _spaceMovesDown = false;
0161         _insertMovesDown = true;
0162         _spaceCalculatesDiskSpace = true;
0163         _rightButtonSelects = false;
0164         _leftButtonSelects = false;
0165         _rightButtonPreservesSelection = true;
0166         _leftButtonPreservesSelection = true;
0167         _shiftCtrlRightButtonSelects = false;
0168         _shiftCtrlLeftButtonSelects = true;
0169         _showContextMenu = -1;
0170         _resetSelectionItems = false;
0171     }
0172 };
0173 
0174 class UserSelectionMode : public KrSelectionMode
0175 {
0176 public:
0177     void init() override;
0178 };
0179 
0180 #endif // KR_SELECTION_MODE_H