Merge lp:~pkunal-parmar/ubuntu-calendar-app/Key_Navi into lp:ubuntu-calendar-app
- Key_Navi
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Mihir Soni |
Approved revision: | 194 |
Merged at revision: | 239 |
Proposed branch: | lp:~pkunal-parmar/ubuntu-calendar-app/Key_Navi |
Merge into: | lp:ubuntu-calendar-app |
Diff against target: |
337 lines (+152/-23) 9 files modified
DayView.qml (+2/-0) EventDetails.qml (+27/-15) MonthView.qml (+2/-0) NewEvent.qml (+4/-0) PathViewBase.qml (+24/-0) TimeLineBaseComponent.qml (+33/-3) WeekView.qml (+2/-1) YearView.qml (+33/-0) calendar.qml (+25/-4) |
To merge this branch: | bzr merge lp:~pkunal-parmar/ubuntu-calendar-app/Key_Navi |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Mihir Soni | Approve | ||
Ubuntu Phone Apps Jenkins Bot | continuous-integration | Approve | |
Review via email: mp+203201@code.launchpad.net |
Commit message
Keyboard navigation implemented
Description of the change
Keyboard navigation implemented
Tab navigation implemented, (CTRL + TAB) to switch
In Year, Day, Week, Month View -> Left/Right arrow to go to next or previous item
In Year, Day, Week, Month View -> Up/(Down| Space) to scroll up or down
In Details View - Escape to go back, CTRL + E to Edit
In Add Event - Escape to go back
- 186. By Kunal Parmar
-
Edit event using key resolved
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
Alan Pope πΊπ§π± π¦ (popey) wrote : | # |
There seems to be an odd skip in the year view. It goes January -> March then leaps to September when you press down arrow.
Also, can we add CTRL+SHIFT+TAB to go backwards to match CTRL+TAB going forwards in tabs?
- 187. By Kunal Parmar
-
YearView jump resolved and backtab implemented
- 188. By Kunal Parmar
-
Merge from trunk
Kunal Parmar (pkunal-parmar) wrote : | # |
> There seems to be an odd skip in the year view. It goes January -> March then
> leaps to September when you press down arrow.
>
> Also, can we add CTRL+SHIFT+TAB to go backwards to match CTRL+TAB going
> forwards in tabs?
This two things I addressed, please check again if you find something missing
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:188
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
ybon (yohanboniface) wrote : | # |
So, I've set up my env, and been able to test.
Every binding anounced is working for me (including Ctrl-Shift-TAB) :)
One question I can't answer myself: til wich point we want to have key bindings? For example, does Ctrl-S for save when in edit view, Ctrl-N for New from everywhere (unless edit view) make sense? Return for saving when in a textitem? Echap to close a TimePicker?
Kunal Parmar (pkunal-parmar) wrote : | # |
> So, I've set up my env, and been able to test.
> Every binding anounced is working for me (including Ctrl-Shift-TAB) :)
>
> One question I can't answer myself: til wich point we want to have key
> bindings? For example, does Ctrl-S for save when in edit view, Ctrl-N for New
> from everywhere (unless edit view) make sense? Return for saving when in a
> textitem? Echap to close a TimePicker?
In this MR I have not addressed keyboard/Mouse handling required for NewEvent.qml component,
we need to consider Tab key and shortcuts you mentioned.
We also need to make sure key and mouse is properly handled in DatePicker/
I think its better to handle it in another MR, once we have Date/Time picker available and integrated.
- 189. By Kunal Parmar
-
Merge from trunk
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:189
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 190. By Kunal Parmar
-
Merge from trunk
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:190
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 191. By Kunal Parmar
-
Merge from trunk
- 192. By Kunal Parmar
-
Merge issue resolved
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:192
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Martin Borho (martin-borho) wrote : | # |
+1
Looks okay for me.
Roman Shchekin (mrqtros) wrote : | # |
This line looks strange:
Keys.forwardTo: [yearView,
because of using "pageStack.
Kunal Parmar (pkunal-parmar) wrote : | # |
> This line looks strange:
> Keys.forwardTo:
> [yearView,
> because of using "pageStack.
I agree, that should be enought, I will change
Mihir Soni (mihirsoni) wrote : | # |
Works great , i just tested it.
Once you push last changes will make status approved for continuous integration.
Thank you.
Mihir Soni (mihirsoni) wrote : | # |
> > This line looks strange:
> > Keys.forwardTo:
> > [yearView,
> > because of using "pageStack.
>
> I agree, that should be enought, I will change
Could you please push this small change , then we can merge this MR.
- 193. By Kunal Parmar
-
Merge from Trunk
Kunal Parmar (pkunal-parmar) wrote : | # |
> > This line looks strange:
> > Keys.forwardTo:
> > [yearView,
> > because of using "pageStack.
>
> I agree, that should be enought, I will change
Somehow if keys are not forwarded to individual views then they are not getting key events.
I am refacroring the cal app and planning to load only one view at a time.
I will handle this properly there. as I need to change this code anyhow that time
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:193
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 194. By Kunal Parmar
-
merge from trunk
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:194
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Mihir Soni (mihirsoni) wrote : | # |
Looks good.
Thanks you Kunal.
Preview Diff
1 | === modified file 'DayView.qml' | |||
2 | --- DayView.qml 2014-03-26 14:39:17 +0000 | |||
3 | +++ DayView.qml 2014-04-08 08:59:31 +0000 | |||
4 | @@ -11,6 +11,8 @@ | |||
5 | 11 | property var currentDay: new Date() | 11 | property var currentDay: new Date() |
6 | 12 | property bool isCurrentPage: false | 12 | property bool isCurrentPage: false |
7 | 13 | 13 | ||
8 | 14 | Keys.forwardTo: [dayViewPath] | ||
9 | 15 | |||
10 | 14 | Column { | 16 | Column { |
11 | 15 | id: column | 17 | id: column |
12 | 16 | anchors.top: parent.top | 18 | anchors.top: parent.top |
13 | 17 | 19 | ||
14 | === modified file 'EventDetails.qml' | |||
15 | --- EventDetails.qml 2014-04-05 06:31:50 +0000 | |||
16 | +++ EventDetails.qml 2014-04-08 08:59:31 +0000 | |||
17 | @@ -95,8 +95,17 @@ | |||
18 | 95 | } | 95 | } |
19 | 96 | } | 96 | } |
20 | 97 | 97 | ||
21 | 98 | Keys.onEscapePressed: { | ||
22 | 99 | pageStack.pop(); | ||
23 | 100 | } | ||
24 | 101 | |||
25 | 102 | Keys.onPressed: { | ||
26 | 103 | if ((event.key === Qt.Key_E) && ( event.modifiers & Qt.ControlModifier)) { | ||
27 | 104 | pageStack.push(Qt.resolvedUrl("NewEvent.qml"),{"event": root.event}); | ||
28 | 105 | } | ||
29 | 106 | } | ||
30 | 107 | |||
31 | 98 | tools: ToolbarItems { | 108 | tools: ToolbarItems { |
32 | 99 | |||
33 | 100 | ToolbarButton { | 109 | ToolbarButton { |
34 | 101 | action:Action { | 110 | action:Action { |
35 | 102 | text: i18n.tr("Delete"); | 111 | text: i18n.tr("Delete"); |
36 | @@ -214,28 +223,31 @@ | |||
37 | 214 | font.bold: true | 223 | font.bold: true |
38 | 215 | } | 224 | } |
39 | 216 | //Guest Entery Model starts | 225 | //Guest Entery Model starts |
42 | 217 | ListView { | 226 | Column{ |
43 | 218 | id:contactList | 227 | id: contactList |
44 | 219 | spacing: units.gu(1) | 228 | spacing: units.gu(1) |
45 | 220 | width: parent.width | 229 | width: parent.width |
46 | 221 | height: units.gu((contactModel.count*4.5)+3) | ||
47 | 222 | clip: true | 230 | clip: true |
49 | 223 | model: ListModel { | 231 | ListModel { |
50 | 224 | id: contactModel | 232 | id: contactModel |
51 | 225 | } | 233 | } |
62 | 226 | delegate: Row{ | 234 | Repeater{ |
63 | 227 | spacing: units.gu(1) | 235 | model: contactModel |
64 | 228 | CheckBox{ | 236 | delegate: Row{ |
65 | 229 | checked: participationStatus | 237 | spacing: units.gu(1) |
66 | 230 | enabled: false | 238 | CheckBox{ |
67 | 231 | } | 239 | checked: participationStatus |
68 | 232 | Label { | 240 | enabled: false |
69 | 233 | text:name | 241 | } |
70 | 234 | anchors.verticalCenter: parent.verticalCenter | 242 | Label { |
71 | 235 | color: detailColor | 243 | text:name |
72 | 244 | anchors.verticalCenter: parent.verticalCenter | ||
73 | 245 | color: detailColor | ||
74 | 246 | } | ||
75 | 236 | } | 247 | } |
76 | 237 | } | 248 | } |
77 | 238 | } | 249 | } |
78 | 250 | |||
79 | 239 | //Guest Entries ends | 251 | //Guest Entries ends |
80 | 240 | ThinDivider{} | 252 | ThinDivider{} |
81 | 241 | property int recurranceAreaMaxWidth: Math.max( recurrentHeader.headerWidth, reminderHeader.headerWidth) //Dynamic Height | 253 | property int recurranceAreaMaxWidth: Math.max( recurrentHeader.headerWidth, reminderHeader.headerWidth) //Dynamic Height |
82 | 242 | 254 | ||
83 | === modified file 'MonthView.qml' | |||
84 | --- MonthView.qml 2014-03-22 03:09:07 +0000 | |||
85 | +++ MonthView.qml 2014-04-08 08:59:31 +0000 | |||
86 | @@ -11,6 +11,8 @@ | |||
87 | 11 | 11 | ||
88 | 12 | signal dateSelected(var date); | 12 | signal dateSelected(var date); |
89 | 13 | 13 | ||
90 | 14 | Keys.forwardTo: [monthViewPath] | ||
91 | 15 | |||
92 | 14 | PathViewBase{ | 16 | PathViewBase{ |
93 | 15 | id: monthViewPath | 17 | id: monthViewPath |
94 | 16 | 18 | ||
95 | 17 | 19 | ||
96 | === modified file 'NewEvent.qml' | |||
97 | --- NewEvent.qml 2014-04-05 04:49:47 +0000 | |||
98 | +++ NewEvent.qml 2014-04-08 08:59:31 +0000 | |||
99 | @@ -177,6 +177,10 @@ | |||
100 | 177 | 177 | ||
101 | 178 | title: isEdit ? i18n.tr("Edit Event"):i18n.tr("New Event") | 178 | title: isEdit ? i18n.tr("Edit Event"):i18n.tr("New Event") |
102 | 179 | 179 | ||
103 | 180 | Keys.onEscapePressed: { | ||
104 | 181 | pageStack.pop(); | ||
105 | 182 | } | ||
106 | 183 | |||
107 | 180 | tools: ToolbarItems { | 184 | tools: ToolbarItems { |
108 | 181 | //keeping toolbar always open | 185 | //keeping toolbar always open |
109 | 182 | opened: true | 186 | opened: true |
110 | 183 | 187 | ||
111 | === modified file 'PathViewBase.qml' | |||
112 | --- PathViewBase.qml 2013-12-14 02:44:09 +0000 | |||
113 | +++ PathViewBase.qml 2014-04-08 08:59:31 +0000 | |||
114 | @@ -9,6 +9,9 @@ | |||
115 | 9 | signal nextItemHighlighted(); | 9 | signal nextItemHighlighted(); |
116 | 10 | signal previousItemHighlighted(); | 10 | signal previousItemHighlighted(); |
117 | 11 | 11 | ||
118 | 12 | signal scrollUp(); | ||
119 | 13 | signal scrollDown(); | ||
120 | 14 | |||
121 | 12 | preferredHighlightBegin: 0.5 | 15 | preferredHighlightBegin: 0.5 |
122 | 13 | preferredHighlightEnd: 0.5 | 16 | preferredHighlightEnd: 0.5 |
123 | 14 | 17 | ||
124 | @@ -31,8 +34,29 @@ | |||
125 | 31 | return 1; | 34 | return 1; |
126 | 32 | } | 35 | } |
127 | 33 | 36 | ||
128 | 37 | Keys.onLeftPressed:{ | ||
129 | 38 | root.decrementCurrentIndex(); | ||
130 | 39 | } | ||
131 | 40 | |||
132 | 41 | Keys.onRightPressed:{ | ||
133 | 42 | root.incrementCurrentIndex(); | ||
134 | 43 | } | ||
135 | 44 | |||
136 | 45 | Keys.onSpacePressed: { | ||
137 | 46 | root.scrollDown(); | ||
138 | 47 | } | ||
139 | 48 | |||
140 | 49 | Keys.onDownPressed: { | ||
141 | 50 | root.scrollDown(); | ||
142 | 51 | } | ||
143 | 52 | |||
144 | 53 | Keys.onUpPressed: { | ||
145 | 54 | root.scrollUp(); | ||
146 | 55 | } | ||
147 | 56 | |||
148 | 34 | onCurrentIndexChanged: { | 57 | onCurrentIndexChanged: { |
149 | 35 | var diff = currentIndex - intern.previousIndex | 58 | var diff = currentIndex - intern.previousIndex |
150 | 59 | if(diff == 0) return; | ||
151 | 36 | 60 | ||
152 | 37 | if (intern.previousIndex === count - 1 && currentIndex === 0) diff = 1 | 61 | if (intern.previousIndex === count - 1 && currentIndex === 0) diff = 1 |
153 | 38 | if (intern.previousIndex === 0 && currentIndex === count - 1) diff = -1 | 62 | if (intern.previousIndex === 0 && currentIndex === count - 1) diff = -1 |
154 | 39 | 63 | ||
155 | === modified file 'TimeLineBaseComponent.qml' | |||
156 | --- TimeLineBaseComponent.qml 2014-04-05 04:49:47 +0000 | |||
157 | +++ TimeLineBaseComponent.qml 2014-04-08 08:59:31 +0000 | |||
158 | @@ -15,13 +15,43 @@ | |||
159 | 15 | 15 | ||
160 | 16 | property int type: ViewType.ViewTypeWeek | 16 | property int type: ViewType.ViewTypeWeek |
161 | 17 | 17 | ||
162 | 18 | //visible hour | ||
163 | 19 | property int scrollHour; | ||
164 | 20 | |||
165 | 18 | function scrollToCurrentTime() { | 21 | function scrollToCurrentTime() { |
166 | 19 | //scroll to current time | 22 | //scroll to current time |
167 | 20 | var currentTime = new Date(); | 23 | var currentTime = new Date(); |
168 | 21 | //TODO: if current time is early morning should we show time from 9 am ? | 24 | //TODO: if current time is early morning should we show time from 9 am ? |
172 | 22 | var hour = currentTime.getHours(); | 25 | scrollHour = currentTime.getHours(); |
173 | 23 | 26 | ||
174 | 24 | timeLineView.contentY = hour * units.gu(10); | 27 | timeLineView.contentY = scrollHour * units.gu(10); |
175 | 28 | if(timeLineView.contentY >= timeLineView.contentHeight - timeLineView.height) { | ||
176 | 29 | timeLineView.contentY = timeLineView.contentHeight - timeLineView.height | ||
177 | 30 | } | ||
178 | 31 | } | ||
179 | 32 | |||
180 | 33 | Connections{ | ||
181 | 34 | target: parent | ||
182 | 35 | onScrollUp:{ | ||
183 | 36 | scrollHour--; | ||
184 | 37 | if( scrollHour < 0) { | ||
185 | 38 | scrollHour =0; | ||
186 | 39 | } | ||
187 | 40 | scrollToHour(); | ||
188 | 41 | } | ||
189 | 42 | |||
190 | 43 | onScrollDown:{ | ||
191 | 44 | scrollHour++; | ||
192 | 45 | var visibleHour = root.height / units.gu(10); | ||
193 | 46 | if( scrollHour > (25 -visibleHour)) { | ||
194 | 47 | scrollHour = 25 - visibleHour; | ||
195 | 48 | } | ||
196 | 49 | scrollToHour(); | ||
197 | 50 | } | ||
198 | 51 | } | ||
199 | 52 | |||
200 | 53 | function scrollToHour() { | ||
201 | 54 | timeLineView.contentY = scrollHour * units.gu(10); | ||
202 | 25 | if(timeLineView.contentY >= timeLineView.contentHeight - timeLineView.height) { | 55 | if(timeLineView.contentY >= timeLineView.contentHeight - timeLineView.height) { |
203 | 26 | timeLineView.contentY = timeLineView.contentHeight - timeLineView.height | 56 | timeLineView.contentY = timeLineView.contentHeight - timeLineView.height |
204 | 27 | } | 57 | } |
205 | 28 | 58 | ||
206 | === modified file 'WeekView.qml' | |||
207 | --- WeekView.qml 2014-04-05 04:57:34 +0000 | |||
208 | +++ WeekView.qml 2014-04-08 08:59:31 +0000 | |||
209 | @@ -19,6 +19,8 @@ | |||
210 | 19 | anchors.topMargin: units.gu(1.5) | 19 | anchors.topMargin: units.gu(1.5) |
211 | 20 | spacing: units.gu(1) | 20 | spacing: units.gu(1) |
212 | 21 | 21 | ||
213 | 22 | Keys.forwardTo: [weekViewPath] | ||
214 | 23 | |||
215 | 22 | ViewHeader{ | 24 | ViewHeader{ |
216 | 23 | id: viewHeader | 25 | id: viewHeader |
217 | 24 | month: dayStart.getMonth() | 26 | month: dayStart.getMonth() |
218 | @@ -65,7 +67,6 @@ | |||
219 | 65 | 67 | ||
220 | 66 | delegate: TimeLineBaseComponent { | 68 | delegate: TimeLineBaseComponent { |
221 | 67 | id: timeLineView | 69 | id: timeLineView |
222 | 68 | |||
223 | 69 | type: ViewType.ViewTypeWeek | 70 | type: ViewType.ViewTypeWeek |
224 | 70 | 71 | ||
225 | 71 | width: parent.width | 72 | width: parent.width |
226 | 72 | 73 | ||
227 | === modified file 'YearView.qml' | |||
228 | --- YearView.qml 2014-04-04 02:14:33 +0000 | |||
229 | +++ YearView.qml 2014-04-08 08:59:31 +0000 | |||
230 | @@ -25,6 +25,7 @@ | |||
231 | 25 | clip: true | 25 | clip: true |
232 | 26 | focus: index == root.currentIndex | 26 | focus: index == root.currentIndex |
233 | 27 | 27 | ||
234 | 28 | property int scrollMonth: 0; | ||
235 | 28 | property bool isCurrentItem: index == root.currentIndex | 29 | property bool isCurrentItem: index == root.currentIndex |
236 | 29 | property int year: (root.currentYear + root.indexType(index)) | 30 | property int year: (root.currentYear + root.indexType(index)) |
237 | 30 | 31 | ||
238 | @@ -39,6 +40,38 @@ | |||
239 | 39 | cellHeight: cellWidth * 1.4 | 40 | cellHeight: cellWidth * 1.4 |
240 | 40 | 41 | ||
241 | 41 | model: 12 /* months in a year */ | 42 | model: 12 /* months in a year */ |
242 | 43 | |||
243 | 44 | onYearChanged : { | ||
244 | 45 | scrollMonth=0; | ||
245 | 46 | yearView.positionViewAtIndex(scrollMonth,GridView.Beginning); | ||
246 | 47 | } | ||
247 | 48 | |||
248 | 49 | //scroll in case content height changed | ||
249 | 50 | onHeightChanged: { | ||
250 | 51 | scrollMonth=0; | ||
251 | 52 | yearView.positionViewAtIndex(scrollMonth,GridView.Beginning); | ||
252 | 53 | } | ||
253 | 54 | |||
254 | 55 | Connections{ | ||
255 | 56 | target: root | ||
256 | 57 | onScrollUp:{ | ||
257 | 58 | scrollMonth -= 2; | ||
258 | 59 | if(scrollMonth < 0) { | ||
259 | 60 | scrollMonth = 0; | ||
260 | 61 | } | ||
261 | 62 | yearView.positionViewAtIndex(scrollMonth,GridView.Beginning); | ||
262 | 63 | } | ||
263 | 64 | |||
264 | 65 | onScrollDown:{ | ||
265 | 66 | scrollMonth += 2; | ||
266 | 67 | var visibleMonths = yearView.height / cellHeight; | ||
267 | 68 | if( scrollMonth >= (11 - visibleMonths)) { | ||
268 | 69 | scrollMonth = (11 - visibleMonths); | ||
269 | 70 | } | ||
270 | 71 | yearView.positionViewAtIndex(scrollMonth,GridView.Beginning); | ||
271 | 72 | } | ||
272 | 73 | } | ||
273 | 74 | |||
274 | 42 | delegate: Item { | 75 | delegate: Item { |
275 | 43 | width: yearView.cellWidth | 76 | width: yearView.cellWidth |
276 | 44 | height: yearView.cellHeight | 77 | height: yearView.cellHeight |
277 | 45 | 78 | ||
278 | === modified file 'calendar.qml' | |||
279 | --- calendar.qml 2014-04-05 06:34:47 +0000 | |||
280 | +++ calendar.qml 2014-04-08 08:59:31 +0000 | |||
281 | @@ -52,6 +52,8 @@ | |||
282 | 52 | 52 | ||
283 | 53 | width: units.gu(100) | 53 | width: units.gu(100) |
284 | 54 | height: units.gu(80) | 54 | height: units.gu(80) |
285 | 55 | focus: true | ||
286 | 56 | Keys.forwardTo: [yearView,monthView,weekView,dayView,pageStack.currentPage,tabPage] | ||
287 | 55 | 57 | ||
288 | 56 | headerColor: "#266249" | 58 | headerColor: "#266249" |
289 | 57 | backgroundColor: "#478158" | 59 | backgroundColor: "#478158" |
290 | @@ -184,9 +186,7 @@ | |||
291 | 184 | // This is for wait that the app is load when newEvent is invoked by argument | 186 | // This is for wait that the app is load when newEvent is invoked by argument |
292 | 185 | Timer { | 187 | Timer { |
293 | 186 | id: timer | 188 | id: timer |
297 | 187 | interval: 200; | 189 | interval: 200; running: false; repeat: false |
295 | 188 | running: false; | ||
296 | 189 | repeat: false | ||
298 | 190 | onTriggered: { | 190 | onTriggered: { |
299 | 191 | tabPage.newEvent(); | 191 | tabPage.newEvent(); |
300 | 192 | } | 192 | } |
301 | @@ -224,6 +224,28 @@ | |||
302 | 224 | } | 224 | } |
303 | 225 | } | 225 | } |
304 | 226 | 226 | ||
305 | 227 | Keys.onTabPressed: { | ||
306 | 228 | if( event.modifiers & Qt.ControlModifier) { | ||
307 | 229 | var currentTab = tabs.selectedTabIndex; | ||
308 | 230 | currentTab ++; | ||
309 | 231 | if( currentTab >= tabs.tabChildren.length){ | ||
310 | 232 | currentTab = 0; | ||
311 | 233 | } | ||
312 | 234 | tabs.selectedTabIndex = currentTab; | ||
313 | 235 | } | ||
314 | 236 | } | ||
315 | 237 | |||
316 | 238 | Keys.onBacktabPressed: { | ||
317 | 239 | if( event.modifiers & Qt.ControlModifier) { | ||
318 | 240 | var currentTab = tabs.selectedTabIndex; | ||
319 | 241 | currentTab --; | ||
320 | 242 | if( currentTab < 0){ | ||
321 | 243 | currentTab = tabs.tabChildren.length -1; | ||
322 | 244 | } | ||
323 | 245 | tabs.selectedTabIndex = currentTab; | ||
324 | 246 | } | ||
325 | 247 | } | ||
326 | 248 | |||
327 | 227 | Tabs{ | 249 | Tabs{ |
328 | 228 | id: tabs | 250 | id: tabs |
329 | 229 | 251 | ||
330 | @@ -275,7 +297,6 @@ | |||
331 | 275 | id: weekView | 297 | id: weekView |
332 | 276 | anchors.fill: parent | 298 | anchors.fill: parent |
333 | 277 | isCurrentPage: tabs.selectedTab == weekTab | 299 | isCurrentPage: tabs.selectedTab == weekTab |
334 | 278 | |||
335 | 279 | onDayStartChanged: { | 300 | onDayStartChanged: { |
336 | 280 | tabPage.currentDay = dayStart; | 301 | tabPage.currentDay = dayStart; |
337 | 281 | } | 302 | } |
PASSED: Continuous integration, rev:186 91.189. 93.70:8080/ job/ubuntu- calendar- app-ci/ 257/ 91.189. 93.70:8080/ job/generic- mediumtests- trusty/ 800 91.189. 93.70:8080/ job/ubuntu- calendar- app-raring- amd64-ci/ 257 91.189. 93.70:8080/ job/ubuntu- calendar- app-saucy- amd64-ci/ 257 91.189. 93.70:8080/ job/ubuntu- calendar- app-trusty- amd64-ci/ 91
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild: 91.189. 93.70:8080/ job/ubuntu- calendar- app-ci/ 257/rebuild
http://