Fixing the layout issues including gettin stacked keyboards to work
authorEd Page <eopage@byu.net>
Wed, 14 Jul 2010 02:42:14 +0000 (21:42 -0500)
committerEd Page <eopage@byu.net>
Wed, 14 Jul 2010 02:42:14 +0000 (21:42 -0500)
12 files changed:
src/ejpi_qt.py
src/libraries/qtpieboard.py
src/plugin_utils.py
src/plugins/alphabet.py
src/plugins/builtins.py
src/plugins/computer.py
src/plugins/entry.py
src/plugins/images/alphabet.png [new file with mode: 0644]
src/plugins/images/builtins.png [new file with mode: 0644]
src/plugins/images/computer.png [new file with mode: 0644]
src/plugins/images/trig.png [new file with mode: 0644]
src/plugins/trig.py

index 72c0366..ccbe6ca 100755 (executable)
@@ -153,11 +153,13 @@ class QErrorDisplay(object):
 
                self._topLevelLayout = QtGui.QHBoxLayout()
                self._topLevelLayout.addLayout(self._controlLayout)
+               self._widget = QtGui.QWidget()
+               self._widget.setLayout(self._topLevelLayout)
                self._hide_message()
 
        @property
        def toplevel(self):
-               return self._topLevelLayout
+               return self._widget
 
        def push_message(self, message):
                self._messages.append(message)
@@ -181,15 +183,11 @@ class QErrorDisplay(object):
 
        def _show_message(self, message):
                self._message.setText(message)
-               self._severityLabel.show()
-               self._message.show()
-               self._closeLabel.show()
+               self._widget.show()
 
        def _hide_message(self):
                self._message.setText("")
-               self._severityLabel.hide()
-               self._message.hide()
-               self._closeLabel.hide()
+               self._widget.hide()
 
 
 class QValueEntry(object):
@@ -265,18 +263,21 @@ class MainWindow(object):
                self._userEntryLayout.addWidget(self._userEntry.toplevel)
 
                self._controlLayout = QtGui.QVBoxLayout()
-               self._controlLayout.addLayout(self._errorDisplay.toplevel)
+               self._controlLayout.addWidget(self._errorDisplay.toplevel)
                self._controlLayout.addWidget(self._historyView.toplevel)
                self._controlLayout.addLayout(self._userEntryLayout)
 
-               self._inputLayout = QtGui.QVBoxLayout()
+               self._keyboardTabs = QtGui.QTabWidget()
 
                if maeqt.screen_orientation() == QtCore.Qt.Vertical:
-                       self._layout = QtGui.QVBoxLayout()
+                       defaultLayoutOrientation = QtGui.QBoxLayout.TopToBottom
+                       self._keyboardTabs.setTabPosition(QtGui.QTabWidget.East)
                else:
-                       self._layout = QtGui.QHBoxLayout()
+                       defaultLayoutOrientation = QtGui.QBoxLayout.LeftToRight
+                       self._keyboardTabs.setTabPosition(QtGui.QTabWidget.North)
+               self._layout = QtGui.QBoxLayout(defaultLayoutOrientation)
                self._layout.addLayout(self._controlLayout)
-               self._layout.addLayout(self._inputLayout)
+               self._layout.addWidget(self._keyboardTabs)
 
                centralWidget = QtGui.QWidget()
                centralWidget.setLayout(self._layout)
@@ -365,19 +366,18 @@ class MainWindow(object):
                self._keyboardPlugins.enable_plugin(entryKeyboardId)
                entryPlugin = self._keyboardPlugins.keyboards["Entry"].construct_keyboard()
                entryKeyboard = entryPlugin.setup(self._history, self._handler)
-               self._userEntryLayout.addLayout(entryKeyboard.toplevel)
+               self._userEntryLayout.addWidget(entryKeyboard.toplevel)
 
                # Plugins
                self.enable_plugin(self._keyboardPlugins.lookup_plugin("Builtins"))
-               #self.enable_plugin(self._keyboardPlugins.lookup_plugin("Trigonometry"))
-               #self.enable_plugin(self._keyboardPlugins.lookup_plugin("Computer"))
-               #self.enable_plugin(self._keyboardPlugins.lookup_plugin("Alphabet"))
-               for keyboardData in self._activeKeyboards:
-                       keyboardData["pluginKeyboard"].hide()
-               self._set_plugin_kb(0)
+               self.enable_plugin(self._keyboardPlugins.lookup_plugin("Trigonometry"))
+               self.enable_plugin(self._keyboardPlugins.lookup_plugin("Computer"))
+               self.enable_plugin(self._keyboardPlugins.lookup_plugin("Alphabet"))
 
                self.set_fullscreen(self._app.fullscreenAction.isChecked())
+
                self._window.show()
+               self._set_plugin_kb(0)
 
        @property
        def window(self):
@@ -415,6 +415,14 @@ class MainWindow(object):
                pluginData = self._keyboardPlugins.plugin_info(pluginId)
                pluginName = pluginData[0]
                plugin = self._keyboardPlugins.keyboards[pluginName].construct_keyboard()
+               relIcon = self._keyboardPlugins.keyboards[pluginName].icon
+               for iconPath in self._keyboardPlugins.keyboards[pluginName].iconPaths:
+                       absIconPath = os.path.join(iconPath, relIcon)
+                       if os.path.exists(absIconPath):
+                               icon = QtGui.QIcon(absIconPath)
+                               break
+               else:
+                       icon = None
                pluginKeyboard = plugin.setup(self._history, self._handler)
 
                self._activeKeyboards.append({
@@ -422,18 +430,20 @@ class MainWindow(object):
                        "plugin": plugin,
                        "pluginKeyboard": pluginKeyboard,
                })
-               self._inputLayout.addLayout(pluginKeyboard.toplevel)
+               if icon is None:
+                       self._keyboardTabs.addTab(pluginKeyboard.toplevel, pluginName)
+               else:
+                       self._keyboardTabs.addTab(pluginKeyboard.toplevel, icon, "")
 
        def _set_plugin_kb(self, pluginIndex):
                plugin = self._activeKeyboards[pluginIndex]
 
-               for keyboardData in self._activeKeyboards:
-                       if plugin["pluginName"] != keyboardData["pluginName"]:
-                               keyboardData["pluginKeyboard"].hide()
+               #for keyboardData in self._activeKeyboards:
+               #       if plugin["pluginName"] != keyboardData["pluginName"]:
+               #               keyboardData["pluginKeyboard"].hide()
 
                # @todo self._pluginButton.set_label(plugin["pluginName"])
                pluginKeyboard = plugin["pluginKeyboard"]
-               pluginKeyboard.show()
 
        def _load_history(self):
                serialized = []
index 9e2cc1e..80c43d0 100755 (executable)
@@ -52,20 +52,14 @@ class PieKeyboard(object):
 
        def __init__(self):
                self._layout = QtGui.QGridLayout()
+               self._widget = QtGui.QWidget()
+               self._widget.setLayout(self._layout)
 
                self.__cells = {}
 
        @property
        def toplevel(self):
-               return self._layout
-
-       def show(self):
-               for cell in self.__cells.itervalues():
-                       cell.show()
-
-       def hide(self):
-               for cell in self.__cells.itervalues():
-                       cell.hide()
+               return self._widget
 
        def add_pie(self, row, column, pieButton):
                assert len(pieButton) == 8
index 32908e5..f5bef68 100644 (file)
@@ -62,10 +62,11 @@ class PieKeyboardPlugin(object):
 
 class PieKeyboardPluginFactory(object):
 
-       def __init__(self, pluginName, keyboardMap, iconPaths):
+       def __init__(self, pluginName, icon, keyboardMap, iconPaths):
                self.name = pluginName
                self.map = keyboardMap
                self.commands = {}
+               self.icon = icon
                self.iconPaths = iconPaths
 
        def register_operation(self, commandName, operator):
index 359e1d6..554aa08 100644 (file)
@@ -20,6 +20,7 @@ import plugin_utils
 
 
 _NAME = "Alphabet"
+_ICON = "alphabet.png"
 _MAP = {
        "name": _NAME,
        "keys": {
@@ -78,4 +79,5 @@ _MAP = {
                },
        },
 }
-PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _MAP, [])
+_ICON_PATH = [os.path.join(os.path.dirname(__file__), "images")]
+PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _ICON, _MAP, _ICON_PATH)
index f19813f..58bd625 100644 (file)
@@ -11,6 +11,7 @@ sys.path.append("../")
 import plugin_utils
 
 _NAME = "Builtins"
+_ICON = "builtins.png"
 _MAP = {
        "name": _NAME,
        "keys": {
@@ -65,7 +66,8 @@ _MAP = {
                },
        },
 }
-PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _MAP, [])
+_ICON_PATH = [os.path.join(os.path.dirname(__file__), "images")]
+PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _ICON, _MAP, _ICON_PATH)
 
 addition = operation.generate_function(operator.add, "+", operation.Function.REP_INFIX, 2)
 subtraction = operation.generate_function(operator.sub, "-", operation.Function.REP_INFIX, 2)
index fb806a0..69876bb 100644 (file)
@@ -12,6 +12,7 @@ import plugin_utils
 
 
 _NAME = "Computer"
+_ICON = "computer.png"
 _MAP = {
        "name": _NAME,
        "keys": {
@@ -62,7 +63,8 @@ _MAP = {
                },
        },
 }
-PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _MAP, [])
+_ICON_PATH = [os.path.join(os.path.dirname(__file__), "images")]
+PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _ICON, _MAP, _ICON_PATH)
 
 hex = operation.change_base(16, "hex")
 oct = operation.change_base(8, "oct")
index 7f32ddb..1383c63 100644 (file)
@@ -8,6 +8,7 @@ import plugin_utils
 
 
 _NAME = "Entry"
+_ICON = "newline.png"
 _MAP = {
        "name": _NAME,
        "keys": {
@@ -21,4 +22,4 @@ _MAP = {
        },
 }
 _ICON_PATH = [os.path.join(os.path.dirname(__file__), "images")]
-PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _MAP, _ICON_PATH)
+PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _ICON, _MAP, _ICON_PATH)
diff --git a/src/plugins/images/alphabet.png b/src/plugins/images/alphabet.png
new file mode 100644 (file)
index 0000000..0157f27
Binary files /dev/null and b/src/plugins/images/alphabet.png differ
diff --git a/src/plugins/images/builtins.png b/src/plugins/images/builtins.png
new file mode 100644 (file)
index 0000000..3e03552
Binary files /dev/null and b/src/plugins/images/builtins.png differ
diff --git a/src/plugins/images/computer.png b/src/plugins/images/computer.png
new file mode 100644 (file)
index 0000000..86ed6dd
Binary files /dev/null and b/src/plugins/images/computer.png differ
diff --git a/src/plugins/images/trig.png b/src/plugins/images/trig.png
new file mode 100644 (file)
index 0000000..3244bca
Binary files /dev/null and b/src/plugins/images/trig.png differ
index dce5772..7c351a1 100644 (file)
@@ -1,5 +1,6 @@
 from __future__ import division
 
+import os
 import math
 import cmath
 
@@ -11,6 +12,7 @@ import plugin_utils
 
 
 _NAME = "Trigonometry"
+_ICON = "trig.png"
 _MAP = {
        "name": _NAME,
        "keys": {
@@ -61,7 +63,8 @@ _MAP = {
                },
        },
 }
-PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _MAP, [])
+_ICON_PATH = [os.path.join(os.path.dirname(__file__), "images")]
+PLUGIN = plugin_utils.PieKeyboardPluginFactory(_NAME, _ICON, _MAP, _ICON_PATH)
 
 pi = operation.Constant("pi", operation.Value(math.pi, operation.render_float_eng))
 e = operation.Constant("e", operation.Value(math.e, operation.render_float_eng))