diff --git a/workflow/engine/methods/bpmn/saveProcess.php b/workflow/engine/methods/bpmn/saveProcess.php
index a85441e34..1ae3cab96 100755
--- a/workflow/engine/methods/bpmn/saveProcess.php
+++ b/workflow/engine/methods/bpmn/saveProcess.php
@@ -122,9 +122,15 @@ try{
$routesArray = $oProcess->createGateways($routeTransitions,$endArray,$oData->routes,$numberRoutes,$idProcess,$taskHidden);
$oData->routes = $routesArray;
}
-
+
$oProcess->updateProcessFromDataXpdl($oData,$oData->tasks);
- }
-catch (Exception $oException) {
- die($oException->getMessage());
-}
\ No newline at end of file
+
+ $result->success = true;
+ $result->msg = G::LoadTranslation('ID_PROCESS_SAVE_SUCCESS');
+
+} catch (Exception $e) {
+ $result->success = false;
+ $result->msg = $e->getMessage();
+}
+
+print G::json_encode($result);
diff --git a/workflow/engine/templates/bpmn/designer.js b/workflow/engine/templates/bpmn/designer.js
index dddaafde6..fa5cb1d7a 100755
--- a/workflow/engine/templates/bpmn/designer.js
+++ b/workflow/engine/templates/bpmn/designer.js
@@ -11,6 +11,9 @@ new Ext.KeyMap(document, {
}
});
+
+var saveProcess;
+
Ext.onReady ( function() {
workflow = new MyWorkflow("paintarea");
@@ -144,7 +147,6 @@ Ext.onReady ( function() {
items : [north, center]
});
-
var designaerToolbar = new Ext.Window({
id: 'designaerToolbar',
@@ -154,9 +156,13 @@ Ext.onReady ( function() {
height:70,
x: 0,
y: 0,
- minimizable: false,
+ minimizable: true,
+ maximizable: false,
closable: false,
resizable: false,
+ floating: true,
+
+ shim: true,
plugin: new Ext.ux.WindowAlwaysOnTop,
html: '
\n\

\n\
@@ -172,44 +178,131 @@ Ext.onReady ( function() {

-->\n\
'
});
+ designaerToolbar.on('minimize',function(w){
+ //console.debug('minimizing...');
+ if( w.collapsed )
+ designaerToolbar.expand();
+ else
+ designaerToolbar.collapse(); //collapse the window
+
+ });
designaerToolbar.show();
+
+var win = Ext.getCmp('designaerToolbar');
+var divScroll = document.body;
+
+// custom variables
+win._posRelToView = win.getPosition(true);
+win._scrollPosTimer = false;
+win._moveBlocker = false;
+win.show();
+
+
+
+// save relative pos to view when moving (for scrolling event below)
+// also, manually do a constrain, else the win would be lost if moved outside the view
+win.on('move', function() {
+ // lock function (because we move the window again inside)
+ if (win._moveBlocker) return;
+ win._moveBlocker = true;
+
+ var winPos = win.getPosition(true);
+ win._posRelToView = [winPos[0] - divScroll.scrollLeft, winPos[1] - divScroll.scrollTop];
+
+ // manually do what constrain should do if it worked as assumed
+ var layersize = [Ext.get(divScroll).getWidth(), Ext.get(divScroll).getHeight()];
+ var windowsize = [win.getSize().width, win.getSize().height];
+ // assumed width of the scrollbar (true for windows 7) plus some padding to be sure
+ var scrollSize = 17 + 5;
+ if (win._posRelToView[0] < 0) { // too far left
+ win.setPosition(divScroll.scrollLeft, winPos[1]);
+ win._posRelToView = [0, win._posRelToView[1]];
+ } else if (win._posRelToView[0] >= (layersize[0] - windowsize[0])) { // too far right
+ win.setPosition(((divScroll.scrollLeft + layersize[0]) - windowsize[0] - scrollSize), winPos[1]);
+ win._posRelToView = [(layersize[0] - windowsize[0] - scrollSize), win._posRelToView[1]];
+ }
+
+ winPos = win.getPosition(true); // update pos
+ if (win._posRelToView[1] < 0) { // too high up
+ win.setPosition(winPos[0], divScroll.scrollTop);
+ win._posRelToView = [win._posRelToView[0], 0];
+ } else if (win._posRelToView[1] >= layersize[1]) { // too low
+ win.setPosition(winPos[0], ((divScroll.scrollTop + layersize[1]) - windowsize[1] - scrollSize));
+ win._posRelToView = [win._posRelToView[0], (layersize[1] - windowsize[1] - scrollSize)];
+ }
+
+ // release function
+ win._moveBlocker = false;
+});
+
+
+
+ Ext.fly(document).on("scroll", function(){
+ //console.log("body scrolled");
+ //alert(document.body.scrollTop);
+
+
+ //var _posRelToView = win.getPosition(true);
+
+ //alert(win.x +' '+ win.y);
+ //win.setPosition(_posRelToView[0] + divScroll.scrollLeft, _posRelToView[1] + divScroll.scrollTop)
+
+
+
+ if (win._scrollPosTimer) {
+ clearTimeout(win._scrollPosTimer);
+ }
+ win._scrollPosTimer = setTimeout(function() {
+ win.setPosition(win._posRelToView[0] + divScroll.scrollLeft, win._posRelToView[1] + divScroll.scrollTop);
+ }, 100);
+
+ });
+
+
+
new Ext.ToolTip({
target: 'x-shapes-task',
- anchor: 'right',
+ title: 'Task',
trackMouse: true,
- html: 'Task'
+ anchor: 'top',
+ html: ''
});
new Ext.ToolTip({
target: 'x-shapes-startEvent',
- anchor: 'right',
+ title: ' Start Event',
trackMouse: true,
- html: 'Start'
+ anchor: 'top',
+ html: ''
});
new Ext.ToolTip({
target: 'x-shapes-interEvent',
- anchor: 'right',
+ title: 'Intermediate Event',
trackMouse: true,
- html: 'Intermediate Event'
+ anchor: 'top',
+ html: ''
});
new Ext.ToolTip({
target: 'x-shapes-endEvent',
- anchor: 'right',
+ title: 'End Event',
trackMouse: true,
- html: 'End Event'
+ anchor: 'top',
+ html: ''
});
new Ext.ToolTip({
target: 'x-shapes-gateways',
- anchor: 'right',
+ title: 'Gateway',
trackMouse: true,
- html: 'Gateway'
+ anchor: 'top',
+ html: ''
});
new Ext.ToolTip({
target: 'x-shapes-annotation',
- anchor: 'right',
+ title: 'Annotation',
+ anchor: 'left',
trackMouse: true,
- html: 'Annotation'
+ html: ''
});
@@ -716,7 +809,7 @@ Ext.onReady ( function() {
console.innerHTML=console.innerHTML+"
"+msg;
}
- function saveProcess()
+ saveProcess = function()
{
// console.dir(this.workflow);
@@ -830,15 +923,24 @@ Ext.onReady ( function() {
var aRoutes = Ext.util.JSON.encode(routes);
var aSubProcess = Ext.util.JSON.encode(subprocess);
- var pro_uid = getUrlVars();
-
+ //var pro_uid = getUrlVars();
+ var loadMask = new Ext.LoadMask(document.body, {msg:'Saving..'});
+ loadMask.show();
+
if(typeof pro_uid != 'undefined')
{
Ext.Ajax.request({
url: 'saveProcess.php',
method: 'POST',
success: function(response) {
- Ext.Msg.alert ('Done', response.responseText);
+ var result = Ext.util.JSON.decode(response.responseText);
+ loadMask.hide();
+
+ if( result.success ) {
+ PMExt.notify(_('ID_PROCESS_SAVE'), result.msg);
+ } else {
+ PMExt.error(_('ID_ERROR'), result.msg);
+ }
},
failure: function(){},
params: {
diff --git a/workflow/engine/templates/bpmn/processmap.js b/workflow/engine/templates/bpmn/processmap.js
index 620b118bd..f73a65ce5 100755
--- a/workflow/engine/templates/bpmn/processmap.js
+++ b/workflow/engine/templates/bpmn/processmap.js
@@ -155,7 +155,7 @@ Ext.onReady ( function() {
cls: 'x-btn-text-icon',
iconCls: 'button_menu_ext ss_sprite ss_disk',
handler: function() {
- saveProcess();
+ document.getElementById('designerFrame').contentWindow.saveProcess();
}
}, {
text:'Save as'