source: pro-violet-viettel/refs/LectureEditor/menus.as @ 683

Last change on this file since 683 was 297, checked in by dungnv, 11 years ago
File size: 36.4 KB
Line 
1////////////////////////////////////////////////////////////////////////////////
2// File:   MENU.AS
3// Desc:   File chứa các hàm và dữ liệu phục vụ việc khởi tạo, xử lý các chức
4//         năng của Menu, Toolbar, các nút bấm trên giao diện chính, các hộp
5//         nhập liệu (dialog) và hộp thoại (alert),...
6//
7// Author: Đinh Hải Minh, VicoSoft
8// Date:   01/12/2003
9////////////////////////////////////////////////////////////////////////////////
10
11import mx.controls.Alert;
12
13function CreateMenuBar() {
14        /*
15        //
16        // CREATE THE MENUBAR OF APPLICATION
17        //
18
19        // Delete all menu items
20        while( mnuBar.getMenuAt(0) ) mnuBar.removeMenuAt(0);
21
22        var menuObj = new XML(
23                "<node label=\"" + lang.mnuFile + "\">"+
24                "<node label=\"" + lang.mnuNew + " (F2)\"/>"+
25                "<node label=\"" + lang.mnuOpen + "... (F3)\"/>"+
26                "<node label=\"" + lang.mnuSave + "\"/>"+
27                "<node label=\"" + lang.mnuSaveAs + "...\"/>"+
28                "<node type=\"separator\"/>"+
29                "<node label=\"" + lang.mnuLibrary + "... (Ctrl+L)\"/>"+
30                "<node label=\"" + lang.mnuPack + "... (F4)\"/>"+
31                "<node type=\"separator\"/>"+
32                "<node label=\"" + lang.mnuExit + "\"/>"+
33                "</node>");
34        mnuBar.addMenu(menuObj);
35
36        var menuObj = new XML(
37                "<node label=\"" + lang.mnuEdit + "\">"+
38                "<node label=\"" + lang.mnuUndo + " (Ctrl+Z)\"/>"+
39                "<node label=\"" + lang.mnuRedo + " (Ctrl+Y)\"/>"+
40                "<node type=\"separator\"/>"+
41                "<node label=\"" + lang.mnuCut + " (Ctrl+X)\"/>"+
42                "<node label=\"" + lang.mnuCopy + " (Ctrl+C)\"/>"+
43                "<node label=\"" + lang.mnuPaste + " (Ctrl+V)\"/>"+
44                "<node type=\"separator\"/>"+
45                "<node label=\"" + lang.mnuMoveUp + " (Alt+↑)\"/>"+
46                "<node label=\"" + lang.mnuMoveDn + " (Alt+↓)\"/>"+
47                "</node>");
48        mnuBar.addMenu(menuObj);
49
50        menuObj = new XML(
51                "<node label=\"" + lang.mnuContent + "\">"+
52                "<node label=\"" + lang.mnuAdd + " (F5)\"/>"+
53                "<node label=\"" + lang.mnuChange + " (F6)\"/>"+
54                "<node label=\"" + lang.mnuSync + " (F7)\"/>"+
55                "<node label=\"" + lang.mnuDelete + "\"/>"+
56                "<node type=\"separator\"/>"+
57                "<node label=\"" + lang.mnuCover + "\"/>"+
58                "<node label=\"" + lang.mnuLayout + " (F8)\"/>"+
59                "<node label=\"" + lang.mnuBackGround + "\"/>"+
60                "<node type=\"separator\"/>"+
61                "<node label=\"" + lang.mnuFullScr + " (F9)\"/>"+
62                "</node>");
63        mnuBar.addMenu(menuObj);
64
65        menuObj = new XML(
66                "<node label=\"" + lang.mnuOption + "\">"+
67                (webbase? "":
68                "<node label=\"" + lang.mnuUpdateModules + "\"/>"+
69                "<node label=\"" + lang.mnuUpdateLayouts + "\"/>"+
70                "<node label=\"" + lang.mnuUpdateLibs + "\"/>"+
71                "<node type=\"separator\"/>"+
72                "<node label=\"" + lang.mnuSupport + "\">"+
73                "<node label=\"" + lang.mnuUniKey + "\"/>"+
74                "<node label=\"" + lang.mnuTeamViewer + "\"/>"+
75                "</node>"+
76                "<node type=\"separator\"/>")+
77                "<node label=\"" + lang.mnuOrigin + "\"/>"+
78                "<node label=\"" + lang.mnuConfig + "\"/>"+
79                "</node>");
80        mnuBar.addMenu(menuObj);
81
82        menuObj = new XML(
83                "<node label=\"" + lang.mnuHelp + "\">"+
84                "<node label=\"" + lang.mnuHelpContent + " (F1)\"/>"+
85                (webbase? "":
86                "<node label=\"" + lang.mnuUpgrade + "\"/>")+
87                "<node type=\"separator\"/>"+
88                "<node label=\"" + lang.mnuAbout + "...\"/>"+
89                "</node>");
90        mnuBar.addMenu(menuObj);
91
92        if (online) {
93        menuObj = new XML(
94                "<node label=\"" + lang.mnuAccount + "\">"+
95                "<node label=\"" + lang.mnuInfo + "\"/>"+
96                "<node label=\"" + lang.mnuPayment + "\"/>"+
97                "<node label=\"" + lang.mnuLicense + "\"/>"+
98                "<node label=\"" + lang.mnuLogout + "\"/>"+
99                "</node>");
100        mnuBar.addMenu(menuObj);
101        }
102
103        //
104        // GET SUBMENUS OF MENUBAR AND HANDLE THEM
105        //
106        mnuFile = mnuBar.getMenuAt(0);
107        mnuEdit = mnuBar.getMenuAt(1);
108        mnuSlide = mnuBar.getMenuAt(2);
109        mnuOption = mnuBar.getMenuAt(3);
110        mnuHelp = mnuBar.getMenuAt(4);
111        //if (online) mnuAccount = mnuBar.getMenuAt(5);
112        mnuFile.addEventListener("change", onSelectFile);
113        mnuEdit.addEventListener("change", onSelectEdit);
114        mnuSlide.addEventListener("change", onSelectSlide);
115        mnuOption.addEventListener("change", onSelectWindow);
116        mnuHelp.addEventListener("change", onSelectHelp);
117        //if (online) mnuAccount.addEventListener("change", onSelectAccount);
118       
119        // hide the Menu Bar
120        //mnuBar.visible = false;
121        */
122
123        //
124        // TOOLTIP TEXT OF INTERFACE BUTTONS
125        //
126        btnNew.tooltipText     = lang.mnuNew;
127        btnOpen.tooltipText    = lang.mnuOpen + "...";
128        btnSave.tooltipText    = lang.mnuSave;
129        btnSaveAs.tooltipText  = lang.mnuSaveAs + "...";
130        btnUndo.tooltipText    = lang.mnuUndo;
131        btnRedo.tooltipText    = lang.mnuRedo;
132        btnSync.tooltipText    = lang.mnuSync + "...";
133        btnLibrary.tooltipText = lang.mnuLibrary + "...";
134        btnPack.tooltipText    = lang.mnuPack + "...";
135        btnCover.tooltipText   = lang.mnuCover + "...";
136        btnBackground.tooltipText  = lang.mnuBackGround + "...";
137        btnLayout.tooltipText  = lang.mnuLayout;
138        btnPreview.tooltipText = lang.mnuFullScr;
139        btnHelp.tooltipText    = lang.mnuHelpContent;
140        btnSetting.tooltipText = lang.mnuConfig + "...";
141
142        btnMoveUp.onRollOver   = function() {StartTooltip(lang.mnuMoveUp)};
143        btnMoveDown.onRollOver = function() {StartTooltip(lang.mnuMoveDn)};
144        btnCutItem.onRollOver  = function() {StartTooltip(lang.mnuCut)};
145        btnCopyItem.onRollOver = function() {StartTooltip(lang.mnuCopy)};
146        btnPasteItem.onRollOver = function() {StartTooltip(lang.mnuPaste)};
147        btnAdd.onRollOver      = function() {StartTooltip(lang.mnuAdd)};
148        btnDetail.onRollOver   = function() {StartTooltip(lang.mnuChange)};
149        btnDelete.onRollOver   = function() {StartTooltip(lang.mnuDelete)};
150
151        btnMoveUp.onRollOut    = btnMoveUp.onPress   = StopTooltip;
152        btnMoveDown.onRollOut  = btnMoveDown.onPress = StopTooltip;
153        btnCutItem.onRollOut   = btnCutItem.onPress = StopTooltip;
154        btnCopyItem.onRollOut  = btnCopyItem.onPress = StopTooltip;
155        btnPasteItem.onRollOut = btnPasteItem.onPress = StopTooltip;
156        btnAdd.onRollOut       = btnAdd.onPress      = StopTooltip;
157        btnDelete.onRollOut    = btnDelete.onPress   = StopTooltip;
158        btnDetail.onRollOut    = btnDetail.onPress   = StopTooltip;
159}
160
161////////////////////////////////////////////////////////////////////////////////
162// HANDLE FUNCTIONS FOR ALL SUBMENUS
163//
164function onSelectFile(itemObj) {
165        if( itemObj.menuItem == mnuFile.getItemAt(0) ) btnNew.onRelease();
166        if( itemObj.menuItem == mnuFile.getItemAt(1) ) btnOpen.onRelease();
167        if( itemObj.menuItem == mnuFile.getItemAt(2) ) btnSave.onRelease();
168        if( itemObj.menuItem == mnuFile.getItemAt(3) ) SaveAndExec(undefined, true);
169        if( itemObj.menuItem == mnuFile.getItemAt(5) ) btnLibrary.onRelease();
170        if( itemObj.menuItem == mnuFile.getItemAt(6) ) btnPack.onRelease();
171        if( itemObj.menuItem == mnuFile.getItemAt(8) ) ExitProgram();
172}
173
174btnSaveAs.onRelease = function() {
175        SaveAndExec(undefined, true);
176}
177
178function onSelectEdit(itemObj) {
179        if( itemObj.menuItem == mnuEdit.getItemAt(0) ) ProcessUndo();
180        if( itemObj.menuItem == mnuEdit.getItemAt(1) ) ProcessRedo();
181        if( itemObj.menuItem == mnuEdit.getItemAt(3) ) btnCutOnRelease();
182        if( itemObj.menuItem == mnuEdit.getItemAt(4) ) btnCopyOnRelease();
183        if( itemObj.menuItem == mnuEdit.getItemAt(5) ) btnPasteOnRelease();
184        if( itemObj.menuItem == mnuEdit.getItemAt(7) ) btnMoveUp.onRelease();
185        if( itemObj.menuItem == mnuEdit.getItemAt(8) ) btnMoveDown.onRelease();
186}
187
188btnUndo.onRelease = function() {
189        ProcessUndo();
190}
191
192btnRedo.onRelease = function() {
193        ProcessRedo();
194}
195
196function onSelectSlide(itemObj) {
197        if(itemObj.menuItem == mnuSlide.getItemAt(0)) btnAdd.onRelease();
198        if(itemObj.menuItem == mnuSlide.getItemAt(1)) btnDetail.onRelease();
199        if(itemObj.menuItem == mnuSlide.getItemAt(2)) SyncVideoAudio();
200        if(itemObj.menuItem == mnuSlide.getItemAt(3)) btnDelete.onRelease();
201        if(itemObj.menuItem == mnuSlide.getItemAt(5)) SelectCoverPage();
202        if(itemObj.menuItem == mnuSlide.getItemAt(6)) btnLayout.onRelease();
203        if(itemObj.menuItem == mnuSlide.getItemAt(7)) SelectBackGround();
204        if(itemObj.menuItem == mnuSlide.getItemAt(9)) btnPreview.onRelease();
205}
206
207btnSync.onRelease = function() {
208        SyncVideoAudio();
209}
210
211btnCover.onRelease = function() {
212        SelectCoverPage();
213}
214
215btnBackground.onRelease = function() {
216        SelectBackGround();
217}
218
219function onSelectWindow(itemObj) {
220        if (webbase) {
221                if(itemObj.menuItem == mnuOption.getItemAt(0)) ResetWindowSize();
222                if(itemObj.menuItem == mnuOption.getItemAt(1)) ShowConfigDlg();
223                return;
224        }
225        if(itemObj.menuItem == mnuOption.getItemAt(0)) UpdatePlugin();
226        if(itemObj.menuItem == mnuOption.getItemAt(1)) UpdateLayout();
227        if(itemObj.menuItem == mnuOption.getItemAt(2)) UpdateCommonLib();
228        if(itemObj.menuItem == mnuOption.getItemAt(4).childNodes[0]) RunApplication((isWow64? "UniKey64": "UniKey") + "\\UniKeyNT.exe");
229        if(itemObj.menuItem == mnuOption.getItemAt(4).childNodes[1]) RunApplication("TeamViewer\\TeamViewerQS_vi.exe");
230        if(itemObj.menuItem == mnuOption.getItemAt(6)) ResetWindowSize();
231        if(itemObj.menuItem == mnuOption.getItemAt(7)) ShowConfigDlg();
232}
233
234btnSetting.onRelease = function() {
235        ShowConfigDlg();
236}
237
238function onSelectHelp(itemObj) {
239        if(itemObj.menuItem == mnuHelp.getItemAt(0)) btnHelp.onRelease();
240        if (webbase) {
241                if(itemObj.menuItem == mnuHelp.getItemAt(2)) AboutProgram();
242                return;
243        }
244        if(itemObj.menuItem == mnuHelp.getItemAt(1)) AutoUpgrade();
245        if(itemObj.menuItem == mnuHelp.getItemAt(3)) AboutProgram();
246}
247
248function onSelectAccount(itemObj) {
249        if(itemObj.menuItem == mnuAccount.getItemAt(0)) EditAccountInfo();
250        if(itemObj.menuItem == mnuAccount.getItemAt(1)) ManageCastAccount();
251        if(itemObj.menuItem == mnuAccount.getItemAt(2)) ShowVioletLicense();
252        if(itemObj.menuItem == mnuAccount.getItemAt(3)) LogoutViolet();
253}
254
255////////////////////////////////////////////////////////////////////////////////
256// COMMON FUNCTIONS
257//
258function StartTooltip(tooltipText) {
259        if( !movTimer && tooltipText ) {
260                createEmptyMovieClip("movTimer", 1);
261                movTimer.counter = 0;
262
263                movTimer.onEnterFrame = function() {
264                        this.counter++;
265                        if( this.counter == 10) {
266                                if(!txtTooltip) createTextField("txtTooltip", 2, _xmouse+16, _ymouse+16, 0, 0);
267                                txtTooltip.text = tooltipText;
268                                txtTooltip.autoSize = true;
269                                txtTooltip.border = true;
270                                txtTooltip.background = true;
271                                txtTooltip.backgroundColor = 0xFFFFCC;
272                               
273                                var newFormat = new TextFormat();
274                                newFormat.font = "Arial";
275                                newFormat.size = 12;
276                                txtTooltip.setTextFormat(newFormat);
277                                delete newFormat;
278                               
279                                if( txtTooltip._x + txtTooltip._width > 800 ) txtTooltip._x = 800 - txtTooltip._width;
280                        }
281                        if( this.counter == 130) StopTooltip();
282                }
283        }
284}
285
286function StopTooltip() {
287        if( txtTooltip ) txtTooltip.removeTextField();
288        if( movTimer ) movTimer.removeMovieClip();
289}
290
291function ShowGrayScreen(show) {
292        if( show==undefined ) show = true;
293        btnSemitrans.count += (show? 1: -1);
294        show = (btnSemitrans.count > 0);
295        btnSemitrans._visible = show;
296        fscommand("Enable Drop", !show);
297}
298
299function ShowDialog(frameLabel, winTitle) {
300        if (!wndDialog.content.loaded) return;
301        if (!wndDialog._visible) ShowGrayScreen();
302        wndDialog.content.gotoAndStop(frameLabel);
303        wndDialog.title = winTitle;
304        wndDialog.setSize(wndDialog.content._width+6, wndDialog.content._height+34);
305        wndDialog._x = 400 - wndDialog._width/2;
306        wndDialog._y = 290 - wndDialog._height/2;
307        wndDialog._visible = true;
308}
309
310function ShowMessage(message, title, showMessageCallBack, showMessageObj)
311{
312        messageShowing = true;
313        ShowGrayScreen();
314        Alert.buttonWidth = 60;
315        Alert.okLabel = lang.btnOK;
316        Alert.show(
317                message, title, Alert.OK, _root,
318                function(evt) {
319                        messageShowing = false;
320                        ShowGrayScreen(false);
321                        if (showMessageCallBack!=undefined)
322                                showMessageCallBack.call(showMessageObj);
323                },
324                null, Alert.OK );
325}
326
327function ShowQuestion(message, caption, cancel, yesFunction, noFunction) {
328        messageShowing = true;
329        ShowGrayScreen();
330        Alert.buttonWidth = 60;
331        Alert.yesLabel = lang.btnYes;
332        Alert.noLabel = lang.btnNo;
333        Alert.cancelLabel = cancel;
334       
335        var msgButtons = Alert.YES | Alert.NO;
336        if( cancel!="" ) msgButtons |= Alert.CANCEL;
337       
338        Alert.show(
339                message, caption, msgButtons, _root,
340                function(evt) {
341                        messageShowing = false;
342                        ShowGrayScreen(false);
343                        if( evt.detail==Alert.YES) yesFunction();
344                        if( evt.detail==Alert.NO ) noFunction();
345                },
346                "Question Movie", Alert.YES
347        );
348}
349
350function LoadPopupMovie(title, filename, onClickOK, onClickCancel, parentObj, languagePath) {
351        if (languagePath != undefined) {
352                plang = lang.createEmptyMovieClip("popup", lang.getNextHighestDepth());
353                loadVariables(appPath + languagePath + slash + language + ".txt", lang.popup);
354                lang.popup.onData = function() {
355                        LoadPopupMovie(title, filename, onClickOK, onClickCancel, parentObj);
356                };
357                return;
358        }
359        var frame = "";
360        if (filename.indexOf("|") != -1) {
361                var a = filename.split("|");
362                filename = a[0];
363                frame = a[1];
364        }
365        var initObj = {title: title, contentPath: _root.appPath + filename, closeButton: true};
366        var mcPopup = mx.managers.PopUpManager.createPopUp(_root, mx.containers.Window, true, initObj);
367        var oldPressEnter = _root.onPressEnter;
368        var oldPressEsc = _root.onPressEsc;
369        var oldPressDelete = _root.oldPressDelete;
370        _root.onPressEnter = undefined;
371        _root.onPressEsc = undefined;
372        _root.oldPressDelete= undefined;
373        parentObj.SetBehindDialog(true);
374        mcPopup._visible = false;
375
376        mcPopup.onCloseDialog = function() {
377                mcPopup.deletePopUp();
378                lang.popup.removeMovieClip();
379                _root.onPressEnter = oldPressEnter;
380                _root.onPressEsc = oldPressEsc;
381                _root.oldPressDelete = oldPressDelete;
382                parentObj.SetBehindDialog(false);
383                onClickCancel();
384        };
385        mcPopup.onFinishInput = function(retVal) {
386                mcPopup.onCloseDialog();
387                onClickOK(retVal);
388        };
389        mcPopup.setDlgSize = function() {
390                var movie = mcPopup.content;
391                var size = movie.getMovieSize? movie.getMovieSize(): {width: movie._width, height: movie._height};
392                mcPopup.setSize(size.width + 6, size.height + 34);
393                mcPopup._x = 400 - mcPopup.width/2;
394                mcPopup._y = 290 - mcPopup.height/2;
395                mcPopup._visible = true;
396        }
397        mcPopup.addEventListener("complete", function() {if (frame!="") mcPopup.content.gotoAndStop(frame); mcPopup.setDlgSize()});
398        mcPopup.addEventListener("click", function() {if (onClickCancel!==false) mcPopup.onCloseDialog()});
399
400        return mcPopup;
401}
402
403function ClearAllData() {
404        dataXML.firstChild.removeNode();
405        movScene.ClearBackGround();
406        while (movScene.bkgnd_node.childNodes.length > 0) movScene.bkgnd_node.lastChild.removeNode();
407        while (treItem.length > 0) treItem.removeItemAt(0);
408        currentFile = "";
409        dataChanged = "false";
410        undoData.splice(0);
411        undoPos = 0;
412        GetRelatedFiles();
413}
414
415function ExecWithConfirmSave(execFunction)
416{
417        if( dataChanged == "true" ) {
418                ShowQuestion(
419                        lang.msgConfirmSave, lang.msgTitle, lang.btnContinue,
420                        function() { SaveAndExec(execFunction) },
421                        execFunction
422                );
423        } else {
424                execFunction();
425        }
426}
427
428function ChangeTempPath(tmpPathName) {
429        var pos = tempPath.length;
430        var tmp = GetFullFileName(tmpPathName);
431        if( tmp.substr(0, pos) == tempPath )
432                return defaultFilePath + tmp.substr(pos);
433        return tmpPathName;
434}
435
436function EncodeXml(s)
437{
438        s = Replace(s, '&', "&amp;");
439        s = Replace(s, '"', "&quot;");
440        s = Replace(s, '<', "&lt;");
441        s = Replace(s, '>', "&gt;");
442        return escape(s);
443}
444
445function SaveAndExec(execFunction, isSaveAs)
446{
447        if( currentFile == "" || isSaveAs ) {
448                if (online) {
449                        ShowGrayScreen();
450                        var pop = LoadPopupMovie(lang.mnuSaveAs, "Popup" + slash + "Space.swf",
451                        function(param) {SaveToFile(execFunction, param)},
452                        function() {ShowGrayScreen(false)});
453                        pop.defExt = "xvl";
454                        pop.filter = ["xvl"];
455                        return;
456                }
457                fscommand("Save As", "");
458                ShowGrayScreen();
459                command = "";
460                onEnterFrame = function() {
461                        if( command == "" ) return;
462                        ShowGrayScreen(false);
463                        if( command == "Save As OK" ) {
464                                GetDataChangePath(GetFullFileName, dataXML.firstChild);
465                                currentFile = savedFileName;
466                                GetDataChangePath(GetRelativeFileName, dataXML.firstChild);
467                                SaveToFile(execFunction, true);
468                                fscommand("Set Title", currentFile);
469                        }
470                        else {
471                                onEnterFrame = WaitForAppCommand;
472                                command = "";
473                        }
474                }
475                return;
476        }
477        SaveToFile(execFunction);
478}
479
480function SaveToFile(execFunction, param) {
481        var isFirstSave = (param != undefined);
482        if(  isFirstSave ) {
483                var pos1 = currentFile.lastIndexOf(slash) + 1;
484                var pos2 = currentFile.lastIndexOf(".");
485                defaultFilePath = currentFile.substring(pos1, pos2) + " files" + slash;
486                GetDataChangePath(ChangeTempPath, dataXML.firstChild);
487                filesForRetrieve = fileList;
488                GetRelatedFiles();
489        }
490
491        ascData = new XML(dataXML.toString());
492        if (movScene.bkgnd_node.childNodes.length > 0)
493                if( !ascData.firstChild.firstChild ) ascData.firstChild.appendChild(movScene.bkgnd_node.cloneNode(true));
494                else ascData.firstChild.insertBefore(movScene.bkgnd_node.cloneNode(true), ascData.firstChild.firstChild);
495
496        if( online ) {
497                var xml:XML = new XML();
498                xml.ignoreWhite = true;
499                xml.onLoad = function(success) {
500                        if (!checkSuccess(success, "errServerConnect", "Không thể kết nối tới server.")) return;
501                        var attr = this.firstChild.attributes;
502                        if (!checkSuccess(attr.err=="", attr.errCode, attr.err)) return;
503                        currentFile = attr.id;
504                        fscommand("Set Title", attr.name);
505                        dataChanged = "false";
506                        execFunction();
507                }
508                var request = spaceUrl + "save";
509                if (isFirstSave) request += "?userid="+param.userid + "&dir="+param.dir + "&name="+param.name;
510                else request += "?fileid="+currentFile;
511                ascData.sendAndLoad(request, xml);
512                return;
513        }
514
515        UnicodeAscii(EncodeXml, ascData.firstChild);
516        ascData = defXmlDecl + GetAlignedXml(ascData, 0);
517
518        fscommand("Save", "");
519        command = "";
520        onEnterFrame = function() {
521                if( command == "" ) return;
522                onEnterFrame = WaitForAppCommand;
523                if( command == "Save OK" ) execFunction();
524                if( command == "Save Error" ) ShowMessage(lang.msgSaveError, lang.msgTitle1);
525                if( isFirstSave ) fscommand("Retrieve", "");
526                else fscommand("Cleanup", "");
527                delete ascData;
528                command = "";
529        }
530}
531
532////////////////////////////////////////////////////////////////////////////////
533// MENU FILE FUNCTIONS
534//
535btnNew.onRelease = function() {
536        ExecWithConfirmSave(CreateNewData);
537}
538
539function InitializeDataXML() {
540        var lectureNode = commonXML.createElement("LECTURE_INFO");
541        if( appUserName ) {
542                lectureNode.attributes.Info = unescape(appUserName) + " - " + unescape(appAddress);
543                lectureNode.attributes.Check = lectureNode.attributes.Info.length + 13;
544        }
545        lectureNode.attributes.CommonDir = commonDir;
546        lectureNode.attributes.Layout = "Layout1.swf";
547        lectureNode.attributes.Title = "";
548        lectureNode.attributes.Version = version;
549        dataXML.appendChild(lectureNode);
550}
551
552function CreateNewData() {
553        ClearAllData();
554        InitializeDataXML();
555        movScene.onLoadXMLData();
556        fscommand("Set Title", "");
557}
558
559btnOpen.onRelease = function() {
560        ExecWithConfirmSave(
561        function() {
562                if (online) {
563                        ShowGrayScreen();
564                        var pop = LoadPopupMovie(lang.mnuOpen, "Popup" + slash + "Space.swf",
565                        function(param) {
566                                ClearAllData();
567                                currentFile = param.id;
568                                fscommand("Set Title", param.name);
569                                LoadXMLData(spaceUrl + "file?id="+param.id+"&userid="+param.userid);
570                        },
571                        function() {ShowGrayScreen(false)});
572                        pop.defExt = "xvl";
573                        pop.filter = ["xvl"];
574                        return;
575                }
576                command = "";
577                openedFileName = "";
578                fscommand("Open", "");
579                ShowGrayScreen();
580               
581                onEnterFrame = function() {
582                        if( command == "" ) return;
583                        ShowGrayScreen(false);
584                        if( command == "Open OK" ) OpenNewFile();
585                        onEnterFrame = WaitForAppCommand;
586                        command = "";
587                }
588        });
589}
590
591function OpenNewFile() {
592        ClearAllData();
593        currentFile = openedFileName;
594        fscommand("Set Title", currentFile);
595        LoadXMLData(currentFile);
596}
597
598btnSave.onRelease = function() {
599        SaveAndExec();
600}
601
602btnLibrary.onRelease = function() {
603        ShowGrayScreen();
604        var pop = LoadPopupMovie(lang.mnuLibrary, "Popup" + slash + "Library.swf",
605        function(filename) {
606                ClearAllData();
607                openedFileName = filename;
608                LoadXMLData(filename);
609        },
610        function() {ShowGrayScreen(false)});
611        pop.libPaths = _root.lecturePaths;
612        pop.remember = true;
613        pop.okTitle = lang.mnuOpen;
614}
615
616btnPack.onRelease = function() {
617        GetRelatedFiles(true);
618
619        var slashPos = currentFile.lastIndexOf(slash);
620        if( !online && currentFile.substr(slashPos + 1) == "Scenario.xvl" ) {
621                ShowQuestion(lang.msgHasPacked, lang.msgTitle4, lang.btnCancel,
622                function() {
623                        oldpackType = packageType;
624                        packageType = 0;
625                        packagePath = currentFile.substring(0, slashPos)
626                        CreatePackage("Overwrite");
627                        dataChanged = "false";
628                },
629                function() {
630                        ShowDialog("Pack", lang.mnuPack);
631                });
632                return;
633        }
634
635        ShowDialog("Pack", lang.mnuPack);
636}
637
638function CreatePackage(status, paid) {
639        if (online && (isNaN(userLevel) || userLevel < 1) && !paid) {
640                ShowGrayScreen();
641                LoadPopupMovie("lang.dlgLicenseTitle", "Popup" + slash + "UserManager.swf|Package",
642                function() {CreatePackage(status, true)},
643                function() {ShowGrayScreen(false)},
644                null, "Language" + slash + "User");
645                return;
646        }
647        if( webbase ) {
648                treItem.enabled = false;
649                xml = new XML();
650                xml.onLoad = function() {
651                        treItem.enabled = true;
652                        var param = "userid=" + userId;
653                        param += "&name=" + escape(packagePath);
654                        param += "&id=" + this.firstChild.attributes.id;
655                        getUrl(rootPath + "Service/packdownload.php?" + param);
656                }
657                var lv:LoadVars = new LoadVars();
658                lv.userid = userId;
659                lv.name = packagePath;
660                lv.type = packageType;
661                lv.dataNum = dataFileNum;
662                lv.commonNum = commonFileNum;
663                lv.fileList = fileListStr.split("|").join(",");
664                if (packageType == 1) lv.packagePlayer = packagePlayer;
665                if (packageType == 3) {
666                        lv.scormVersion = scormVersion;
667                        lv.scormTitle = packXML.firstChild.attributes.Title;
668                        lv.scormOrgData = GetAlignedXml(CreateOrganization(packXML), 3);
669                }
670                lv.dataXml = defXmlDecl + GetAlignedXml(packXML, 0);
671                lv.sendAndLoad(rootPath + "Service/package.php", xml);
672                return;
673        }
674
675        if( status==undefined ) status = "";
676        SwitchCurrentVideo(movScene.currMovie, "close");
677        treItem.enabled = false;
678       
679        ascData = new XML(packXML.toString());
680        UnicodeAscii(EncodeXml, ascData.firstChild);
681        if( packageType == 3 ) {
682                scormTitle = ascData.firstChild.attributes.Title;
683                scormOrgData = GetAlignedXml(CreateOrganization(ascData), 3);
684        }
685        ascData = defXmlDecl + GetAlignedXml(ascData, 0);
686
687        fscommand("Pack", status);
688        command = "";
689               
690        onEnterFrame = function() {
691                if( command == "" ) return;
692                if( command == "Create Error" ) {
693                        ShowMessage(lang.msgDirError, lang.msgTitle1);
694                }
695                if( command == "Copy Error" || command == "Save Error" ) {
696                        ShowMessage(lang.msgPackError + copiedFile + "\r\r ", lang.msgTitle1);
697                }
698                if( command == "Dir Existed" ) {
699                        ShowQuestion(
700                                lang.msgPackOver, lang.msgTitle, lang.btnCancel,
701                                function() { CreatePackage("Overwrite", paid) },
702                                function() { CreatePackage("Merge", paid) }
703                        );
704                }
705                SwitchCurrentVideo(movScene.currMovie, "replay");
706                treItem.enabled = true;
707
708                if( packageType == 0 ) packageType = oldpackType;
709                onEnterFrame = WaitForAppCommand;
710                delete ascData;
711                command = "";
712        }
713}
714
715function ExitProgram()
716{
717        if (online) {
718                var lv:LoadVars = new LoadVars();
719                lv.send(userUrl + "logout");
720        }
721        ExecWithConfirmSave(
722        function() {
723                SaveConfig();
724                fscommand("Quit", "");
725        });
726}
727
728////////////////////////////////////////////////////////////////////////////////
729// MENU EDIT FUNCTIONS
730//
731function UpdateUndoData() {
732        undoData.splice(undoPos);
733        if(undoData.length >= maxUndo) undoData.shift();
734        var node = dataXML.firstChild.cloneNode(true);
735        node.attributes.selectedIndex = treItem.selectedIndex;
736        undoData.push(node);
737        undoPos = undoData.length;
738        dataChanged = "true";
739}
740
741function RestoreFromUndoData() {
742        while (treItem.length > 0) treItem.removeItemAt(0);
743        var layout = dataXML.firstChild.attributes.Layout;
744        var title = dataXML.firstChild.attributes.Title;
745        dataXML.firstChild.removeNode();
746        dataXML.appendChild(undoData[undoPos].cloneNode(true));
747        UpdateScreen(true);
748        treItem.selectedIndex = dataXML.firstChild.attributes.selectedIndex;
749        delete dataXML.firstChild.attributes.selectedIndex;
750
751        if( layout != dataXML.firstChild.attributes.Layout ||
752                title != dataXML.firstChild.attributes.Title )
753        {
754                movScene.currentItem = treItem.selectedNode.attributes.item;
755                movScene.currentSection = treItem.selectedNode.attributes.section;
756                movScene.UpdateTemplate();
757        } else {
758                onChangeHandle();
759        }
760}
761
762function ProcessUndo() {
763        if( undoPos == 0 ) return;
764        if( undoPos == undoData.length ) {UpdateUndoData(); undoPos--;}
765        undoPos--;
766        RestoreFromUndoData();
767}
768
769function ProcessRedo() {
770        if( undoPos == undoData.length ) return;
771        undoPos++;
772        RestoreFromUndoData();
773        if( undoPos == undoData.length - 1 ) undoData.pop();
774}
775
776btnCutItem.onRelease = btnCutOnRelease = function() {
777        CopyToClipboard(DeleteItem);
778}
779
780btnCopyItem.onRelease = btnCopyOnRelease = function() {
781        CopyToClipboard();
782}
783
784function GetElementChangePath(change, node) {
785        if( node.attributes.hyperlink.charAt(0) == "1" ) {
786                node.attributes.hyperlink = "1|" + change(node.attributes.hyperlink.substr(2));
787        }
788        if( node.nodeName == "IMAGE" || node.nodeName == "MEDIA" ) {
789                node.attributes.url = change(node.attributes.url);
790        }
791        if( node.nodeName == "PLUGIN" ) {
792                ChangeXMLFileInfo(node.firstChild, change, pluXML.childNodes[1].childNodes[1].attributes[node.firstChild.nodeName]);
793                var subNodes = node.firstChild.childNodes;
794                for( var i=0; i<subNodes.length; i++ )
795                        if( subNodes[i].attributes.hyperlink.charAt(0) == "1" )
796                                subNodes[i].attributes.hyperlink = "1|" + change(subNodes[i].attributes.hyperlink.substr(2));
797                var langAttr = node.childNodes[1].firstChild.attributes;
798                for (var a in langAttr) if (a.substr(0, 5)=="file_") langAttr[a] = change(langAttr[a]);
799        }
800}
801
802function GetNodeChangePath(change, itemData) {
803        for( var k=0; k<itemData.childNodes.length; k++ ) {
804                var node = itemData.childNodes[k];
805                GetElementChangePath(change, node);
806        }
807}
808
809function GetDataChangePath(change, itemData) {
810        if( itemData.nodeName == "LECTURE_INFO" ) ChangeLayoutFileParam(itemData, change);
811        if( itemData.nodeName == "LECTURE_INFO" || itemData.nodeName == "SECTION_INFO" || itemData.nodeName == "BACKGROUND_INFO" )
812                for( var i = 0; i < itemData.childNodes.length; i++ )
813                GetDataChangePath(change, itemData.childNodes[i]);
814        else
815                GetNodeChangePath(change, itemData);
816}
817
818function CopyToClipboard(execFunction) {
819        if( treItem.length == 0 ) return;
820
821        var section = treItem.selectedNode.attributes.section-1;
822        var item = treItem.selectedNode.attributes.item-1;
823        var itemData = (item>=0) ?
824                dataXML.firstChild.childNodes[section].childNodes[item] :
825                dataXML.firstChild.childNodes[section];
826
827        var copiedData = itemData.cloneNode(true);
828        GetDataChangePath(GetFullFileName, copiedData);
829
830        command = "";
831        ascData = new XML(copiedData.toString());
832        UnicodeAscii(escape, ascData);
833        fscommand("Set Clipboard", dataID + ascData.toString());
834        onEnterFrame = function() {
835                if( command == "" ) return;
836                if( command == "Set OK" ) execFunction();
837                onEnterFrame = WaitForAppCommand;
838                delete ascData;
839                command = "";
840        }
841}
842
843btnPasteItem.onRelease = btnPasteOnRelease = function() {
844        command = "";
845        clipboardData = "";
846        fscommand("Get Clipboard");
847
848        onEnterFrame = function() {
849                if( command == "" ) return;
850                if( command == "Get Text" ) {
851                        if( clipboardData.substr(0, dataID.length) == dataID ) {
852                                var xmlClipboard = new XML(clipboardData.substr(dataID.length));
853                                var itemData = xmlClipboard.firstChild;
854                                UnicodeAscii(unescape, itemData);
855                                GetDataChangePath(GetRelativeFileName, itemData);
856
857                                var section = treItem.selectedItem.attributes.section;
858                                if( itemData.nodeName == "SECTION_INFO" ) AddSectionData(itemData);
859                                else if( section != undefined) AddItemData(section - 1, itemData);
860                        }
861                }
862                onEnterFrame = WaitForAppCommand;
863                command = "";
864        }
865}
866       
867////////////////////////////////////////////////////////////////////////////////
868// MENU CONTENT FUNCTIONS
869//
870btnAdd.onRelease = function() {
871        isChanging = false;
872        inputingCover = false;
873        ShowDialog("Item", lang.dlgItem);
874}
875       
876btnDetail.onRelease = function() {
877        if( treItem.length == 0 ) return;
878        treCurrentNode = treItem.selectedNode;
879        var section = treItem.selectedNode.attributes.section-1;
880
881        var item = treItem.selectedNode.attributes.item-1;
882        if(item>=0) changingNode = dataXML.firstChild.childNodes[section].childNodes[item];
883        else changingNode = dataXML.firstChild.childNodes[section];
884        wndDialog.content.node = changingNode.cloneNode(true);
885        isChanging = true;
886        inputingCover = dataXML.firstChild.childNodes[section].attributes.coverpage=="true";
887
888        if(item<0 && inputingCover ) return;
889
890        if(item>=0) ShowDialog("Item", lang.dlgItem);
891        else ShowDialog("Section", lang.dlgSection);
892}
893
894btnDelete.onRelease = function() {
895        if( treItem.length == 0 ) return;
896        ShowQuestion(lang.msgConfirmDel, lang.msgTitle3, "", DeleteItem);
897}
898
899function SyncVideoAudio() {
900        var section = treItem.selectedNode.attributes.section - 1;
901        var item = treItem.selectedNode.attributes.item - 1;
902        if (item >= 0) {
903                if (movScene.sectionSync) {ShowMessage(lang.msgSyncSection, lang.msgTitle1); return;}
904                movScene.selectItem(movScene.currentItem, true);
905                if (!movScene.firstMediaObj) {ShowMessage(lang.msgSyncNoVideo, lang.msgTitle1); return;}
906                if (movScene.currentIndex == undefined) {ShowMessage(lang.msgSyncNoAction, lang.msgTitle1); return;}
907                wndDialog.content.node = dataXML.firstChild.childNodes[section].childNodes[item];
908        } else {
909                if (movScene.currentItemNum < 2) {ShowMessage(lang.msgSyncNoAction, lang.msgTitle1); return;}
910                movScene.UpdateBackGround();
911                movScene.sectionSync = true;
912                movScene.firstMediaObj = movScene.movPageBkGnd.firstMediaObj;
913                if (!movScene.firstMediaObj) {ShowMessage(lang.msgSyncNoVideo, lang.msgTitle1); return;}
914                movScene.selectItem(1);
915                wndDialog.content.node = dataXML.firstChild.childNodes[section];
916        }
917        movScene.firstMediaObj.autoPlay = true;
918        delete movScene.onEnterFrame;
919        ShowDialog("Sync", lang.mnuSync);
920        wndDialog._x = 15;
921}
922
923function SelectCoverPage() {
924        isChanging = false;
925        inputingCover = true;
926        ShowDialog("Item", lang.dlgItem);
927}
928
929function SelectBackGround() {
930        retFrame = "";
931        ShowDialog("BkGnd", lang.mnuBackGround);
932}
933
934function AddCoverPage(node) {
935        if( !isChanging ) {
936                if( dataXML.firstChild.firstChild.attributes.coverpage=="true" ) {
937                        UpdateUndoData();
938                        dataXML.firstChild.firstChild.firstChild.removeNode();
939                        dataXML.firstChild.firstChild.appendChild(node);
940                        var i = 0;
941                        while( treItem.getItemAt(i).attributes.section != 1 ) i++;
942                        treItem.selectedIndex = i+1;
943                        onChangeHandle();
944                        GetRelatedFiles();
945                } else {
946                        movScene.ClearBackGround();
947                        var sectionInfo = dataXML.createElement("SECTION_INFO");
948                        sectionInfo.attributes.label = lang.coverPage;
949                        sectionInfo.attributes.coverpage = "true";
950                        sectionInfo.attributes.invisible = "true";
951                        sectionInfo.appendChild(node);
952                        AddSectionData(sectionInfo, 0);
953                }
954        } else {
955                UpdateUndoData();
956                changingNode.parentNode.insertBefore(node, changingNode);
957                changingNode.removeNode();
958                onChangeHandle();
959                GetRelatedFiles();
960        }
961}
962
963btnLayout.onRelease = function() {
964        ShowDialog("Layout", lang.mnuLayout);
965}
966
967btnPreview.onRelease = function() {
968        if( btnSceneBkGnd._visible ) { ClosePreview(); return; }
969        fscommand("Set Style", "Popup");
970        btnSceneBkGnd._visible = true;
971        movPlayer.swapDepths(movScenePrev);
972        movPlayer._yscale = 100;
973        movPlayer._xscale = 100;
974        movPlayer._x = 0;
975        movPlayer._y = -10;
976}
977
978function ClosePreview() {
979        if( !btnSceneBkGnd._visible ) return;
980        fscommand("Set Style", "Normal");
981        btnSceneBkGnd._visible = false;
982        movPlayer.swapDepths(movScenePrev);
983        movPlayer._x = 275;
984        movPlayer._y = 100;
985        movPlayer._xscale = 500/8;
986        movPlayer._yscale = 375/6;
987}
988
989////////////////////////////////////////////////////////////////////////////////
990// MENU MODIFY FUNCTIONS
991//
992function EditFile(fileName) {
993        command = "";
994        fscommand("Edit File", fileName);
995        onEnterFrame = function() {
996                if( command == "" ) return;
997                if( command == "Launch Error" ) ShowMessage(lang.msgEditError, lang.msgTitle1);
998                onEnterFrame = WaitForAppCommand;
999                command = "";
1000        }
1001}
1002
1003////////////////////////////////////////////////////////////////////////////////
1004// MENU WINDOWS FUNCTIONS
1005//
1006function ResetWindowSize() {
1007        windowState = 1;
1008        windowTop = 0;
1009        windowLeft = 0;
1010        windowRight = 0;
1011        windowBottom = 0;
1012        fscommand("Set State", "");
1013}
1014
1015function SetFlashViewMode(mode) {
1016        fscommand("View Mode", mode);
1017        flashViewMode = mode;
1018}
1019
1020function ShowConfigDlg() {
1021        ShowDialog("Config", lang.mnuConfig);
1022}
1023
1024function UpdatePlugin() {
1025        ShowDialog("Plugin", lang.mnuUpdateModules);
1026}
1027
1028function UpdateLayout() {
1029        ShowDialog("LayUpdate", lang.mnuUpdateLayouts);
1030}
1031
1032function UpdateCommonLib() {
1033        ShowDialog("LibUpdate", lang.mnuUpdateLibs);
1034}
1035
1036function SaveConfigXML(action, data) {
1037        ascData = new XML(data.toString());
1038        UnicodeAscii(EncodeXml, ascData.firstChild);
1039        ascData = defXmlDecl + GetAlignedXml(ascData, 0);
1040        fscommand(action, "ascData");
1041}
1042
1043function RunApplication(filename) {
1044        SendRequest("Run App", filename, function(response, data) {
1045                if (response != "Run OK") ShowMessage(lang.msgCanNotRun + " " + filename, lang.msgTitle1);
1046        });
1047}
1048////////////////////////////////////////////////////////////////////////////////
1049// MENU HELP FUNCTIONS
1050//
1051btnHelp.onRelease = function() {
1052        getURL("http://hoctructuyen.violet.vn/present/list/cat_id/7795643", "_blank");
1053}
1054
1055function AutoUpgrade() {
1056        ShowDialog("Upgrade", lang.mnuUpgrade);
1057}
1058
1059function AboutProgram() {
1060        ShowDialog("About", lang.mnuAbout);
1061}
1062
1063////////////////////////////////////////////////////////////////////////////////
1064// MENU ACCOUNT FUNCTIONS
1065//
1066function EditAccountInfo() {
1067        ShowGrayScreen();
1068        LoadPopupMovie(lang.dlgLoginTitle, "Popup" + slash + "UserManager.swf|Update",
1069        null, function() {ShowGrayScreen(false)}, null, "Language" + slash + "User");
1070}
1071
1072function ManageCastAccount() {
1073        ShowGrayScreen();
1074        LoadPopupMovie(lang.dlgLoginTitle, "Popup" + slash + "UserManager.swf|Payment",
1075        null, function() {ShowGrayScreen(false)}, null, "Language" + slash + "User");
1076}
1077
1078function ShowVioletLicense() {
1079        ShowGrayScreen();
1080        LoadPopupMovie(lang.dlgLoginTitle, "Popup" + slash + "UserManager.swf|License",
1081        null, function() {ShowGrayScreen(false)}, null, "Language" + slash + "User");
1082}
1083
1084function LoginViolet() {
1085        ShowGrayScreen();
1086        LoadPopupMovie(lang.dlgLoginTitle, "Popup" + slash + "UserManager.swf|Login",
1087        function(lv) {
1088                ShowGrayScreen(false);
1089                userId = lv.id;
1090                userLevel = lv.level;
1091                userPhone = lv.phone;
1092                userMoney = lv.money;
1093                appUserName = lv.fullname;
1094                appAddress = lv.school + ", " + lv.province;
1095                dataXML.firstChild.attributes.Info = unescape(appUserName) + " - " + unescape(appAddress);
1096                dataXML.firstChild.attributes.Check = dataXML.firstChild.attributes.Info.length + 13;
1097                movScene.movTemplate.userInfo = movDefLayout.userInfo = dataXML.firstChild.attributes.Info;
1098                licenseInfo = {type: lv.licType, customer: lv.licCustomer, create: lv.licCreate, expire: lv.licExpire}
1099        }, false, null, "Language" + slash + "User");
1100}
1101
1102// Thay cho phần LoginViolet:
1103dataXML.firstChild.attributes.Info = unescape(appUserName) + " - " + unescape(appAddress);
1104dataXML.firstChild.attributes.Check = dataXML.firstChild.attributes.Info.length + 13;
1105movScene.movTemplate.userInfo = movDefLayout.userInfo = dataXML.firstChild.attributes.Info;
1106licenseInfo = {type: licType, customer: licCustomer, create: licCreate, expire: licExpire}
1107
1108
1109function LogoutViolet() {
1110        ExecWithConfirmSave(function() {
1111                CreateNewData();
1112                var lv:LoadVars = new LoadVars();
1113                lv.send(userUrl + "logout");
1114                userId = 0;
1115                LoginViolet();
1116        });
1117}
1118
1119////////////////////////////////////////////////////////////////////////////////
1120// RIGHT CLICK MENU ITEMS
1121//
1122function InitTreeContextMenu() {
1123        var cmTree = new ContextMenu();
1124        var cmiAbout = new ContextMenuItem("About ViOLET...", function() {getURL("http://www.bachkim.vn", "_blank")});
1125        var cmiCut = new ContextMenuItem("Cut (Ctrl+X)", btnCutOnRelease);
1126        var cmiCopy = new ContextMenuItem("Copy (Ctrl+C)", btnCopyOnRelease);
1127        var cmiPaste = new ContextMenuItem("Paste (Ctrl+V)", btnPasteOnRelease);
1128        var cmiAdd = new ContextMenuItem("Add (F5)", btnAdd.onRelease);
1129        var cmiChange = new ContextMenuItem("Change (F6)", btnDetail.onRelease);
1130        var cmiDelete = new ContextMenuItem("Delete (Del)", btnDelete.onRelease);
1131        cmiCut.separatorBefore = true;
1132        cmiAdd.separatorBefore = true;
1133        cmTree.hideBuiltInItems();
1134        cmTree.customItems.push(cmiAbout, cmiCut, cmiCopy, cmiPaste, cmiAdd, cmiChange, cmiDelete);
1135        treItem.menu = cmTree;
1136}
Note: See TracBrowser for help on using the repository browser.