RecentFilesInit.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * Menu item handler for recent file menu items.
  3. */
  4. function RecentFilesHandler(fileName) {
  5. this.fileName = fileName;
  6. }
  7. RecentFilesHandler.prototype = {};
  8. RecentFilesHandler.prototype.open = function() {
  9. NewFile.createMdiChild(this.fileName);
  10. };
  11. /**
  12. * Specialized QMenu class that shows recently used files.
  13. */
  14. function RecentFilesMenu(basePath) {
  15. QMenu.call(this);
  16. this.basePath = basePath;
  17. }
  18. RecentFilesMenu.prototype = new QMenu();
  19. RecentFilesMenu.prototype.refresh = function() {
  20. var action;
  21. this.clear();
  22. var files = RSettings.getRecentFiles();
  23. if (files.length === 0) {
  24. this.setEnabled(false);
  25. return;
  26. }
  27. this.setEnabled(true);
  28. for (var i=files.length-1; i>=0 ; --i) {
  29. var fi = new QFileInfo(files[i]);
  30. var text = "";
  31. if (files.length - i < 10) {
  32. text = "&";
  33. }
  34. var fn = fi.fileName().elidedText(this.font, 300);
  35. var fp = fi.path().elidedText(this.font, 200);
  36. // make sure ampersand is not interpreted as shortcut indicator:
  37. fn = fn.replace(/&/g, "&&");
  38. fp = fp.replace(/&/g, "&&");
  39. text += (files.length - i) + " "
  40. + fn + " ["
  41. + fp + "]";
  42. action = this.addAction(text);
  43. var h = new RecentFilesHandler(files[i]);
  44. action.triggered.connect(h, h.open);
  45. }
  46. action = new RGuiAction(qsTranslate("RecentFiles", "&Clear List"), this);
  47. action.setRequiresDocument(false);
  48. action.setScriptFile(this.basePath + "/RecentFiles.js");
  49. action.setGroupSortOrder(1501);
  50. action.setSortOrder(100);
  51. action.setWidgetNames(["RecentFilesSubMenu"]);
  52. RGuiAction.addToWidget(action, this);
  53. };
  54. function init(basePath) {
  55. var action = new RGuiAction(qsTranslate("RecentFiles", "Open &Recent"), RMainWindowQt.getMainWindow());
  56. var submenu = new RecentFilesMenu(basePath);
  57. submenu.objectName = "RecentFilesSubMenu";
  58. File.getMenu().aboutToShow.connect(function() { submenu.refresh(); });
  59. action.setRequiresDocument(false);
  60. action.checkable = false;
  61. action.setMenu(submenu);
  62. action.setGroupSortOrder(1000);
  63. action.setSortOrder(400);
  64. action.setWidgetNames(["FileMenu"]);
  65. }