blob: 90613753bed5ed736c82a3348f7a75d182978fc6 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<library>
<class name="dragEvent" extends="view" opacity="0.6">
<!---
Refrence to the current moving event in the calendar
-->
<attribute name="eventRef" value="null" />
<!---
@keywords private
-->
<attribute name="timeText" value="" type="string" />
<!---
@keywords private
-->
<attribute name="titleText" value="" type="string" />
<!---
If false the time part is hidden
-->
<attribute name="showTime" value="true" type="boolean" />
<!---
Move x,y to right position in dayview
-->
<attribute name="fixToPositionInCalendar" value="true" type="boolean" />
<!---
Reference to current grid view classroot
-->
<attribute name="calendarViewRef" value="null" />
<!---
if true only the date part is updated not the time part of the calendar event
when moving to another date
-->
<attribute name="isMonthMove" value="false" type="boolean" />
<!---
if true it cannot be dragged to another date,
only the end position and its height will change
-->
<attribute name="dragEndOnly" value="false" type="boolean" />
<!---
@keywords private
-->
<attribute name="updateObj" value="null" />
<!---
@keywords private
-->
<attribute name="baseUrl" value="" type="string" />
<!---
@keywords private
-->
<attribute name="startheight" value="-1" type="number" />
<handler name="onx" args="x">
if (this.fixToPositionInCalendar) {
this.fixToPosition();
}
</handler>
<handler name="ony" args="y">
if (this.fixToPositionInCalendar) {
this.fixToPosition();
}
</handler>
<!--
Scroll calendar day view to position if necessary (based on mouse position, not calendar event position!).
This makes only sense if fixToPositionInCalendar is true (fixToPositionInCalendar only true if we are in
a day or week view where there is actually something to scroll).
-->
<handler name="onidle" reference="LzIdleService.LzIdle">
<![CDATA[
if (!this.fixToPositionInCalendar) {
return;
}
var referenceToScrollView = parent.parent.parent._grid._bgArea;
//Scroll calendar day view to position if necessary
var tParentScrolly = referenceToScrollView.getMouse("y");
if (tParentScrolly < 0) {
if (referenceToScrollView._scrollArea.y < 0) {
if (referenceToScrollView._scrollArea.y+20 < 0) {
referenceToScrollView._scrollArea.setAttribute("y",referenceToScrollView._scrollArea.y+20);
} else {
referenceToScrollView._scrollArea.setAttribute("y",0);
}
}
} else if (referenceToScrollView.height < tParentScrolly) {
var maxScroll = referenceToScrollView.height - referenceToScrollView._scrollArea.height;
if (referenceToScrollView._scrollArea.y > maxScroll) {
if (referenceToScrollView._scrollArea.y-20 > maxScroll) {
referenceToScrollView._scrollArea.setAttribute("y",referenceToScrollView._scrollArea.y-20);
} else {
referenceToScrollView._scrollArea.setAttribute("y",maxScroll);
}
} else {
referenceToScrollView._scrollArea.setAttribute("y",maxScroll);
}
}
if (this.dragEndOnly) {
var heightInMinutes = parent.height/1440;
var tPixels30Minutes = heightInMinutes*30;
var tNewY = Math.round(parent.getMouse("y")/tPixels30Minutes)*tPixels30Minutes;
var newHeight = (tNewY - this.y);
if (newHeight >= tPixels30Minutes && newHeight+this.y <= parent.height) {
this.setAttribute("height",newHeight);
}
}
]]>
</handler>
<method name="fixToPosition">
<![CDATA[
if (!this.dragEndOnly) {
//if ($debug) Debug.write("fixToPosition 1 ", this.calendarViewRef);
//if ($debug) Debug.write("fixToPosition 2 ", this.calendarViewRef.currentOverTrackView);
var currentOverTrackView = this.calendarViewRef.currentOverTrackView;
if (currentOverTrackView == null) {
return;
}
var heightInMinutes = parent.height/1440;
var tPixels30Minutes = heightInMinutes*30;
var tNewY = Math.round(this.y/tPixels30Minutes)*tPixels30Minutes;
if (tNewY < 0) {
this.setAttribute("y",0);
} else if (tNewY + this.height > parent.height) {
this.setAttribute("y",parent.height-this.height);
} else {
this.setAttribute("y",tNewY);
}
this.setAttribute("x",currentOverTrackView.x);
}
]]>
</method>
<handler name="onmouseup" reference="lz.GlobalMouse" args="who">
this.close();
</handler>
<handler name="oninit">
lz.Cursor.showHandCursor(false);
lz.ModeManager.globalLockMouseEvents();
if (!this.dragEndOnly) {
this.dragger.apply();
}
this.setShadow();
</handler>
<method name="setShadow">
<![CDATA[
var normalMC = this.getDisplayObject();
var displacementMap = new flash.filters.DropShadowFilter();
normalMC.filters = [displacementMap];
]]>
</method>
<method name="justFinish">
lz.Cursor.restoreCursor();
//lz.Cursor.showHandCursor(true);
lz.ModeManager.globalUnlockMouseEvents();
this.destroy();
</method>
<method name="close">
<![CDATA[
var appointmentId = this.eventRef.closeDragItem();
this.dragger.remove();
if (this.calendarViewRef.parent.parent.requestUserId != canvas.user_id) {
new lz.labelerrorPopup(canvas,{errorlabelid:1278});
lz.Cursor.showHandCursor(true);
lz.ModeManager.globalUnlockMouseEvents();
this.eventRef.setAttribute("visibility","visible");
this.destroy();
return;
}
if (this.height == this.startheight && this.dragEndOnly) {
this.justFinish();
return;
}
if (appointmentId <= 0) {
this.justFinish();
return;
}
this.updateObj = new Object();
//Point URL to actual File
this.baseUrl = canvas.getAppBaseUrl();
var currentOverTrackView = this.calendarViewRef.currentOverTrackView;
if (currentOverTrackView == null) {
if ($debug) Debug.warn("currentOverTrackView is NULL, error in view reference!");
return;
}
updateObj.appointmentId = appointmentId;
updateObj.appointmentstart = new Date(this.calendarViewRef.currentOverTrackView.dayDate.getTime());
//If it is only drag and dropped in month grid we only change dates no times
if (this.isMonthMove) {
var tDateStart = parseDateTimeFromXmlString(this.eventRef.datapath.xpathQuery('start/text()'));
updateObj.appointmentstart.setHours(tDateStart.getHours());
updateObj.appointmentstart.setMinutes(tDateStart.getMinutes());
} else {
var heightInMinutes = parent.height/1440;
var tPixels30Minutes = heightInMinutes*30;
var startRoundBy30Minutes = Math.round(this.y/tPixels30Minutes)*tPixels30Minutes;
updateObj.appointmentstart.setHours(Math.floor((startRoundBy30Minutes/heightInMinutes)/60));
updateObj.appointmentstart.setMinutes((startRoundBy30Minutes/heightInMinutes)-(updateObj.appointmentstart.getHours()*60));
}
updateObj.appointmentend = new Date(this.calendarViewRef.currentOverTrackView.dayDate.getTime());
//If it is only drag and dropped in month grid we only change dates no times
if (this.isMonthMove) {
var tDateEnd = parseDateTimeFromXmlString(this.eventRef.datapath.xpathQuery('end/text()'));
updateObj.appointmentend.setHours(tDateEnd.getHours());
updateObj.appointmentend.setMinutes(tDateEnd.getMinutes());
} else {
if ($debug) Debug.write("End Hours",Math.floor(((startRoundBy30Minutes+this.height)/heightInMinutes)/60));
var endHours = Math.floor(((startRoundBy30Minutes+this.height)/heightInMinutes)/60);
if (endHours >= 24) {
updateObj.appointmentend.setHours(0);
updateObj.appointmentend.setMinutes(0);
updateObj.appointmentend.setTime(updateObj.appointmentend.getTime()+86400000);
} else {
if ($debug) Debug.write("End Minutes",((startRoundBy30Minutes+this.height)/heightInMinutes)-(updateObj.appointmentend.getHours()*60));
updateObj.appointmentend.setMinutes(((startRoundBy30Minutes+this.height)/heightInMinutes)-(updateObj.appointmentend.getHours()*60));
updateObj.appointmentend.setHours(endHours);
}
}
if ($debug) Debug.write("New appointmentstart ",updateObj.appointmentstart);
if ($debug) Debug.write("New appointmentend ",updateObj.appointmentend);
this.updateAppointmentTimeOnly.doCall();
]]>
</method>
<netRemoteCallHib name="updateAppointmentTimeOnly" funcname="calendarservice.updateAppointmentTimeOnly"
remotecontext="$once{ canvas.thishib }" >
<netparam><method name="getValue">return canvas.sessionId; </method></netparam>
<netparam><method name="getValue">return parent.parent.updateObj.appointmentId;</method></netparam>
<netparam><method name="getValue">return parseDateToStringTimeSeconds(parent.parent.updateObj.appointmentstart);</method></netparam>
<netparam><method name="getValue">return parseDateToStringTimeSeconds(parent.parent.updateObj.appointmentend);</method></netparam>
<netparam><method name="getValue">return parent.parent.baseUrl;</method></netparam>
<netparam><method name="getValue">return hib.userlang;</method></netparam>
<handler name="ondata" args="value">
<![CDATA[
if ($debug) Debug.write("updateAppointmentTimeOnly ",value);
lz.Cursor.restoreCursor();
//lz.Cursor.showHandCursor(true);
lz.ModeManager.globalUnlockMouseEvents();
parent.calendarViewRef.parent.parent.reload();
parent.destroy();
]]>
</handler>
</netRemoteCallHib>
<dragstate name="dragger"/>
<view width="$once{ parent.width }" height="$once{ parent.height }"
bgcolor="$once{ parent.bgcolor }">
<text name="_time" text="$once{ parent.parent.timeText }"
visibility="$once{ (parent.parent.showTime) ? 'visible' : 'hidden' }" />
<text name="_title" x="$once{ (parent.parent.showTime) ? 36 : 0 }" resize="false" text="$once{ parent.parent.titleText }"
width="$once{ (parent.parent.showTime) ? parent.parent.width-36 : parent.parent.width }" />
</view>
</class>
</library>