The roof is on fire!
Panoramic

Нормально собранный весенний материал.
Spot: м. Автозаводская. 3-е транспортное кольцо.
Map
Insomnia.
Я видел осень. Она такая
Flex. People win.
Первая часть: http://corpix.ru/show/384
Заставил MenuBar делать то, что мне было нужно.
А вот компонент, который я нашел на форуме в первой части:
package custom{
import flash.geom.Rectangle;
import mx.controls.Alert;
import mx.controls.MenuBar;
import mx.controls.menuClasses.IMenuBarItemRenderer;
import mx.core.IFlexDisplayObject;
public class AlignableMenuBar extends MenuBar {
private static const """""""MARGIN_WID" " " " " " " TH:int=10;
private var background:IFlexDisplayObject;
public var itemAlign:String;
public function AlignableMenuBar() {
super();
}
override protected function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void {
if (this.itemAlign == "right") {
updateDisplayListRightAlign(unscaledWidth,unscaledHeight);
} else if (this.itemAlign == "center") {
updateDisplayListCenterAlign(unscaledWidth,unscaledHeight);
} else {
updateDisplayListLeftAlign(unscaledWidth,unscaledHeight);
}
}
protected function itemsTotalWidth(unscaledWidth:Number,unscaledHeight:Number):int {
super.updateDisplayList(unscaledWidth,unscaledHeight);
var len:int=menuBarItems.length;
var totalWidth:int=0;
for (var i:int=0; i < len; i++) {
var tempItem:IMenuBarItemRenderer=menuBarItems[i];
totalWidth+= tempItem.width;
}
return totalWidth;
}
protected function updateDisplayListLeftAlign(unscaledWidth:Number,unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth,unscaledHeight);
var lastX:Number="""""""MARGIN_WID" " " " " " " TH;
var lastW:Number=0;
var len:int=menuBarItems.length;
var clipContent:Boolean=false;
var hideItems:Boolean=unscaledWidth == 0 || unscaledHeight == 0;
for (var i:int=0; i < len; i++) {
var item:IMenuBarItemRenderer=menuBarItems[i];
item.setActualSize(item.getExplicitOrMeasuredWidth(),unscaledHeight);
item.visible=! hideItems;
lastX=item.x=lastX + lastW;
lastW=item.width;
if (! hideItems && item.getExplicitOrMeasuredHeight() > unscaledHeight || lastX + lastW > unscaledWidth) {
clipContent=true;
}
}
if (background) {
background.setActualSize(unscaledWidth,unscaledHeight);
background.visible=! hideItems;
}
// Set a scroll rect to handle clipping.
scrollRect=clipContent?new Rectangle(0,0,unscaledWidth,unscaledHeight):null;
}
protected function updateDisplayListCenterAlign(unscaledWidth:Number,unscaledHeight:Number):void {
var lastX:Number = (this.width - itemsTotalWidth(unscaledWidth,unscaledHeight)) / 2;
var lastW:Number = 0;
var clipContent:Boolean=false;
var hideItems:Boolean=unscaledWidth == 0 || unscaledHeight == 0;
for (var j:int=0; j < menuBarItems.length; j++) {
var item:IMenuBarItemRenderer=menuBarItems[j];
item.setActualSize(item.getExplicitOrMeasuredWidth(),unscaledHeight);
item.visible=! hideItems;
item.x = lastX + lastW;
lastX = item.x;
lastW=item.width;
if (! hideItems && item.getExplicitOrMeasuredHeight() > unscaledHeight || lastX + lastW > unscaledWidth) {
clipContent=true;
}
}
if (background) {
background.setActualSize(unscaledWidth,unscaledHeight);
background.visible=! hideItems;
}
scrollRect=clipContent?new Rectangle(0,0,unscaledWidth,unscaledHeight):null;
}
protected function updateDisplayListRightAlign(unscaledWidth:Number,unscaledHeight:Number):void {
var lastX:Number=this.width - itemsTotalWidth(unscaledWidth,unscaledHeight);
var lastW:Number=0;
var clipContent:Boolean=false;
var hideItems:Boolean=unscaledWidth == 0 || unscaledHeight == 0;
for (var j:int=0; j < menuBarItems.length; j++) {
var item:IMenuBarItemRenderer=menuBarItems[j];
item.setActualSize(item.getExplicitOrMeasuredWidth(),unscaledHeight);
item.visible=! hideItems;
lastX=item.x=lastX + lastW;
lastW=item.width;
if (! hideItems && item.getExplicitOrMeasuredHeight() > unscaledHeight || lastX + lastW > unscaledWidth) {
clipContent=true;
}
}
if (background) {
background.setActualSize(unscaledWidth,unscaledHeight);
background.visible=! hideItems;
}
scrollRect=clipContent?new Rectangle(0,0,unscaledWidth,unscaledHeight):null;
}
}
}
Мне нужно было расположить элементы по центру…видимо автор компонента не проверил его полностью и положился на теорию…
Для получения нужного результата понадобилось исправить небольшую математическую ошибку =)
Само меню, а также функции для отлова кликов(в выпадающих меню клики не обрабатываются…в этой проблеме я не стал разбираться, сейчас мне это и не нужно)…вообщем весь исходный код xml-menu.
Если есть какие-то замечания/вопросы – пишите в комментарии, обсудим =)
Flex menubar items align?No =(
Adobe производит довольно хорошие продукты.
До этого момента я забивал на тупейшие неудобности в illustrator, photoshop и т.д.
Но вот захотелось мне поюзать Flex(Flash Builder 4). Скажем даже так: «Я захотел сделать меню для сайта в Flash Builder 4″.
Решил использовать для этой простой(казалось бы) задачи компоненту MenuBar.
И тут начался ад…
- Найти что-то в адоубовских мануалах практически нереально.
- Чтобы отловить клик по главному элементу меню(в моём случае мне были нужны только главные элементы, подменю не было) пришлось писать целую функцию.
- И последняя капля: нельзя позиционировать элементы внутри меню.
http://www.flexdeveloper.eu/forums/flex-builder-flash-builder-eclipse/alignment-of-menu-items-in-menubar/ тут нашлось решение, но я не смог подключить его к своему проекту.
Жуть как не логично.
Вторая часть: http://corpix.ru/show/386
Simple Samba share
Захотелось удобного доступа к файлам из под винды.
Собрал Samba, погуглил, сделал доступ(Спасибо sudouser.com за хорошую статью по настройке)…но есть одно большое и странное НО…






















