Monday, November 29, 2010

Custom headerRenderer for AdvancedDataGrid

Problem:
  1) text truncation is disabled when variableRowHeight="true"
  2) wrong width detection for multi-line headers

Solution:
  Implement custom headerRenderer

package your.package.name
{
 import flash.text.TextLineMetrics;
 
 import mx.controls.advancedDataGridClasses.AdvancedDataGridHeaderRenderer;
 
 public class TruncationHeaderRenderer extends AdvancedDataGridHeaderRenderer
 {
  public function TruncationHeaderRenderer()
  {
   super();
  }
  
  override public function measureText(text:String):TextLineMetrics
  {
   var arr:Array = text.split("\r");
   
   var maxWidthMetrix:TextLineMetrics = determineTextFormatFromStyles().measureText(arr[0]);
   
   for (var i:int = 1; i < arr.length; i++)
   {
    var metrix:TextLineMetrics = determineTextFormatFromStyles().measureText(arr[i]);
    
    if (metrix.width > maxWidthMetrix.width)
    {
     maxWidthMetrix = metrix;
    }
   }
   
   return maxWidthMetrix;
  }

  override protected function updateDisplayList(unscaledWidth:Number,
               unscaledHeight:Number):void
  {
   super.updateDisplayList(unscaledWidth, unscaledHeight);
   
   label.truncateToFit();
  }
  
 }
}

Result:


if someone knew another solution, share it please

Highlighter test

int a(void)
{
    return 0;
}


Тест HighLighter'a
и за одно ссылки на инструкцию по установке:

как - http://heisencoder.net/2009/01/adding-syntax-highlighting-to-blogger.html
полный список языков - http://code.google.com/p/syntaxhighlighter/wiki/Languages

Но вот проблема, походу этот "подсвечиватель" не держит Action Script...

---
UPD:

ага. полезно иногда комменты почитать.
вот тут более свежая версия, на сколько я понимаю http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/

вобщем поставил её. инструкции по установке тут - http://alexgorbatchev.com/SyntaxHighlighter/integration.html

---
UPD2:
1) идем в редактирование шаблона HTML
2) ищем </head>
3) вставляем это перед ним:

<!--SYNTAX HIGHLIGHTER BEGINS-->
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/>
<script language='javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>
<!--SYNTAX HIGHLIGHTER ENDS-->  

Примечание: Список подключаемых скриптов может быть урезан/расширен в соответствии со списком скриптов от сюда http://alexgorbatchev.com/SyntaxHighlighter/hosting.html

Tuesday, November 23, 2010

Error #2006: The supplied index is out of bounds.

Дано: Flex, GlobalDispatcher и объект с кучей элементов в списке (одно из полей объекта типа ArrayCollection)

Делаем dispatchEvent(evt) и плавно получаем ошибку:

[RPC Fault faultString="Error #2006: The supplied index is out of bounds." faultCode="InvokeFailed" faultDetail="null"]
 at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::invoke()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:394]
 at mx.rpc.remoting::Operation/http://www.adobe.com/2006/flex/mx/internal::invoke()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\remoting\Operation.as:287]
 at mx.rpc.remoting::Operation/send()[E:\dev\4.0.0\frameworks\projects\rpc\src\mx\rpc\remoting\Operation.as:254]
 at com.asfusion.mate.actions.builders::RemoteObjectInvoker/run()[/Users/Nahuel 1/Documents/Flex Builder 3/Mate_trunk/src/com/asfusion/mate/actions/builders/RemoteObjectInvoker.as:236]
 at com.asfusion.mate.actions::AbstractAction/trigger()[/Users/Nahuel 1/Documents/Flex Builder 3/Mate_trunk/src/com/asfusion/mate/actions/AbstractAction.as:61]
 at com.asfusion.mate.actionLists::AbstractHandlers/runSequence()[/Users/Nahuel 1/Documents/Flex Builder 3/Mate_trunk/src/com/asfusion/mate/actionLists/AbstractHandlers.as:333]
 at com.asfusion.mate.actionLists::EventHandlers/fireEvent()[/Users/Nahuel 1/Documents/Flex Builder 3/Mate_trunk/src/com/asfusion/mate/actionLists/EventHandlers.as:257]
 at flash.events::EventDispatcher/dispatchEventFunction()
 at flash.events::EventDispatcher/dispatchEvent()
 at mx.core::UIComponent/dispatchEvent()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:12266]

-------------
Оказалось, что для решения этой проблемы надо отключить Network Monitor...

вобщем ситуация видимо такая, что большой объект начинает вытаскиваться в NetworkMonitor и в этот момент уничтожается... Но это всё не точно.

Wednesday, November 10, 2010

python 2.6 pysvn Win7 x64

При запуске py26-pysvn-svn166-1.7.2-1280.exe  получаем сообщение:

---------------------------
Setup
---------------------------
pysvn requires Python 2.6 to be installed.

Quitting installation
---------------------------
OK 
---------------------------


Python 2.6 (x64) установлен в каталог по умолчанию - c:\python26\
Решение проблемы:
1) Читаем эту http://old.nabble.com/Installation-problem-with-Python-2.6-td26905883.html тему и понимаем, что каталог, в который установлен питон, хранится в 
HKLM\SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath

2) Запускаем regedit и проверяем что такой ключ действительно есть HKLM\SOFTWARE\Python\PythonCore\2.6\InstallPath

3) Делаем аналогичный ключ (включая значения) в HKLM\SOFTWARE\Wow6432Node\Python\PythonCore\2.6\InstallPath

4) Пробуем запустить установку pysvn. Должно пройти нормально и увидеть, что питон установлен в C:\python26\


UPD:
  А потом получаем FAIL в виде:



C:\Python26\Lib\site-packages\pysvn\Examples\Client>python svn_cmd.py
Traceback (most recent call last):
  File "svn_cmd.py", line 10, in
    import pysvn
  File "C:\Python26\lib\site-packages\pysvn\__init__.py", line 99, in
    import _pysvn_2_6
ImportError: DLL load failed: %1 is not a valid Win32 application.


:(

Thursday, November 4, 2010

Flex Custom DropDown control

Если хочется сделать свой компонент типа ComboBox'a, то:

1) создаем свой класс, унаследованный от ComboBase
2) придумываем, чего мы хотим показывать по нажатию кнопки открытия списка
3) переопределяем обработчик downArrowButton_buttonDownHandler() в котором зовем методы "спрятать чего-то", "показать чего-то"
4) "чего-то" прячим и показываем через PopUpManager.bringToFront(_dropdown); не забывая выставить позицию.

Ну еще необходимо ловить следующие события (как минимум):
 - FlexMouseEvent.MOUSE_DOWN_OUTSIDE
 - FlexMouseEvent.MOUSE_WHEEL_OUTSIDE
 - SandboxMouseEvent.MOUSE_DOWN_SOMEWHERE
 - SandboxMouseEvent.MOUSE_WHEEL_SOMEWHERE

в обработчике(обработчиках) необходимо прятать "что-то"

Ну вобщем-то за примерами можно смело идти в исходники следующих компонентов:
  - ColorPicker (public class ColorPicker extends ComboBase)
  - ComboBox (public class ComboBox extends ComboBase)
  - DateFiled (public class DateField extends ComboBase)

Лежат они в \flex_sdk_4.0.0.14159\frameworks\projects\framework\src\mx\controls\