winamp/Src/resources/data/freeform/xml/popupmenu/popupitem.m
2024-09-24 14:54:57 +02:00

111 lines
2.1 KiB
Objective-C

#include <lib/std.mi>
#define MARGIN 2
#define MARGIN_PRE 2
#define MARGIN_POST 6
#define CHECKMARK_WIDTH 10
#define ARROW_WIDTH 10
Function setArrow(int want);
Function setCheckmark(int want);
Function updatePos();
Global Group mgrp;
Global GuiObject background;
Class GuiObject ItemSwitcher;
Global int id;
Global int want_checkmark;
Global int want_arrow;
Global ItemSwitcher a, b, c, d;
Global GuiObject _a, _b, _c;
System.onScriptLoaded() {
mgrp = getScriptGroup();
if (mgrp == NULL) {
messagebox("popupitem.maki: cannot run outside a group", "Error", 0, "");
return;
}
_a = mgrp.getObject("popup.item.checkmark"); a = _a;
_b = mgrp.getObject("popup.item.text"); b = _b;
_c = mgrp.getObject("popup.item.submenuarrow"); c = _c;
background = mgrp.getObject("popup.background"); d = background;
want_checkmark = -1;
want_arrow = -1;
}
mgrp.onNotify(String command, String param, int a, int b) {
if (command == "id") id = StringToInteger(param);
if (command == "arrow") setArrow(StringToInteger(param));
if (command == "checkmark") setCheckMark(StringToInteger(param));
}
ItemSwitcher.onEnterArea() {
background.cancelTarget();
background.setAlpha(255);
}
ItemSwitcher.onLeaveArea() {
background.setTargetA(0);
background.setTargetSpeed(0.25);
background.gotoTarget();
}
ItemSwitcher.onLeftButtonDown(int x, int y) {
mgrp.endModal(id);
}
setArrow(int want) {
if (want_arrow == want) return;
want_arrow = want;
updatePos();
}
setCheckmark(int want) {
if (want_checkmark == want) return;
want_checkmark = want;
updatePos();
}
updatePos() {
int x = MARGIN;
int mx = MARGIN;
if (!want_checkmark) {
if (_a != NULL) {
_a.hide();
}
} else {
if (_a != NULL) {
_a.show();
}
x += CHECKMARK_WIDTH + MARGIN_PRE;
mx += CHECKMARK_WIDTH + MARGIN_PRE;
}
if (!want_arrow) {
if (_c != NULL) {
_c.hide();
}
} else {
if (_c != NULL) {
_c.show();
}
mx += ARROW_WIDTH + MARGIN_POST;
}
mx += MARGIN;
if (_b != NULL) {
_b.setXmlParam("x", IntegerToString(x));
_b.setXmlParam("w", "-" + IntegerToString(mx));
}
}