Exportfile for AOT version 1.0 or later Formatversion: 1 ***Element: CLS ; Microsoft Business Solutions-Axapta Class: TabaxPlugin_RecentProjects, выгружен Понедельник 14.05.2007 ; -------------------------------------------------------------------------------- CLSVERSION 1 CLASS #TabaxPlugin_RecentProjects PROPERTIES Name #TabaxPlugin_RecentProjects Extends #TabaxPluginBase RunOn #Client ENDPROPERTIES METHODS Version: 3 SOURCE #addProject2Recent #void addProject2Recent(str _projectName) #{ # ; # if (_projectName) # { # mruProjects = conDel(mruProjects, conFind(mruProjects, _projectName), 1); # mruProjects = [_projectName] + mruProjects; # if (conLen(mruProjects) > #RecentProjectListCountMax) # mruProjects = conDel(mruProjects, 1 + #RecentProjectListCountMax, conLen(mruProjects) - #RecentProjectListCountMax); # } #} ENDSOURCE SOURCE #afterWindowClosed #void afterWindowClosed(Tabax _tabax, HWND _handle) #{ # ; # super(_tabax, _handle); # # if (mruProjectWindows && mruProjectWindows.exists(_handle)) # { # this.addProject2Recent(mruProjectWindows.lookup(_handle)); # # mruProjectWindows.remove(_handle); # } #} # ENDSOURCE SOURCE #afterWindowOpened #void afterWindowOpened(Tabax _tabax, HWND _handle, str _title) #{ # super(_tabax, _handle, _title); # # if (this.isProjectWindow(_handle)) # { # this.addProject2Recent(_title); # # if (!mruProjectWindows) # mruProjectWindows = new Map(Types::Integer, Types::String); # mruProjectWindows.insert(_handle, _title); # } #} ENDSOURCE SOURCE #afterWindowUpdated #void afterWindowUpdated(Tabax _tabax, HWND _handle, str _title) #{ # int projectIdx; # ; # super(_tabax, _handle, _title); # # if (this.isProjectWindow(_handle) && mruProjectWindows && mruProjectWindows.exists(_handle)) # { # /// Delete previous name of the project # projectIdx = conFind(mruProjects, mruProjectWindows.lookup(_handle)); # mruProjects = conDel(mruProjects, projectIdx, 1); # # /// Add the project to the top of the list # this.addProject2Recent(_title); # # mruProjectWindows.insert(_handle, _title); # } #} ENDSOURCE SOURCE #beforeClose #void beforeClose(Tabax _tabax) #{ # MapEnumerator mruProjectsEnumerator; # ; # super(_tabax); # # try # { # if (mruProjectWindows) # { # mruProjectsEnumerator = mruProjectWindows.getEnumerator(); # /// Add all opened projects to the RecentProjects list # while (mruProjectsEnumerator.moveNext()) # { # this.addProject2Recent(mruProjectsEnumerator.currentValue()); # } # } # xSysLastValue::saveLast(this); /// Save RecentProjects to SysLastValue # } # catch # { # error(strFmt("@SYS70938", "@SYS67795", strFmt("@SYS63093", funcName()))); # } # # /// Clean up (not needed, but left here just in case # mruProjectWindows = null; # pickListFormRun = null; # infolog.globalCache().clear(classStr(TabaxPlugin_RecentProjects)); #} # ENDSOURCE SOURCE #classDeclaration #/// Recent Projects plugin for Tabax #///@desc #/// Version 0.1 #/// The list is based on last access time, not opening time #///@see #/// See http://www.axaptapedia.com/TabaxPlugin_RecentProjects #/// ContactInfo: Ivan Kashperuk, ivan.kashperuk@gmail.com ##define.ProjectPrefix("@SYS4534") #class TabaxPlugin_RecentProjects extends TabaxPluginBase implements SysPackable #{ # Map mruProjectWindows; # container mruProjects; # Object pickListFormRun; # # #define.CurrentVersion(3) # #define.RecentProjectListCountMax(15) # #define.RecentProjectBut("RecentProjectBut") #} ENDSOURCE SOURCE #connected #void connected() #{ # ; # super(); # # xSysLastValue::getLast(this); # # if (this.initPlugin()) # { # infolog.globalCache().set(classStr(TabaxPlugin_RecentProjects), identifierStr(instance), this); # # #subscribe(beforeClose) # #subscribe(afterWindowOpened) # #subscribe(afterWindowUpdated) # #subscribe(afterWindowClosed) # } #} ENDSOURCE SOURCE #initParmDefault #void initParmDefault() #{ # ; #} ENDSOURCE SOURCE #initPlugin #boolean initPlugin() #{ # FormGroupControl pluginsGroup; # FormFunctionButtonControl recentProjectsBut; # ; # # pluginsGroup = tabax.pluginsGroup(); # recentProjectsBut = pluginsGroup.addControl(FormControlType::MenuFunctionButton, #RecentProjectBut); # recentProjectsBut.buttonDisplay(FormButtonDisplay::ImageOnly); # recentProjectsBut.normalResource(1006); # recentProjectsBut.border(3); # recentProjectsBut.backStyle(FormBackStyle::Transparent); # # recentProjectsBut.menuItemType(MenuItemType::Action); # recentProjectsBut.menuItemName(menuItemActionStr(DEV_TabaxPlugin_RecentProjects)); # # return true; #} ENDSOURCE SOURCE #isProjectWindow #boolean isProjectWindow(HWND _handle) #{ # return tabax.strStartsWith(WinApi::getWindowText(_handle), #ProjectPrefix); #} ENDSOURCE SOURCE #lastProject #str lastProject() #{ # if (conLen(mruProjects) > 0) # return conPeek(mruProjects, 1); # return ''; #} ENDSOURCE SOURCE #lastValueDataAreaId #DataAreaId lastValueDataAreaId() #{ # return curExt(); #} ENDSOURCE SOURCE #lastValueDesignName #str lastValueDesignName() #{ # return ''; #} ENDSOURCE SOURCE #lastValueElementName #str lastValueElementName() #{ # return classId2Name(ClassIdGet(this)); #} ENDSOURCE SOURCE #lastValueType #UtilElementType lastValueType() #{ # return UtilElementType::Class; #} ENDSOURCE SOURCE #lastValueUserId #UserId lastValueUserId() #{ # return curUserId(); #} ENDSOURCE SOURCE #list_context #void list_context() #{ # FormListControl list; # PopupMenu menu; # int selection; # int delete; # int deleteAll; # int setAsStartup; # int clearStartupProject; # # MapEnumerator mruProjectsEnumerator; # boolean isWindowOpen; # # UserInfo userInfo; # ; # if (pickListFormRun.choice()) # { # list = pickListFormRun.list(); # menu = new PopupMenu(list.hWnd()); # setAsStartup = menu.insertItem("Set as startup project"); # clearStartupProject = menu.insertItem("Clear startup project"); # menu.insertBreak(); # delete = menu.insertItem("Remove from history"); # selection = menu.draw(); # # switch (selection) # { # case setAsStartup: # ttsBegin; # userInfo = xUserInfo::find(true, curUserId()); # userInfo.StartupProject = pickListFormRun.choice(); # userInfo.update(); # ttsCommit; # break; # # case clearStartupProject: # ttsBegin; # userInfo = xUserInfo::find(true, curUserId()); # userInfo.StartupProject = ''; # userInfo.update(); # ttsCommit; # break; # # case delete: # if (mruProjectWindows) # { # mruProjectsEnumerator = mruProjectWindows.getEnumerator(); # while (mruProjectsEnumerator.moveNext()) # { # if (mruProjectsEnumerator.currentValue() == pickListFormRun.choice()) # { # isWindowOpen = true; # break; # } # } # } # if (!isWindowOpen) # { # mruProjects = conDel(mruProjects, conFind(mruProjects, pickListFormRun.choice()), 1); # list.delete(pickListFormRun.choiceInt()); # } # break; # } # } #} ENDSOURCE SOURCE #openProject #void openProject(str _projectName) #{ # ProjectNode projectNode; # MapEnumerator openProjectsEnumerator; # ; # if (_projectName) # { # projectNode = SysTreeNode::getSharedProject().AOTfindChild(_projectName); # if (!projectNode) # projectNode = SysTreeNode::getPrivateProject().AOTfindChild(_projectName); # # if (projectNode) # { # projectNode = projectNode.getRunNode(); /// Open the project and dependandts # if (mruProjectWindows) # { # openProjectsEnumerator = mruProjectWindows.getEnumerator(); # while (openProjectsEnumerator.moveNext()) # { # if (openProjectsEnumerator.currentValue() == _projectName) # { # infolog.activateWindow(openProjectsEnumerator.currentKey()); # break; # } # } # } # } # } #} ENDSOURCE SOURCE #pack #container pack() #{ # return [#CurrentVersion, mruProjects]; #} ENDSOURCE SOURCE #pickProject ##define.ImageProject(7665) #str pickProject() #{ # Form form; # FormBuildDesign design; # FormListControl list; # str choice; # int mouseX; # int mouseY; # ; # pickListFormRun = classFactory.createPicklist(); # # form = pickListFormRun.form(); # design = form.design(); # design.frame(FormFrame::Dialog); /// Frame - Dialog # design.alwaysOnTop(true); /// Always on Top - true # design.windowType(FormWindowType::PopUp); /// WindowType - Popup # # //[mouseX, mouseY] = WinAPI::getCursorPos(); # //design.left(mouseX); # //design.top(mouseY); # # pickListFormRun.init(); # pickListFormRun.controlMethodOverload(true); # pickListFormRun.controlMethodOverloadObject(this); # # pickListFormRun.choices(mruProjects, #ImageProject); # pickListFormRun.caption("@SYS75162"); # # list = pickListFormRun.list(); # list.sort(0); /// SortOrder - None # list.rowSelect(true); # pickListFormRun.resizeWindow(280, 270); # # pickListFormRun.run(); # pickListFormRun.wait(); # # choice = pickListFormRun.choice(); # pickListFormRun = null; /// Delete FormRun from memory (as it is declared in ClassDeclaration) # # return choice; #} ENDSOURCE SOURCE #pickProjectPopupMenu #str pickProjectPopupMenu() #{ # FormFunctionButtonControl but; # PopupMenu menu; # int iWinId; # str menuItemPrefix; # ; # but = tabax.design().controlName(#RecentProjectBut); # menu = new PopupMenu(but.hWnd()); # # for (iWinId = 1; iWinId <= conLen(mruProjects); iWinId++) # { # menuItemPrefix = (iWinId < 10) ? '&' + int2str(iWinId) : (iWinId > 10) ? int2str(iWinId) : '1&0'; # menu.insertItem(menuItemPrefix + '. ' + conPeek(mruProjects, iWinId), false, false, 0, 100 + iWinId); # } # iWinId = menu.draw() - 100; # # return conPeek(mruProjects, iWinId); #} ENDSOURCE SOURCE #unpack #boolean unpack(container packedClass) #{ # Integer version = conpeek(packedClass, 1); # # switch (version) # { # case #CurrentVersion: # [version, mruProjects] = packedClass; # break; # default: # return false; # } # # return true; #} ENDSOURCE SOURCE #main #static void main(Args args) #{ # TabaxPlugin_RecentProjects plugin; # str projectName; # ; # if (!args || !args.caller() || !SysDictClass::isEqualOrSuperclass(classIdGet(args.caller()), classNum(FormRun))) # throw error(Error::wrongUseOfFunction(classStr(TabaxPlugin_RecentProjects))); # # /// This tool should be available only to developers # if (!hasSecurityKeyAccess(securityKeyNum(SysDevelopment), AccessType::Edit)) # return; # # plugin = infolog.globalCache().get(classStr(TabaxPlugin_RecentProjects), identifierStr(instance), null); # if (!plugin) # throw error(Error::missingRecord(classStr(TabaxPlugin_RecentProjects))); # # try # { # projectName = winApi::isControlButtonDown() ? # plugin.lastProject() # : # winApi::isShiftButtonDown() ? # plugin.pickProject() # : # plugin.pickProjectPopupMenu(); # # plugin.openProject(projectName); # } # catch # { # error(strFmt("@SYS63093", funcName())); # } #} ENDSOURCE ENDMETHODS ENDCLASS ***Element: FTM ; Microsoft Business Solutions-Axapta MENUITEM : DEV_TabaxPlugin_RecentProjects unloaded at Понедельник 14.05.2007 ; -------------------------------------------------------------------------------- VERSION 1 MENUITEM #DEV_TabaxPlugin_RecentProjects Type: 3 PROPERTIES Name #DEV_TabaxPlugin_RecentProjects Label #Recent Projects HelpText #Reopen a recently used project Class #Class Object #TabaxPlugin_RecentProjects Parameters # EnumTypeParameter # EnumParameter # RunOn #Client ConfigurationKey #SysDevelopmentMorphX CountryConfigurationkey # WebConfigurationkey # SecurityKey #SysDevelopment NeededAccessLevel #View Web # WebAccess #All WebSecureTransaction #No WebPage # MultiSelect #No ENDPROPERTIES ENDMENUITEM ***Element: PRN ; Microsoft Business Solutions-Axapta Project : DEV_TabaxPlugin_RecentProjects unloaded at Понедельник 14.05.2007 ; -------------------------------------------------------------------------------- PROJECTVERSION 2 PROJECT #DEV_TabaxPlugin_RecentProjects SHARED PROPERTIES Name #DEV_TabaxPlugin_RecentProjects ENDPROPERTIES GROUP #Classes PROPERTIES Name #Classes ProjectGroupType #Classes GroupMask # PreventEditProperties #No ENDPROPERTIES BEGINNODE FILETYPE 0 UTILTYPE 45 UTILOBJECTID 50284 NODETYPE 329 NAME #TabaxPlugin_RecentProjects ENDNODE ENDGROUP GROUP #Menu Items PROPERTIES Name #Menu Items ProjectGroupType #MenuItems GroupMask # PreventEditProperties #No ENDPROPERTIES GROUP #Action PROPERTIES Name #Action ProjectGroupType #Action GroupMask # PreventEditProperties #No ENDPROPERTIES BEGINNODE FILETYPE 0 UTILTYPE 3 UTILOBJECTID 0 NODETYPE 296 NAME #DEV_TabaxPlugin_RecentProjects ENDNODE ENDGROUP ENDGROUP ENDPROJECT ***Element: END