Reworked how we create items for toolbar.
authorMohammed Sameer <msameer@foolab.org>
Sat, 3 Aug 2013 20:39:45 +0000 (23:39 +0300)
committerMohammed Sameer <msameer@foolab.org>
Sat, 3 Aug 2013 20:39:45 +0000 (23:39 +0300)
We use a Repeater to construct the items needed on demand.

qml/FlashButton.qml
qml/ImageColorFilterButton.qml
qml/ImageSceneButton.qml
qml/ImageWhiteBalanceButton.qml
qml/ToolsModelItem.qml [new file with mode: 0644]
qml/VideoColorFilterButton.qml
qml/VideoSceneButton.qml
qml/VideoWhiteBalanceButton.qml
qml/qml.qrc

index 8c504ec..e5f6b09 100644 (file)
@@ -29,6 +29,13 @@ CameraToolIcon {
 
     iconId: Data.flashIcon(settings.imageFlashMode)
 
+    property list<ToolsModelItem> toolsModel: [
+        ToolsModelItem {icon: cameraTheme.flashAutoIconId; value: Flash.Auto },
+        ToolsModelItem {icon: cameraTheme.flashOnIconId; value: Flash.On },
+        ToolsModelItem {icon: cameraTheme.flashOffIconId; value: Flash.Off },
+        ToolsModelItem {icon: cameraTheme.flashRedEyeIconId; value: Flash.RedEye }
+    ]
+
     property CameraToolBarTools tools: CameraToolBarTools {
         CameraLabel {
             height: parent ? parent.height : 0
@@ -36,28 +43,14 @@ CameraToolIcon {
             verticalAlignment: Text.AlignVCenter
         }
 
-        CheckButton {
-            iconId: Data.flashIcon(Flash.Auto)
-            onClicked: settings.imageFlashMode = Flash.Auto
-            checked: settings.imageFlashMode == Flash.Auto
-        }
-
-        CheckButton {
-            iconId: Data.flashIcon(Flash.On)
-            onClicked: settings.imageFlashMode = Flash.On
-            checked: settings.imageFlashMode == Flash.On
-        }
-
-        CheckButton {
-            iconId: Data.flashIcon(Flash.Off)
-            onClicked: settings.imageFlashMode = Flash.Off
-            checked: settings.imageFlashMode == Flash.Off
-        }
+        Repeater {
+            model: parent != null && parent.visible ? toolsModel : undefined
 
-        CheckButton {
-            iconId: Data.flashIcon(Flash.RedEye)
-            onClicked: settings.imageFlashMode = Flash.RedEye
-            checked: settings.imageFlashMode == Flash.RedEye
+            delegate: CheckButton {
+                iconId: icon
+                onClicked: settings.imageFlashMode = value
+                checked: settings.imageFlashMode == value
+            }
         }
     }
 }
index 1013319..e59d793 100644 (file)
@@ -26,8 +26,18 @@ import "data.js" as Data
 
 CameraToolIcon {
     id: button
+
     iconId: Data.cfIcon(settings.imageColorFilter)
 
+    property list<ToolsModelItem> toolsModel: [
+        ToolsModelItem {icon: cameraTheme.colorFilterNormalIconId; value: ColorTone.Normal },
+        ToolsModelItem {icon: cameraTheme.colorFilterGrayScaleIconId; value: ColorTone.GrayScale },
+        ToolsModelItem {icon: cameraTheme.colorFilterSepiaIconId; value: ColorTone.Sepia },
+        ToolsModelItem {icon: cameraTheme.colorFilterVividIconId; value: ColorTone.Vivid },
+        ToolsModelItem {icon: cameraTheme.colorFilterNegativeIconId; value: ColorTone.Negative },
+        ToolsModelItem {icon: cameraTheme.colorFilterSolarizeIconId; value: ColorTone.Solarize }
+    ]
+
     property CameraToolBarTools tools: CameraToolBarTools {
         CameraLabel {
             height: parent ? parent.height : 0
@@ -35,40 +45,14 @@ CameraToolIcon {
             verticalAlignment: Text.AlignVCenter
         }
 
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Normal)
-            onClicked: settings.imageColorFilter = ColorTone.Normal
-            checked: settings.imageColorFilter == ColorTone.Normal
-        }
-
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.GrayScale)
-            onClicked: settings.imageColorFilter = ColorTone.GrayScale
-            checked: settings.imageColorFilter == ColorTone.GrayScale
-        }
-
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Sepia)
-            onClicked: settings.imageColorFilter = ColorTone.Sepia
-            checked: settings.imageColorFilter == ColorTone.Sepia
-        }
-
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Vivid)
-            onClicked: settings.imageColorFilter = ColorTone.Vivid
-            checked: settings.imageColorFilter == ColorTone.Vivid
-        }
-
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Negative)
-            onClicked: settings.imageColorFilter = ColorTone.Negative
-            checked: settings.imageColorFilter == ColorTone.Negative
-        }
+        Repeater {
+            model: parent != null && parent.visible ? toolsModel : undefined
 
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Solarize)
-            onClicked: settings.imageColorFilter = ColorTone.Solarize
-            checked: settings.imageColorFilter == ColorTone.Solarize
+            delegate: CheckButton {
+                iconId: icon
+                onClicked: settings.imageColorFilter = value
+                checked: settings.imageColorFilter == value
+            }
         }
     }
 }
index 92c41fc..0bb15c4 100644 (file)
@@ -28,6 +28,14 @@ CameraToolIcon {
     id: button
 
     iconId: Data.ismIcon(settings.imageSceneMode)
+    property list<ToolsModelItem> toolsModel: [
+        ToolsModelItem {icon: cameraTheme.imageSceneModeAutoIconId; value: Scene.Auto},
+        ToolsModelItem {icon: cameraTheme.imageSceneModeCloseupIconId; value: Scene.Closeup},
+        ToolsModelItem {icon: cameraTheme.imageSceneModeLandscapeIconId; value: Scene.Landscape},
+        ToolsModelItem {icon: cameraTheme.imageSceneModePortraitIconId; value: Scene.Portrait},
+        ToolsModelItem {icon: cameraTheme.imageSceneModeNightIconId; value: Scene.Night},
+        ToolsModelItem {icon: cameraTheme.imageSceneModeSportIconId; value: Scene.Sport}
+    ]
 
     property CameraToolBarTools tools: CameraToolBarTools {
         CameraLabel {
@@ -36,40 +44,14 @@ CameraToolIcon {
             verticalAlignment: Text.AlignVCenter
         }
 
-        CheckButton {
-            iconId: Data.ismIcon(Scene.Auto)
-            onClicked: settings.imageSceneMode = Scene.Auto
-            checked: settings.imageSceneMode == Scene.Auto
-        }
-
-        CheckButton {
-            iconId: Data.ismIcon(Scene.Closeup)
-            onClicked: settings.imageSceneMode = Scene.Closeup
-            checked: settings.imageSceneMode == Scene.Closeup
-        }
-
-        CheckButton {
-            iconId: Data.ismIcon(Scene.Landscape)
-            onClicked: settings.imageSceneMode = Scene.Landscape
-            checked: settings.imageSceneMode == Scene.Landscape
-        }
-
-        CheckButton {
-            iconId: Data.ismIcon(Scene.Portrait)
-            onClicked: settings.imageSceneMode = Scene.Portrait
-            checked: settings.imageSceneMode == Scene.Portrait
-        }
-
-        CheckButton {
-            iconId: Data.ismIcon(Scene.Night)
-            onClicked: settings.imageSceneMode = Scene.Night
-            checked: settings.imageSceneMode == Scene.Night
-        }
+        Repeater {
+            model: parent != null && parent.visible ? toolsModel : undefined
 
-        CheckButton {
-            iconId: Data.ismIcon(Scene.Sport)
-            onClicked: settings.imageSceneMode = Scene.Sport
-            checked: settings.imageSceneMode == Scene.Sport
+            delegate: CheckButton {
+                iconId: icon
+                onClicked: settings.imageSceneMode = value
+                checked: settings.imageSceneMode == value
+            }
         }
     }
 }
index 8c98279..cd6c29c 100644 (file)
@@ -29,6 +29,14 @@ CameraToolIcon {
 
     iconId: Data.wbIcon(settings.imageWhiteBalance)
 
+    property list<ToolsModelItem> toolsModel: [
+        ToolsModelItem {icon: cameraTheme.whiteBalanceAutoIconId; value: WhiteBalance.Auto },
+        ToolsModelItem {icon: cameraTheme.whiteBalanceSunsetIconId; value: WhiteBalance.Sunset },
+        ToolsModelItem {icon: cameraTheme.whiteBalanceCloudyIconId; value: WhiteBalance.Cloudy },
+        ToolsModelItem {icon: cameraTheme.whiteBalanceFlourescentIconId; value: WhiteBalance.Flourescent },
+        ToolsModelItem {icon: cameraTheme.whiteBalanceTungstenIconId; value: WhiteBalance.Tungsten }
+    ]
+
     property CameraToolBarTools tools: CameraToolBarTools {
         CameraLabel {
             height: parent ? parent.height : 0
@@ -36,34 +44,14 @@ CameraToolIcon {
             verticalAlignment: Text.AlignVCenter
         }
 
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Auto)
-            onClicked: settings.imageWhiteBalance = WhiteBalance.Auto
-            checked: settings.imageWhiteBalance == WhiteBalance.Auto
-        }
-
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Sunset)
-            onClicked: settings.imageWhiteBalance = WhiteBalance.Sunset
-            checked: settings.imageWhiteBalance == WhiteBalance.Sunset
-        }
-
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Cloudy)
-            onClicked: settings.imageWhiteBalance = WhiteBalance.Cloudy
-            checked: settings.imageWhiteBalance == WhiteBalance.Cloudy
-        }
-
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Flourescent)
-            onClicked: settings.imageWhiteBalance = WhiteBalance.Flourescent
-            checked: settings.imageWhiteBalance == WhiteBalance.Flourescent
-        }
+        Repeater {
+            model: parent != null && parent.visible ? toolsModel : undefined
 
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Tungsten)
-            onClicked: settings.imageWhiteBalance = WhiteBalance.Tungsten
-            checked: settings.imageWhiteBalance == WhiteBalance.Tungsten
+            delegate: CheckButton {
+                iconId: icon
+                onClicked: settings.imageWhiteBalance = value
+                checked: settings.imageWhiteBalance == value
+            }
         }
     }
 }
diff --git a/qml/ToolsModelItem.qml b/qml/ToolsModelItem.qml
new file mode 100644 (file)
index 0000000..c41d846
--- /dev/null
@@ -0,0 +1,29 @@
+// -*- qml -*-
+
+/*!
+ * This file is part of CameraPlus.
+ *
+ * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+import QtQuick 2.0
+
+QtObject {
+    property string icon
+    property int value
+    property bool enabled: true
+}
index 284caaa..9f4c2d7 100644 (file)
@@ -29,6 +29,15 @@ CameraToolIcon {
 
     iconId: Data.cfIcon(settings.videoColorFilter)
 
+    property list<ToolsModelItem> toolsModel: [
+        ToolsModelItem {icon: cameraTheme.colorFilterNormalIconId; value: ColorTone.Normal },
+        ToolsModelItem {icon: cameraTheme.colorFilterGrayScaleIconId; value: ColorTone.GrayScale },
+        ToolsModelItem {icon: cameraTheme.colorFilterSepiaIconId; value: ColorTone.Sepia },
+        ToolsModelItem {icon: cameraTheme.colorFilterVividIconId; value: ColorTone.Vivid },
+        ToolsModelItem {icon: cameraTheme.colorFilterNegativeIconId; value: ColorTone.Negative },
+        ToolsModelItem {icon: cameraTheme.colorFilterSolarizeIconId; value: ColorTone.Solarize }
+    ]
+
     property CameraToolBarTools tools: CameraToolBarTools {
         CameraLabel {
             height: parent ? parent.height : 0
@@ -36,40 +45,14 @@ CameraToolIcon {
             verticalAlignment: Text.AlignVCenter
         }
 
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Normal)
-            onClicked: settings.videoColorFilter = ColorTone.Normal
-            checked: settings.videoColorFilter == ColorTone.Normal
-        }
-
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.GrayScale)
-            onClicked: settings.videoColorFilter = ColorTone.GrayScale
-            checked: settings.videoColorFilter == ColorTone.GrayScale
-        }
-
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Sepia)
-            onClicked: settings.videoColorFilter = ColorTone.Sepia
-            checked: settings.videoColorFilter == ColorTone.Sepia
-        }
-
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Vivid)
-            onClicked: settings.videoColorFilter = ColorTone.Vivid
-            checked: settings.videoColorFilter == ColorTone.Vivid
-        }
-
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Negative)
-            onClicked: settings.videoColorFilter = ColorTone.Negative
-            checked: settings.videoColorFilter == ColorTone.Negative
-        }
+        Repeater {
+            model: parent != null && parent.visible ? toolsModel : undefined
 
-        CheckButton {
-            iconId: Data.cfIcon(ColorTone.Solarize)
-            onClicked: settings.videoColorFilter = ColorTone.Solarize
-            checked: settings.videoColorFilter == ColorTone.Solarize
+            delegate: CheckButton {
+                iconId: icon
+                onClicked: settings.videoColorFilter = value
+                checked: settings.videoColorFilter == value
+            }
         }
     }
 }
index 119be51..5a217ea 100644 (file)
@@ -29,6 +29,11 @@ CameraToolIcon {
 
     iconId: Data.vsmIcon(settings.videoSceneMode)
 
+    property list<ToolsModelItem> toolsModel: [
+        ToolsModelItem {icon: cameraTheme.videoSceneModeAutoIconId; value: Scene.Auto},
+        ToolsModelItem {icon: cameraTheme.videoSceneModeNightIconId; value: Scene.Night}
+    ]
+
     property CameraToolBarTools tools: CameraToolBarTools {
         CameraLabel {
             height: parent ? parent.height : 0
@@ -36,16 +41,14 @@ CameraToolIcon {
             verticalAlignment: Text.AlignVCenter
         }
 
-        CheckButton {
-            iconId: Data.vsmIcon(Scene.Auto)
-            onClicked: settings.videoSceneMode = Scene.Auto
-            checked: settings.videoSceneMode == Scene.Auto
-        }
+        Repeater {
+            model: parent != null && parent.visible ? toolsModel : undefined
 
-        CheckButton {
-            iconId: Data.vsmIcon(Scene.Night)
-            onClicked: settings.videoSceneMode = Scene.Night
-            checked: settings.videoSceneMode == Scene.Night
+            delegate: CheckButton {
+                iconId: icon
+                onClicked: settings.videoSceneMode = value
+                checked: settings.videoSceneMode == value
+            }
         }
     }
 }
index a8003e4..7d02667 100644 (file)
@@ -29,6 +29,14 @@ CameraToolIcon {
 
     iconId: Data.wbIcon(settings.videoWhiteBalance)
 
+    property list<ToolsModelItem> toolsModel: [
+        ToolsModelItem {icon: cameraTheme.whiteBalanceAutoIconId; value: WhiteBalance.Auto },
+        ToolsModelItem {icon: cameraTheme.whiteBalanceSunsetIconId; value: WhiteBalance.Sunset },
+        ToolsModelItem {icon: cameraTheme.whiteBalanceCloudyIconId; value: WhiteBalance.Cloudy },
+        ToolsModelItem {icon: cameraTheme.whiteBalanceFlourescentIconId; value: WhiteBalance.Flourescent },
+        ToolsModelItem {icon: cameraTheme.whiteBalanceTungstenIconId; value: WhiteBalance.Tungsten }
+    ]
+
     property CameraToolBarTools tools: CameraToolBarTools {
         CameraLabel {
             height: parent ? parent.height : 0
@@ -36,34 +44,14 @@ CameraToolIcon {
             verticalAlignment: Text.AlignVCenter
         }
 
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Auto)
-            onClicked: settings.videoWhiteBalance = WhiteBalance.Auto
-            checked: settings.videoWhiteBalance == WhiteBalance.Auto
-        }
-
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Sunset)
-            onClicked: settings.videoWhiteBalance = WhiteBalance.Sunset
-            checked: settings.videoWhiteBalance == WhiteBalance.Sunset
-        }
-
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Cloudy)
-            onClicked: settings.videoWhiteBalance = WhiteBalance.Cloudy
-            checked: settings.videoWhiteBalance == WhiteBalance.Cloudy
-        }
-
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Flourescent)
-            onClicked: settings.videoWhiteBalance = WhiteBalance.Flourescent
-            checked: settings.videoWhiteBalance == WhiteBalance.Flourescent
-        }
+        Repeater {
+            model: parent != null && parent.visible ? toolsModel : undefined
 
-        CheckButton {
-            iconId: Data.wbIcon(WhiteBalance.Tungsten)
-            onClicked: settings.videoWhiteBalance = WhiteBalance.Tungsten
-            checked: settings.videoWhiteBalance == WhiteBalance.Tungsten
+            delegate: CheckButton {
+                iconId: icon
+                onClicked: settings.videoWhiteBalance = value
+                checked: settings.videoWhiteBalance == value
+            }
         }
     }
 }
index cfdb470..25d3d8f 100644 (file)
@@ -33,6 +33,7 @@
        <file>SettingsView.qml</file>
        <file>Standby.qml</file>
        <file>TextSwitch.qml</file>
+       <file>ToolsModelItem.qml</file>
        <file>VideoColorFilterButton.qml</file>
        <file>VideoEvCompButton.qml</file>
        <file>VideoMuteButton.qml</file>