Mercurial > wow > reaction
comparison Editor.lua @ 237:704f4a05a1d7
Demodulificate all bar options (except state options)
| author | Flick |
|---|---|
| date | Thu, 24 Mar 2011 13:11:30 -0700 |
| parents | a5d91d7fd485 |
| children | f255cd69e890 |
comparison
equal
deleted
inserted
replaced
| 236:dcdc0235d489 | 237:704f4a05a1d7 |
|---|---|
| 18 TOPRIGHT = L["Top Right"], | 18 TOPRIGHT = L["Top Right"], |
| 19 BOTTOMLEFT = L["Bottom Left"], | 19 BOTTOMLEFT = L["Bottom Left"], |
| 20 BOTTOMRIGHT = L["Bottom Right"], | 20 BOTTOMRIGHT = L["Bottom Right"], |
| 21 } | 21 } |
| 22 | 22 |
| 23 local Editor = { } | 23 local Editor = { |
| 24 buttonHandlers = { } | |
| 25 } | |
| 24 | 26 |
| 25 function Editor:New() | 27 function Editor:New() |
| 26 -- create new self | 28 -- create new self |
| 27 self = setmetatable( { }, { __index = self } ) | 29 self = setmetatable( { }, { __index = self } ) |
| 28 | 30 |
| 321 bigStep = 0.05, | 323 bigStep = 0.05, |
| 322 order = 4, | 324 order = 4, |
| 323 }, | 325 }, |
| 324 }, | 326 }, |
| 325 }, | 327 }, |
| 328 buttonOpts = self:CreateButtonOptions(bar) | |
| 326 }, | 329 }, |
| 327 plugins = { } | 330 plugins = { } |
| 328 } | 331 } |
| 329 end | 332 end |
| 330 | 333 |
| 345 end | 348 end |
| 346 end | 349 end |
| 347 end | 350 end |
| 348 end | 351 end |
| 349 | 352 |
| 353 function Editor:CreateButtonOptions(bar) | |
| 354 local buttonClass = bar:GetButtonClass() | |
| 355 local classID = buttonClass:GetButtonTypeID() | |
| 356 local handler = self.buttonHandlers[classID] | |
| 357 | |
| 358 if handler then | |
| 359 local h = handler:New(bar) | |
| 360 return h:GetOptions() | |
| 361 end | |
| 362 end | |
| 363 | |
| 350 function Editor:RefreshBarOptions() | 364 function Editor:RefreshBarOptions() |
| 351 for name, key in pairs(self.barOptMap) do | 365 for name, key in pairs(self.barOptMap) do |
| 352 if not ReAction:GetBar(name) then | 366 if not ReAction:GetBar(name) then |
| 353 self.barOptMap[name] = nil | 367 self.barOptMap[name] = nil |
| 354 self.options.args[key] = nil | 368 self.options.args[key] = nil |
| 394 local bar = ReAction:CreateBar(self.tmp.barName, self.tmp.barType or ReAction:GetDefaultBarType(), self.tmp.barRows, self.tmp.barCols, self.tmp.barSize, self.tmp.barSpacing) | 408 local bar = ReAction:CreateBar(self.tmp.barName, self.tmp.barType or ReAction:GetDefaultBarType(), self.tmp.barRows, self.tmp.barCols, self.tmp.barSize, self.tmp.barSpacing) |
| 395 if bar then | 409 if bar then |
| 396 AceConfigDialog:SelectGroup(self.configID, self.barOptMap[self.tmp.barName]) | 410 AceConfigDialog:SelectGroup(self.configID, self.barOptMap[self.tmp.barName]) |
| 397 self.tmp.barName = nil | 411 self.tmp.barName = nil |
| 398 end | 412 end |
| 413 end | |
| 414 end | |
| 415 | |
| 416 ------------------------------- | |
| 417 ---- Action button handler ---- | |
| 418 ------------------------------- | |
| 419 | |
| 420 do | |
| 421 local ActionHandler = { | |
| 422 buttonClass = ReAction.Button.Action, | |
| 423 options = { | |
| 424 hideEmpty = { | |
| 425 name = L["Hide Empty Buttons"], | |
| 426 order = 1, | |
| 427 type = "toggle", | |
| 428 width = "double", | |
| 429 get = "GetHideEmpty", | |
| 430 set = "SetHideEmpty", | |
| 431 }, | |
| 432 lockButtons = { | |
| 433 name = L["Lock Buttons"], | |
| 434 desc = L["Prevents picking up/dragging actions (use SHIFT to override this behavior)"], | |
| 435 order = 2, | |
| 436 type = "toggle", | |
| 437 get = "GetLockButtons", | |
| 438 set = "SetLockButtons", | |
| 439 }, | |
| 440 lockOnlyCombat = { | |
| 441 name = L["Only in Combat"], | |
| 442 desc = L["Only lock the buttons when in combat"], | |
| 443 order = 3, | |
| 444 type = "toggle", | |
| 445 disabled = "LockButtonsCombatDisabled", | |
| 446 get = "GetLockButtonsCombat", | |
| 447 set = "SetLockButtonsCombat", | |
| 448 }, | |
| 449 pages = { | |
| 450 name = L["# Pages"], | |
| 451 desc = L["Use the Dynamic State tab to specify page transitions"], | |
| 452 order = 4, | |
| 453 type = "range", | |
| 454 min = 1, | |
| 455 max = 10, | |
| 456 step = 1, | |
| 457 get = "GetNumPages", | |
| 458 set = "SetNumPages", | |
| 459 }, | |
| 460 mindcontrol = { | |
| 461 name = L["Mind Control Support"], | |
| 462 desc = L["When possessing a target (e.g. via Mind Control), map the first 12 buttons of this bar to the possessed target's actions."], | |
| 463 order = 5, | |
| 464 type = "toggle", | |
| 465 width = "double", | |
| 466 set = "SetMindControl", | |
| 467 get = "GetMindControl", | |
| 468 }, | |
| 469 vehicle = { | |
| 470 name = L["Vehicle Support"], | |
| 471 desc = L["When on a vehicle, map the first 6 buttons of this bar to the vehicle actions. The vehicle-exit button is mapped to the 7th button. Pitch controls are not supported."], | |
| 472 order = 6, | |
| 473 type = "toggle", | |
| 474 width = "double", | |
| 475 get = "GetVehicle", | |
| 476 set = "SetVehicle", | |
| 477 }, | |
| 478 actions = { | |
| 479 name = L["Edit Action IDs"], | |
| 480 order = 7, | |
| 481 type = "group", | |
| 482 inline = true, | |
| 483 args = { | |
| 484 method = { | |
| 485 name = L["Assign"], | |
| 486 order = 1, | |
| 487 type = "select", | |
| 488 width = "double", | |
| 489 values = { [0] = L["Choose Method..."], | |
| 490 [1] = L["Individually"], | |
| 491 [2] = L["All at Once"], }, | |
| 492 get = "GetActionEditMethod", | |
| 493 set = "SetActionEditMethod", | |
| 494 }, | |
| 495 rowSelect = { | |
| 496 name = L["Row"], | |
| 497 desc = L["Rows are numbered top to bottom"], | |
| 498 order = 2, | |
| 499 type = "select", | |
| 500 width = "half", | |
| 501 hidden = "IsButtonSelectHidden", | |
| 502 values = "GetRowList", | |
| 503 get = "GetSelectedRow", | |
| 504 set = "SetSelectedRow", | |
| 505 }, | |
| 506 colSelect = { | |
| 507 name = L["Col"], | |
| 508 desc = L["Columns are numbered left to right"], | |
| 509 order = 3, | |
| 510 type = "select", | |
| 511 width = "half", | |
| 512 hidden = "IsButtonSelectHidden", | |
| 513 values = "GetColumnList", | |
| 514 get = "GetSelectedColumn", | |
| 515 set = "SetSelectedColumn", | |
| 516 }, | |
| 517 pageSelect = { | |
| 518 name = L["Page"], | |
| 519 order = 4, | |
| 520 type = "select", | |
| 521 width = "half", | |
| 522 hidden = "IsPageSelectHidden", | |
| 523 values = "GetPageList", | |
| 524 get = "GetSelectedPage", | |
| 525 set = "SetSelectedPage", | |
| 526 }, | |
| 527 single = { | |
| 528 name = L["Action ID"], | |
| 529 usage = L["Specify ID 1-120"], | |
| 530 order = 5, | |
| 531 type = "input", | |
| 532 width = "half", | |
| 533 hidden = "IsButtonSelectHidden", | |
| 534 get = "GetActionID", | |
| 535 set = "SetActionID", | |
| 536 validate = "ValidateActionID", | |
| 537 }, | |
| 538 multi = { | |
| 539 name = L["ID List"], | |
| 540 usage = L["Specify a comma-separated list of IDs for each button in the bar (in order). Separate multiple pages with semicolons (;)"], | |
| 541 order = 6, | |
| 542 type = "input", | |
| 543 multiline = true, | |
| 544 width = "double", | |
| 545 hidden = "IsMultiIDHidden", | |
| 546 get = "GetMultiID", | |
| 547 set = "SetMultiID", | |
| 548 validate = "ValidateMultiID", | |
| 549 }, | |
| 550 }, | |
| 551 }, | |
| 552 } | |
| 553 } | |
| 554 | |
| 555 Editor.buttonHandlers[ActionHandler.buttonClass:GetButtonTypeID()] = ActionHandler | |
| 556 | |
| 557 local meta = { __index = ActionHandler } | |
| 558 | |
| 559 function ActionHandler:New( bar ) | |
| 560 return setmetatable( | |
| 561 { | |
| 562 bar = bar, | |
| 563 config = bar:GetConfig(), | |
| 564 }, | |
| 565 meta) | |
| 566 end | |
| 567 | |
| 568 function ActionHandler:Refresh() | |
| 569 self.buttonClass:SetupBar(self.bar) | |
| 570 end | |
| 571 | |
| 572 function ActionHandler:UpdateButtonLock() | |
| 573 self.buttonClass:SetButtonLock(self.bar, self.config.lockButtons, self.config.lockButtonsCombat) | |
| 574 end | |
| 575 | |
| 576 function ActionHandler:GetLastButton() | |
| 577 return self.bar:GetButton(self.bar:GetNumButtons()) | |
| 578 end | |
| 579 | |
| 580 -- options handlers | |
| 581 function ActionHandler:GetOptions() | |
| 582 return { | |
| 583 type = "group", | |
| 584 name = L["Action Buttons"], | |
| 585 handler = self, | |
| 586 order = 2, | |
| 587 args = self.options | |
| 588 } | |
| 589 end | |
| 590 | |
| 591 function ActionHandler:SetHideEmpty(info, value) | |
| 592 if value ~= self.config.hideEmpty then | |
| 593 self.config.hideEmpty = value | |
| 594 for _, b in self.bar:IterateButtons() do | |
| 595 b:ShowGrid(not value) | |
| 596 end | |
| 597 end | |
| 598 end | |
| 599 | |
| 600 function ActionHandler:GetHideEmpty() | |
| 601 return self.config.hideEmpty | |
| 602 end | |
| 603 | |
| 604 function ActionHandler:GetLockButtons() | |
| 605 return self.config.lockButtons | |
| 606 end | |
| 607 | |
| 608 function ActionHandler:SetLockButtons(info, value) | |
| 609 self.config.lockButtons = value | |
| 610 self:UpdateButtonLock() | |
| 611 end | |
| 612 | |
| 613 function ActionHandler:GetLockButtonsCombat() | |
| 614 return self.config.lockButtonsCombat | |
| 615 end | |
| 616 | |
| 617 function ActionHandler:SetLockButtonsCombat(info, value) | |
| 618 self.config.lockButtonsCombat = value | |
| 619 self:UpdateButtonLock() | |
| 620 end | |
| 621 | |
| 622 function ActionHandler:LockButtonsCombatDisabled() | |
| 623 return not self.config.lockButtons | |
| 624 end | |
| 625 | |
| 626 function ActionHandler:GetNumPages() | |
| 627 return self.config.nPages | |
| 628 end | |
| 629 | |
| 630 function ActionHandler:SetNumPages(info, value) | |
| 631 self.config.nPages = value | |
| 632 self:Refresh() | |
| 633 end | |
| 634 | |
| 635 function ActionHandler:GetMindControl() | |
| 636 return self.config.mindcontrol | |
| 637 end | |
| 638 | |
| 639 function ActionHandler:SetMindControl(info, value) | |
| 640 self.config.mindcontrol = value | |
| 641 self:Refresh() | |
| 642 end | |
| 643 | |
| 644 function ActionHandler:GetVehicle() | |
| 645 return self.config.vehicle | |
| 646 end | |
| 647 | |
| 648 function ActionHandler:SetVehicle(info, value) | |
| 649 self.config.vehicle = value | |
| 650 self:Refresh() | |
| 651 end | |
| 652 | |
| 653 function ActionHandler:GetActionEditMethod() | |
| 654 return self.editMethod or 0 | |
| 655 end | |
| 656 | |
| 657 function ActionHandler:SetActionEditMethod(info, value) | |
| 658 self.editMethod = value | |
| 659 end | |
| 660 | |
| 661 function ActionHandler:IsButtonSelectHidden() | |
| 662 return self.editMethod ~= 1 | |
| 663 end | |
| 664 | |
| 665 function ActionHandler:GetRowList() | |
| 666 local r,c = self.bar:GetButtonGrid() | |
| 667 if self.rowList == nil or #self.rowList ~= r then | |
| 668 local list = { } | |
| 669 for i = 1, r do | |
| 670 table.insert(list,i) | |
| 671 end | |
| 672 self.rowList = list | |
| 673 end | |
| 674 return self.rowList | |
| 675 end | |
| 676 | |
| 677 function ActionHandler:GetSelectedRow() | |
| 678 local r, c = self.bar:GetButtonGrid() | |
| 679 local row = self.selectedRow or 1 | |
| 680 if row > r then | |
| 681 row = 1 | |
| 682 end | |
| 683 self.selectedRow = row | |
| 684 return row | |
| 685 end | |
| 686 | |
| 687 function ActionHandler:SetSelectedRow(info, value) | |
| 688 self.selectedRow = value | |
| 689 end | |
| 690 | |
| 691 function ActionHandler:GetColumnList() | |
| 692 local r,c = self.bar:GetButtonGrid() | |
| 693 if self.columnList == nil or #self.columnList ~= c then | |
| 694 local list = { } | |
| 695 for i = 1, c do | |
| 696 table.insert(list,i) | |
| 697 end | |
| 698 self.columnList = list | |
| 699 end | |
| 700 return self.columnList | |
| 701 end | |
| 702 | |
| 703 function ActionHandler:GetSelectedColumn() | |
| 704 local r, c = self.bar:GetButtonGrid() | |
| 705 local col = self.selectedColumn or 1 | |
| 706 if col > c then | |
| 707 col = 1 | |
| 708 end | |
| 709 self.selectedColumn = col | |
| 710 return col | |
| 711 end | |
| 712 | |
| 713 function ActionHandler:SetSelectedColumn(info, value) | |
| 714 self.selectedColumn = value | |
| 715 end | |
| 716 | |
| 717 function ActionHandler:IsPageSelectHidden() | |
| 718 return self.editMethod ~= 1 or (self.config.nPages or 1) < 2 | |
| 719 end | |
| 720 | |
| 721 function ActionHandler:GetPageList() | |
| 722 local n = self.config.nPages or 1 | |
| 723 if self.pageList == nil or #self.pageList ~= n then | |
| 724 local p = { } | |
| 725 for i = 1, n do | |
| 726 table.insert(p,i) | |
| 727 end | |
| 728 self.pageList = p | |
| 729 end | |
| 730 return self.pageList | |
| 731 end | |
| 732 | |
| 733 function ActionHandler:GetSelectedPage() | |
| 734 local p = self.selectedPage or 1 | |
| 735 if p > (self.config.nPages or 1) then | |
| 736 p = 1 | |
| 737 end | |
| 738 self.selectedPage = p | |
| 739 return p | |
| 740 end | |
| 741 | |
| 742 function ActionHandler:SetSelectedPage(info, value) | |
| 743 self.selectedPage = value | |
| 744 end | |
| 745 | |
| 746 function ActionHandler:GetActionID() | |
| 747 local row = self.selectedRow or 1 | |
| 748 local col = self.selectedColumn or 1 | |
| 749 local r, c = self.bar:GetButtonGrid() | |
| 750 local n = (row-1) * c + col | |
| 751 local btn = self.bar:GetButton(n) | |
| 752 if btn then | |
| 753 return tostring(btn:GetActionID(self.selectedPage or 1)) | |
| 754 end | |
| 755 end | |
| 756 | |
| 757 function ActionHandler:SetActionID(info, value) | |
| 758 local row = self.selectedRow or 1 | |
| 759 local col = self.selectedColumn or 1 | |
| 760 local r, c = self.bar:GetButtonGrid() | |
| 761 local n = (row-1) * c + col | |
| 762 local btn = self.bar:GetButton(n) | |
| 763 if btn then | |
| 764 btn:SetActionID(tonumber(value), self.selectedPage or 1) | |
| 765 end | |
| 766 end | |
| 767 | |
| 768 function ActionHandler:ValidateActionID(info, value) | |
| 769 value = tonumber(value) | |
| 770 if value == nil or value < 1 or value > 120 then | |
| 771 return L["Specify ID 1-120"] | |
| 772 end | |
| 773 return true | |
| 774 end | |
| 775 | |
| 776 function ActionHandler:IsMultiIDHidden() | |
| 777 return self.editMethod ~= 2 | |
| 778 end | |
| 779 | |
| 780 function ActionHandler:GetMultiID() | |
| 781 local p = { } | |
| 782 for i = 1, self.config.nPages or 1 do | |
| 783 local b = { } | |
| 784 for _, btn in self.bar:IterateButtons() do | |
| 785 table.insert(b, btn:GetActionID(i)) | |
| 786 end | |
| 787 table.insert(p, table.concat(b,",")) | |
| 788 end | |
| 789 return table.concat(p,";\n") | |
| 790 end | |
| 791 | |
| 792 | |
| 793 local function ParseMultiID(nBtns, nPages, s) | |
| 794 if s:match("[^%d%s,;]") then | |
| 795 return nil | |
| 796 end | |
| 797 local p = { } | |
| 798 for list in s:gmatch("[^;]+") do | |
| 799 local pattern = ("^%s?$"):format(("%s*(%d+)%s*,"):rep(nBtns)) | |
| 800 local ids = { list:match(pattern) } | |
| 801 if #ids ~= nBtns then | |
| 802 return nil | |
| 803 end | |
| 804 table.insert(p,ids) | |
| 805 end | |
| 806 if #p ~= nPages then | |
| 807 return nil | |
| 808 end | |
| 809 return p | |
| 810 end | |
| 811 | |
| 812 function ActionHandler:SetMultiID(info, value) | |
| 813 local p = ParseMultiID(self.bar:GetNumButtons(), self.config.nPages or 1, value) | |
| 814 for page, b in ipairs(p) do | |
| 815 for button, id in ipairs(b) do | |
| 816 self.bar:GetButton(button):SetActionID(id, page) | |
| 817 end | |
| 818 end | |
| 819 end | |
| 820 | |
| 821 function ActionHandler:ValidateMultiID(info, value) | |
| 822 local bad = L["Invalid action ID list string"] | |
| 823 if value == nil or ParseMultiID(self.bar:GetNumButtons(), self.config.nPages or 1, value) == nil then | |
| 824 return bad | |
| 825 end | |
| 826 return true | |
| 827 end | |
| 828 end | |
| 829 | |
| 830 | |
| 831 ---------------------------------- | |
| 832 ---- PetAction button handler ---- | |
| 833 ---------------------------------- | |
| 834 | |
| 835 do | |
| 836 local PetHandler = { | |
| 837 buttonClass = ReAction.Button.PetAction, | |
| 838 } | |
| 839 | |
| 840 Editor.buttonHandlers[PetHandler.buttonClass:GetButtonTypeID()] = PetHandler | |
| 841 | |
| 842 local meta = { __index = PetHandler } | |
| 843 | |
| 844 function PetHandler:New(bar) | |
| 845 return setmetatable( | |
| 846 { | |
| 847 bar = bar, | |
| 848 config = bar.config | |
| 849 }, meta) | |
| 850 end | |
| 851 | |
| 852 function PetHandler:GetLockButtons() | |
| 853 return self.config.lockButtons | |
| 854 end | |
| 855 | |
| 856 function PetHandler:SetLockButtons(info, value) | |
| 857 self.config.lockButtons = value | |
| 858 self.buttonClass:UpdateButtonLock(self.bar) | |
| 859 end | |
| 860 | |
| 861 function PetHandler:GetLockButtonsCombat() | |
| 862 return self.config.lockButtonsCombat | |
| 863 end | |
| 864 | |
| 865 function PetHandler:SetLockButtonsCombat(info, value) | |
| 866 self.config.lockButtonsCombat = value | |
| 867 self.buttonClass:UpdateButtonLock(self.bar) | |
| 868 end | |
| 869 | |
| 870 function PetHandler:LockButtonsCombatDisabled() | |
| 871 return not self.config.lockButtons | |
| 872 end | |
| 873 | |
| 874 function PetHandler:GetOptions() | |
| 875 return { | |
| 876 type = "group", | |
| 877 name = L["Pet Buttons"], | |
| 878 handler = self, | |
| 879 order = 2, | |
| 880 args = { | |
| 881 lockButtons = { | |
| 882 name = L["Lock Buttons"], | |
| 883 desc = L["Prevents picking up/dragging actions (use SHIFT to override this behavior)"], | |
| 884 order = 2, | |
| 885 type = "toggle", | |
| 886 get = "GetLockButtons", | |
| 887 set = "SetLockButtons", | |
| 888 }, | |
| 889 lockOnlyCombat = { | |
| 890 name = L["Only in Combat"], | |
| 891 desc = L["Only lock the buttons when in combat"], | |
| 892 order = 3, | |
| 893 type = "toggle", | |
| 894 disabled = "LockButtonsCombatDisabled", | |
| 895 get = "GetLockButtonsCombat", | |
| 896 set = "SetLockButtonsCombat", | |
| 897 }, | |
| 898 } | |
| 899 } | |
| 900 end | |
| 901 end | |
| 902 | |
| 903 | |
| 904 ------------------------------------- | |
| 905 ---- Vehicle Exit button handler ---- | |
| 906 ------------------------------------- | |
| 907 | |
| 908 do | |
| 909 local VExitHandler = { | |
| 910 buttonClass = ReAction.Button.VehicleExit, | |
| 911 } | |
| 912 | |
| 913 Editor.buttonHandlers[VExitHandler.buttonClass:GetButtonTypeID()] = VExitHandler | |
| 914 | |
| 915 local meta = { __index = VExitHandler } | |
| 916 | |
| 917 function VExitHandler:New(bar) | |
| 918 return setmetatable( | |
| 919 { | |
| 920 bar = bar, | |
| 921 }, meta) | |
| 922 end | |
| 923 | |
| 924 function VExitHandler:GetConfig() | |
| 925 return self.bar:GetConfig() | |
| 926 end | |
| 927 | |
| 928 function VExitHandler:GetPassengerOnly() | |
| 929 return not self:GetConfig().withControls | |
| 930 end | |
| 931 | |
| 932 function VExitHandler:SetPassengerOnly(info, value) | |
| 933 self:GetConfig().withControls = not value | |
| 934 self.buttonClass:UpdateRegistration(self.bar) | |
| 935 end | |
| 936 | |
| 937 | |
| 938 function VExitHandler:GetOptions() | |
| 939 return { | |
| 940 type = "group", | |
| 941 name = L["Exit Vehicle"], | |
| 942 handler = self, | |
| 943 args = { | |
| 944 passengerOnly = { | |
| 945 name = L["Show only when passenger"], | |
| 946 desc = L["Only show the button when riding as a passenger in a vehicle (no vehicle controls)"], | |
| 947 order = 2, | |
| 948 width = "double", | |
| 949 type = "toggle", | |
| 950 get = "GetPassengerOnly", | |
| 951 set = "SetPassengerOnly", | |
| 952 }, | |
| 953 } | |
| 954 } | |
| 399 end | 955 end |
| 400 end | 956 end |
| 401 | 957 |
| 402 | 958 |
| 403 | 959 |
