Skip to content

Commit

Permalink
main: allow users to "lock" the tool layout
Browse files Browse the repository at this point in the history
Add a "Lock Layout" action to the "Tools" menu.  When locked,
dockwidgets can be hidden but not moved.  This prevents accidental mouse
drags from moving the widgets.

Closes #202

Suggested-by: Stanisław Halik <sthalik@misaki.pl>
Signed-off-by: David Aguilar <davvid@gmail.com>
  • Loading branch information
davvid committed Oct 2, 2013
1 parent 5d00957 commit c6db2e7
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 5 deletions.
15 changes: 11 additions & 4 deletions cola/main/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from cola.qt import create_menu
from cola.qt import create_toolbutton
from cola.qtutils import add_action
from cola.qtutils import add_action_bool
from cola.qtutils import connect_action
from cola.qtutils import connect_action_bool
from cola.qtutils import options_icon
Expand All @@ -54,14 +55,15 @@


class MainView(MainWindow):

def __init__(self, model, parent):
MainWindow.__init__(self, parent)
# Default size; this is thrown out when save/restore is used
self.resize(987, 610)
self.model = model
self.prefs_model = prefs_model = prefs.PreferencesModel()

# Internal field used by import/export_state().
# The widget version is used by import/export_state().
# Change this whenever dockwidgets are removed.
self.widget_version = 2

Expand Down Expand Up @@ -306,6 +308,11 @@ def __init__(self, model, parent):
self.addAction(status_tree.down)
self.addAction(status_tree.process_selection)

self.lock_layout_action = add_action_bool(self,
N_('Lock Layout'), self.set_lock_layout)
self.lock_layout_action.setCheckable(True)
self.lock_layout_action.setChecked(False)

# Create the application menu
self.menubar = QtGui.QMenuBar(self)

Expand Down Expand Up @@ -398,6 +405,8 @@ def __init__(self, model, parent):
self.tools_menu.addAction(self.classicdockwidget.toggleViewAction())

self.setup_dockwidget_tools_menu()
self.tools_menu.addSeparator()
self.tools_menu.addAction(self.lock_layout_action)
self.menubar.addAction(self.tools_menu.menuAction())

# Help Menu
Expand Down Expand Up @@ -567,10 +576,8 @@ def _update_callback(self):

def apply_state(self, state):
"""Imports data for save/restore"""
# 1 is the widget version; change when widgets are added/removed
result = MainWindow.apply_state(self, state)
for widget in self.dockwidgets:
widget.titleBarWidget().update_tooltips()
self.lock_layout_action.setChecked(state.get('lock_layout', False))
return result

def setup_dockwidget_tools_menu(self):
Expand Down
26 changes: 25 additions & 1 deletion cola/widgets/standard.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from PyQt4 import QtCore
from PyQt4.QtCore import Qt
from PyQt4.QtCore import SIGNAL
from PyQt4.QtGui import QDockWidget

from cola import core
from cola import qtcompat
Expand Down Expand Up @@ -79,20 +80,43 @@ def __init__(self, QtClass):
WidgetMixin.__init__(self, QtClass)
# Dockwidget options
self.dockwidgets = []
self.lock_layout = False
qtcompat.set_common_dock_options(self)
self.widget_version = 0

def export_state(self):
"""Exports data for save/restore"""
state = WidgetMixin.export_state(self)
state['lock_layout'] = self.lock_layout
return qtutils.export_window_state(self, state, self.widget_version)

def apply_state(self, state):
WidgetMixin.apply_state(self, state)
result = qtutils.apply_window_state(self, state, self.widget_version)
self.lock_layout = state.get('lock_layout', self.lock_layout)
self.update_dockwidget_lock_state()
self.update_dockwidget_tooltips()
return result

def set_lock_layout(self, lock_layout):
self.lock_layout = lock_layout
self.update_dockwidget_lock_state()

def update_dockwidget_lock_state(self):
if self.lock_layout:
features = (QDockWidget.DockWidgetClosable |
QDockWidget.DockWidgetFloatable)
else:
features = (QDockWidget.DockWidgetClosable |
QDockWidget.DockWidgetFloatable |
QDockWidget.DockWidgetMovable)
for widget in self.dockwidgets:
widget.titleBarWidget().update_tooltips()
widget.setFeatures(features)

def update_dockwidget_tooltips(self):
for widget in self.dockwidgets:
widget.titleBarWidget().update_tooltips()
return result


class TreeMixin(object):
Expand Down
1 change: 1 addition & 0 deletions share/doc/git-cola/thanks.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ Thanks
* Rustam Safin
* Sergey Leschina
* Srinivasa Nallapati
* Stanisław Halik
* Stefan Naewe
* Steffen Prohaska
* Sven Claussner
Expand Down

0 comments on commit c6db2e7

Please sign in to comment.