<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>_nec &#187; contextmenu</title>
	<atom:link href="http://nec.shell8.net/tag/contextmenu/feed/" rel="self" type="application/rss+xml" />
	<link>http://nec.shell8.net</link>
	<description>webfejlesztés, front-end programozás, javascript, css, xhtml, ajax, air</description>
	<lastBuildDate>Wed, 31 Aug 2011 06:54:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Adobe AIR #5 Natív menükezelés</title>
		<link>http://nec.shell8.net/2008/07/11/adobe-air-nativ-menukezeles/</link>
		<comments>http://nec.shell8.net/2008/07/11/adobe-air-nativ-menukezeles/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 11:48:23 +0000</pubDate>
		<dc:creator>_nec</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[contextmenu]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[nativemenu]]></category>

		<guid isPermaLink="false">http://nec.shell8.net/?p=26</guid>
		<description><![CDATA[Talán az egyik legnagyobb nyűg egy RIA fejlesztésénél a menük lekezelése. Alkalmazás menükkel, context menükkel sokat lendíthetünk az alkalmazásunk használhatóságán és kezelhetőségén. Ha böngészőbe szánt alkalmazást fejlesztesz, valamilyen js/html/css kombót kell alkalmazni, felülbírálni a létező context-menüt, ráhúzni egy designt, ami szép, érthető és használható, ráadásul mindezt böngészőfüggetlenül. Mivel az AIR segítségével írt alkalmazás asztali alkalmazás, [...]]]></description>
			<content:encoded><![CDATA[<p>Talán az egyik legnagyobb nyűg egy RIA fejlesztésénél a menük lekezelése. Alkalmazás menükkel, context menükkel sokat lendíthetünk az alkalmazásunk használhatóságán és kezelhetőségén. Ha böngészőbe szánt alkalmazást fejlesztesz, valamilyen js/html/css kombót kell alkalmazni, felülbírálni a létező context-menüt, ráhúzni egy designt, ami szép, érthető és használható, ráadásul mindezt böngészőfüggetlenül.</p>
<p>Mivel az AIR segítségével írt alkalmazás asztali alkalmazás, rendelkezik az alatta található oprendszer egykét képességével. Egyik ezek közül a natív menükezelés. Nem kell a designra, viselkedésre, különböző böngészőkre időt vesztegetni, használjuk azt a GUI kinézetet menüinkre amit az adott rendszer hagy nekünk.<br />
<span id="more-26"></span><br />
<a href="http://nec.shell8.net/wp-content/uploads/2008/06/air_context.jpg"><img class="alignnone size-full wp-image-27" title="Adobe AIR kontext menü" src="http://nec.shell8.net/wp-content/uploads/2008/06/air_context.jpg" alt="" width="530" height="176" /></a></p>
<h4><a href="http://help.adobe.com/en_US/AIR/1.1/jslr/flash/display/NativeMenu.html">air.NativeMenu</a></h4>
<p>Egy egyszerű menü létrehozásával kezdjük, azt, hogy ez hol jelenik majd meg, majd később döntjük el.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> createFileMenu<span style="color: #009900;">&#40;</span>menuType<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> temp<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> menu <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">NativeMenu</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
temp <span style="color: #339933;">=</span> menu.<span style="color: #660066;">addItem</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">NativeMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Új&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
temp.<span style="color: #660066;">keyEquivalent</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'n'</span><span style="color: #339933;">;</span>
temp.<span style="color: #660066;">data</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'new'</span><span style="color: #339933;">;</span>
&nbsp;
temp <span style="color: #339933;">=</span> menu.<span style="color: #660066;">addItem</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">NativeMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Megnyitás&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
temp.<span style="color: #660066;">keyEquivalent</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'o'</span><span style="color: #339933;">;</span>
temp.<span style="color: #660066;">data</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'open'</span><span style="color: #339933;">;</span>
&nbsp;
temp <span style="color: #339933;">=</span> menu.<span style="color: #660066;">addItem</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">NativeMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Mentés&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
temp.<span style="color: #660066;">keyEquivalent</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'s'</span><span style="color: #339933;">;</span>
temp.<span style="color: #660066;">data</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'save'</span><span style="color: #339933;">;</span>
&nbsp;
menu.<span style="color: #660066;">addItem</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">NativeMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//szeparátor</span>
&nbsp;
temp <span style="color: #339933;">=</span> menu.<span style="color: #660066;">addItem</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">NativeMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Kilépés&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
temp.<span style="color: #660066;">keyEquivalent</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'q'</span><span style="color: #339933;">;</span>
temp.<span style="color: #660066;">data</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'quit'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> <span style="color: #000066; font-weight: bold;">item</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> <span style="color: #000066; font-weight: bold;">item</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> menu.<span style="color: #660066;">items</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> <span style="color: #000066; font-weight: bold;">item</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
menu.<span style="color: #660066;">items</span><span style="color: #009900;">&#91;</span><span style="color: #000066; font-weight: bold;">item</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span>air.<span style="color: #660066;">Event</span>.<span style="color: #660066;">SELECT</span><span style="color: #339933;">,</span> menuItemSelectHandler <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">return</span> menu<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> menu <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">NativeMenu</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
menu.<span style="color: #660066;">addSubmenu</span><span style="color: #009900;">&#40;</span>createFileMenu<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;File&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Menüt tehát az air.NativeMenu példányosításával készíthetünk és utána lehet almenüt és/vagy funkciót hozzákötni. A példában látszik hogy még a menü struktúrálására is lehetőség van, szeparátorokkal.</p>
<p>Az <a href="http://help.adobe.com/en_US/AIR/1.1/jslr/flash/display/NativeMenuItem.html">air.NativeMenuItem</a> még további lehetőségeket ad amit elvárhatunk egy menütől pl.:</p>
<ul>
<li>aktív / inaktív menü</li>
<li>pipálható menü</li>
<li>billentyű vezérlés</li>
</ul>
<p>Ezek mellett kell még egy metódus, ami figyeli a menü eseményeket, egyelőre elég ha csak konzolon jelez, onnan már látható milyen adatokat hordoz az esemény.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> itemSelected<span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> message <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Kiválasztott menü: <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933;">+</span> event.<span style="color: #660066;">target</span>.<span style="color: #660066;">label</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> adat: &quot;</span> <span style="color: #339933;">+</span> event.<span style="color: #660066;">target</span>.<span style="color: #660066;">data</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;.&quot;</span><span style="color: #339933;">;</span>
air.<span style="color: #660066;">Introspector</span>.<span style="color: #660066;">Console</span>.<span style="color: #660066;">dump</span><span style="color: #009900;">&#40;</span>message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Most már csak a menüt kell elérhetővé tenni. Itt kell figyelembe venni, hogy milyen rendszeren fut az alkalmazásunk. Windows alatt a hagyományos rendszermenük az ablakhoz kapcsolódnak, OSX alatt az alkalmazás menüje a menüsorba kerül az asztal tetején. Ezt a futtatókörnyezet képességeivel tesztelhetjük mielőtt megjelenítenénk a menüt.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>air.<span style="color: #660066;">NativeApplication</span>.<span style="color: #660066;">supportsMenu</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// OSX</span>
    air.<span style="color: #660066;">NativeApplication</span>.<span style="color: #660066;">nativeApplication</span>.<span style="color: #660066;">menu</span> <span style="color: #339933;">=</span> menu<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>air.<span style="color: #660066;">NativeWindow</span>.<span style="color: #660066;">supportsMenu</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// windows</span>
    window.<span style="color: #660066;">nativeWindow</span>.<span style="color: #660066;">menu</span> <span style="color: #339933;">=</span> menu<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ne felejtsük el, hogy windows alatt a transparent és chrome mentes ablakokra nem lehetséges igy menüt csatolni &#8211; révén az ablak láthatatlan. Ami lehetőség marad ilyenkor az az ikonra helyezett menü, vagy a context menü, melyekre amúgy is szükség lehet. Az ikonra helyezett menü ismét az oprendszer tesztelésére kényszerít minket, erre a környezet az <em>air.NativeApplication.supportsDockIcon</em> és az <em>air.NativeApplication.supportsSystemTrayIcon</em> vizsgálatát teszi lehetővé.</p>
<p>Context menü esetén ilyenekre nincs szükség, ott a menü előhívásának az eseményét kell kezelnünk. Mivel használattól függően szükség lehet tetszőleges elemekre, kontrollokra saját menüt kötni, az eseményt ezeken a HTML elemeken kell figyeltetni. Ezt egy e célra fenntartott <em>contextmenu</em> esemény jelzi nekünk.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'hasContextMenu'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'contextmenu'</span> <span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    menu.<span style="color: #660066;">display</span><span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">nativeWindow</span>.<span style="color: #660066;">stage</span><span style="color: #339933;">,</span> event.<span style="color: #660066;">clientX</span><span style="color: #339933;">,</span> event.<span style="color: #660066;">clientY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ennyi a pozícionálás, és megjelenítés. A kívánt menü kiválasztásakor eltűnik.</p>
<p>Következő alkalommal az AIR-be épített SQLite adatbázist veszem elő.</p>
<h3>Update: menük egyenesen XMLből és JSONból</h3>
<p>Úgynézki gondoltak a komplexebb alkalmazásokra, és lehetséges XML és JSON adatformátumokból is menüket generálni. Dokumentációt érdekes módon nem találtam rá, de példát igen, a kipróbálás még hátravan.</p>
<p>Az XML <em>(textContextMenu.xml)</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;root<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menuitem</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">&quot;Első menü&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menuitem</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">&quot;Második menü&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;check&quot;</span> <span style="color: #000066;">toggled</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menuitem</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">&quot;Harmadik menü&quot;</span> <span style="color: #000066;">enabled</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menuitem</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;separator&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menuitem</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">&quot;Negyedik menü&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> 
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menuitem</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">&quot;Almenu 1, 4&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menuitem</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">&quot;Almenu 2, 4&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menuitem</span> <span style="color: #000066;">label</span>=<span style="color: #ff0000;">&quot;Almenu 3, 4&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/menuitem<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/root<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>És a beemelése:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">            <span style="color: #003366; font-weight: bold;">var</span> textMenu <span style="color: #339933;">=</span> air.<span style="color: #660066;">ui</span>.<span style="color: #660066;">Menu</span>.<span style="color: #660066;">createFromXML</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;textContextMenu.xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
            air.<span style="color: #660066;">ui</span>.<span style="color: #660066;">Menu</span>.<span style="color: #660066;">setAsContextMenu</span><span style="color: #009900;">&#40;</span>textMenu<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;contextEnabledText&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
            <span style="color: #006600; font-style: italic;">// az alapértelmezett context menü kikapcsolása</span>
            air.<span style="color: #660066;">ui</span>.<span style="color: #660066;">Menu</span>.<span style="color: #660066;">setAsContextMenu</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Eddig az Adobe AIR-ről:</strong></p>
<ul>
<li><a href=" http://nec.shell8.net/2008/10/14/eval-adobe-air-ben/">Eval(); Adobe AIR-ben</a></li>
<li><a href="http://nec.shell8.net/2008/10/22/adobe-air-sqlite-javascript/">#6 SQLite JavaScriptből</a></li>
<li><a href="http://nec.shell8.net/2008/07/05/adobe-air-dragndrop-filefeltoltes/">#4 Drag’n&#8217;Drop és Filefeltöltés</a></li>
<li><a href="http://nec.shell8.net/2008/06/25/adobe-air-esemenyek">#3 Események</a></li>
<li><a href="http://nec.shell8.net/2008/06/23/adobe-air-ablakkezeles">#2 Ablakkezelés</a></li>
<li><a href="http://nec.shell8.net/2008/06/19/adobe-air-alapok">#1 Az alapok</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nec.shell8.net/2008/07/11/adobe-air-nativ-menukezeles/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

